| | |
| | | #define BOOST_TEST_MODULE "license_locator_test" |
| | | #define BOOST_TEST_MODULE "test_license_locator" |
| | | |
| | | #include <iostream> |
| | | #include <iterator> |
| | | |
| | | #include <cstdio> |
| | | #include <fstream> |
| | | #include <string> |
| | | #include <vector> |
| | | |
| | | #include <boost/filesystem.hpp> |
| | | #include <boost/optional.hpp> |
| | | #include <boost/test/unit_test.hpp> |
| | | #include <stdlib.h> |
| | | #include <cstdio> |
| | | |
| | | #include <build_properties.h> |
| | | |
| | | #include "../../src/library/os/os.h" |
| | | #include "../../src/library/base/EventRegistry.h" |
| | | #include "../../src/library/locate/ApplicationFolder.hpp" |
| | | #include "../../src/library/locate/EnvironmentVarLocation.hpp" |
| | |
| | | namespace test { |
| | | using namespace license::locate; |
| | | using namespace std; |
| | | using namespace boost::filesystem; |
| | | |
| | | static boost::optional<path> find_file(const path& dir_path, const path& file_name) { |
| | | const recursive_directory_iterator end; |
| | | const auto it = find_if(recursive_directory_iterator(dir_path), end, |
| | | [&file_name](const directory_entry& e) { |
| | | return e.path().filename() == file_name; |
| | | }); |
| | | return it == end ? boost::optional<path>() : it->path(); |
| | | } |
| | | |
| | | |
| | | /***************************************************************************** |
| | | * Application Folder tests |
| | | *****************************************************************************/ |
| | | BOOST_AUTO_TEST_CASE( read_license_near_module ) { |
| | | #ifdef _WIN32 |
| | | #ifdef _DEBUG |
| | | const string testExeFolder = PROJECT_BINARY_DIR "/test/library/Debug"; |
| | | #else |
| | | const string testExeFolder = PROJECT_BINARY_DIR "/test/library/Release"; |
| | | #endif |
| | | const string testExe = testExeFolder + "/" + BOOST_TEST_MODULE ".exe"; |
| | | #else |
| | | const string testExeFolder = PROJECT_BINARY_DIR "/test/library"; |
| | | const string testExe = testExeFolder + "/" + BOOST_TEST_MODULE; |
| | | #endif |
| | | const string referenceLicenseFileName = testExeFolder + "/" |
| | | + BOOST_TEST_MODULE ".lic"; |
| | | bool exeFileFound = false; |
| | | string referenceExeFileName; |
| | | string referenceLicenseFileName; |
| | | //Verify we're pointing the correct executable, in windows isn't clear where it's built |
| | | #ifdef _WIN32 |
| | | boost::optional<path> exeLocation(find_file(path(testExeFolder), path(BOOST_TEST_MODULE ".exe"))); |
| | | exeFileFound = exeLocation.has_value(); |
| | | if (exeFileFound) { |
| | | referenceExeFileName = exeLocation.get().string(); |
| | | referenceLicenseFileName = referenceExeFileName.replace(referenceExeFileName.find(BOOST_TEST_MODULE ".exe"), |
| | | string(BOOST_TEST_MODULE ".exe").size(), BOOST_TEST_MODULE ".lic"); |
| | | } |
| | | #else |
| | | referenceExeFileName = testExeFolder + "/" + BOOST_TEST_MODULE; |
| | | std::ifstream f(referenceExeFileName.c_str()); |
| | | exeFileFound = f.good(); |
| | | referenceLicenseFileName = testExeFolder + "/" + BOOST_TEST_MODULE ".lic"; |
| | | #endif |
| | | BOOST_WARN_MESSAGE(!exeFileFound, "File [" + referenceExeFileName + "] NOT found"); |
| | | if (exeFileFound) { |
| | | //copy test license near module |
| | | std::ifstream src(MOCK_LICENSE, std::ios::binary); |
| | | std::ofstream dst(referenceLicenseFileName, std::ios::binary); |
| | | dst << src.rdbuf(); |
| | | dst.close(); |
| | | |
| | | //Verify we're pointing the correct executable |
| | | ifstream f(testExe.c_str()); |
| | | BOOST_REQUIRE_MESSAGE(f.good(), "File [" + testExe + "] NOT found"); |
| | | |
| | | //copy test license near module |
| | | std::ifstream src(MOCK_LICENSE, std::ios::binary); |
| | | std::ofstream dst(referenceLicenseFileName, std::ios::binary); |
| | | dst << src.rdbuf(); |
| | | dst.close(); |
| | | |
| | | license::EventRegistry registry; |
| | | ApplicationFolder applicationFolder; |
| | | vector<string> licenseInfos = applicationFolder.licenseLocations(registry); |
| | | BOOST_CHECK(registry.isGood()); |
| | | BOOST_REQUIRE_EQUAL(1, licenseInfos.size()); |
| | | string currentLocation = licenseInfos[0]; |
| | | BOOST_CHECK_MESSAGE(referenceLicenseFileName.compare(currentLocation) == 0, |
| | | "file found at expected location"); |
| | | string licenseRealContent = applicationFolder.retrieveLicense( |
| | | license::EventRegistry registry; |
| | | ApplicationFolder applicationFolder; |
| | | vector<string> licenseInfos = applicationFolder.license_locations(registry); |
| | | BOOST_CHECK(registry.isGood()); |
| | | BOOST_REQUIRE_EQUAL(1, licenseInfos.size()); |
| | | string currentLocation = licenseInfos[0]; |
| | | BOOST_CHECK_MESSAGE(equivalent(path(referenceLicenseFileName),path(currentLocation)), |
| | | "file " +currentLocation + "found at expected location"); |
| | | string licenseRealContent = applicationFolder.retrieve_license_content( |
| | | currentLocation); |
| | | src.seekg(0, ios::beg); |
| | | std::string referenceContent((std::istreambuf_iterator<char>(src)), |
| | | src.seekg(0, ios::beg); |
| | | std::string referenceContent((std::istreambuf_iterator<char>(src)), |
| | | std::istreambuf_iterator<char>()); |
| | | BOOST_CHECK_MESSAGE(referenceContent.compare(licenseRealContent) == 0, |
| | | BOOST_CHECK_MESSAGE(referenceContent.compare(licenseRealContent) == 0, |
| | | "File content is same"); |
| | | remove(referenceLicenseFileName.c_str()); |
| | | remove(referenceLicenseFileName.c_str()); |
| | | } |
| | | } |
| | | |
| | | /***************************************************************************** |
| | |
| | | std::string referenceContent((std::istreambuf_iterator<char>(src)), |
| | | std::istreambuf_iterator<char>()); |
| | | license::EventRegistry registry; |
| | | ExternalDefinition externalDefinition(applicationDefinedString); |
| | | vector<string> licenseInfos = externalDefinition.licenseLocations(registry); |
| | | const LicenseLocation licLocation={applicationDefinedString,nullptr}; |
| | | ExternalDefinition externalDefinition(&licLocation); |
| | | vector<string> licenseInfos = externalDefinition.license_locations(registry); |
| | | BOOST_CHECK(registry.isGood()); |
| | | BOOST_CHECK_EQUAL(1, licenseInfos.size()); |
| | | string currentLocation = licenseInfos[0]; |
| | | BOOST_CHECK_MESSAGE(string(MOCK_LICENSE).compare(currentLocation) == 0, |
| | | "file found at expected location"); |
| | | string licenseRealContent = externalDefinition.retrieveLicense( |
| | | string licenseRealContent = externalDefinition.retrieve_license_content( |
| | | currentLocation); |
| | | BOOST_CHECK_MESSAGE(referenceContent.compare(licenseRealContent) == 0, |
| | | "File content is same"); |
| | | } |
| | | |
| | | /** |
| | | * The license file doesn't exist. Chech that the locator reports the right error |
| | | * The license file doesn't exist. Check that the locator reports the right error |
| | | */ |
| | | BOOST_AUTO_TEST_CASE( external_definition_not_found ) { |
| | | const char *applicationDefinedString = PROJECT_TEST_SRC_DIR "/this/file/doesnt/exist"; |
| | | license::EventRegistry registry; |
| | | ExternalDefinition externalDefinition(applicationDefinedString); |
| | | vector<string> licenseInfos = externalDefinition.licenseLocations(registry); |
| | | const LicenseLocation licLocation = { applicationDefinedString,nullptr }; |
| | | ExternalDefinition externalDefinition(&licLocation); |
| | | vector<string> licenseInfos = externalDefinition.license_locations(registry); |
| | | |
| | | BOOST_CHECK_MESSAGE(registry.isGood(), |
| | | "No fatal error for now, only warnings"); |
| | | registry.turnEventIntoError(LICENSE_FILE_NOT_FOUND); |
| | | registry.turnWarningsIntoErrors(); |
| | | BOOST_REQUIRE_MESSAGE(!registry.isGood(), "Error detected"); |
| | | BOOST_CHECK_EQUAL(0, licenseInfos.size()); |
| | | BOOST_CHECK_MESSAGE( |
| | |
| | | license::EventRegistry registry; |
| | | |
| | | EnvironmentVarLocation envVarLocationStrategy; |
| | | vector<string> licenseInfos = envVarLocationStrategy.licenseLocations( |
| | | vector<string> licenseInfos = envVarLocationStrategy.license_locations( |
| | | registry); |
| | | BOOST_CHECK(registry.isGood()); |
| | | BOOST_CHECK_EQUAL(1, licenseInfos.size()); |
| | | string currentLocation = licenseInfos[0]; |
| | | BOOST_CHECK_MESSAGE(string(MOCK_LICENSE).compare(currentLocation) == 0, |
| | | "file found at expected location"); |
| | | string licenseRealContent = envVarLocationStrategy.retrieveLicense( |
| | | string licenseRealContent = envVarLocationStrategy.retrieve_license_content( |
| | | currentLocation); |
| | | BOOST_CHECK_MESSAGE(referenceContent.compare(licenseRealContent) == 0, |
| | | "File content is same"); |
| | | #ifdef _WIN32 |
| | | _putenv_s(LICENSE_LOCATION_ENV_VAR, ""); |
| | | #else |
| | | unsetenv(LICENSE_LOCATION_ENV_VAR); |
| | | #endif |
| | | |
| | | UNSETENV(LICENSE_LOCATION_ENV_VAR); |
| | | } |
| | | |
| | | /** |
| | |
| | | BOOST_AUTO_TEST_CASE( environment_var_location_not_found ) { |
| | | const char *environment_variable_value = |
| | | PROJECT_TEST_SRC_DIR "/this/file/doesnt/exist"; |
| | | #ifdef _WIN32 |
| | | _putenv_s(LICENSE_LOCATION_ENV_VAR, environment_variable_value); |
| | | #else |
| | | setenv(LICENSE_LOCATION_ENV_VAR, environment_variable_value, 1); |
| | | #endif |
| | | SETENV(LICENSE_LOCATION_ENV_VAR, environment_variable_value); |
| | | |
| | | license::EventRegistry registry; |
| | | EnvironmentVarLocation envVarLocationStrategy; |
| | | vector<string> licenseInfos = envVarLocationStrategy.licenseLocations( |
| | | vector<string> licenseInfos = envVarLocationStrategy.license_locations( |
| | | registry); |
| | | BOOST_CHECK_MESSAGE(registry.isGood(), |
| | | "No fatal error for now, only warnings"); |
| | | registry.turnEventIntoError(LICENSE_FILE_NOT_FOUND); |
| | | registry.turnWarningsIntoErrors(); |
| | | BOOST_REQUIRE_MESSAGE(!registry.isGood(), "Error detected"); |
| | | BOOST_CHECK_EQUAL(0, licenseInfos.size()); |
| | | BOOST_CHECK_MESSAGE( |
| | | registry.getLastFailure()->event_type == LICENSE_FILE_NOT_FOUND, |
| | | "Error detected"); |
| | | #ifdef _WIN32 |
| | | _putenv_s(LICENSE_LOCATION_ENV_VAR, ""); |
| | | #else |
| | | unsetenv(LICENSE_LOCATION_ENV_VAR); |
| | | #endif |
| | | UNSETENV(LICENSE_LOCATION_ENV_VAR); |
| | | } |
| | | |
| | | /** |
| | | * The license file doesn't exist. Check that the locator reports the right error |
| | | */ |
| | | BOOST_AUTO_TEST_CASE( environment_var_location_not_defined ) { |
| | | #ifdef _WIN32 |
| | | _putenv_s(LICENSE_LOCATION_ENV_VAR, ""); |
| | | #else |
| | | setenv(LICENSE_LOCATION_ENV_VAR, environment_variable_value, 1); |
| | | #endif |
| | | UNSETENV(LICENSE_LOCATION_ENV_VAR); |
| | | license::EventRegistry registry; |
| | | EnvironmentVarLocation environmentVarLocation; |
| | | vector<string> licenseInfos = environmentVarLocation.licenseLocations( |
| | | vector<string> licenseInfos = environmentVarLocation.license_locations( |
| | | registry); |
| | | |
| | | BOOST_CHECK_MESSAGE(registry.isGood(), |
| | | "No fatal error for now, only warnings"); |
| | | registry.turnEventIntoError(ENVIRONMENT_VARIABLE_NOT_DEFINED); |
| | | registry.turnWarningsIntoErrors(); |
| | | BOOST_REQUIRE_MESSAGE(!registry.isGood(), "Error detected"); |
| | | BOOST_CHECK_EQUAL(0, licenseInfos.size()); |
| | | BOOST_CHECK_MESSAGE( |