1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <ie_plugin_ptr.hpp>
6 #include "tests_common.hpp"
7 #include "details/ie_so_loader.h"
8 #include "inference_engine.hpp"
11 using namespace InferenceEngine;
12 using namespace InferenceEngine::details;
14 class SharedObjectLoaderTests: public TestsCommon {
16 void loadDll(const string &libraryName) {
17 sharedObjectLoader.reset(new details::SharedObjectLoader(libraryName.c_str()));
19 unique_ptr<SharedObjectLoader> sharedObjectLoader;
22 std::function<T> make_std_function(const std::string& functionName) {
23 std::function <T> ptr (reinterpret_cast<T*>(sharedObjectLoader->get_symbol(functionName.c_str())));
28 typedef void*(*PluginEngineCreateFunc)(void);
29 typedef void(*PluginEngineDestoryFunc)(void *);
31 TEST_F(SharedObjectLoaderTests, canLoadExistedPlugin) {
32 loadDll(get_mock_engine_name());
33 EXPECT_NE(nullptr, sharedObjectLoader.get());
36 TEST_F(SharedObjectLoaderTests, loaderThrowsIfNoPlugin) {
37 EXPECT_THROW(loadDll("wrong_name"), InferenceEngine::details::InferenceEngineException);
40 TEST_F(SharedObjectLoaderTests, canFindExistedMethod) {
41 loadDll(get_mock_engine_name());
43 auto factory = make_std_function<StatusCode(IInferencePlugin*&, ResponseDesc*)>("CreatePluginEngine");
44 EXPECT_NE(nullptr, factory);
47 TEST_F(SharedObjectLoaderTests, throwIfMethodNofFoundInLibrary) {
48 loadDll(get_mock_engine_name());
50 EXPECT_THROW(make_std_function<IInferencePlugin*()>("wrong_function"), InferenceEngine::details::InferenceEngineException);
53 TEST_F(SharedObjectLoaderTests, canCallExistedMethod) {
54 loadDll(get_mock_engine_name());
56 auto factory = make_std_function<StatusCode(IInferencePlugin*&, ResponseDesc*)>("CreatePluginEngine");
57 IInferencePlugin* ptr = nullptr;
59 EXPECT_NO_THROW(factory(ptr, &resp));