InPortBaseTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
12 /*
13  * $Log: InPortBaseTests.cpp,v $
14  *
15  *
16  */
17 
18 #ifndef InPortBase_cpp
19 #define InPortBase_cpp
20 
21 #include <cppunit/ui/text/TestRunner.h>
22 #include <cppunit/TextOutputter.h>
23 #include <cppunit/extensions/TestFactoryRegistry.h>
24 #include <cppunit/extensions/HelperMacros.h>
25 #include <cppunit/TestAssert.h>
26 
27 #include <rtm/idl/BasicDataTypeSkel.h>
28 #include <rtm/idl/DataPortSkel.h>
29 #include <rtm/RTC.h>
30 #include <rtm/Typename.h>
31 #include <rtm/InPortBase.h>
32 #include <rtm/CdrBufferBase.h>
33 #include <rtm/PortAdmin.h>
34 #include <rtm/InPortConnector.h>
35 #include <rtm/InPortProvider.h>
36 #include <rtm/InPortConsumer.h>
37 #include <rtm/OutPortProvider.h>
38 #include <rtm/OutPortConsumer.h>
39 #include <rtm/CorbaConsumer.h>
41 #include <rtm/InPortProvider.h>
42 #include <rtm/ConnectorListener.h>
43 #include <rtm/OutPort.h>
44 #include <rtm/OutPortBase.h>
47 
48 // ConnectorDataListenerType count
49 #define cdl_len 10
50 // ConnectorListenerType count
51 #define cl_len 7
52 
53 namespace InPortBase
54 {
55 
56  // ConnectorDataListenerType
57  static const char* str_cdl[] =
58  {
59  "ON_BUFFER_WRITE",
60  "ON_BUFFER_FULL",
61  "ON_BUFFER_WRITE_TIMEOUT",
62  "ON_BUFFER_OVERWRITE",
63  "ON_BUFFER_READ",
64  "ON_SEND",
65  "ON_RECEIVED",
66  "ON_RECEIVER_FULL",
67  "ON_RECEIVER_TIMEOUT",
68  "ON_RECEIVER_ERROR"
69  };
70 
71  // ConnectorListenerType
72  static const char* str_cl[] =
73  {
74  "ON_BUFFER_EMPTY",
75  "ON_BUFFER_READ_TIMEOUT",
76  "ON_SENDER_EMPTY",
77  "ON_SENDER_TIMEOUT",
78  "ON_SENDER_ERROR",
79  "ON_CONNECT",
80  "ON_DISCONNECT"
81  };
82 
83  static int cdl_count;
84  static int cl_count;
85 
87  : public RTC::ConnectorDataListenerT<RTC::TimedLong>
88  {
89  public:
90  DataListener(const char* name) : m_name(name)
91  {
92  ++cdl_count;
93  }
94  virtual ~DataListener()
95  {
96  --cdl_count;
97  }
98 
99  virtual void operator()(const RTC::ConnectorInfo& info,
100  const RTC::TimedLong& data)
101  {
102  std::cout << "------------------------------" << std::endl;
103  std::cout << "Data Listener: " << m_name << std::endl;
104  std::cout << "Profile::name: " << info.name << std::endl;
105  std::cout << "------------------------------" << std::endl;
106  };
107  std::string m_name;
108  };
109 
110 
112  : public RTC::ConnectorListener
113  {
114  public:
115  ConnListener(const char* name) : m_name(name)
116  {
117  ++cl_count;
118  }
119  virtual ~ConnListener()
120  {
121  --cl_count;
122  }
123 
124  virtual void operator()(const RTC::ConnectorInfo& info)
125  {
126  std::cout << "------------------------------" << std::endl;
127  std::cout << "Connector Listener: " << m_name << std::endl;
128  std::cout << "Profile::name: " << info.name << std::endl;
129  std::cout << "------------------------------" << std::endl;
130  };
131  std::string m_name;
132  };
133 
139  class Logger
140  {
141  public:
142  void log(const std::string& msg)
143  {
144  m_log.push_back(msg);
145  }
146 
147  int countLog(const std::string& msg)
148  {
149  int count = 0;
150  for (int i = 0; i < (int) m_log.size(); ++i)
151  {
152  if (m_log[i] == msg) ++count;
153  }
154  return count;
155  }
156 
157  void clearLog(void)
158  {
159  m_log.clear();
160  }
161  private:
162  std::vector<std::string> m_log;
163  };
164 
170  template <class DataType>
172  : public RTC::BufferBase<DataType>
173  {
174  public:
176  RingBufferMock(long int length = 8)
177  {
178  m_logger = NULL;
179  logger.log("RingBufferMock::Constructor");
180  m_read_return_value = BUFFER_OK;
181  }
182  virtual ~RingBufferMock(void)
183  {
184  }
185 
186 
192  {
193  m_read_return_value = value;
194  }
199  virtual void init(const coil::Properties& prop)
200  {
201  }
206  virtual size_t length(void) const
207  {
208  return 0;
209  }
214  virtual ReturnCode length(size_t n)
215  {
216  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
217  }
222  virtual ReturnCode reset()
223  {
224  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
225  }
230  virtual DataType* wptr(long int n = 0)
231  {
232  return &m_data;
233  }
238  virtual ReturnCode advanceWptr(long int n = 1)
239  {
240  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
241  }
246  virtual ReturnCode put(const DataType& value)
247  {
248  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
249  }
254  virtual ReturnCode write(const DataType& value,
255  long int sec = -1, long int nsec = -1)
256  {
257  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
258  }
263  virtual size_t writable() const
264  {
265  return 0;
266  }
271  virtual bool full(void) const
272  {
273  return true;
274  }
279  virtual DataType* rptr(long int n = 0)
280  {
281  return &m_data;
282  }
287  virtual ReturnCode advanceRptr(long int n = 1)
288  {
289  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
290  }
295  virtual ReturnCode get(DataType& value)
296  {
297  return ::RTC::BufferStatus::BUFFER_OK; //BUFFER_OK;
298  }
303  virtual DataType& get()
304  {
305  return m_data;
306  }
311  virtual ReturnCode read(DataType& value,
312  long int sec = -1, long int nsec = -1)
313  {
314  if (m_logger != NULL)
315  {
316  m_logger->log("RingBufferMock::read");
317  }
318  logger.log("RingBufferMock::read");
319  return m_read_return_value; //BUFFER_OK;
320  }
325  virtual size_t readable() const
326  {
327  return 0;
328  }
333  virtual bool empty(void) const
334  {
335  return true;
336  }
342  {
343  m_logger = logger;
344  }
345 
346  static Logger logger;
347  private:
348  DataType m_data;
349  std::vector<DataType> m_buffer;
352  };
353 
354  template <class DataType>
357 
364  : public RTC::InPortProvider,
365  public virtual POA_OpenRTM::InPortCdr,
366  public virtual PortableServer::RefCountServantBase
367  {
368 
369  public:
371  {
372  m_logger = NULL;
373  // PortProfile setting
374  setInterfaceType("corba_cdr");
375 
376  // ConnectorProfile setting
377  m_objref = this->_this();
378 
379  // set InPort's reference
380  CORBA::ORB_ptr orb = ::RTC::Manager::instance().getORB();
382  push_back(m_properties,
383  NVUtil::newNV("dataport.corba_cdr.inport_ior",
384  orb->object_to_string(m_objref.in())));
386  push_back(m_properties,
387  NVUtil::newNV("dataport.corba_cdr.inport_ref",
388  m_objref));
389  }
391  {
392  PortableServer::ObjectId_var oid;
393  oid = _default_POA()->servant_to_id(this);
394  _default_POA()->deactivate_object(oid);
395  }
401  {
402  if (m_logger != NULL)
403  {
404  m_logger->log("InPortCorbaCdrProviderMock::setBuffer");
405  }
406  }
411  ::OpenRTM::PortStatus put(const ::OpenRTM::CdrData& data)
412  throw (CORBA::SystemException)
413  {
414  return ::OpenRTM::PORT_OK;
415  }
421  {
422  if (m_logger != NULL)
423  {
424  m_logger->log("InPortCorbaCdrProviderMock::init");
425  }
426  }
431  RTC::InPortConsumer::ReturnCode put(const cdrMemoryStream& data)
432  {
433  return PORT_OK;
434  }
440  {
441  return;
442  }
443 
448  bool subscribeInterface(const SDOPackage::NVList& properties)
449  {
450 
451  return true;;
452  }
453 
458  void unsubscribeInterface(const SDOPackage::NVList& properties)
459  {
460  }
461 
462 
467 /*
468  bool publishInterface(SDOPackage::NVList& prop)
469  {
470  return true;
471  }
472 */
478  {
479  m_logger = logger;
480  }
481 
483  RTC::ConnectorListeners* listeners)
484  {
485  // m_profile = info;
486  // m_listeners = listeners;
487  }
489  {
490  // m_connector = connector;
491  }
492 
493  private:
495  ::OpenRTM::InPortCdr_var m_objref;
496 
497  };
498 
505  : public RTC::OutPortConsumer,
506  public RTC::CorbaConsumer< ::OpenRTM::OutPortCdr >
507  {
508 
509  public:
511  {
512  m_logger = NULL;
513  }
515  {
516  }
522  {
523  if (m_logger != NULL)
524  {
525  m_logger->log("OutPortCorbaCdrConsumerMock::setBuffer");
526  }
527  }
532  ::OpenRTM::PortStatus put(const ::OpenRTM::CdrData& data)
533  throw (CORBA::SystemException)
534  {
535  return ::OpenRTM::PORT_OK;
536  }
542  {
543  if (m_logger != NULL)
544  {
545  m_logger->log("OutPortCorbaCdrConsumerMock::init");
546  }
547  }
552  RTC::OutPortConsumer::ReturnCode put(const cdrMemoryStream& data)
553  {
554  return PORT_OK;
555  }
561  {
562  return;
563  }
564 
569  bool subscribeInterface(const SDOPackage::NVList& properties)
570  {
571 
572  return true;;
573  }
574 
579  void unsubscribeInterface(const SDOPackage::NVList& properties)
580  {
581  }
586  virtual ReturnCode get(cdrMemoryStream& data)
587  {
588  return PORT_OK;
589  }
590 
592  RTC::ConnectorListeners* listeners)
593  {
594  // m_profile = info;
595  // m_listeners = listeners;
596  }
597 
603  {
604  m_logger = logger;
605  }
606  private:
608 
609  };
610 
616  : public RTC::InPortBase
617  {
618  public:
623  InPortBaseMock(const char* name, const char* data_type)
624  : RTC::InPortBase(name , data_type)
625  {
626  rtclog.setLevel("PARANOID");
627  }
632  virtual ~InPortBaseMock()
633  {
634  }
640  {
641  return m_thebuffer;
642  }
648  {
649  return m_providerTypes;
650  }
656  {
657  return m_consumerTypes;
658  }
664  {
665  initConsumers();
666  }
672  {
673  initProviders();
674  }
680  {
681  m_singlebuffer = true;
682  }
688  {
689  m_singlebuffer = false;
690  }
696  {
697  return m_connectors;
698  }
703  virtual RTC::ReturnCode_t publishInterfaces_public(RTC::ConnectorProfile& connector_profile)
704  {
706  return ret;
707  }
712  virtual RTC::ReturnCode_t subscribeInterfaces_public(RTC::ConnectorProfile& connector_profile)
713  {
715  return ret;
716  }
722  createConnector_public(RTC::ConnectorProfile& cprof,
725  {
726  return RTC::InPortBase::createConnector(cprof, prop, provider);
727  }
732  RTC::InPortProvider* createProvider_public(RTC::ConnectorProfile& cprof,
734  {
735  return RTC::InPortBase::createProvider(cprof, prop);
736  }
742  {
743  return m_properties;
744  }
750  {
751  RTC::InPortBase::init(prop);
752  }
756  bool read()
757  {
758  return true;
759  }
760  };
761 
762  template <class DataType>
764  : public RTC::OutPort<DataType>
765  {
766  public:
767  OutPortMock(const char* name, DataType& value)
768  : RTC::OutPort<DataType>(name, value)
769  {
770  }
771 
772  virtual ~OutPortMock()
773  {
774  }
775  };
776 
778  : public CppUnit::TestFixture
779  {
780  CPPUNIT_TEST_SUITE(InPortBaseTests);
781 
782  CPPUNIT_TEST(test_constructor);
783  CPPUNIT_TEST(test_init);
784  CPPUNIT_TEST(test_init2); //multibuffer
785  CPPUNIT_TEST(test_init3); //Buffers are not registered in Factory.
786  CPPUNIT_TEST(test_initProviders);
787  CPPUNIT_TEST(test_initProviders2);//Providers are not registered in Factory.
788  CPPUNIT_TEST(test_initConsumers);
789  CPPUNIT_TEST(test_initConsumers2);//Consumers are not registered in Factory.
790  CPPUNIT_TEST(test_activateInterfaces_deactivateInterfaces);
791  CPPUNIT_TEST(test_publishInterfaces);
792  CPPUNIT_TEST(test_publishInterfaces2);//dataport.dataflow_type is "pull"
793  CPPUNIT_TEST(test_publishInterfaces3);//dataport.dataflow_type is "else"
794  CPPUNIT_TEST(test_publishInterfaces4);//Provider is deleted.
795  CPPUNIT_TEST(test_publishInterfaces5);
796  CPPUNIT_TEST(test_subscribeInterfaces);
797  CPPUNIT_TEST(test_subscribeInterfaces2);//dataport.dataflow_type is "push"
798  CPPUNIT_TEST(test_subscribeInterfaces3);//dataport.dataflow_type is "else"
799  CPPUNIT_TEST(test_subscribeInterfaces4);//Consumer is deleted.
800  CPPUNIT_TEST(test_subscribeInterfaces5);//Buffer is deleted.
801  CPPUNIT_TEST(test_createConnector);
802  CPPUNIT_TEST(test_createConnector2);
803  CPPUNIT_TEST(test_ConnectorListener);
804 
805  CPPUNIT_TEST_SUITE_END();
806 
807  private:
808  CORBA::ORB_ptr m_pORB;
809  PortableServer::POA_ptr m_pPOA;
811  DataListener *m_datalisteners[cdl_len];
812  ConnListener *m_connlisteners[cl_len];
813 
814  public:
815 
820  {
821  int argc(0);
822  char** argv(NULL);
823  m_pORB = CORBA::ORB_init(argc, argv);
824  m_pPOA = PortableServer::POA::_narrow(
825  m_pORB->resolve_initial_references("RootPOA"));
826  m_pPOA->the_POAManager()->activate();
827  }
828 
833  {
834  }
835 
839  virtual void setUp()
840  {
841  //既に "corba_cdr" で登録されている場合は削除する。
842  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
843  {
844  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
845  }
846  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
848  addFactory("corba_cdr",
853 
854  //既に "corba_cdr" で登録されている場合は削除する。
855  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
856  {
857  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
858  }
859  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
861  addFactory("corba_cdr",
866 
867  //既に "ring_buffer" で登録されている場合は削除する。
868  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
869  {
870  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
871  }
872  //"ring_buffer" に CdrRingBufferMock を登録する。
874  addFactory("ring_buffer",
875  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
876  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
877  }
878 
882  virtual void tearDown()
883  {
884  }
885 
891  {
892  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
893 
894  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
895  portAdmin.registerPort(inport);
896 
897  RTC::PortProfile profile = inport.getPortProfile();
898  coil::Properties prop = NVUtil::toProperties(profile.properties);
899  CPPUNIT_ASSERT_EQUAL(std::string("DataInPort"), prop["port.port_type"] );
900  CPPUNIT_ASSERT_EQUAL(std::string(toTypename<RTC::TimedFloat>()),
901  prop["dataport.data_type"] );
902  CPPUNIT_ASSERT_EQUAL(std::string("Any"),
903  prop["dataport.subscription_type"]);
904 
905  portAdmin.deletePort(inport);
906 
907 
908  }
913  void test_init()
914  {
915  //
916  //Condition
917  // m_singlebuffer is true(singlebuffer).
918  // m_thebuffer is CdrRingBufferMock.
919  //Check
920  // Check that buffer is generated.
921  //
922  //既に "corba_cdr" で登録されている場合は削除する。
923  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
924  {
925  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
926  }
927  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
929  addFactory("corba_cdr",
934 
935  //既に "corba_cdr" で登録されている場合は削除する。
936  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
937  {
938  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
939  }
940  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
942  addFactory("corba_cdr",
947 
948  //既に "ring_buffer" で登録されている場合は削除する。
949  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
950  {
951  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
952  }
953 
954  //"ring_buffer" に CdrRingBufferMock を登録する。
956  addFactory("ring_buffer",
957  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
958  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
959 
960 
961  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
962 
963  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
964  portAdmin.registerPort(inport);
965 
966  CPPUNIT_ASSERT(0==inport.getThebuffer());
967  RTC::PortProfile profile = inport.getPortProfile();
968  coil::Properties prop = NVUtil::toProperties(profile.properties);
969  CPPUNIT_ASSERT_EQUAL(std::string(""),
970  prop["dataport.dataflow_type"]);
971  CPPUNIT_ASSERT_EQUAL(std::string(""),
972  prop["dataport.interface_type"]);
973 
974  coil::vstring pstr = inport.getProviderTypes();
975  CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size());
976  coil::vstring cstr = inport.get_m_consumerTypes();
977  CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size());
979  CPPUNIT_ASSERT_EQUAL(0,
980  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
981 
982  coil::Properties dummy;
983  inport.init(dummy);
984 
985  //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0!=inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(1, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init2() { // //Condition // m_singlebuffer is false(multibuffer). // m_thebuffer is CdrRingBufferMock. //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); inport.setMultibuffer(); coil::Properties dummy; inport.init(dummy); CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init3() { // //Condition // m_singlebuffer is true(singlebuffer). // m_thebuffer is unset.(The buffer is not registered in Factory.) //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); coil::Properties dummy; inport.init(dummy); //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
986  CPPUNIT_ASSERT(0!=inport.getThebuffer());
987  CPPUNIT_ASSERT_EQUAL(1,
988  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
989 
990  profile = inport.getPortProfile();
991  prop = NVUtil::toProperties(profile.properties);
992 
993  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init2() { // //Condition // m_singlebuffer is false(multibuffer). // m_thebuffer is CdrRingBufferMock. //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); inport.setMultibuffer(); coil::Properties dummy; inport.init(dummy); CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init3() { // //Condition // m_singlebuffer is true(singlebuffer). // m_thebuffer is unset.(The buffer is not registered in Factory.) //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); coil::Properties dummy; inport.init(dummy); //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
994  CPPUNIT_ASSERT_EQUAL(std::string("push,pull"),
995  prop["dataport.dataflow_type"]);
996  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
997  prop["dataport.interface_type"]);
998 
999  //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init2() { // //Condition // m_singlebuffer is false(multibuffer). // m_thebuffer is CdrRingBufferMock. //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); inport.setMultibuffer(); coil::Properties dummy; inport.init(dummy); CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init3() { // //Condition // m_singlebuffer is true(singlebuffer). // m_thebuffer is unset.(The buffer is not registered in Factory.) //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); coil::Properties dummy; inport.init(dummy); //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1000  pstr = inport.getProviderTypes();
1001  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1002  pstr[0]);
1003  cstr = inport.get_m_consumerTypes();
1004  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1005  cstr[0]);
1006 
1007  portAdmin.deletePort(inport);
1008  }
1013  void test_init2()
1014  {
1015  //
1016  //Condition
1017  // m_singlebuffer is false(multibuffer).
1018  // m_thebuffer is CdrRingBufferMock.
1019  //Check
1020  // Check that buffer is not generated.
1021  //
1022  //既に "corba_cdr" で登録されている場合は削除する。
1023  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
1024  {
1025  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
1026  }
1027  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1029  addFactory("corba_cdr",
1034 
1035  //既に "corba_cdr" で登録されている場合は削除する。
1036  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
1037  {
1038  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
1039  }
1040  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1042  addFactory("corba_cdr",
1047 
1048  //既に "ring_buffer" で登録されている場合は削除する。
1049  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
1050  {
1051  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
1052  }
1053  //"ring_buffer" に CdrRingBufferMock を登録する。
1055  addFactory("ring_buffer",
1056  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
1057  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
1058  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
1059 
1060  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
1061  portAdmin.registerPort(inport);
1062 
1063  CPPUNIT_ASSERT(0==inport.getThebuffer());
1064  RTC::PortProfile profile = inport.getPortProfile();
1065  coil::Properties prop = NVUtil::toProperties(profile.properties);
1066  CPPUNIT_ASSERT_EQUAL(std::string(""),
1067  prop["dataport.dataflow_type"]);
1068  CPPUNIT_ASSERT_EQUAL(std::string(""),
1069  prop["dataport.interface_type"]);
1070 
1071  coil::vstring pstr = inport.getProviderTypes();
1072  CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size());
1073  coil::vstring cstr = inport.get_m_consumerTypes();
1074  CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size());
1076  CPPUNIT_ASSERT_EQUAL(0,
1077  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
1078 
1079  inport.setMultibuffer();
1080  coil::Properties dummy;
1081  inport.init(dummy);
1082 
1083  CPPUNIT_ASSERT(0==inport.getThebuffer());
1084  CPPUNIT_ASSERT_EQUAL(0,
1085  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
1086 
1087  profile = inport.getPortProfile();
1088  prop = NVUtil::toProperties(profile.properties);
1089 
1090  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init3() { // //Condition // m_singlebuffer is true(singlebuffer). // m_thebuffer is unset.(The buffer is not registered in Factory.) //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); coil::Properties dummy; inport.init(dummy); //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1091  CPPUNIT_ASSERT_EQUAL(std::string("push,pull"),
1092  prop["dataport.dataflow_type"]);
1093  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1094  prop["dataport.interface_type"]);
1095 
1096  //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief init()メソッドのテスト * */ void test_init3() { // //Condition // m_singlebuffer is true(singlebuffer). // m_thebuffer is unset.(The buffer is not registered in Factory.) //Check // Check that buffer is not generated. // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); CPPUNIT_ASSERT(0==inport.getThebuffer()); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); CdrRingBufferMock::logger.clearLog(); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); coil::Properties dummy; inport.init(dummy); //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1097  pstr = inport.getProviderTypes();
1098  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1099  pstr[0]);
1100  cstr = inport.get_m_consumerTypes();
1101  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1102  cstr[0]);
1103 
1104  portAdmin.deletePort(inport);
1105  }
1110  void test_init3()
1111  {
1112  //
1113  //Condition
1114  // m_singlebuffer is true(singlebuffer).
1115  // m_thebuffer is unset.(The buffer is not registered in Factory.)
1116  //Check
1117  // Check that buffer is not generated.
1118  //
1119  //既に "corba_cdr" で登録されている場合は削除する。
1120  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
1121  {
1122  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
1123  }
1124  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1126  addFactory("corba_cdr",
1131 
1132  //既に "corba_cdr" で登録されている場合は削除する。
1133  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
1134  {
1135  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
1136  }
1137  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1139  addFactory("corba_cdr",
1144 
1145  //既に "ring_buffer" で登録されている場合は削除する。
1146  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
1147  {
1148  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
1149  }
1150 
1151  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
1152 
1153  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
1154  portAdmin.registerPort(inport);
1155 
1156  CPPUNIT_ASSERT(0==inport.getThebuffer());
1157  RTC::PortProfile profile = inport.getPortProfile();
1158  coil::Properties prop = NVUtil::toProperties(profile.properties);
1159  CPPUNIT_ASSERT_EQUAL(std::string(""),
1160  prop["dataport.dataflow_type"]);
1161  CPPUNIT_ASSERT_EQUAL(std::string(""),
1162  prop["dataport.interface_type"]);
1163 
1164  coil::vstring pstr = inport.getProviderTypes();
1165  CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size());
1166  coil::vstring cstr = inport.get_m_consumerTypes();
1167  CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size());
1169  CPPUNIT_ASSERT_EQUAL(0,
1170  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
1171 
1172  coil::Properties dummy;
1173  inport.init(dummy);
1174 
1175  //m_singlebufferがtrueの場合m_thebufferが取得される CPPUNIT_ASSERT(0==inport.getThebuffer()); CPPUNIT_ASSERT_EQUAL(0, CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor")); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1176  CPPUNIT_ASSERT(0==inport.getThebuffer());
1177  CPPUNIT_ASSERT_EQUAL(0,
1178  CdrRingBufferMock::logger.countLog("RingBufferMock::Constructor"));
1179 
1180  profile = inport.getPortProfile();
1181  prop = NVUtil::toProperties(profile.properties);
1182 
1183  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push,pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1184  CPPUNIT_ASSERT_EQUAL(std::string("push,pull"),
1185  prop["dataport.dataflow_type"]);
1186  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1187  prop["dataport.interface_type"]);
1188 
1189  //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * */ void test_initProviders() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1190  pstr = inport.getProviderTypes();
1191  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1192  pstr[0]);
1193  cstr = inport.get_m_consumerTypes();
1194  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1195  cstr[0]);
1196 
1197 
1198  portAdmin.deletePort(inport);
1199  }
1205  {
1206  //既に "corba_cdr" で登録されている場合は削除する。
1207  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
1208  {
1209  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
1210  }
1211  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1213  addFactory("corba_cdr",
1218 
1219  //既に "ring_buffer" で登録されている場合は削除する。
1220  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
1221  {
1222  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
1223  }
1224 
1225  //既に "corba_cdr" で登録されている場合は削除する。
1226  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
1227  {
1228  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
1229  }
1230  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1232  addFactory("corba_cdr",
1237 
1238  //"ring_buffer" に CdrRingBufferMock を登録する。
1240  addFactory("ring_buffer",
1241  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
1242  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
1243 
1244 
1245  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
1246 
1247  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
1248  portAdmin.registerPort(inport);
1249 
1250  RTC::PortProfile profile = inport.getPortProfile();
1251  coil::Properties prop = NVUtil::toProperties(profile.properties);
1252  CPPUNIT_ASSERT_EQUAL(std::string(""),
1253  prop["dataport.dataflow_type"]);
1254  CPPUNIT_ASSERT_EQUAL(std::string(""),
1255  prop["dataport.interface_type"]);
1256 
1257  coil::vstring pstr = inport.getProviderTypes();
1258  CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size());
1259  inport.initProviders_public();
1260 
1261 
1262  profile = inport.getPortProfile();
1263  prop = NVUtil::toProperties(profile.properties);
1264 
1265  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("push"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1266  CPPUNIT_ASSERT_EQUAL(std::string("push"),
1267  prop["dataport.dataflow_type"]);
1268  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1269  prop["dataport.interface_type"]);
1270 
1271  //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0!= pstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), pstr[0]); portAdmin.deletePort(inport); } /*! * @brief initProviders()メソッドのテスト * The provider is not registered in Factory. * */ void test_initProviders2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring pstr = inport.getProviderTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size()); inport.initProviders_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1272  pstr = inport.getProviderTypes();
1273  CPPUNIT_ASSERT((size_t)0!= pstr.size());
1274  CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"),
1275  pstr[0]);
1276 
1277  portAdmin.deletePort(inport);
1278  }
1285  {
1286  //既に "corba_cdr" で登録されている場合は削除する。
1287  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
1288  {
1289  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
1290  }
1291 
1292  //既に "corba_cdr" で登録されている場合は削除する。
1293  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
1294  {
1295  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
1296  }
1297  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1299  addFactory("corba_cdr",
1304 
1305  //既に "ring_buffer" で登録されている場合は削除する。
1306  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
1307  {
1308  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
1309  }
1310  //"ring_buffer" に CdrRingBufferMock を登録する。
1312  addFactory("ring_buffer",
1313  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
1314  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
1315 
1316 
1317  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
1318 
1319  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
1320  portAdmin.registerPort(inport);
1321 
1322  RTC::PortProfile profile = inport.getPortProfile();
1323  coil::Properties prop = NVUtil::toProperties(profile.properties);
1324  CPPUNIT_ASSERT_EQUAL(std::string(""),
1325  prop["dataport.dataflow_type"]);
1326  CPPUNIT_ASSERT_EQUAL(std::string(""),
1327  prop["dataport.interface_type"]);
1328 
1329  coil::vstring pstr = inport.getProviderTypes();
1330  CPPUNIT_ASSERT_EQUAL((size_t)0, pstr.size());
1331  inport.initProviders_public();
1332 
1333 
1334  profile = inport.getPortProfile();
1335  prop = NVUtil::toProperties(profile.properties);
1336 
1337  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1338  CPPUNIT_ASSERT_EQUAL(std::string(""),
1339  prop["dataport.dataflow_type"]);
1340  CPPUNIT_ASSERT_EQUAL(std::string(""),
1341  prop["dataport.interface_type"]);
1342 
1343  //ProviderTypes,ConsumerTypesが取得される pstr = inport.getProviderTypes(); CPPUNIT_ASSERT((size_t)0== pstr.size()); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces5(void) { // //BufferなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0!= connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief createConnector()メソッドのテスト * */ void test_createConnector2(void) { InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedDouble>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; coil::Properties prop(inport.properties()); prop.setProperty("InPortBaseTests","bad_alloc"); RTC::InPortProvider* provider = new InPortCorbaCdrProviderMock(); RTC::InPortConnector* connector = inport.createConnector_public(prof, prop, provider); CPPUNIT_ASSERT(0 != connector); portAdmin.deletePort(inport); // delete provider; } /*! * @brief addConnectorDataListener(), removeConnectorDataListener(), addConnectorListener(), removeConnectorListener(), isLittleEndian(), connect() メソッドのテスト * */ void test_ConnectorListener(void) { RTC::TimedLong tdl; OutPortMock<RTC::TimedLong> outport("OutPort", tdl); coil::Properties dummy; outport.init(dummy); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>, ::coil::Destructor< ::RTC::InPortProvider, ::RTC::InPortCorbaCdrProvider>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProvider を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>, ::coil::Destructor< ::RTC::OutPortConsumer, ::RTC::OutPortCorbaCdrConsumer>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedLong>()); inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("connectTest0"); prof.ports.length(2); prof.ports[0] = inport.get_port_profile()->port_ref; prof.ports[1] = outport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "flush")); //ConnectorDataListeners settting for (int i(0); i<cdl_len; ++i) { m_datalisteners[i] = new DataListener(str_cdl[i]); } //ConnectorListeners settting for (int i(0); i<cl_len; ++i) { m_connlisteners[i] = new ConnListener(str_cl[i]); } // addConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.addConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i], true); } // addConnectorListener() for (int i(0); i<cl_len; ++i) { inport.addConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i], true); } // Listener add count check CPPUNIT_ASSERT_EQUAL(10, cdl_count); CPPUNIT_ASSERT_EQUAL(7, cl_count); inport.publishInterfaces_public(prof); // connect() RTC::ReturnCode_t ret; ret = inport.connect(prof); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); // isLittleEndian() // little set & check bool bret = inport.isLittleEndian(); CPPUNIT_ASSERT( bret ); tdl.data = 100; outport.write(tdl); inport.activateInterfaces(); inport.deactivateInterfaces(); ret = inport.disconnect_all(); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK, ret); portAdmin.deletePort(inport); // removeConnectorDataListener() for (int i(0); i<cdl_len; ++i) { inport.removeConnectorDataListener((RTC::ConnectorDataListenerType)i, m_datalisteners[i]); } // removeConnectorListener() for (int i(0); i<cl_len; ++i) { inport.removeConnectorListener((RTC::ConnectorListenerType)i, m_connlisteners[i]); } // Listener remove count check CPPUNIT_ASSERT_EQUAL(0, cdl_count); CPPUNIT_ASSERT_EQUAL(0, cl_count); } }; }; // namespace OutPortBase /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(InPortBase::InPortBaseTests); #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 // OutPortBase_cpp
1344  pstr = inport.getProviderTypes();
1345  CPPUNIT_ASSERT((size_t)0== pstr.size());
1346 
1347  portAdmin.deletePort(inport);
1348  }
1354  {
1355  //既に "corba_cdr" で登録されている場合は削除する。
1356  if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") )
1357  {
1358  RTC::InPortProviderFactory::instance().removeFactory("corba_cdr");
1359  }
1360  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1362  addFactory("corba_cdr",
1367 
1368  //既に "corba_cdr" で登録されている場合は削除する。
1369  if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") )
1370  {
1371  RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr");
1372  }
1373  //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。
1375  addFactory("corba_cdr",
1380 
1381  //既に "ring_buffer" で登録されている場合は削除する。
1382  if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") )
1383  {
1384  RTC::CdrBufferFactory::instance().removeFactory("ring_buffer");
1385  }
1386  //"ring_buffer" に CdrRingBufferMock を登録する。
1388  addFactory("ring_buffer",
1389  coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>,
1390  coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>);
1391 
1392  InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>());
1393 
1394  RTC::PortAdmin portAdmin(m_pORB,m_pPOA);
1395  portAdmin.registerPort(inport);
1396 
1397  RTC::PortProfile profile = inport.getPortProfile();
1398  coil::Properties prop = NVUtil::toProperties(profile.properties);
1399  CPPUNIT_ASSERT_EQUAL(std::string(""),
1400  prop["dataport.dataflow_type"]);
1401  CPPUNIT_ASSERT_EQUAL(std::string(""),
1402  prop["dataport.interface_type"]);
1403 
1404  coil::vstring cstr = inport.get_m_consumerTypes();
1405  CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size());
1406 
1407  inport.initConsumers_public();
1408 
1409  profile = inport.getPortProfile();
1410  prop = NVUtil::toProperties(profile.properties);
1411 
1412  //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string("pull"), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0!= cstr.size()); CPPUNIT_ASSERT_EQUAL(std::string("corba_cdr"), cstr[0]); portAdmin.deletePort(inport); } /*! * @brief initConsumers()メソッドのテスト * */ void test_initConsumers2() { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::PortProfile profile = inport.getPortProfile(); coil::Properties prop = NVUtil::toProperties(profile.properties); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); coil::vstring cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT_EQUAL((size_t)0, cstr.size()); inport.initConsumers_public(); profile = inport.getPortProfile(); prop = NVUtil::toProperties(profile.properties); //getPortProfileのpropertiesに以下が追加される CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.dataflow_type"]); CPPUNIT_ASSERT_EQUAL(std::string(""), prop["dataport.interface_type"]); //ProviderTypes,ConsumerTypesが取得される cstr = inport.get_m_consumerTypes(); CPPUNIT_ASSERT((size_t)0== cstr.size()); portAdmin.deletePort(inport); } /*! * @brief activateInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_activateInterfaces_deactivateInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); inport.publishInterfaces_public(prof); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); inport.publishInterfaces_public(prof); // getConnectorProfiles() RTC::ConnectorInfoList cilist = inport.getConnectorProfiles(); CPPUNIT_ASSERT(cilist.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(cilist[0].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(cilist[0].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[0].ports.size()); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(cilist[1].id)); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(cilist[1].name)); CPPUNIT_ASSERT_EQUAL((size_t)1, cilist[1].ports.size()); // getConnectorIds() coil::vstring ids = inport.getConnectorIds(); CPPUNIT_ASSERT(ids.size() == 2); CPPUNIT_ASSERT_EQUAL(std::string("id0"), std::string(ids[0])); CPPUNIT_ASSERT_EQUAL(std::string("id1"), std::string(ids[1])); // getConnectorNames() coil::vstring names = inport.getConnectorNames(); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest0"), std::string(names[0])); CPPUNIT_ASSERT_EQUAL(std::string("InPortBaseTest1"), std::string(names[1])); // getConnectorById() RTC::InPortConnector* ic = inport.getConnectorById("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorById("id0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorById("id1"); CPPUNIT_ASSERT(ic != 0); // getConnectorByName() ic = inport.getConnectorByName("unknown"); CPPUNIT_ASSERT(ic == 0); ic = inport.getConnectorByName("InPortBaseTest0"); CPPUNIT_ASSERT(ic != 0); ic = inport.getConnectorByName("InPortBaseTest1"); CPPUNIT_ASSERT(ic != 0); // getConnectorProfileById() RTC::ConnectorInfo info; bool bret = inport.getConnectorProfileById("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileById("id0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileById("id1", info); CPPUNIT_ASSERT( bret ); // getConnectorProfileByName() bret = inport.getConnectorProfileByName("unknown", info); CPPUNIT_ASSERT( !bret ); bret = inport.getConnectorProfileByName("InPortBaseTest0", info); CPPUNIT_ASSERT( bret ); bret = inport.getConnectorProfileByName("InPortBaseTest1", info); CPPUNIT_ASSERT( bret ); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); std::vector<RTC::InPortConnector*> list = inport.get_m_connectors(); inport.activateInterfaces(); inport.deactivateInterfaces(); portAdmin.deletePort(inport); ic = NULL; delete ic; } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでpublisherInterfaceをコール * * */ void test_publishInterfaces2(void) { // //dataport.dataflow_typeがpullでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces(),deactivateInterfaces()メソッドのテスト * */ void test_publishInterfaces4(void) { // //ProviderなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief publishInterfaces()メソッドのテスト * */ void test_publishInterfaces5(void) { // //BufferなしでpublisherInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.publishInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces(void) { //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "pull")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(1,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); prof.connector_id = "id1"; prof.name = CORBA::string_dup("InPortBaseTest1"); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(2,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_OK,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * dataport.dataflow_typeがpullでsubscribeInterfaceをコール * */ void test_subscribeInterfaces2(void) { // //dataport.dataflow_typeがpullでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "push")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::RTC_ERROR,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces3(void) { // //dataport.dataflow_typeが不正な状態でsubscrtibeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::OutPortConsumerFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>, ::coil::Destructor< ::RTC::OutPortConsumer, OutPortCorbaCdrConsumerMock>); //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); prof.ports[0] = inport.get_port_profile()->port_ref; CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.interface_type", "corba_cdr")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.dataflow_type", "else")); CORBA_SeqUtil::push_back(prof.properties, NVUtil::newNV("dataport.subscription_type", "new")); RTC::ReturnCode_t retcode; CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); retcode = inport.subscribeInterfaces_public(prof); CPPUNIT_ASSERT_EQUAL(0,(int)inport.get_m_connectors().size()); CPPUNIT_ASSERT_EQUAL(RTC::BAD_PARAMETER,retcode); portAdmin.deletePort(inport); } /*! * @brief subscribeInterfaces()メソッドのテスト * */ void test_subscribeInterfaces4(void) { // //ConsumerなしでsubscribeInterfaceをコール // //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::InPortProviderFactory::instance().hasFactory("corba_cdr") ) { RTC::InPortProviderFactory::instance().removeFactory("corba_cdr"); } //"corba_cdr" に InPortCorbaCdrProviderMock を登録する。 RTC::InPortProviderFactory::instance(). addFactory("corba_cdr", ::coil::Creator< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>, ::coil::Destructor< ::RTC::InPortProvider, InPortCorbaCdrProviderMock>); //既に "corba_cdr" で登録されている場合は削除する。 if( RTC::OutPortConsumerFactory::instance().hasFactory("corba_cdr") ) { RTC::OutPortConsumerFactory::instance().removeFactory("corba_cdr"); } //既に "ring_buffer" で登録されている場合は削除する。 if( RTC::CdrBufferFactory::instance().hasFactory("ring_buffer") ) { RTC::CdrBufferFactory::instance().removeFactory("ring_buffer"); } //"ring_buffer" に CdrRingBufferMock を登録する。 RTC::CdrBufferFactory::instance(). addFactory("ring_buffer", coil::Creator<RTC::CdrBufferBase, CdrRingBufferMock>, coil::Destructor<RTC::CdrBufferBase, CdrRingBufferMock>); InPortBaseMock inport("InPortBaseTest", toTypename<RTC::TimedFloat>()); coil::Properties dummy; inport.init(dummy); RTC::PortAdmin portAdmin(m_pORB,m_pPOA); portAdmin.registerPort(inport); RTC::ConnectorProfile prof; prof.connector_id = "id0"; prof.name = CORBA::string_dup("InPortBaseTest0"); prof.ports.length(1); p