ModuleManager/ModuleManagerTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
21 /*
22  * $Log: ModuleManagerTests.cpp,v $
23  * Revision 1.2 2008/05/01 03:42:41 arafune
24  * Modified some tests.
25  *
26  * Revision 1.1 2007/12/20 07:50:17 arafune
27  * *** empty log message ***
28  *
29  * Revision 1.1 2006/11/27 08:33:02 n-ando
30  * TestSuites are devided into each directory.
31  *
32  * Revision 1.2 2006/10/26 01:34:57 kurihara
33  * test program of class ModuelManager.
34  *
35  * Revision 1.1 2006/09/20 08:52:19 n-ando
36  * The first commit.
37  *
38  */
39 
40 #ifndef ModuleManager_cpp
41 #define ModuleManager_cpp
42 
43 #include <cppunit/ui/text/TestRunner.h>
44 #include <cppunit/TextOutputter.h>
45 #include <cppunit/extensions/TestFactoryRegistry.h>
46 #include <cppunit/extensions/HelperMacros.h>
47 #include <cppunit/TestAssert.h>
48 #include <fstream>
49 #include <rtm/ModuleManager.h>
50 #include <coil/Properties.h>
51 
56 namespace ModuleManager
57 {
59  : public CppUnit::TestFixture
60  {
69  //CPPUNIT_TEST(test_getLoadedModules);
72  //CPPUNIT_TEST(test_allowModuleDownload);
73  //CPPUNIT_TEST(test_disallowModuleDownload);
78 
79  private:
81 
82  private:
83  bool isFound(const std::vector<coil::Properties>& path, const std::string& mod)
84  {
85  for (int i(0), len(path.size()); i < len; ++i)
86  {
87  if (mod == path[i]["file_path"]) return true;
88  }
89  return false;
90  }
91 
92  public:
97  {
98  }
99 
104  {
105  }
106 
110  virtual void setUp()
111  {
112  const char* default_properties[] =
113  {
114  "manager.modules.config_ext", "so",
115  "manager.modules.config_path", "/etc/rtc",
116  "manager.modules.detect_loadable", "Yes",
117  "manager.modules.load_path",
118  "../../.libs, .libs, /usr/lib, /usr/local/lib, /usr/local/lib/rtc",
119  "manager.modules.init_func_suffix", "Init",
120  "manager.modules.init_func_prefix", "",
121  "manager.modules.abs_path_allowed", "Yes",
122  "manager.modules.download_allowed", "Yes",
123  "manager.modules.download_dir", "/tmp/rtc",
124  "manager.modules.download_cleanup", "Yes",
125  "manager.modules.preload", "",
126  ""
127  };
128 
129  coil::Properties prop(default_properties);
130  m_pModMgr = new RTC::ModuleManager(prop);
131 
132  // ロードパス上にlibRTC.soが存在することを確認しておく
133  m_pModMgr->load("libRTC.so");
134 
135  // ロードパス上にlibm.soが存在することを確認しておく
136  m_pModMgr->load("libm.so");
137  }
138 
142  virtual void tearDown()
143  {
144  m_pModMgr->unloadAll();
145  delete m_pModMgr;
146  }
147 
148  /* tests for string load(const string& file_name) */
158  void test_load()
159  {
160  try
161  {
162  // Success case
163  // ファイル名だけ指定した場合に、ロードできるか?
164  //std::string str = m_pModMgr->load("libRTC.so");
165  //std::cout << "\nstr=(" << str << std::endl;
166  // インストール環境によって、ファイルパスが変化するのでコメントにする// CPPUNIT_ASSERT_EQUAL( // std::string("/usr/local/lib/libRTC.so"), // std::string("../../.libs/libRTC.so"), // std::string("/usr/lib/libRTC.so"), // m_pModMgr->load("libRTC.so")); /* // ファイル名を絶対パスで指定した場合に、正常にロードできるか? CPPUNIT_ASSERT_EQUAL( // std::string("/usr/local/lib/libRTC.so"), std::string("../../.libs/libRTC.so"), m_pModMgr->load("/usr/local/lib/libRTC.so")); // ディレクトリの区切り文字に"//"や"../"がある場合 CPPUNIT_ASSERT_EQUAL( // std::string("/usr/local//lib/../lib/libRTC.so"), // m_pModMgr->load("/usr/local//lib/../lib/libRTC.so")); std::string("../..//.libs/../libs/libRTC.so"), m_pModMgr->load("../..//.libs/../libs/libRTC.so")); */ } catch (RTC::ModuleManager::Error& e) { CPPUNIT_FAIL("Error" + e.reason); } catch (RTC::ModuleManager::NotFound& e) { CPPUNIT_FAIL("NotFound" + e.name); } catch (RTC::ModuleManager::NotAllowedOperation& e) { CPPUNIT_FAIL("NotAllowedOperation"); } catch (RTC::ModuleManager::InvalidArguments& e) { CPPUNIT_FAIL("InvalidArguments"); } catch (RTC::ModuleManager::FileNotFound& e) { CPPUNIT_FAIL("FileNotFound" + e.name); } catch (...) { CPPUNIT_FAIL("Other Exception"); } // Failure case bool notThrown; // ロードパス上にファイルは存在するが、拡張子が適用外である場合に、意図どおりロード失敗するか? notThrown = false; try { m_pModMgr->load("libm.a"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 存在しないファイルの場合 notThrown = false; try { m_pModMgr->load("inexist-file"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); } /*! * @brief load()メソッドのテスト * * - ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? */ void test_load_inexistent_on_load_path() { std::vector<std::string> loadPath = m_pModMgr->getLoadPath(); // setLoadPath()を利用して、ロードパスをクリアする std::vector<std::string> emptyPath; m_pModMgr->setLoadpath(emptyPath); // ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? // (ロードパスをクリアした状態なので、モジュールロードに失敗するはず) bool notThrown = false; try { m_pModMgr->load("libm.so"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 元のロードパスを設定しなおす m_pModMgr->setLoadpath(loadPath); // モジュールのロードに成功するはず std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); } /*! * @brief unload()メソッドのテスト * * - ロードしておいたモジュールを正しくアンロードできるか? * - アンロードしていないモジュールは、なおアンロードされずに残っているか? * - 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? * - ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? * - アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? */ void test_unload() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Success case // ロードしておいたモジュールを正しくアンロードできるか? m_pModMgr->unload(modName1); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); // アンロードしていないモジュールは、なおアンロードされずに残っているか? CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Failure case // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? try { m_pModMgr->unload("libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload("non-loaded-module.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload(modName1); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} } /*! * @brief unloadAll()メソッドのテスト * * - ロード済みのモジュールがすべてアンロードされるか? */ void test_unloadAll() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか? m_pModMgr->unloadAll(); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2)); } /*! * @brief symbol()メソッドのテスト * * - モジュールが持つシンボル(関数ポインタ)を正常に取得できるか? * - 取得したシンボルに対する呼出を正常に行えるか? */ void test_symbol() { typedef double (*FUNCTION_COS)(double); typedef double (*FUNCTION_SIN)(double); // モジュールをロードしておく std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
167 // CPPUNIT_ASSERT_EQUAL(
168 // std::string("/usr/local/lib/libRTC.so"),
169 // std::string("../../.libs/libRTC.so"),
170 // std::string("/usr/lib/libRTC.so"),
171 // m_pModMgr->load("libRTC.so"));
172 
173 /*
174  // ファイル名を絶対パスで指定した場合に、正常にロードできるか?
175  CPPUNIT_ASSERT_EQUAL(
176 // std::string("/usr/local/lib/libRTC.so"),
177  std::string("../../.libs/libRTC.so"),
178  m_pModMgr->load("/usr/local/lib/libRTC.so"));
179 
180  // ディレクトリの区切り文字に"//"や"../"がある場合 CPPUNIT_ASSERT_EQUAL( // std::string("/usr/local//lib/../lib/libRTC.so"), // m_pModMgr->load("/usr/local//lib/../lib/libRTC.so")); std::string("../..//.libs/../libs/libRTC.so"), m_pModMgr->load("../..//.libs/../libs/libRTC.so")); */ } catch (RTC::ModuleManager::Error& e) { CPPUNIT_FAIL("Error" + e.reason); } catch (RTC::ModuleManager::NotFound& e) { CPPUNIT_FAIL("NotFound" + e.name); } catch (RTC::ModuleManager::NotAllowedOperation& e) { CPPUNIT_FAIL("NotAllowedOperation"); } catch (RTC::ModuleManager::InvalidArguments& e) { CPPUNIT_FAIL("InvalidArguments"); } catch (RTC::ModuleManager::FileNotFound& e) { CPPUNIT_FAIL("FileNotFound" + e.name); } catch (...) { CPPUNIT_FAIL("Other Exception"); } // Failure case bool notThrown; // ロードパス上にファイルは存在するが、拡張子が適用外である場合に、意図どおりロード失敗するか? notThrown = false; try { m_pModMgr->load("libm.a"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 存在しないファイルの場合 notThrown = false; try { m_pModMgr->load("inexist-file"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); } /*! * @brief load()メソッドのテスト * * - ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? */ void test_load_inexistent_on_load_path() { std::vector<std::string> loadPath = m_pModMgr->getLoadPath(); // setLoadPath()を利用して、ロードパスをクリアする std::vector<std::string> emptyPath; m_pModMgr->setLoadpath(emptyPath); // ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? // (ロードパスをクリアした状態なので、モジュールロードに失敗するはず) bool notThrown = false; try { m_pModMgr->load("libm.so"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 元のロードパスを設定しなおす m_pModMgr->setLoadpath(loadPath); // モジュールのロードに成功するはず std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); } /*! * @brief unload()メソッドのテスト * * - ロードしておいたモジュールを正しくアンロードできるか? * - アンロードしていないモジュールは、なおアンロードされずに残っているか? * - 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? * - ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? * - アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? */ void test_unload() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Success case // ロードしておいたモジュールを正しくアンロードできるか? m_pModMgr->unload(modName1); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); // アンロードしていないモジュールは、なおアンロードされずに残っているか? CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Failure case // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? try { m_pModMgr->unload("libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload("non-loaded-module.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload(modName1); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} } /*! * @brief unloadAll()メソッドのテスト * * - ロード済みのモジュールがすべてアンロードされるか? */ void test_unloadAll() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか? m_pModMgr->unloadAll(); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2)); } /*! * @brief symbol()メソッドのテスト * * - モジュールが持つシンボル(関数ポインタ)を正常に取得できるか? * - 取得したシンボルに対する呼出を正常に行えるか? */ void test_symbol() { typedef double (*FUNCTION_COS)(double); typedef double (*FUNCTION_SIN)(double); // モジュールをロードしておく std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
181  CPPUNIT_ASSERT_EQUAL(
182 // std::string("/usr/local//lib/../lib/libRTC.so"),
183 // m_pModMgr->load("/usr/local//lib/../lib/libRTC.so"));
184  std::string("../..//.libs/../libs/libRTC.so"),
185  m_pModMgr->load("../..//.libs/../libs/libRTC.so"));
186 */
187  }
188  catch (RTC::ModuleManager::Error& e)
189  {
190  CPPUNIT_FAIL("Error" + e.reason);
191  }
193  {
194  CPPUNIT_FAIL("NotFound" + e.name);
195  }
197  {
198  CPPUNIT_FAIL("NotAllowedOperation");
199  }
201  {
202  CPPUNIT_FAIL("InvalidArguments");
203  }
205  {
206  CPPUNIT_FAIL("FileNotFound" + e.name);
207  }
208  catch (...)
209  {
210  CPPUNIT_FAIL("Other Exception");
211  }
212 
213  // Failure case
214  bool notThrown;
215 
216  // ロードパス上にファイルは存在するが、拡張子が適用外である場合に、意図どおりロード失敗するか?
217  notThrown = false;
218  try
219  {
220  m_pModMgr->load("libm.a");
221  notThrown = true;
222  }
223  catch (...) {}
224  if (notThrown) CPPUNIT_FAIL("Exception not thrown.");
225 
226  // 存在しないファイルの場合 notThrown = false; try { m_pModMgr->load("inexist-file"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); } /*! * @brief load()メソッドのテスト * * - ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? */ void test_load_inexistent_on_load_path() { std::vector<std::string> loadPath = m_pModMgr->getLoadPath(); // setLoadPath()を利用して、ロードパスをクリアする std::vector<std::string> emptyPath; m_pModMgr->setLoadpath(emptyPath); // ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? // (ロードパスをクリアした状態なので、モジュールロードに失敗するはず) bool notThrown = false; try { m_pModMgr->load("libm.so"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 元のロードパスを設定しなおす m_pModMgr->setLoadpath(loadPath); // モジュールのロードに成功するはず std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); } /*! * @brief unload()メソッドのテスト * * - ロードしておいたモジュールを正しくアンロードできるか? * - アンロードしていないモジュールは、なおアンロードされずに残っているか? * - 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? * - ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? * - アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? */ void test_unload() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Success case // ロードしておいたモジュールを正しくアンロードできるか? m_pModMgr->unload(modName1); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); // アンロードしていないモジュールは、なおアンロードされずに残っているか? CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Failure case // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? try { m_pModMgr->unload("libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload("non-loaded-module.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload(modName1); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} } /*! * @brief unloadAll()メソッドのテスト * * - ロード済みのモジュールがすべてアンロードされるか? */ void test_unloadAll() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか? m_pModMgr->unloadAll(); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2)); } /*! * @brief symbol()メソッドのテスト * * - モジュールが持つシンボル(関数ポインタ)を正常に取得できるか? * - 取得したシンボルに対する呼出を正常に行えるか? */ void test_symbol() { typedef double (*FUNCTION_COS)(double); typedef double (*FUNCTION_SIN)(double); // モジュールをロードしておく std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
227  notThrown = false;
228  try
229  {
230  m_pModMgr->load("inexist-file");
231  notThrown = true;
232  }
233  catch (...) {}
234  if (notThrown) CPPUNIT_FAIL("Exception not thrown.");
235  }
236 
243  {
244 
245  std::vector<std::string> loadPath = m_pModMgr->getLoadPath();
246 
247  // setLoadPath()を利用して、ロードパスをクリアする std::vector<std::string> emptyPath; m_pModMgr->setLoadpath(emptyPath); // ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか? // (ロードパスをクリアした状態なので、モジュールロードに失敗するはず) bool notThrown = false; try { m_pModMgr->load("libm.so"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 元のロードパスを設定しなおす m_pModMgr->setLoadpath(loadPath); // モジュールのロードに成功するはず std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); } /*! * @brief unload()メソッドのテスト * * - ロードしておいたモジュールを正しくアンロードできるか? * - アンロードしていないモジュールは、なおアンロードされずに残っているか? * - 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? * - ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? * - アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? */ void test_unload() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Success case // ロードしておいたモジュールを正しくアンロードできるか? m_pModMgr->unload(modName1); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); // アンロードしていないモジュールは、なおアンロードされずに残っているか? CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Failure case // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? try { m_pModMgr->unload("libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload("non-loaded-module.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload(modName1); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} } /*! * @brief unloadAll()メソッドのテスト * * - ロード済みのモジュールがすべてアンロードされるか? */ void test_unloadAll() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか? m_pModMgr->unloadAll(); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2)); } /*! * @brief symbol()メソッドのテスト * * - モジュールが持つシンボル(関数ポインタ)を正常に取得できるか? * - 取得したシンボルに対する呼出を正常に行えるか? */ void test_symbol() { typedef double (*FUNCTION_COS)(double); typedef double (*FUNCTION_SIN)(double); // モジュールをロードしておく std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
248  std::vector<std::string> emptyPath;
249  m_pModMgr->setLoadpath(emptyPath);
250 
251  // ロードパス上に存在しないモジュールのロードを試みた場合、意図どおりロード失敗するか?
252  // (ロードパスをクリアした状態なので、モジュールロードに失敗するはず) bool notThrown = false; try { m_pModMgr->load("libm.so"); notThrown = true; } catch (...) {} if (notThrown) CPPUNIT_FAIL("Exception not thrown."); // 元のロードパスを設定しなおす m_pModMgr->setLoadpath(loadPath); // モジュールのロードに成功するはず std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); } /*! * @brief unload()メソッドのテスト * * - ロードしておいたモジュールを正しくアンロードできるか? * - アンロードしていないモジュールは、なおアンロードされずに残っているか? * - 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? * - ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? * - アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? */ void test_unload() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Success case // ロードしておいたモジュールを正しくアンロードできるか? m_pModMgr->unload(modName1); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); // アンロードしていないモジュールは、なおアンロードされずに残っているか? CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // Failure case // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか? try { m_pModMgr->unload("libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload("non-loaded-module.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか? try { m_pModMgr->unload(modName1); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotFound expected) {} } /*! * @brief unloadAll()メソッドのテスト * * - ロード済みのモジュールがすべてアンロードされるか? */ void test_unloadAll() { // モジュールをロードしておく std::string modName1 = m_pModMgr->load("libRTC.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1)); std::string modName2 = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2)); // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか? m_pModMgr->unloadAll(); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1)); CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2)); } /*! * @brief symbol()メソッドのテスト * * - モジュールが持つシンボル(関数ポインタ)を正常に取得できるか? * - 取得したシンボルに対する呼出を正常に行えるか? */ void test_symbol() { typedef double (*FUNCTION_COS)(double); typedef double (*FUNCTION_SIN)(double); // モジュールをロードしておく std::string modName = m_pModMgr->load("libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
253  bool notThrown = false;
254  try
255  {
256  m_pModMgr->load("libm.so");
257  notThrown = true;
258  }
259  catch (...) {}
260  if (notThrown) CPPUNIT_FAIL("Exception not thrown.");
261 
262  // 元のロードパスを設定しなおす
263  m_pModMgr->setLoadpath(loadPath);
264 
265  // モジュールのロードに成功するはず
266  std::string modName = m_pModMgr->load("libm.so");
267  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName));
268  }
269 
279  void test_unload()
280  {
281 
282  // モジュールをロードしておく
283  std::string modName1 = m_pModMgr->load("libRTC.so");
284  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1));
285 
286  std::string modName2 = m_pModMgr->load("libm.so");
287  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2));
288 
289  // Success case
290  // ロードしておいたモジュールを正しくアンロードできるか?
291  m_pModMgr->unload(modName1);
292  CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1));
293 
294  // アンロードしていないモジュールは、なおアンロードされずに残っているか?
295  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2));
296 
297 
298  // Failure case
299  // 絶対パスを指定せず、ファイル名だけ指定した場合に、意図どおりにアンロード失敗するか?
300  try
301  {
302  m_pModMgr->unload("libm.so");
303  CPPUNIT_FAIL("Exception not thrown.");
304  }
305  catch (RTC::ModuleManager::NotFound expected) {}
306 
307  // ロードしていないモジュールのアンロードを試みた場合、意図どおりに失敗するか?
308  try
309  {
310  m_pModMgr->unload("non-loaded-module.so");
311  CPPUNIT_FAIL("Exception not thrown.");
312  }
313  catch (RTC::ModuleManager::NotFound expected) {}
314 
315  // アンロード済みのモジュールを、さらにアンロードしようと試みた場合、意図どおりに失敗するか?
316  try
317  {
318  m_pModMgr->unload(modName1);
319  CPPUNIT_FAIL("Exception not thrown.");
320  }
321  catch (RTC::ModuleManager::NotFound expected) {}
322  }
323 
330  {
331  // モジュールをロードしておく
332  std::string modName1 = m_pModMgr->load("libRTC.so");
333  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName1));
334 
335  std::string modName2 = m_pModMgr->load("libm.so");
336  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName2));
337 
338  // unloadAll()によって、ロード済みのモジュールがすべてアンロードされるか?
339  m_pModMgr->unloadAll();
340  CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName1));
341  CPPUNIT_ASSERT(! isFound(m_pModMgr->getLoadedModules(), modName2));
342  }
343 
350  void test_symbol()
351  {
352  typedef double (*FUNCTION_COS)(double);
353  typedef double (*FUNCTION_SIN)(double);
354 
355  // モジュールをロードしておく
356  std::string modName = m_pModMgr->load("libm.so");
357  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName));
358 
359  // "cos"関数へのシンボルを取得する FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos"); CPPUNIT_ASSERT(func_cos != NULL); // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
360  FUNCTION_COS func_cos = (FUNCTION_COS) m_pModMgr->symbol(modName, "cos");
361  CPPUNIT_ASSERT(func_cos != NULL);
362 
363  // "sin"関数へのシンボルを取得する FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin"); CPPUNIT_ASSERT(func_sin != NULL); // 取得したシンボルへの呼出を正常に行えるか? CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0)); CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0)); } /*! * @brief setLoadpath()とgetLoadPath()のテスト * * - ロードパスを正しく設定できるか? * - ロードパスを正しく取得できるか? */ void test_setLoadpath_and_getLoadPath() { std::vector<std::string> loadPath; loadPath.push_back("/usr"); loadPath.push_back("/usr/lib"); // setLoadpath()で設定したパスを、getLoadPath()で取得できるか? m_pModMgr->setLoadpath(loadPath); std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]); CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]); } /*! * @brief addLoadpath()メソッドのテスト * * - 正しくロードパスを追加できるか? */ void test_addLoadpath() { std::vector<std::string> loadPath1; loadPath1.push_back("/usr"); loadPath1.push_back("/usr/lib"); std::sort(loadPath1.begin(), loadPath1.end()); std::vector<std::string> loadPath2; loadPath2.push_back("/usr/local/lib"); loadPath2.push_back("/usr/local/lib/rtc"); std::sort(loadPath2.begin(), loadPath2.end()); std::vector<std::string> expectedPath; expectedPath.push_back("/usr"); expectedPath.push_back("/usr/lib"); expectedPath.push_back("/usr/local/lib"); expectedPath.push_back("/usr/local/lib/rtc"); std::sort(expectedPath.begin(), expectedPath.end()); // まず初期状態のロードパスを設定しておく std::vector<std::string> loadPathRet; m_pModMgr->setLoadpath(loadPath1); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size()); for (int i = 0; i < 2; ++i) { CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]); } // 正しくロードパスを追加できるか? m_pModMgr->addLoadpath(loadPath2); loadPathRet = m_pModMgr->getLoadPath(); CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size()); for (int i = 0; i < 4; ++i) { CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]); } } /*! * @brief getLoadedModules()メソッドのテスト */ void test_getLoadedModules() { // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
364  FUNCTION_SIN func_sin = (FUNCTION_SIN) m_pModMgr->symbol(modName, "sin");
365  CPPUNIT_ASSERT(func_sin != NULL);
366 
367  // 取得したシンボルへの呼出を正常に行えるか?
368  CPPUNIT_ASSERT_EQUAL(1.0, (*func_cos)(0.0));
369  CPPUNIT_ASSERT_EQUAL(0.0, (*func_sin)(0.0));
370  }
371 
379  {
380 
381  std::vector<std::string> loadPath;
382  loadPath.push_back("/usr");
383  loadPath.push_back("/usr/lib");
384 
385  // setLoadpath()で設定したパスを、getLoadPath()で取得できるか?
386  m_pModMgr->setLoadpath(loadPath);
387  std::vector<std::string> loadPathRet = m_pModMgr->getLoadPath();
388  CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size());
389  CPPUNIT_ASSERT_EQUAL(std::string("/usr"), loadPathRet[0]);
390  CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib"), loadPathRet[1]);
391 
392  }
393 
400  {
401  std::vector<std::string> loadPath1;
402  loadPath1.push_back("/usr");
403  loadPath1.push_back("/usr/lib");
404  std::sort(loadPath1.begin(), loadPath1.end());
405 
406  std::vector<std::string> loadPath2;
407  loadPath2.push_back("/usr/local/lib");
408  loadPath2.push_back("/usr/local/lib/rtc");
409  std::sort(loadPath2.begin(), loadPath2.end());
410 
411  std::vector<std::string> expectedPath;
412  expectedPath.push_back("/usr");
413  expectedPath.push_back("/usr/lib");
414  expectedPath.push_back("/usr/local/lib");
415  expectedPath.push_back("/usr/local/lib/rtc");
416  std::sort(expectedPath.begin(), expectedPath.end());
417 
418  // まず初期状態のロードパスを設定しておく
419  std::vector<std::string> loadPathRet;
420  m_pModMgr->setLoadpath(loadPath1);
421  loadPathRet = m_pModMgr->getLoadPath();
422  CPPUNIT_ASSERT_EQUAL(2, (int) loadPathRet.size());
423  for (int i = 0; i < 2; ++i) {
424  CPPUNIT_ASSERT_EQUAL(loadPath1[i], loadPathRet[i]);
425  }
426 
427  // 正しくロードパスを追加できるか?
428  m_pModMgr->addLoadpath(loadPath2);
429  loadPathRet = m_pModMgr->getLoadPath();
430  CPPUNIT_ASSERT_EQUAL(4, (int) loadPathRet.size());
431  for (int i = 0; i < 4; ++i) {
432  CPPUNIT_ASSERT_EQUAL(expectedPath[i], loadPathRet[i]);
433  }
434  }
435 
440  {
441  // 他テスト内で使用されており、それらで兼ねるものとする } /*! * @brief getLoadableModules()メソッドのテスト */ void test_getLoadableModules() { std::vector<coil::Properties> props = m_pModMgr->getLoadableModules(); int len = props.size(); CPPUNIT_ASSERT(len > 0); bool bret = false; for(int i(0); i<len; ++i) { if(props[i].getProperty("module_file_name") == "DummyModule1.so") { bret = true; break; } } CPPUNIT_ASSERT(bret); } /*! * @brief allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト * * - 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? * - 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? */ void test_allowAbsolutePath_and_disallowAbsolutePath() { // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか? m_pModMgr->allowAbsolutePath(); std::string modName = m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName)); // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか? m_pModMgr->unloadAll(); // いったんアンロードしておく m_pModMgr->disallowAbsolutePath(); try { m_pModMgr->load("/usr/lib/libm.so"); CPPUNIT_FAIL("Exception not thrown."); } catch (RTC::ModuleManager::NotAllowedOperation expected) {} } /*! * @brief allowModuleDownload()メソッドのテスト */ void test_allowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
442  }
443 
448  {
449  std::vector<coil::Properties> props = m_pModMgr->getLoadableModules();
450  int len = props.size();
451  CPPUNIT_ASSERT(len > 0);
452 
453  bool bret = false;
454  for(int i(0); i<len; ++i)
455  {
456  if(props[i].getProperty("module_file_name") == "DummyModule1.so")
457  {
458  bret = true;
459  break;
460  }
461  }
462  CPPUNIT_ASSERT(bret);
463  }
464 
472  {
473  // 絶対パス指定を許可した状態で、絶対パス指定でモジュールロードできるか?
474  m_pModMgr->allowAbsolutePath();
475  std::string modName = m_pModMgr->load("/usr/lib/libm.so");
476  CPPUNIT_ASSERT(isFound(m_pModMgr->getLoadedModules(), modName));
477 
478  // 絶対パス指定を禁止した状態で、絶対パス指定でモジュールロードを試みて、意図どおり失敗するか?
479  m_pModMgr->unloadAll(); // いったんアンロードしておく
480  m_pModMgr->disallowAbsolutePath();
481  try
482  {
483  m_pModMgr->load("/usr/lib/libm.so");
484  CPPUNIT_FAIL("Exception not thrown.");
485  }
486  catch (RTC::ModuleManager::NotAllowedOperation expected) {}
487  }
488 
493  {
494  // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief disallowModuleDownload()メソッドのテスト */ void test_disallowModuleDownload() { // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
495  }
496 
501  {
502  // ダウンロードによるモジュールロード処理が未実装のため、テストも未実装 } /*! * @brief findFile()メソッドのテスト * * - 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? * - 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? */ void test_findFile() { std::vector<std::string> path; path.push_back("/usr/lib"); // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"), m_pModMgr->findFile("libm.so", path)); // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか? CPPUNIT_ASSERT_EQUAL(std::string(""), m_pModMgr->findFile("inexist-file.so", path)); } /*! * @brief fileExist()メソッドのテスト * * - 存在するファイルを指定した場合に、正しく判定されるか? * - 存在しないファイルを指定した場合に、正しく判定されるか? * - 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? */ void test_fileExist() { // 存在するファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so")); // 存在しないファイルを指定した場合に、正しく判定されるか? CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so")); // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか? CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so")); } /*! * @brief getInitFuncName()メソッドのテスト * * - 初期化関数名を正しく取得できるか? */ void test_getInitFuncName() { // 初期化関数名を正しく取得できるか? CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"), m_pModMgr->getInitFuncName("Manipulator")); CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"), m_pModMgr->getInitFuncName("PHANToM")); } }; }; // namespace ModuleManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ModuleManager_cpp
503  }
504 
512  {
513 
514  std::vector<std::string> path;
515  path.push_back("/usr/lib");
516 
517  // 指定したパス上にファイルが存在する場合、正しく有無判定し、パスを取得できるか?
518  CPPUNIT_ASSERT_EQUAL(std::string("/usr/lib/libm.so"),
519  m_pModMgr->findFile("libm.so", path));
520 
521  // 指定したパス上にファイルが存在しない場合、正しく有無判定し、空文字列を取得できるか?
522  CPPUNIT_ASSERT_EQUAL(std::string(""),
523  m_pModMgr->findFile("inexist-file.so", path));
524  }
525 
534  {
535  // 存在するファイルを指定した場合に、正しく判定されるか?
536  CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr/lib/libm.so"));
537 
538  // 存在しないファイルを指定した場合に、正しく判定されるか?
539  CPPUNIT_ASSERT(! m_pModMgr->fileExist("/usr/lib/inexistent-file.so"));
540 
541  // 存在するファイルを「//」「../」が混じったパス表記で指定した場合、正しく判定されるか?
542  CPPUNIT_ASSERT(m_pModMgr->fileExist("/usr//lib/../lib/libm.so"));
543  }
544 
551  {
552  // 初期化関数名を正しく取得できるか?
553  CPPUNIT_ASSERT_EQUAL(std::string("ManipulatorInit"),
554  m_pModMgr->getInitFuncName("Manipulator"));
555 
556  CPPUNIT_ASSERT_EQUAL(std::string("PHANToMInit"),
557  m_pModMgr->getInitFuncName("PHANToM"));
558  }
559 
560  };
561 }; // namespace ModuleManager
562 
563 /*
564  * Register test suite
565  */
567 
568 #ifdef LOCAL_MAIN
569 int main(int argc, char* argv[])
570 {
571 
572  FORMAT format = TEXT_OUT;
573  int target = 0;
574  std::string xsl;
575  std::string ns;
576  std::string fname;
577  std::ofstream ofs;
578 
579  int i(1);
580  while (i < argc)
581  {
582  std::string arg(argv[i]);
583  std::string next_arg;
584  if (i + 1 < argc) next_arg = argv[i + 1];
585  else next_arg = "";
586 
587  if (arg == "--text") { format = TEXT_OUT; break; }
588  if (arg == "--xml")
589  {
590  if (next_arg == "")
591  {
592  fname = argv[0];
593  fname += ".xml";
594  }
595  else
596  {
597  fname = next_arg;
598  }
599  format = XML_OUT;
600  ofs.open(fname.c_str());
601  }
602  if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
603  if ( arg == "--cerr" ) { target = 1; break; }
604  if ( arg == "--xsl" )
605  {
606  if (next_arg == "") xsl = "default.xsl";
607  else xsl = next_arg;
608  }
609  if ( arg == "--namespace" )
610  {
611  if (next_arg == "")
612  {
613  std::cerr << "no namespace specified" << std::endl;
614  exit(1);
615  }
616  else
617  {
618  xsl = next_arg;
619  }
620  }
621  ++i;
622  }
623  CppUnit::TextUi::TestRunner runner;
624  if ( ns.empty() )
625  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
626  else
627  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
628  CppUnit::Outputter* outputter = 0;
629  std::ostream* stream = target ? &std::cerr : &std::cout;
630  switch ( format )
631  {
632  case TEXT_OUT :
633  outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
634  break;
635  case XML_OUT :
636  std::cout << "XML_OUT" << std::endl;
637  outputter = new CppUnit::XmlOutputter(&runner.result(),
638  ofs, "shift_jis");
639  static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
640  break;
641  case COMPILER_OUT :
642  outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
643  break;
644  }
645  runner.setOutputter(outputter);
646  runner.run();
647  return 0; // runner.run() ? 0 : 1;
648 }
649 #endif // MAIN
650 #endif // ModuleManager_cpp
void * symbol(const std::string &file_name, const std::string &func_name)
Refer to the symbol of the module.
Structure for exception handling of unimplemented part and specified module missing.
int main(int argc, char **argv)
void test_addLoadpath()
addLoadpath()メソッドのテスト
std::string getInitFuncName(const std::string &file_path)
Create initialization function symbol.
void test_getLoadedModules()
getLoadedModules()メソッドのテスト
Structure for exception handling when file open is failed.
void addLoadpath(const std::vector< std::string > &load_path)
Add the module load path.
std::vector< coil::Properties > getLoadableModules()
Get the loadable module list.
void test_unload()
unload()メソッドのテスト
void setLoadpath(const std::vector< std::string > &load_path)
Set the module load path.
void disallowAbsolutePath()
Disallow absolute path when specify module path.
void test_getLoadableModules()
getLoadableModules()メソッドのテスト
std::string load(const std::string &file_name)
Load the module.
void allowAbsolutePath()
Allow absolute path when specify module path.
std::vector< coil::Properties > getLoadedModules()
Get the module list that has been loaded.
void test_disallowModuleDownload()
disallowModuleDownload()メソッドのテスト
void test_setLoadpath_and_getLoadPath()
setLoadpath()とgetLoadPath()のテスト
Structure for exception handling when specified argument is invalid.
bool fileExist(const std::string &filename)
Check whether the file exists.
void test_allowAbsolutePath_and_disallowAbsolutePath()
allowAbsolutePath()メソッドとdisallowAbsolutePath()メソッドのテスト
void test_load()
load()メソッドのテスト
void test_getInitFuncName()
getInitFuncName()メソッドのテスト
Loadable modules manager class.
void test_load_inexistent_on_load_path()
load()メソッドのテスト
bool isFound(const std::vector< coil::Properties > &path, const std::string &mod)
prop
Organization::get_organization_property ();.
ModuleManager class.
Definition: ModuleManager.h:74
void test_fileExist()
fileExist()メソッドのテスト
void test_findFile()
findFile()メソッドのテスト
std::vector< std::string > getLoadPath()
Get the module load path.
Class represents a set of properties.
Definition: Properties.h:101
void unloadAll()
Unload all modules.
Structure for exception handling when specified file cannot be found.
void test_unloadAll()
unloadAll()メソッドのテスト
void unload(const std::string &file_name)
Unload the module.
bret
7 送受信データ比較
Definition: ConnectTest.py:377
std::string findFile(const std::string &fname, const std::vector< std::string > &load_path)
Search the file from the LoadPath.
void test_symbol()
symbol()メソッドのテスト
CPPUNIT_TEST_SUITE(ModuleManagerTests)
CPPUNIT_TEST_SUITE_REGISTRATION(ModuleManager::ModuleManagerTests)
void test_allowModuleDownload()
allowModuleDownload()メソッドのテスト
Structure for exception handling when specified operation cannot be allowed.


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Mon Jun 10 2019 14:07:53