Go to the documentation of this file.00001
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef PortAdmin_cpp
00049 #define PortAdmin_cpp
00050
00051 #include <cppunit/ui/text/TestRunner.h>
00052 #include <cppunit/TextOutputter.h>
00053 #include <cppunit/extensions/TestFactoryRegistry.h>
00054 #include <cppunit/extensions/HelperMacros.h>
00055 #include <cppunit/TestAssert.h>
00056
00057 #include <vector>
00058 #include <string>
00059
00060 #include <rtm/PortAdmin.h>
00061
00066 namespace PortAdmin
00067 {
00068 int g_argc;
00069 std::vector<std::string> g_argv;
00070
00076 class Logger
00077 {
00078 public:
00079 void log(const std::string& msg)
00080 {
00081 m_log.push_back(msg);
00082 }
00083
00084 int countLog(const std::string& msg)
00085 {
00086 int count = 0;
00087 for (int i = 0; i < (int) m_log.size(); ++i)
00088 {
00089 if (m_log[i] == msg) ++count;
00090 }
00091 return count;
00092 }
00093
00094 void clearLog(void)
00095 {
00096 m_log.clear();
00097 }
00098 private:
00099 std::vector<std::string> m_log;
00100 };
00106 class PortMock
00107 : public RTC::PortBase
00108 {
00109 protected:
00110 virtual RTC::ReturnCode_t publishInterfaces(RTC::ConnectorProfile&)
00111 {
00112 return RTC::RTC_OK;
00113 }
00114 virtual RTC::ReturnCode_t subscribeInterfaces(const RTC::ConnectorProfile&)
00115 {
00116 return RTC::RTC_OK;
00117 }
00118 virtual void unsubscribeInterfaces(const RTC::ConnectorProfile&)
00119 {
00120 }
00121 virtual void activateInterfaces()
00122 {
00123 if (m_logger != NULL)
00124 {
00125 m_logger->log("PortMock::activateInterfaces");
00126 }
00127 }
00128 virtual void deactivateInterfaces()
00129 {
00130 if (m_logger != NULL)
00131 {
00132 m_logger->log("PortMock::deactivateInterfaces");
00133 }
00134 }
00135 public:
00136 PortMock()
00137 {
00138 m_logger = NULL;
00139 }
00144 void setLogger(Logger* logger)
00145 {
00146 m_logger = logger;
00147 }
00148 private:
00149 Logger* m_logger;
00150
00151 };
00152
00153 class PortAdminTests
00154 : public CppUnit::TestFixture
00155 {
00156 CPPUNIT_TEST_SUITE(PortAdminTests);
00157 CPPUNIT_TEST(test_getPortList);
00158 CPPUNIT_TEST(test_getPortRef);
00159 CPPUNIT_TEST(test_getPort);
00160 CPPUNIT_TEST(test_addPort);
00161 CPPUNIT_TEST(test_registerPort);
00162 CPPUNIT_TEST(test_removePort);
00163 CPPUNIT_TEST(test_deletePortByName);
00164 CPPUNIT_TEST(test_finalizePorts);
00165 CPPUNIT_TEST(test_activatePorts);
00166 CPPUNIT_TEST(test_deactivatePorts);
00167 CPPUNIT_TEST_SUITE_END();
00168
00169 private:
00170 CORBA::ORB_ptr m_orb;
00171 PortableServer::POA_ptr m_poa;
00172
00173 public:
00174 PortAdminTests()
00175 {
00176 char* argv[g_argc];
00177 for (int i = 0; i < g_argc; i++) {
00178 argv[i] = (char *)g_argv[i].c_str();
00179 }
00180
00181 m_orb = CORBA::ORB_init(g_argc, argv);
00182 CORBA::Object_var obj = m_orb->resolve_initial_references("RootPOA");
00183 m_poa = PortableServer::POA::_narrow(obj);
00184 PortableServer::POAManager_var pman = m_poa->the_POAManager();
00185 pman->activate();
00186 }
00187
00188 ~PortAdminTests()
00189 {
00190 }
00191
00192 virtual void setUp()
00193 {
00194 sleep(1);
00195 }
00196
00197 virtual void tearDown()
00198 {
00199 }
00200
00206 void test_getPortList()
00207 {
00208 RTC::PortAdmin portAdmin(m_orb, m_poa);
00209
00210
00211 PortMock* port0 = new PortMock();
00212 port0->setName("port0");
00213 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port0));
00214
00215 PortMock* port1 = new PortMock();
00216 port1->setName("port1");
00217 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port1));
00218
00219
00220 RTC::PortServiceList* portList = portAdmin.getPortServiceList();
00221
00222
00223 RTC::PortProfile* portProf0 = (*portList)[0]->get_port_profile();
00224 CPPUNIT_ASSERT(portProf0 != NULL);
00225 CPPUNIT_ASSERT_EQUAL(std::string("port0"), std::string(portProf0->name));
00226
00227 RTC::PortProfile* portProf1 = (*portList)[1]->get_port_profile();
00228 CPPUNIT_ASSERT(portProf1 != NULL);
00229 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00230 portAdmin.removePort(*port1);
00231 portAdmin.removePort(*port0);
00232 delete port1;
00233 delete port0;
00234 }
00235
00242 void test_getPortRef()
00243 {
00244 RTC::PortAdmin portAdmin(m_orb, m_poa);
00245
00246
00247 PortMock* port0 = new PortMock();
00248 port0->setName("port0");
00249 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port0));
00250
00251 PortMock* port1 = new PortMock();
00252 port1->setName("port1");
00253 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port1));
00254
00255
00256 RTC::PortService_var portRef0 = portAdmin.getPortRef("port0");
00257 CPPUNIT_ASSERT(! CORBA::is_nil(portRef0));
00258 RTC::PortProfile* portProf0 = portRef0->get_port_profile();
00259 CPPUNIT_ASSERT_EQUAL(std::string("port0"), std::string(portProf0->name));
00260
00261 RTC::PortService_var portRef1 = portAdmin.getPortRef("port1");
00262 CPPUNIT_ASSERT(! CORBA::is_nil(portRef1));
00263 RTC::PortProfile* portProf1 = portRef1->get_port_profile();
00264 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00265
00266
00267 CPPUNIT_ASSERT(CORBA::is_nil(portAdmin.getPortRef("inexist")));
00268 delete port1;
00269 delete port0;
00270 }
00271
00277 void test_getPort()
00278 {
00279 RTC::PortAdmin portAdmin(m_orb, m_poa);
00280
00281
00282 PortMock* port0 = new PortMock();
00283 port0->setName("port0");
00284 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port0));
00285
00286 PortMock* port1 = new PortMock();
00287 port1->setName("port1");
00288 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port1));
00289
00290
00291 RTC::PortBase* portRet0 = portAdmin.getPort("port0");
00292 RTC::PortProfile* portProf0 = portRet0->get_port_profile();
00293 CPPUNIT_ASSERT_EQUAL(std::string("port0"), std::string(portProf0->name));
00294
00295 RTC::PortBase* portRet1 = portAdmin.getPort("port1");
00296 RTC::PortProfile* portProf1 = portRet1->get_port_profile();
00297 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00298 delete port1;
00299 delete port0;
00300 }
00301
00305 void test_addPort()
00306 {
00307 RTC::PortAdmin portAdmin(m_orb, m_poa);
00308
00309
00310 PortMock* port0 = new PortMock();
00311 port0->setName("port0");
00312
00313 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(*port0));
00314 CPPUNIT_ASSERT_EQUAL(false, portAdmin.addPort(*port0));
00315
00316 PortMock* port1 = new PortMock();
00317 port1->setName("port1");
00318
00319 CPPUNIT_ASSERT_EQUAL(true, portAdmin.addPort(port1->getPortRef()));
00320 CPPUNIT_ASSERT_EQUAL(false, portAdmin.addPort(port1->getPortRef()));
00321 delete port1;
00322 delete port0;
00323 }
00324
00328 void test_registerPort()
00329 {
00330 RTC::PortAdmin portAdmin(m_orb, m_poa);
00331
00332
00333 PortMock* port0 = new PortMock();
00334 port0->setName("port0");
00335
00336 portAdmin.registerPort(*port0);
00337
00338 PortMock* port1 = new PortMock();
00339 port1->setName("port1");
00340
00341 portAdmin.registerPort(port1->getPortRef());
00342
00343
00344 portAdmin.deletePort(*port0);
00345
00346
00347 RTC::PortServiceList* portList = portAdmin.getPortServiceList();
00348
00349
00350 CPPUNIT_ASSERT_EQUAL(CORBA::ULong(1), portList->length());
00351 RTC::PortProfile* portProf1 = (*portList)[0]->get_port_profile();
00352 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00353
00354
00355 const RTC::PortProfile& portProf0 = port0->getProfile();
00356 CPPUNIT_ASSERT(CORBA::is_nil(portProf0.port_ref));
00357 delete port1;
00358 delete port0;
00359 }
00360
00361
00368 void test_removePort()
00369 {
00370 RTC::PortAdmin portAdmin(m_orb, m_poa);
00371
00372
00373 PortMock* port0 = new PortMock();
00374 port0->setName("port0");
00375 portAdmin.addPort(*port0);
00376
00377 PortMock* port1 = new PortMock();
00378 port1->setName("port1");
00379 portAdmin.addPort(*port1);
00380
00381
00382 CPPUNIT_ASSERT_EQUAL(true, portAdmin.removePort(*port0));
00383 CPPUNIT_ASSERT_EQUAL(false, portAdmin.removePort(*port0));
00384
00385
00386 RTC::PortServiceList* portList = portAdmin.getPortServiceList();
00387
00388
00389 CPPUNIT_ASSERT_EQUAL(CORBA::ULong(1), portList->length());
00390 RTC::PortProfile* portProf1 = (*portList)[0]->get_port_profile();
00391 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00392
00393
00394 const RTC::PortProfile& portProf0 = port0->getProfile();
00395 CPPUNIT_ASSERT(CORBA::is_nil(portProf0.port_ref));
00396 delete port1;
00397 delete port0;
00398 }
00399
00406 void test_deletePortByName()
00407 {
00408 RTC::PortAdmin portAdmin(m_orb, m_poa);
00409
00410
00411 PortMock* port0 = new PortMock();
00412 port0->setName("port0");
00413 portAdmin.addPort(*port0);
00414
00415 PortMock* port1 = new PortMock();
00416 port1->setName("port1");
00417 portAdmin.addPort(*port1);
00418
00419
00420 portAdmin.deletePortByName("port0");
00421
00422
00423 RTC::PortServiceList* portList = portAdmin.getPortServiceList();
00424
00425
00426 CPPUNIT_ASSERT_EQUAL(CORBA::ULong(1), portList->length());
00427 RTC::PortProfile* portProf1 = (*portList)[0]->get_port_profile();
00428 CPPUNIT_ASSERT_EQUAL(std::string("port1"), std::string(portProf1->name));
00429
00430
00431 const RTC::PortProfile& portProf0 = port0->getProfile();
00432 CPPUNIT_ASSERT(CORBA::is_nil(portProf0.port_ref));
00433 delete port1;
00434 delete port0;
00435 }
00436
00443 void test_finalizePorts()
00444 {
00445 RTC::PortAdmin portAdmin(m_orb, m_poa);
00446
00447
00448 PortMock* port0 = new PortMock();
00449 port0->setName("port0");
00450 portAdmin.addPort(*port0);
00451
00452 PortMock* port1 = new PortMock();
00453 port1->setName("port1");
00454 portAdmin.addPort(*port1);
00455
00456
00457 portAdmin.finalizePorts();
00458
00459
00460 RTC::PortServiceList* portList = portAdmin.getPortServiceList();
00461
00462
00463 CPPUNIT_ASSERT_EQUAL(CORBA::ULong(0), portList->length());
00464
00465
00466 const RTC::PortProfile& portProf0 = port0->getProfile();
00467 CPPUNIT_ASSERT(CORBA::is_nil(portProf0.port_ref));
00468 const RTC::PortProfile& portProf1 = port1->getProfile();
00469 CPPUNIT_ASSERT(CORBA::is_nil(portProf1.port_ref));
00470 delete port1;
00471 delete port0;
00472 }
00478 void test_activatePorts(void)
00479 {
00480 RTC::PortAdmin portAdmin(m_orb, m_poa);
00481
00482 Logger logger;
00483
00484
00485 PortMock* port0 = new PortMock();
00486 port0->setName("port0");
00487 port0->setLogger(&logger);
00488 portAdmin.addPort(*port0);
00489
00490 PortMock* port1 = new PortMock();
00491 port1->setName("port1");
00492 port1->setLogger(&logger);
00493 portAdmin.addPort(*port1);
00494
00495 CPPUNIT_ASSERT_EQUAL(0,logger.countLog("PortMock::activateInterfaces"));
00496 portAdmin.activatePorts();
00497 CPPUNIT_ASSERT_EQUAL(2,logger.countLog("PortMock::activateInterfaces"));
00498
00499 CPPUNIT_ASSERT_EQUAL(0,logger.countLog("PortMock::deactivateInterfaces"));
00500 portAdmin.deactivatePorts();
00501 CPPUNIT_ASSERT_EQUAL(2,logger.countLog("PortMock::deactivateInterfaces"));
00502
00503 m_poa->deactivate_object(*m_poa->servant_to_id(port0));
00504 m_poa->deactivate_object(*m_poa->servant_to_id(port1));
00505 delete port1;
00506 delete port0;
00507 }
00513 void test_deactivatePorts(void)
00514 {
00515 }
00516
00517 };
00518 };
00519
00520
00521
00522
00523 CPPUNIT_TEST_SUITE_REGISTRATION(PortAdmin::PortAdminTests);
00524
00525 #ifdef LOCAL_MAIN
00526 int main(int argc, char* argv[])
00527 {
00528
00529 FORMAT format = TEXT_OUT;
00530 int target = 0;
00531 std::string xsl;
00532 std::string ns;
00533 std::string fname;
00534 std::ofstream ofs;
00535
00536 int i(1);
00537 while (i < argc)
00538 {
00539 std::string arg(argv[i]);
00540 std::string next_arg;
00541 if (i + 1 < argc) next_arg = argv[i + 1];
00542 else next_arg = "";
00543
00544 if (arg == "--text") { format = TEXT_OUT; break; }
00545 if (arg == "--xml")
00546 {
00547 if (next_arg == "")
00548 {
00549 fname = argv[0];
00550 fname += ".xml";
00551 }
00552 else
00553 {
00554 fname = next_arg;
00555 }
00556 format = XML_OUT;
00557 ofs.open(fname.c_str());
00558 }
00559 if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
00560 if ( arg == "--cerr" ) { target = 1; break; }
00561 if ( arg == "--xsl" )
00562 {
00563 if (next_arg == "") xsl = "default.xsl";
00564 else xsl = next_arg;
00565 }
00566 if ( arg == "--namespace" )
00567 {
00568 if (next_arg == "")
00569 {
00570 std::cerr << "no namespace specified" << std::endl;
00571 exit(1);
00572 }
00573 else
00574 {
00575 xsl = next_arg;
00576 }
00577 }
00578 ++i;
00579 }
00580 CppUnit::TextUi::TestRunner runner;
00581 if ( ns.empty() )
00582 runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
00583 else
00584 runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
00585 CppUnit::Outputter* outputter = 0;
00586 std::ostream* stream = target ? &std::cerr : &std::cout;
00587 switch ( format )
00588 {
00589 case TEXT_OUT :
00590 outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
00591 break;
00592 case XML_OUT :
00593 std::cout << "XML_OUT" << std::endl;
00594 outputter = new CppUnit::XmlOutputter(&runner.result(),
00595 ofs, "shift_jis");
00596 static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
00597 break;
00598 case COMPILER_OUT :
00599 outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
00600 break;
00601 }
00602 runner.setOutputter(outputter);
00603 runner.run();
00604 return 0;
00605 }
00606 #endif // MAIN
00607 #endif // PortAdmin_cpp