Publishing R5 content (#72)
[platform/upstream/dldt.git] / inference-engine / tests / unit / inference_engine_tests / shared_object_loader_test.cpp
1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <ie_plugin_ptr.hpp>
6 #include "tests_common.hpp"
7 #include "details/ie_so_loader.h"
8 #include "inference_engine.hpp"
9
10 using namespace std;
11 using namespace InferenceEngine;
12 using namespace InferenceEngine::details;
13
14 class SharedObjectLoaderTests: public TestsCommon {
15 protected:
16     void loadDll(const string &libraryName) {
17         sharedObjectLoader.reset(new details::SharedObjectLoader(libraryName.c_str()));
18     }
19     unique_ptr<SharedObjectLoader> sharedObjectLoader;
20     
21     template <class T>
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())));
24         return ptr;
25     }
26 };
27
28 typedef void*(*PluginEngineCreateFunc)(void);
29 typedef void(*PluginEngineDestoryFunc)(void *);
30
31 TEST_F(SharedObjectLoaderTests, canLoadExistedPlugin) {
32     loadDll(get_mock_engine_name());
33     EXPECT_NE(nullptr, sharedObjectLoader.get());
34 }
35
36 TEST_F(SharedObjectLoaderTests, loaderThrowsIfNoPlugin) {
37     EXPECT_THROW(loadDll("wrong_name"), InferenceEngine::details::InferenceEngineException);
38 }
39
40 TEST_F(SharedObjectLoaderTests, canFindExistedMethod) {
41     loadDll(get_mock_engine_name());
42    
43     auto factory = make_std_function<StatusCode(IInferencePlugin*&, ResponseDesc*)>("CreatePluginEngine");
44     EXPECT_NE(nullptr, factory);
45 }
46
47 TEST_F(SharedObjectLoaderTests, throwIfMethodNofFoundInLibrary) {
48     loadDll(get_mock_engine_name());
49     
50     EXPECT_THROW(make_std_function<IInferencePlugin*()>("wrong_function"), InferenceEngine::details::InferenceEngineException);
51 }
52
53 TEST_F(SharedObjectLoaderTests, canCallExistedMethod) {
54     loadDll(get_mock_engine_name());
55
56     auto factory = make_std_function<StatusCode(IInferencePlugin*&, ResponseDesc*)>("CreatePluginEngine");
57     IInferencePlugin* ptr = nullptr;
58     ResponseDesc resp;
59     EXPECT_NO_THROW(factory(ptr, &resp));
60 }