void tst_QPluginLoader::loadCorruptElf() { #if defined (__ELF__) if (sizeof(void*) == 8) { QVERIFY(QFile::exists(SRCDIR "elftest/corrupt1.elf64.so")); QPluginLoader lib1(SRCDIR "elftest/corrupt1.elf64.so"); QCOMPARE(lib1.load(), false); QVERIFY(lib1.errorString().contains("not a valid Qt plugin")); QPluginLoader lib2(SRCDIR "elftest/corrupt2.elf64.so"); QCOMPARE(lib2.load(), false); QVERIFY(lib2.errorString().contains("not a valid Qt plugin")); QPluginLoader lib3(SRCDIR "elftest/corrupt3.elf64.so"); QCOMPARE(lib3.load(), false); QVERIFY(lib3.errorString().contains("not a valid Qt plugin")); } else if (sizeof(void*) == 4) { QPluginLoader libW(SRCDIR "elftest/corrupt3.elf64.so"); QCOMPARE(libW.load(), false); QVERIFY(libW.errorString().contains("architecture")); } else { QFAIL("Please port QElfParser to this platform or blacklist this test."); } #endif }
void tst_QPluginLoader::loadCorruptElf() { #if defined (__ELF__) if (sizeof(void*) == 8) { QVERIFY(QFile::exists(QFINDTESTDATA("elftest/corrupt1.elf64.so"))); QPluginLoader lib1(QFINDTESTDATA("elftest/corrupt1.elf64.so")); QCOMPARE(lib1.load(), false); QVERIFY2(lib1.errorString().contains("not an ELF object"), qPrintable(lib1.errorString())); QPluginLoader lib2(QFINDTESTDATA("elftest/corrupt2.elf64.so")); QCOMPARE(lib2.load(), false); QVERIFY2(lib2.errorString().contains("invalid"), qPrintable(lib2.errorString())); QPluginLoader lib3(QFINDTESTDATA("elftest/corrupt3.elf64.so")); QCOMPARE(lib3.load(), false); QVERIFY2(lib3.errorString().contains("invalid"), qPrintable(lib3.errorString())); } else if (sizeof(void*) == 4) { QPluginLoader libW(QFINDTESTDATA("elftest/corrupt3.elf64.so")); QCOMPARE(libW.load(), false); QVERIFY2(libW.errorString().contains("architecture"), qPrintable(libW.errorString())); } else { QFAIL("Please port QElfParser to this platform or blacklist this test."); } #endif }
void tst_QPluginLoader::loadDebugObj() { #if defined (__ELF__) QVERIFY(QFile::exists(SRCDIR "elftest/debugobj.so")); QPluginLoader lib1(SRCDIR "elftest/debugobj.so"); QCOMPARE(lib1.load(), false); #endif }
void tst_QLibrary::multipleInstancesForOneLibrary() { QString lib = QCoreApplication::applicationDirPath() + "/mylib"; { QLibrary lib1(lib); QLibrary lib2(lib); QCOMPARE(lib1.isLoaded(), false); QCOMPARE(lib2.isLoaded(), false); lib1.load(); QCOMPARE(lib1.isLoaded(), true); QCOMPARE(lib2.isLoaded(), true); QCOMPARE(lib1.unload(), true); QCOMPARE(lib1.isLoaded(), false); QCOMPARE(lib2.isLoaded(), false); lib1.load(); lib2.load(); QCOMPARE(lib1.isLoaded(), true); QCOMPARE(lib2.isLoaded(), true); QCOMPARE(lib1.unload(), false); QCOMPARE(lib1.isLoaded(), true); QCOMPARE(lib2.isLoaded(), true); QCOMPARE(lib2.unload(), true); QCOMPARE(lib1.isLoaded(), false); QCOMPARE(lib2.isLoaded(), false); // Finally; unload on that is already unloaded QCOMPARE(lib1.unload(), false); } //now let's try with a 3rd one that will go out of scope { QLibrary lib1(lib); QCOMPARE(lib1.isLoaded(), false); lib1.load(); QCOMPARE(lib1.isLoaded(), true); } QLibrary lib2(lib); //lib2 should be loaded because lib1 was loaded and never unloaded QCOMPARE(lib2.isLoaded(), true); }
void setup() { lib1(); lib2("hello"); }
US_USE_NAMESPACE int usSharedLibraryTest(int /*argc*/, char* /*argv*/[]) { US_TEST_BEGIN("SharedLibraryTest"); #ifdef US_PLATFORM_WINDOWS const std::string LIB_PATH = US_RUNTIME_OUTPUT_DIRECTORY; const std::string LIB_PREFIX = ""; const std::string LIB_SUFFIX = ".dll"; const char PATH_SEPARATOR = '\\'; #elif defined(US_PLATFORM_APPLE) const std::string LIB_PATH = US_LIBRARY_OUTPUT_DIRECTORY; const std::string LIB_PREFIX = "lib"; const std::string LIB_SUFFIX = ".dylib"; const char PATH_SEPARATOR = '/'; #else const std::string LIB_PATH = US_LIBRARY_OUTPUT_DIRECTORY; const std::string LIB_PREFIX = "lib"; const std::string LIB_SUFFIX = ".so"; const char PATH_SEPARATOR = '/'; #endif const std::string libAFilePath = LIB_PATH + PATH_SEPARATOR + LIB_PREFIX + "TestModuleA" + LIB_SUFFIX; SharedLibrary lib1(libAFilePath); US_TEST_CONDITION(lib1.GetFilePath() == libAFilePath, "Absolute file path") US_TEST_CONDITION(lib1.GetLibraryPath() == LIB_PATH, "Library path") US_TEST_CONDITION(lib1.GetName() == "TestModuleA", "Name") US_TEST_CONDITION(lib1.GetPrefix() == LIB_PREFIX, "Prefix") US_TEST_CONDITION(lib1.GetSuffix() == LIB_SUFFIX, "Suffix") lib1.SetName("bla"); US_TEST_CONDITION(lib1.GetName() == "TestModuleA", "Name after SetName()") lib1.SetLibraryPath("bla"); US_TEST_CONDITION(lib1.GetLibraryPath() == LIB_PATH, "Library path after SetLibraryPath()") lib1.SetPrefix("bla"); US_TEST_CONDITION(lib1.GetPrefix() == LIB_PREFIX, "Prefix after SetPrefix()") lib1.SetSuffix("bla"); US_TEST_CONDITION(lib1.GetSuffix() == LIB_SUFFIX, "Suffix after SetSuffix()") US_TEST_CONDITION(lib1.GetFilePath() == libAFilePath, "File path after setters") lib1.SetFilePath("bla"); US_TEST_CONDITION(lib1.GetFilePath() == "bla", "Invalid file path") US_TEST_CONDITION(lib1.GetLibraryPath().empty(), "Empty lib path") US_TEST_CONDITION(lib1.GetName() == "bla", "Invalid file name") US_TEST_CONDITION(lib1.GetPrefix() == LIB_PREFIX, "Invalid prefix") US_TEST_CONDITION(lib1.GetSuffix() == LIB_SUFFIX, "Invalid suffix") US_TEST_FOR_EXCEPTION(std::runtime_error, lib1.Load()) US_TEST_CONDITION(lib1.IsLoaded() == false, "Is loaded") US_TEST_CONDITION(lib1.GetHandle() == NULL, "Handle") lib1.SetFilePath(libAFilePath); lib1.Load(); US_TEST_CONDITION(lib1.IsLoaded() == true, "Is loaded") US_TEST_CONDITION(lib1.GetHandle() != NULL, "Handle") US_TEST_FOR_EXCEPTION(std::logic_error, lib1.Load()) lib1.SetFilePath("bla"); US_TEST_CONDITION(lib1.GetFilePath() == libAFilePath, "File path") lib1.Unload(); SharedLibrary lib2(LIB_PATH, "TestModuleA"); US_TEST_CONDITION(lib2.GetFilePath() == libAFilePath, "File path") lib2.SetPrefix(""); US_TEST_CONDITION(lib2.GetPrefix().empty(), "Lib prefix") US_TEST_CONDITION(lib2.GetFilePath() == LIB_PATH + PATH_SEPARATOR + "TestModuleA" + LIB_SUFFIX, "File path") SharedLibrary lib3 = lib2; US_TEST_CONDITION(lib3.GetFilePath() == lib2.GetFilePath(), "Compare file path") lib3.SetPrefix(LIB_PREFIX); US_TEST_CONDITION(lib3.GetFilePath() == libAFilePath, "Compare file path") lib3.Load(); US_TEST_CONDITION(lib3.IsLoaded(), "lib3 loaded") US_TEST_CONDITION(!lib2.IsLoaded(), "lib2 not loaded") lib1 = lib3; US_TEST_FOR_EXCEPTION(std::logic_error, lib1.Load()) lib2.SetPrefix(LIB_PREFIX); lib2.Load(); lib3.Unload(); US_TEST_CONDITION(!lib3.IsLoaded(), "lib3 unloaded") US_TEST_CONDITION(!lib1.IsLoaded(), "lib3 unloaded") lib2.Unload(); lib1.Unload(); US_TEST_END() }