Skip to content

Commit 170fa30

Browse files
authored
extensions: load transitive dependencies from the extension`s dir (#307)
We have transitive dependencies in our MDF extension. This ensures that the DLL search path is searched for dependencies. - Use absolute paths - the extension loading test must be an integration test (needs silkit shared object) - move extension tests to integrationtests --------- Signed-off-by: Marius Börschig <Marius.Boerschig@vector.com>
1 parent 52c9853 commit 170fa30

10 files changed

Lines changed: 15 additions & 17 deletions

File tree

SilKit/IntegrationTests/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ add_subdirectory(SimTestHarness)
88
# local headers as interface lib
99
add_subdirectory(Hourglass)
1010

11+
# extension loading
12+
add_subdirectory(ExtensionTests)
13+
1114
add_library(ITest_Utils INTERFACE)
1215
target_include_directories(ITest_Utils
1316
INTERFACE ${CMAKE_CURRENT_LIST_DIR})

SilKit/source/extensions/Tests/CMakeLists.txt renamed to SilKit/IntegrationTests/ExtensionTests/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ set_target_properties(WrongBuildSystem PROPERTIES
3535
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIG>"
3636
)
3737

38-
add_silkit_test_to_executable(SilKitUnitTests SOURCES Test_SilKitExtensions.cpp LIBS O_SilKit_Extensions O_SilKit_VersionImpl I_SilKit_Core_Mock_Participant SilKit)
38+
add_silkit_test_to_executable(SilKitIntegrationTests SOURCES ITest_SilKitExtensions.cpp LIBS O_SilKit_Extensions O_SilKit_VersionImpl I_SilKit_Core_Mock_Participant SilKit)
3939

4040
if(${SILKIT_BUILD_TESTS})
41-
add_dependencies(SilKitUnitTests
41+
add_dependencies(SilKitIntegrationTests
4242
DummyExtension
4343
WrongVersionExtension
4444
WrongBuildSystem
File renamed without changes.
File renamed without changes.

SilKit/source/extensions/Tests/Test_SilKitExtensions.cpp renamed to SilKit/IntegrationTests/ExtensionTests/ITest_SilKitExtensions.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class StdoutLogger : public SilKit::Core::Tests::MockLogger
5959
};
6060
} // namespace
6161

62-
class Test_SilKitExtensions : public Test
62+
class ITest_SilKitExtensions : public Test
6363
{
6464
protected:
6565
void TearDown() override
@@ -77,11 +77,11 @@ class Test_SilKitExtensions : public Test
7777
StdoutLogger logger;
7878
};
7979

80-
std::string Test_SilKitExtensions::currentWorkingDir;
80+
std::string ITest_SilKitExtensions::currentWorkingDir;
8181

8282
using triple = std::tuple<uint32_t, uint32_t, uint32_t>;
8383

84-
TEST_F(Test_SilKitExtensions, load_dummy_lib)
84+
TEST_F(ITest_SilKitExtensions, load_dummy_lib)
8585
{
8686
{
8787
const auto testDir = std::filesystem::path{"silkit_library_test"};
@@ -110,7 +110,7 @@ TEST_F(Test_SilKitExtensions, load_dummy_lib)
110110
}
111111

112112

113-
TEST_F(Test_SilKitExtensions, static_cast)
113+
TEST_F(ITest_SilKitExtensions, static_cast)
114114
{
115115
const auto testDir = std::filesystem::path{"silkit_library_test"};
116116
std::filesystem::current_path(testDir);
@@ -122,7 +122,7 @@ TEST_F(Test_SilKitExtensions, static_cast)
122122
ASSERT_EQ(dummy->GetDummyValue(), 12345L);
123123
}
124124

125-
TEST_F(Test_SilKitExtensions, wrong_version_number)
125+
TEST_F(ITest_SilKitExtensions, wrong_version_number)
126126
{
127127
try
128128
{
@@ -142,13 +142,13 @@ TEST_F(Test_SilKitExtensions, wrong_version_number)
142142
wrong version number";
143143
}
144144

145-
TEST_F(Test_SilKitExtensions, wrong_build_system)
145+
TEST_F(ITest_SilKitExtensions, wrong_build_system)
146146
{
147147
auto extension = SilKit::LoadExtension(&logger, "WrongBuildSystem");
148148
//should print a harmless warning on stdout
149149
}
150150

151-
TEST_F(Test_SilKitExtensions, multiple_extensions_loaded)
151+
TEST_F(ITest_SilKitExtensions, multiple_extensions_loaded)
152152
{
153153
const auto testDir = std::filesystem::path{"silkit_library_test"};
154154
std::filesystem::current_path(testDir);
@@ -166,7 +166,7 @@ TEST_F(Test_SilKitExtensions, multiple_extensions_loaded)
166166
}
167167

168168
#if !defined(_WIN32)
169-
TEST_F(Test_SilKitExtensions, load_from_envvar)
169+
TEST_F(ITest_SilKitExtensions, load_from_envvar)
170170
{
171171
const auto testDir = std::filesystem::path{"silkit_library_test"};
172172
setenv("TEST_VAR", testDir.c_str(), 1); // should be invariant

SilKit/source/extensions/Tests/WrongBuildSystem.cpp renamed to SilKit/IntegrationTests/ExtensionTests/WrongBuildSystem.cpp

File renamed without changes.

SilKit/source/extensions/Tests/WrongVersionExtension.cpp renamed to SilKit/IntegrationTests/ExtensionTests/WrongVersionExtension.cpp

File renamed without changes.

SilKit/source/extensions/CMakeLists.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,3 @@ target_compile_definitions(O_SilKit_Extensions
8484
PRIVATE
8585
SILKIT_EXTENSION_OS="${extension_os}"
8686
)
87-
88-
if(SILKIT_BUILD_TESTS)
89-
add_subdirectory(Tests)
90-
endif()
91-

SilKit/source/extensions/SilKitExtensions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ std::vector<std::string> FindLibrary(const std::string& name, const SilKit::Exte
142142
const auto current = std::filesystem::path{dir} / path;
143143
if (std::filesystem::exists(current))
144144
{
145-
rv.push_back(current.string());
145+
rv.push_back(std::filesystem::absolute(current).string());
146146
}
147147
}
148148
}

SilKit/source/extensions/detail/LoadExtension_win.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const std::string lib_prefix = "";
3838

3939
LibraryHandle OpenLibrary(const std::string& path)
4040
{
41-
LibraryHandle tmp = ::LoadLibraryA(path.c_str());
41+
LibraryHandle tmp = ::LoadLibraryExA(path.c_str(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH);
4242
if (tmp == nullptr)
4343
{
4444
throw ExtensionError("::LoadLibrary() failed: " + lastErrorMessage());

0 commit comments

Comments
 (0)