00001
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ManagerConfig_cpp
00028 #define ManagerConfig_cpp
00029
00030 #include <cppunit/ui/text/TestRunner.h>
00031 #include <cppunit/TextOutputter.h>
00032 #include <cppunit/extensions/TestFactoryRegistry.h>
00033 #include <cppunit/extensions/HelperMacros.h>
00034 #include <cppunit/TestAssert.h>
00035
00036 #include <fstream>
00037 #include <vector>
00038 #include <string>
00039
00040 #include <rtm/ManagerConfig.h>
00041
00046 namespace ManagerConfig
00047 {
00048 int g_argc;
00049
00050 std::vector<std::string> g_argv;
00051
00052 class ManagerConfigMock : public RTC::ManagerConfig
00053 {
00054 public:
00055 void parseArgs(int argc, char** argv)
00056 {
00057 ManagerConfig::parseArgs(argc, argv);
00058 }
00059
00060 bool findConfigFile()
00061 {
00062 return ManagerConfig::findConfigFile();
00063 }
00064
00065 void setSystemInformation(coil::Properties& prop)
00066 {
00067 ManagerConfig::setSystemInformation(prop);
00068 }
00069
00070 bool fileExist(const std::string& filename)
00071 {
00072 return ManagerConfig::fileExist(filename);
00073 }
00074
00075 public:
00076 std::string& configFile()
00077 {
00078 return m_configFile;
00079 }
00080 bool m_isMaster;
00081 };
00082
00083 class ManagerConfigTests
00084 : public CppUnit::TestFixture
00085 {
00086 CPPUNIT_TEST_SUITE(ManagerConfigTests);
00087 CPPUNIT_TEST(test_init_and_configure);
00088 CPPUNIT_TEST(test_init_default);
00089 CPPUNIT_TEST_SUITE_END();
00090
00091 public:
00095 ManagerConfigTests()
00096 {
00097 }
00098
00102 ~ManagerConfigTests()
00103 {
00104 }
00105
00109 virtual void setUp()
00110 {
00111 }
00112
00116 virtual void tearDown()
00117 {
00118 }
00119
00127 void test_init_and_configure()
00128 {
00129 ManagerConfigMock mgrCfg;
00130 CPPUNIT_ASSERT(mgrCfg.fileExist("./rtc.conf"));
00131
00132
00133
00134 char* argv[] = { "command", "-d", "./rtc.conf" };
00135 int argc = sizeof(argv) / sizeof(char*);
00136 mgrCfg.init(argc, argv);
00137
00138
00139 coil::Properties properties;
00140 mgrCfg.configure(properties);
00141
00142 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.COMPONENT.CONF.PATH"),
00143 properties.getProperty("rtc.component.conf.path"));
00144 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ARCH"),
00145 properties.getProperty("rtc.manager.arch"));
00146 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.DEBUG.LEVEL"),
00147 properties.getProperty("rtc.manager.debug.level"));
00148 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.LANGUAGE"),
00149 properties.getProperty("rtc.manager.language"));
00150 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.NAMESERVER"),
00151 properties.getProperty("rtc.manager.nameserver"));
00152 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OPENING_MESSAGE"),
00153 properties.getProperty("rtc.manager.opening_message"));
00154 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ORB"),
00155 properties.getProperty("rtc.manager.orb"));
00156 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ORB.OPTIONS"),
00157 properties.getProperty("rtc.manager.orb.options"));
00158 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OS"),
00159 properties.getProperty("rtc.manager.os"));
00160 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OS.RELEASE"),
00161 properties.getProperty("rtc.manager.os.release"));
00162 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.SUBSYSTEMS"),
00163 properties.getProperty("rtc.manager.subsystems"));
00164 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.AUTHOR"),
00165 properties.getProperty("rtc.openrtm.author"));
00166 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.RELEASE"),
00167 properties.getProperty("rtc.openrtm.release"));
00168 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.VENDOR"),
00169 properties.getProperty("rtc.openrtm.vendor"));
00170 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.VERSION"),
00171 properties.getProperty("rtc.openrtm.version"));
00172
00173
00174
00175 CPPUNIT_ASSERT(std::string("")
00176 != properties.getProperty("manager.os.name"));
00177 CPPUNIT_ASSERT(std::string("")
00178 != properties.getProperty("manager.os.release"));
00179 CPPUNIT_ASSERT(std::string("")
00180 != properties.getProperty("manager.os.version"));
00181 CPPUNIT_ASSERT(std::string("")
00182 != properties.getProperty("manager.os.arch"));
00183 CPPUNIT_ASSERT(std::string("")
00184 != properties.getProperty("manager.os.hostname"));
00185 CPPUNIT_ASSERT(std::string("")
00186 != properties.getProperty("manager.pid"));
00187 CPPUNIT_ASSERT(std::string("YES")
00188 == properties.getProperty("manager.is_master"));
00189
00190
00191
00192 argv[1] = "-a";
00193 argc = sizeof(argv) / sizeof(char*);
00194 mgrCfg.init(argc, argv);
00195 mgrCfg.configure(properties);
00196 CPPUNIT_ASSERT_EQUAL(std::string("NO"),
00197 properties.getProperty("manager.corba_servant"));
00198
00199
00200
00201 argv[1] = "-omanager.is_master:NO";
00202 argc = sizeof(argv) / sizeof(char*);
00203 mgrCfg.init(argc, argv);
00204 mgrCfg.configure(properties);
00205 CPPUNIT_ASSERT_EQUAL(std::string("NO"),
00206 properties.getProperty("manager.is_master"));
00207
00208
00209
00210 argv[1] = "-p9876";
00211 argc = sizeof(argv) / sizeof(char*);
00212 mgrCfg.init(argc, argv);
00213 mgrCfg.configure(properties);
00214 CPPUNIT_ASSERT_EQUAL(std::string(":9876"),
00215 properties.getProperty("corba.endpoints"));
00216 }
00217
00223 void test_init_default()
00224 {
00225
00226 ManagerConfigMock mgrCfg;
00227
00228
00229 mgrCfg.init(0, NULL);
00230
00231
00232 coil::Properties properties;
00233 mgrCfg.configure(properties);
00234
00235 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.COMPONENT.CONF.PATH"),
00236 properties.getProperty("rtc.component.conf.path"));
00237 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ARCH"),
00238 properties.getProperty("rtc.manager.arch"));
00239 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.DEBUG.LEVEL"),
00240 properties.getProperty("rtc.manager.debug.level"));
00241 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.LANGUAGE"),
00242 properties.getProperty("rtc.manager.language"));
00243 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.NAMESERVER"),
00244 properties.getProperty("rtc.manager.nameserver"));
00245 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OPENING_MESSAGE"),
00246 properties.getProperty("rtc.manager.opening_message"));
00247 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ORB"),
00248 properties.getProperty("rtc.manager.orb"));
00249 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.ORB.OPTIONS"),
00250 properties.getProperty("rtc.manager.orb.options"));
00251 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OS"),
00252 properties.getProperty("rtc.manager.os"));
00253 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.OS.RELEASE"),
00254 properties.getProperty("rtc.manager.os.release"));
00255 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.MANAGER.SUBSYSTEMS"),
00256 properties.getProperty("rtc.manager.subsystems"));
00257 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.AUTHOR"),
00258 properties.getProperty("rtc.openrtm.author"));
00259 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.RELEASE"),
00260 properties.getProperty("rtc.openrtm.release"));
00261 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.VENDOR"),
00262 properties.getProperty("rtc.openrtm.vendor"));
00263 CPPUNIT_ASSERT_EQUAL(std::string("DEFAULT.RTC.OPENRTM.VERSION"),
00264 properties.getProperty("rtc.openrtm.version"));
00265
00266
00267
00268 CPPUNIT_ASSERT(std::string("")
00269 != properties.getProperty("manager.os.name"));
00270 CPPUNIT_ASSERT(std::string("")
00271 != properties.getProperty("manager.os.release"));
00272 CPPUNIT_ASSERT(std::string("")
00273 != properties.getProperty("manager.os.version"));
00274 CPPUNIT_ASSERT(std::string("")
00275 != properties.getProperty("manager.os.arch"));
00276 CPPUNIT_ASSERT(std::string("")
00277 != properties.getProperty("manager.os.hostname"));
00278 CPPUNIT_ASSERT(std::string("")
00279 != properties.getProperty("manager.pid"));
00280 CPPUNIT_ASSERT(std::string("")
00281 != properties.getProperty("manager.is_master"));
00282 }
00283
00284 };
00285 };
00286
00287
00288
00289
00290 CPPUNIT_TEST_SUITE_REGISTRATION(ManagerConfig::ManagerConfigTests);
00291
00292 #ifdef LOCAL_MAIN
00293 int main(int argc, char* argv[])
00294 {
00295
00296 FORMAT format = TEXT_OUT;
00297 int target = 0;
00298 std::string xsl;
00299 std::string ns;
00300 std::string fname;
00301 std::ofstream ofs;
00302
00303 int i(1);
00304 while (i < argc)
00305 {
00306 std::string arg(argv[i]);
00307 std::string next_arg;
00308 if (i + 1 < argc) next_arg = argv[i + 1];
00309 else next_arg = "";
00310
00311 if (arg == "--text") { format = TEXT_OUT; break; }
00312 if (arg == "--xml")
00313 {
00314 if (next_arg == "")
00315 {
00316 fname = argv[0];
00317 fname += ".xml";
00318 }
00319 else
00320 {
00321 fname = next_arg;
00322 }
00323 format = XML_OUT;
00324 ofs.open(fname.c_str());
00325 }
00326 if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
00327 if ( arg == "--cerr" ) { target = 1; break; }
00328 if ( arg == "--xsl" )
00329 {
00330 if (next_arg == "") xsl = "default.xsl";
00331 else xsl = next_arg;
00332 }
00333 if ( arg == "--namespace" )
00334 {
00335 if (next_arg == "")
00336 {
00337 std::cerr << "no namespace specified" << std::endl;
00338 exit(1);
00339 }
00340 else
00341 {
00342 xsl = next_arg;
00343 }
00344 }
00345 ++i;
00346 }
00347 CppUnit::TextUi::TestRunner runner;
00348 if ( ns.empty() )
00349 runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
00350 else
00351 runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
00352 CppUnit::Outputter* outputter = 0;
00353 std::ostream* stream = target ? &std::cerr : &std::cout;
00354 switch ( format )
00355 {
00356 case TEXT_OUT :
00357 outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
00358 break;
00359 case XML_OUT :
00360 std::cout << "XML_OUT" << std::endl;
00361 outputter = new CppUnit::XmlOutputter(&runner.result(),
00362 ofs, "shift_jis");
00363 static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
00364 break;
00365 case COMPILER_OUT :
00366 outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
00367 break;
00368 }
00369 runner.setOutputter(outputter);
00370 runner.run();
00371 return 0;
00372 }
00373 #endif // MAIN
00374 #endif // ManagerConfig_cpp