dds::domain::DomainParticipant find(uint32_t id) { DDS::DomainParticipantFactory_var dpf = DDS::DomainParticipantFactory::get_instance(); if(dpf.in() == 0) { throw dds::core::PreconditionNotMetError(org::opensplice::core::exception_helper( OSPL_CONTEXT_LITERAL( "dds::core::PreconditionNotMetError: Unable to resolve the DomainParticipant Factory."))); } DDS::DomainParticipant_ptr ddsdp = dpf->lookup_participant(id); if(ddsdp) { dds::domain::DomainParticipant dp = org::opensplice::core::EntityRegistry<DDS::DomainParticipant_ptr, dds::domain::DomainParticipant>::get(ddsdp); if(dp != dds::core::null) { return dp; } } return dds::domain::DomainParticipant(dds::core::null); }
int run_domain_test () { ::DDS::ReturnCode_t ret; // create participant ::DDS::DomainParticipant_var new_dp = dpf->create_participant(MY_DOMAIN, PARTICIPANT_QOS_DEFAULT, ::DDS::DomainParticipantListener::_nil (), ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); TEST_CHECK (! CORBA::is_nil (new_dp.in ())); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(! CORBA::is_nil (new_dp.in ()))") ACE_TEXT("\n") )); ::DDS::DomainId_t domain_id = new_dp->get_domain_id (); TEST_CHECK (domain_id == MY_DOMAIN); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(domain_id == MY_DOMAIN)") ACE_TEXT("\n") )); MyTypeSupport_var fts (new MyTypeSupportImpl); if (::DDS::RETCODE_OK != fts->register_type(new_dp.in (), MY_TYPE)) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("Failed to register the FooTypeSupport."))); return 1; } // lookup existent participant ::DDS::DomainParticipant_var looked_dp = dpf->lookup_participant(MY_DOMAIN); OpenDDS::DCPS::DomainParticipantImpl* new_dp_servant = dynamic_cast<OpenDDS::DCPS::DomainParticipantImpl*>(new_dp.in()); OpenDDS::DCPS::DomainParticipantImpl* looked_dp_servant = dynamic_cast<OpenDDS::DCPS::DomainParticipantImpl*>(looked_dp.in ()); TEST_CHECK (looked_dp_servant == new_dp_servant); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(looked_dp_servant == new_dp_servant)") ACE_TEXT("\n") )); // create topic ::DDS::Topic_var new_topic = new_dp->create_topic(MY_TOPIC, MY_TYPE, TOPIC_QOS_DEFAULT, ::DDS::TopicListener::_nil (), ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); OpenDDS::DCPS::TopicImpl* new_topic_servant = dynamic_cast<OpenDDS::DCPS::TopicImpl*>(new_topic.in ()); ::DDS::Duration_t timeout; timeout.sec = static_cast<long>(find_topic_timeout.sec ()); timeout.nanosec = find_topic_timeout.usec (); // find existent topic ::DDS::Topic_var found_topic = new_dp->find_topic(MY_TOPIC, timeout); ::OpenDDS::DCPS::TopicImpl* found_topic_servant = dynamic_cast<OpenDDS::DCPS::TopicImpl*> (found_topic.in ()); TEST_CHECK (new_topic_servant == found_topic_servant); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(new_topic_servant == found_topic_servant)") ACE_TEXT("\n") )); // find existent topicdescription ::DDS::TopicDescription_var found_topicdescription = new_dp->lookup_topicdescription(MY_TOPIC); TEST_CHECK (! CORBA::is_nil (found_topicdescription.in ())); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(! CORBA::is_nil (found_topicdescription.in ()))") ACE_TEXT("\n") )); // widen the topicdescription to topic ::DDS::Topic_var widened_topic = ::DDS::Topic::_narrow(found_topicdescription.in ()); TEST_CHECK (! CORBA::is_nil (widened_topic.in ())); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(! CORBA::is_nil (widened_topic.in ()))") ACE_TEXT("\n") )); ACE_ERROR((LM_ERROR, "We expect to see an error message from delete_participant\n")); ret = dpf->delete_participant(new_dp.in ()); TEST_CHECK (ret == ::DDS::RETCODE_PRECONDITION_NOT_MET); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(ret == ::DDS::RETCODE_PRECONDITION_NOT_MET)") ACE_TEXT("\n") )); // delete existent topic first time ret = new_dp->delete_topic(found_topic.in ()); TEST_CHECK (ret == ::DDS::RETCODE_OK); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(ret == ::DDS::RETCODE_OK)") ACE_TEXT("\n") )); // delete existent topic second time ret = new_dp->delete_topic(new_topic.in ()); TEST_CHECK (ret == ::DDS::RETCODE_OK); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(ret == ::DDS::RETCODE_OK)") ACE_TEXT("\n") )); // an extra delete existent topic ACE_ERROR((LM_ERROR, "We expect to see an error message from delete_topic\n")); ret = new_dp->delete_topic(new_topic.in ()); TEST_CHECK (ret == ::DDS::RETCODE_ERROR); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(ret == ::DDS::RETCODE_ERROR)") ACE_TEXT("\n") )); // Look up the topicdescription after the topic is deleted will // return nil. found_topicdescription = new_dp->lookup_topicdescription(MY_TOPIC); TEST_CHECK (CORBA::is_nil(found_topicdescription.in ())); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(CORBA::is_nil(found_topicdescription.in ()))") ACE_TEXT("\n") )); // find a non-existent topic - return nil ACE_High_Res_Timer timer; ACE_Time_Value elapsedTime(0, 0); timer.start (); found_topic = new_dp->find_topic(OTHER_TOPIC, timeout); timer.stop(); timer.elapsed_time(elapsedTime); ACE_Time_Value tenMillis (0, 10000); elapsedTime += tenMillis; // some systems can be short by up to 10 milliseconds ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(CORBA::is_nil(found_topic.in ()) && elapsedTime.msec() >= find_topic_timeout.msec())") ACE_TEXT("\n") )); // delete the existent participant ret = dpf->delete_participant(new_dp.in ()); TEST_CHECK (ret == ::DDS::RETCODE_OK); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(ret == ::DDS::RETCODE_OK)") ACE_TEXT("\n") )); // lookup the participant after it's deleted - return nil looked_dp = dpf->lookup_participant(MY_DOMAIN); TEST_CHECK (CORBA::is_nil(looked_dp.in ())); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) run_domain_test: ") ACE_TEXT("(CORBA::is_nil(looked_dp.in ()))") ACE_TEXT("\n") )); return 0; }