Data tests final part (PluginManager class tests) (#487)
authorIvan Vagin/AI Tools Lab /SRR/Engineer/삼성전자 <ivan.vagin@samsung.com>
Fri, 6 Jul 2018 12:16:37 +0000 (15:16 +0300)
committerSergey Vostokov/AI Tools Lab /SRR/Staff Engineer/삼성전자 <s.vostokov@samsung.com>
Fri, 6 Jul 2018 12:16:37 +0000 (21:16 +0900)
PluginManager class tests

This commit introduced tests for PluginManager class

Signed-off-by: Ivan Vagin <ivan.vagin@samsung.com>
contrib/nnc/CMakeLists.txt
contrib/nnc/src/module/plugin/PluginManager.test.cpp

index 30b11f7..568f501 100644 (file)
@@ -24,7 +24,9 @@ target_include_directories(nnc_module_test PUBLIC include)
 
 # Set macro in nnc_module_test with some_parser absolute path
 target_compile_definitions(nnc_module_test PRIVATE
-    CMAKE_SAMPLE_PLUGIN_ABS_PATH=$<TARGET_FILE:some_parser>)
+    CMAKE_SAMPLE_PLUGIN_ABS_PATH=$<TARGET_FILE:some_parser>
+    CMAKE_SAMPLE_PLUGIN_2_ABS_PATH=$<TARGET_FILE:some_parser_second>
+    CMAKE_SAMPLE_PLUGIN_DIR_ABS_PATH=$<TARGET_FILE_DIR:some_parser>)
 
 add_subdirectory(libs)
 add_subdirectory(examples)
index e6646f9..8363195 100644 (file)
@@ -23,11 +23,11 @@ void managerErr1() { throw PluginManagerException(managerErrorMsg1); }
 
 void managerErr2()
 {
-  try 
+  try
   {
     managerErr1();
   }
-  catch (PluginManagerException &e) 
+  catch (PluginManagerException &e)
   {
     throw PluginManagerException(e, managerErrorMsg2);
   }
@@ -35,11 +35,11 @@ void managerErr2()
 
 TEST(CONTRIB_NNC, PluginManagerException)
 {
-  try 
+  try
   {
     managerErr2();
   }
-  catch (PluginManagerException &e) 
+  catch (PluginManagerException &e)
   {
     ASSERT_TRUE(managerErrorMsgs == e.getInfo());
     return;
@@ -48,3 +48,53 @@ TEST(CONTRIB_NNC, PluginManagerException)
   // should not happen
   FAIL();
 }
+
+// PluginManager class
+
+// Test 'getInstance()' method
+TEST(CONTRIB_NNC, PluginManagerGetInstance)
+{
+  PluginManager &pluginManager = PluginManager::getInstance();
+  ASSERT_NE(&pluginManager, nullptr);
+  PluginManager &pluginManager2 = PluginManager::getInstance();
+  ASSERT_EQ(&pluginManager, &pluginManager2);
+}
+
+// Test PluginManager loading with unexisting path
+TEST(CONTRIB_NNC, PluginManagerMissingDir)
+{
+  PluginManager &pluginManager = PluginManager::getInstance();
+
+  auto params = std::make_shared<config::DataList>(config::DataList("PluginManagerParams"));
+  params->createElement(PluginManager::paramPluginPath, "some very missing path");
+  pluginManager.setConfig(params);
+
+  std::vector<module::AbstractModule *> modules;
+  ASSERT_THROW(pluginManager.loadPlugins(modules), PluginManagerException);
+}
+
+// Test PluginManager work with correct configuration
+TEST(CONTRIB_NNC, PluginManager)
+{
+  PluginManager &pluginManager = PluginManager::getInstance();
+
+  auto params = std::make_shared<config::DataList>(config::DataList("PluginManagerParams"));
+  params->createElement(PluginManager::paramPluginPath, STRING(CMAKE_SAMPLE_PLUGIN_DIR_ABS_PATH));
+  params->createElement(PluginManager::paramVerboseLoading);
+  params->createElement(PluginManager::paramPluginHelp);
+  pluginManager.setConfig(params);
+
+  std::vector<module::AbstractModule *> modules;
+  modules.push_back(&module::FrontendModule::getInstance());
+  modules.push_back(&module::BackendModule::getInstance());
+  pluginManager.loadPlugins(modules);
+
+  // Test operator '<<'
+  std::ostringstream os;
+  os << pluginManager;
+  std::string pluginsOrder1(STRING(CMAKE_SAMPLE_PLUGIN_2_ABS_PATH) "\n"
+                            STRING(CMAKE_SAMPLE_PLUGIN_ABS_PATH) "\n");
+  std::string pluginsOrder2(STRING(CMAKE_SAMPLE_PLUGIN_ABS_PATH) "\n"
+                            STRING(CMAKE_SAMPLE_PLUGIN_2_ABS_PATH) "\n");
+  EXPECT_TRUE(os.str() == pluginsOrder1 || os.str() == pluginsOrder2);
+}