Exemple #1
0
    def test_liveliness_changed_status(self):
        dp = dds.DomainParticipant()

        topic_name = 'ST_liveliness_changed_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        rd = dp.create_datareader(t)

        status = rd.liveliness_changed_status()
        Info = namedtuple('Info', ['name', 'type'])
        attrs = [
            Info('alive_count', int),
            Info('not_alive_count', int),
            Info('alive_count_change', int),
            Info('not_alive_count_change', int),
            Info('last_publication_handle', int)
        ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.LivelinessChangedStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type,
                                  '{} is not a {}'.format(a.name, a.type))
    def test_read_cond(self):
        dp = dds.DomainParticipant()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        t = gci.register_topic(dp, 'ST_test_take_cond')

        rd = dp.create_datareader(t)
        wr = dp.create_datawriter(t)

        qc = rd.create_querycondition(expression='x = 1')

        dataR = ShapeType(color='RED', x=1, y=1, z=1, t=Inner(foo=1))
        dataG = ShapeType(color='GREEN', x=1, y=1, z=1, t=Inner(foo=1))
        dataB = ShapeType(color='BLUE', x=2, y=1, z=1, t=Inner(foo=1))

        wr.write(dataR)
        wr.write(dataG)
        wr.write(dataB)

        samples = rd.read_cond(qc, 3)
        self.assertEqual(2, len(samples))
        found = [s.data.color for s in samples]
        self.assertIn('RED', found)
        self.assertIn('GREEN', found)
Exemple #3
0
    def testTopic_bytesData(self):
        myData = b'Topic Bytes Topic Data'
        builtinTopicName = 'DCPSTopic'
        sawMyData = Event()
        
        class L(dds.Listener):
            def on_data_available(self, reader):
                nonlocal sawMyData
                while True:
                    r = reader.take(n = 1)
                    if len(r) == 0:
                        break
                    elif r[0].status.valid_data:
                        try:
                            v = bytes(r[0].data.topic_data.value)
                            if v == myData:
                                sawMyData.set()
                                break
                        except UnicodeError:
                            pass
        
        builtin_sub = self.dp.create_subscriber(qos=dds.Qos([dds.PartitionQosPolicy(['__BUILT-IN PARTITION__'])]))
        builtin_topic_info = ddsutil.find_and_register_topic(self.dp, builtinTopicName)
        
        builtin_reader = builtin_sub.create_datareader(builtin_topic_info.topic, qos=builtin_topic_info.topic.qos, listener=L())

        # Register a topic with a TopicdataQosPolicy
        t_qos = dds.Qos(policies=[dds.TopicdataQosPolicy(myData)])
        info = ddsutil.get_dds_classes_from_idl('idl/Shapes.idl', "ShapeType")
        t = info.register_topic(self.dp, "T_testTopic_bytesData", t_qos)
        self.assertIsNotNone(t, "Topic registration failed")
        
        self.assertTrue(sawMyData.wait(10), 'Did not see expected data')
        builtin_reader.close()
    def testSimplifiedFindAPI(self):
        idl_path = 'idl/' + 'Thales' + '.idl'
        type_info = 'test::C_TopicStruct'
        gen_info = ddsutil.get_dds_classes_from_idl(idl_path, type_info)
        
        dp1 = DomainParticipant()
        tq1 = Qos([DurabilityQosPolicy(DDSDurabilityKind.PERSISTENT)])
        topic_dp1 = gen_info.register_topic(dp1, 'DP1_C_TopicStruct_2',tq1)
        
        self.assertEqual('DP1_C_TopicStruct_2', topic_dp1.name, 'Topic name not as expected')
        self.assertEqual(type_info, topic_dp1.type_name, 'Type name not as expected')
        self.assertEqual('A_ID.A_ID,A_ID.A_subID', topic_dp1.keylist, 'Key list not as expected')
        self.assertEqual('<MetaData version="1.0.0"><Module name="test"><Struct name="T_ID"><Member name="A_ID"><Long/></Member><Member name="A_subID"><Long/></Member></Struct><TypeDef name="T_IDList"><Sequence><Type name="T_ID"/></Sequence></TypeDef><Struct name="C_TopicStruct"><Member name="A_ID"><Type name="T_ID"/></Member><Member name="A_ForeignIDList"><Type name="T_IDList"/></Member><Member name="value"><Long/></Member></Struct></Module></MetaData>', 
                         topic_dp1.metadescriptor, 'Meta descriptor not as expected')
        
        dp2 = DomainParticipant()
        
        topic_dp2, gen_info2 = ddsutil.find_and_register_topic(dp2, 'DP1_C_TopicStruct_2')
        self.assertIsNotNone(topic_dp2, 'Found topic is not None')
        self.assertEqual('DP1_C_TopicStruct_2', topic_dp2.name, 'Found topic name not as expected')
        self.assertEqual(type_info, topic_dp2.type_name, 'Found type name not as expected')
        self.assertEqual('A_ID.A_ID,A_ID.A_subID', topic_dp2.keylist, 'Found key list not as expected')
        self.assertEqual('<MetaData version="1.0.0"><Module name="test"><Struct name="T_ID"><Member name="A_ID"><Long/></Member><Member name="A_subID"><Long/></Member></Struct><TypeDef name="T_IDList"><Sequence><Type name="T_ID"/></Sequence></TypeDef><Struct name="C_TopicStruct"><Member name="A_ID"><Type name="T_ID"/></Member><Member name="A_ForeignIDList"><Type name="T_IDList"/></Member><Member name="value"><Long/></Member></Struct></Module></MetaData>', 
                         topic_dp2.metadescriptor, 'Found meta descriptor not as expected')
        
        sub2 = dp2.create_subscriber()
        
        # now register the found topic locally, and test reading and writing between the participants
        self.assertIsNotNone(gen_info2, 'Returned gen_info2 is None')
        
        tq2 = topic_dp2.qos
        self.assertIsNotNone(tq2)
        
        # TODO: need get copy topic qos
        #local_topic_dp2 = register_topic_locally(topic_dp2)
#        local_topic_dp2 = gen_info2.register_topic(dp2, topic_dp2.get_name(), tq2)
        
        # Reader for dp2
        result_holder = ResultHolder()
        event = Event()
        rd2 = sub2.create_datareader(topic_dp2, tq2, DataAvailableListener(result_holder, event))
        
        # Writer for dp1
        pub1 = dp1.create_publisher()
        wr1 = pub1.create_datawriter(topic_dp1, tq1)
        
        # create the data
        Outer = gen_info.get_class('test::C_TopicStruct')
        Inner = gen_info.get_class('test::T_ID')
        data1 = Outer()
        data1.A_ID = Inner(A_ID=21,A_subID=212)
        data1.A_ForeignIDList = [Inner(A_ID=22,A_subID=223),Inner(A_ID=23,A_subID=234)]
        data1.value = 242
        
        wr1.write(data1)
        
        # let the listener catch up...
        self.assertTrue(event.wait(10.0), 'wait timed out')
        
        self.assertEqual(str(data1), result_holder.result, 'read and write results do not match')
Exemple #5
0
    def test_on_inconsistent_topic(self):
        '''
        from: osplo/testsuite/dbt/api/dcps/c99/utest/listener/code/listener_utests.c
        
        It's not that easy for OpenSplice to generate inconsistent_topic
        events. However, it is build on top of SAC and it works on that
        language binding. We can assume that this test succeeds when
        the other listener test pass as well...

        So, we will just check that the listener's actually got installed
        '''
        topic_name = 'ST_on_inconsistent_topic'
        event = threading.Event()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)

        #         gci2 = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name + '2')

        class L(Listener):
            def on_inconsistent_topic(self, topic, status):
                print(
                    'on_inconsistent_topic triggered: topic name = {}, total_count = {}, total_change_count = {}'
                    .format(topic.get_name(), status.total_coutn,
                            status.total_change_count))
                event.set()

        dp1 = DomainParticipant(listener=L())

        self.assertIsNotNone(dp1.listener,
                             "DomainParticipant Listener was not set")

        t1 = gci.register_topic(dp1, topic_name, listener=L())

        self.assertIsNotNone(t1.listener, "Topic Listener was not set")
    def test_take_cond(self):
        dp = dds.DomainParticipant()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        t = gci.register_topic(dp, 'ST_test_take_cond')

        rd = dp.create_datareader(t)
        wr = dp.create_datawriter(t)

        qc = rd.create_querycondition(expression='color = %0',
                                      parameters=['RED'])

        dataR = ShapeType(color='RED', x=1, y=1, z=1, t=Inner(foo=1))
        dataG = ShapeType(color='GREEN', x=1, y=1, z=1, t=Inner(foo=1))

        wr.write(dataR)
        wr.write(dataG)

        data = rd.take_cond(qc, 2)
        self.assertEqual(1, len(data))
        found = [d.color for d, _ in data]
        self.assertIn('RED', found)
Exemple #7
0
    def test_publication_matched_status(self):
        dp = dds.DomainParticipant()

        topic_name = 'ST_publication_matched_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        wr = dp.create_datawriter(t)

        status = wr.publication_matched_status()
        Info = namedtuple('Info', ['name', 'type'])
        attrs = [
            Info('total_count', int),
            Info('total_count_change', int),
            Info('current_count', int),
            Info('current_count_change', int),
            Info('last_subscription_handle', int)
        ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.PublicationMatchedStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type,
                                  '{} is not a {}'.format(a.name, a.type))
Exemple #8
0
    def test_on_data_available(self):
        topic_name = 'ST_on_data_available'
        event = threading.Event()

        dp1 = DomainParticipant()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        t1 = gci.register_topic(dp1, topic_name)
        wr1 = dp1.create_datawriter(t1)

        class L(Listener):
            def on_data_available(self, _):
                event.set()

        dp2 = DomainParticipant()
        t2 = gci.register_topic(dp2, topic_name)
        rd2 = dp2.create_datareader(t2, listener=L())

        data = ShapeType(color='RED', x=1, y=2, z=3, t=Inner(foo=4))
        wr1.write(data)

        self.assertTrue(event.wait(self.time_out),
                        'Did not receive on_data_available')
Exemple #9
0
    def test_on_data_available(self):
        topic_name = 'ST_on_data_available'
        event = threading.Event()

        dp1 = DomainParticipant()
        
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        t1 = gci.register_topic(dp1, topic_name)
        wr1 = dp1.create_datawriter(t1)

        class L(Listener):
            def on_data_available(self,_):
                event.set()

        dp2 = DomainParticipant()
        t2 = gci.register_topic(dp2, topic_name)
        rd2 = dp2.create_datareader(t2,listener=L())
        
        data = ShapeType(color='RED',x=1,y=2,z=3,t=Inner(foo=4))
        wr1.write(data)

        self.assertTrue(event.wait(self.time_out),'Did not receive on_data_available')
Exemple #10
0
    def test_on_inconsistent_topic(self):
        '''
        from: osplo/testsuite/dbt/api/dcps/c99/utest/listener/code/listener_utests.c
        
        It's not that easy for OpenSplice to generate inconsistent_topic
        events. However, it is build on top of SAC and it works on that
        language binding. We can assume that this test succeeds when
        the other listener test pass as well...

        So, we will just check that the listener's actually got installed
        '''
        topic_name = 'ST_on_inconsistent_topic'
        event = threading.Event()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
#         gci2 = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name + '2')

        class L(Listener):
            def on_inconsistent_topic(self, topic, status):
                print('on_inconsistent_topic triggered: topic name = {}, total_count = {}, total_change_count = {}'
                      .format(topic.get_name(), status.total_coutn, status.total_change_count))
                event.set()
                
        dp1 = DomainParticipant(listener=L())
        
        self.assertIsNotNone(dp1.listener, "DomainParticipant Listener was not set")

        t1 = gci.register_topic(dp1, topic_name, listener=L())

        self.assertIsNotNone(t1.listener, "Topic Listener was not set")
Exemple #11
0
    def test_on_data_available(self):
        topic_name = 'ST_on_data_available'
        event = self.event

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        print('createing writer')
        t1 = gci.register_topic(self.dp2, topic_name)
        wr1 = self.dp2.create_datawriter(t1)

        class L(Listener):
#             def on_requested_deadline_missed(self, _, __):
#                 Listener.on_requested_deadline_missed(self)
            def on_data_available(self,_):
                print('triggering event')
                event.set()

        print('creating reader with listener')
        t2 = gci.register_topic(self.dp2, topic_name)
        rd2 = self.dp2.create_datareader(t2,listener=L())
        
        print('writing')
        data = ShapeType(color='RED',x=1,y=2,z=3,t=Inner(foo=4))
        wr1.write(data)
        try:
            print('waiting for listener to trigger')
            self.assertTrue(self.event.wait(2.0),'Did not receive on_data_available')
            print('done waiting')
        finally:
            print('closing rd2')
#             rd2.close()
            print('all done')
 def test_read_cond(self):
     dp = dds.DomainParticipant()
     
     gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
     ShapeType = gci.get_class('ShapeType')
     Inner = gci.get_class('Inner')
     
     t = gci.register_topic(dp, 'ST_test_take_cond')
     
     rd = dp.create_datareader(t)
     wr = dp.create_datawriter(t)
     
     qc = rd.create_querycondition(expression='x = 1')
     
     dataR = ShapeType(color='RED',x=1,y=1,z=1,t=Inner(foo=1))
     dataG = ShapeType(color='GREEN',x=1,y=1,z=1,t=Inner(foo=1))
     dataB = ShapeType(color='BLUE',x=2,y=1,z=1,t=Inner(foo=1))
     
     wr.write(dataR)
     wr.write(dataG)
     wr.write(dataB)
     
     samples = rd.read_cond(qc,3)
     self.assertEqual(2, len(samples))
     found = [s.data.color for s in samples]
     self.assertIn('RED',found)
     self.assertIn('GREEN',found)
Exemple #13
0
    def run(self):
        qp = QosProvider('file://DDS_DefaultQoS_All.xml',
                         'DDS DefaultQosProfile')
        dp = DomainParticipant(qos=qp.get_participant_qos())

        pub = dp.create_publisher(qos=qp.get_publisher_qos())

        gen_info = ddsutil.get_dds_classes_from_idl(
            'example1.idl', 'Sample::DataTypesList::DataTypes')

        topic = gen_info.register_topic(dp, "Example", qp.get_topic_qos())

        writer = pub.create_datawriter(topic, qp.get_writer_qos())

        Inner = gen_info.get_class("Sample::DataTypesList::Inner")
        Color = gen_info.get_class("Sample::DataTypesList::Color")

        inner1 = Inner(short1=self.sn, double1=222)
        inner2 = Inner(short1=777, double1=333)
        time.sleep(0.5)
        data = gen_info.topic_data_class(longValue=self.sn,
                                         booleanValue=True,
                                         charValue='a',
                                         stringValue='Fire!',
                                         seq1=[inner1, inner2],
                                         color1=Color.Red)
        writer.write(data)
        print(data)
Exemple #14
0
def suscriptor_statix():
    sus_status = threading.current_thread()
    while getattr(sus_status, "do_run", True):

        qp = QosProvider('file://DDS_DefaultQoS_All.xml',
                         'DDS DefaultQosProfile')

        # Create participant
        dp = DomainParticipant(qos=qp.get_participant_qos())

        # Create Subscriber
        sub = dp.create_subscriber(qos=Qos([
            DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT),
            ReliabilityQosPolicy(DDSReliabilityKind.RELIABLE),
            PartitionQosPolicy([Partition])
        ]))

        # Generate python classes from IDL file
        gen_info = ddsutil.get_dds_classes_from_idl(
            'status.idl', 'com::ulma::supervisor::dds::status::Status')
        # Type support class
        topic = gen_info.register_topic(dp, "Status", qp.get_topic_qos())

        # Create a reader
        readerQos = qp.get_reader_qos()
        reader = sub.create_datareader(topic, readerQos)

        AgentType = gen_info.get_class(
            "com::ulma::supervisor::dds::status::AgentReferenceType")

        time.sleep(1)

        # Create waitset
        waitset = WaitSet()
        condition = ReadCondition(reader, DDSMaskUtil.all_samples())

        waitset.attach(condition)

        # Wait for data
        conditions = waitset.wait()

        # Print data
        while sus_status.do_run == True:
            listaSamples = reader.take(10)
            for (sampleData, sampleInformation) in listaSamples:
                if sampleInformation.valid_data:
                    ldDestinatario = sampleData.src_id.ld
                    lnDestinatario = sampleData.src_id.ln
                    print("Status recibido: [LD: {}; LN: {}]".format(
                        ldDestinatario, lnDestinatario))
                    if (ldDestinatario == AgenteLD) and (lnDestinatario
                                                         == AgenteLN):
                        print("Es para mi")
                    else:
                        print(
                            "Este status no es para mi. Es para :  [LD: {}; LN: {}]"
                            .format(ldDestinatario, lnDestinatario))
                        sus_status.do_run = False
Exemple #15
0
    def __init__(self, component, name, volatile):
        self.name = name
        self.volatile = volatile

        self.type = ddsutil.get_dds_classes_from_idl(component.idl_path, name)
        self.DataType = self.type.topic_data_class
        topic_name = name.replace("::", "_")
        topic_qos = component.domain.volatile_topic_qos if volatile else component.domain.topic_qos
        self.topic = self.type.register_topic(component.domain.participant,
                                              topic_name, topic_qos)
def WaitForThrottleInputRoutine(threadName, idlFile):
    global isFinished;
    print('Thread {}: starting'.format(threadName))
    print('{} => Initializing DDS and idl files ...'.format(threadName))

    vehicleSignalTopicName = 'VehicleSignalTopic'
    tVehicleSignal = 'basic::module_vehicleSignal::vehicleSignalStruct'

    vehicleSignalIdlClass = ddsutil.get_dds_classes_from_idl(idlFile, tVehicleSignal);

    vehicleSignalTopic = vehicleSignalIdlClass.register_topic(dp, vehicleSignalTopicName)

    pub = dp.create_publisher()

    qos = Qos([ReliabilityQosPolicy(DDSReliabilityKind.RELIABLE)])
    vehicleSignalWriter = pub.create_datawriter(vehicleSignalTopic, qos)

    print('Press w to increase throttle, s to decrease throttle, q to quit')

    throttle = 0
    messageId = 1;
    vehicleSpeed = 0.0;
    while True:
        print('Throttle = {}'.format(throttle))
        keyboardInput = readchar.readkey()
        print("keyboardInput: {}".format(keyboardInput))
        if keyboardInput == 'w':
            print("increasing throttle")
            if throttle < 100:
                throttle += 1
            vehicleSpeed += (throttle * 0.6)
        elif keyboardInput == 'q':
            # setting isFinished = true will signal WaitForVehicleSignalStructTask
            # to return
            print('{} => Exiting'.format(threadName))
            isFinished = True
            return
        else:
            if throttle > 0:
                throttle -= 1
            if vehicleSpeed - 2 < 0:
                vehicleSpeed = 0
            elif vehicleSpeed > 0:
                vehicleSpeed -= 2

        # sends dds message vehicleSignalStruct (vehicle_speed)
        vehicleSignalMessage = vehicleSignalIdlClass.topic_data_class(
            id=messageId, vehicle_speed=vehicleSpeed)
        vehicleSignalMessage.id = messageId
        vehicleSignalMessage.throttle = throttle
        vehicleSignalMessage.vehicle_speed = vehicleSpeed
        vehicleSignalMessage.simulation_time = str(int(time.monotonic() * 1e9))
        vehicleSignalWriter.write(vehicleSignalMessage)
        messageId += 1
Exemple #17
0
    def test_unregistration(self):
        dp = dds.DomainParticipant()
        
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        t = gci.register_topic(dp, 'ST_test_unregistration')
        
        wr = dp.create_datawriter(t)
        #data = ShapeType(color='RED')
        data = ShapeType(color='RED',x=0,y=0,z=0,t=Inner(foo=0))
        data2 = ShapeType(color='BLUE',x=0,y=0,z=0,t=Inner(foo=0))
        data3 = ShapeType(color='YELLOW',x=0,y=0,z=0,t=Inner(foo=0))
        data4 = ShapeType(color='PINK',x=0,y=0,z=0,t=Inner(foo=0))
        dataNever = ShapeType(color='NEVER',x=0,y=0,z=0,t=Inner(foo=0))
        
        h = wr.register_instance(data)
        h2 = wr.register_instance(data2)
        h3 = wr.register_instance(data3)
        h4 = wr.register_instance(data4)
        self.assertIsNotNone(h, 'handle is None')
        self.assertIsInstance(h, int, 'handle is not int')

        # test expected success paths
        wr.unregister_instance(handle=h)
        wr.unregister_instance(data=data2)
        
        # test failure paths
        try:
            wr.unregister_instance()
            self.fail('should not succeed; unregistering inconsistent data')
        except dds.DDSException:
            pass

        # unregister something that's already unregistered
        try:
            wr.unregister_instance(handle=h)
            self.fail('should not succeed; duplicate unregistration')
        except dds.DDSException:
            pass
        
        # unregister something that was never registered
        try:
            wr.unregister_instance(data=dataNever)
            self.fail('should not succeed; instance never registered')
        except dds.DDSException:
            pass

        # The following are not failures, but will produce oslp-error.log entries  
        
        # unregister something where data does not match        
        wr.unregister_instance(dataNever, h4)
Exemple #18
0
    def AddTopic(self, sTopicName, sDataClassName):
        if (sTopicName == None or sTopicName == ''):
            return

        if (self.__oTopics == None):
            self.__oTopics = []

        gen_info = ddsutil.get_dds_classes_from_idl(self.__sDataStructureFile,
                                                    sDataClassName)
        oTopic = gen_info.register_topic(self.__oDP, sTopicName,
                                         self.__oQP.get_topic_qos())
        self.__oTopics.append(oTopic)
 def genInfo(self, datatype):
     global mutex
     guard = OpenRTM_aist.ScopedLock(mutex)
     if datatype in self._info:
         return self._info[datatype]
     datainfo = OpenSpliceMessageInfo.OpenSpliceMessageInfoList.instance().getInfo(datatype)
     if datainfo:
         datatype = datainfo.datatype()
         idlfile = datainfo.idlFile()
         self._info[datatype] = ddsutil.get_dds_classes_from_idl(idlfile,
                                                                 datatype)
         return self._info[datatype]
     return None
 def get_idl(self, name, *args):
     dds_name = "basic::module_" + name + "::" + name + "_struct"
     gci = ddsutil.get_dds_classes_from_idl(
         os.path.join('idl', name + '.idl'), dds_name)
     names = [name]
     names.extend(args)
     dict = {}
     for n in names:
         dds_name = "basic::module_" + name + "::" + n
         if n == name:
             dds_name += '_struct'
         dict[n] = gci.get_class(dds_name)
     return dict
def conexxion_Status():
    publi_status = threading.current_thread()
    while getattr(publi_status, "do_run", True):

        qosprovider = QosProvider('file://DDS_DefaultQoS_All.xml',
                                  'DDS DefaultQosProfile')

        # Create participant
        domainparticipant = DomainParticipant(
            qos=qosprovider.get_participant_qos())

        # Create publisher
        pub = domainparticipant.create_publisher(qos=Qos([
            DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT),
            ReliabilityQosPolicy(DDSReliabilityKind.RELIABLE),
            PartitionQosPolicy([Partition])
        ]))

        # Generate python classes from IDL file
        gen_info = ddsutil.get_dds_classes_from_idl(
            'status.idl', 'com::ulma::supervisor::dds::status::Status')
        # Type support class
        topic = gen_info.register_topic(domainparticipant, "Status",
                                        qosprovider.get_topic_qos())

        AgentType = gen_info.get_class(
            "com::ulma::supervisor::dds::status::AgentReferenceType")

        # Create a writer
        writer = pub.create_datawriter(topic)
        writer = pub.create_datawriter(topic, qosprovider.get_writer_qos())

        # ES UNA CONDICION PARA QUE NO PUBLIQUE NADA SI EL KILL ESTA ACTIVADO
        #if suscrip_kill.do_run == False:
        #publi_status.do_run = False

        while suscrip_kill.do_run == True:

            id = AgentType(ld=AgenteLD, ln=AgenteLN)
            sample1 = gen_info.topic_data_class(src_id=id,
                                                status=StatusAgente,
                                                error_description=sys.argv[1],
                                                masterSlave=sys.argv[2])

            writer.write(sample1)
            time.sleep(6.0)

            print("status")
            print(sample1)
Exemple #22
0
 def genInfo(self, datatype):
     global mutex
     guard = OpenRTM_aist.ScopedLock(mutex)
     if datatype in self._info:
         return self._info[datatype]
     factory = OpenSpliceMessageInfo.OpenSpliceMessageInfoFactory.instance()
     datainfo = factory.createObject(datatype)
     if datainfo:
         datatype = datainfo.datatype()
         idlfile = datainfo.idlFile()
         factory.deleteObject(datainfo)
         self._info[datatype] = ddsutil.get_dds_classes_from_idl(
             idlfile, datatype)
         return self._info[datatype]
     return None
def conexxion_LlamadaRequest():
    publi_request = multiprocessing.current_process()
    while getattr(publi_request, "do_run", True):
        qosprovider = QosProvider('file://DDS_DefaultQoS_All.xml',
                                  'DDS DefaultQosProfile')

        # Create participant
        domainparticipant = DomainParticipant(
            qos=qosprovider.get_participant_qos())

        # Create publisher
        pub = domainparticipant.create_publisher(qos=Qos([
            DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT),
            ReliabilityQosPolicy(DDSReliabilityKind.RELIABLE),
            PartitionQosPolicy(['the_partition'])
        ]))

        # Generate python classes from IDL file
        gen_info = ddsutil.get_dds_classes_from_idl(
            'LauncherReq.idl',
            'com::ulma::supervisor::dds::launcherReq::LauncherReq')
        # Type support class
        topic = gen_info.register_topic(domainparticipant, "LauncherReq",
                                        qosprovider.get_topic_qos())

        AgentType = gen_info.get_class(
            "com::ulma::supervisor::dds::launcherReq::AgentReferenceType")

        # Create a writer
        writer = pub.create_datawriter(topic)
        writer = pub.create_datawriter(topic, qosprovider.get_writer_qos())

        while publi_request.do_run == True:
            s_id = AgentType(ld="Mod", ln="bus")
            d_id = AgentType(ld="Modbus", ln="MShuttle")
            sample = gen_info.topic_data_class(
                src_id=s_id,
                dst_id=d_id,
                command=1,
                request_id=0,
            )

            writer.write(sample)
            time.sleep(3.0)

            print("LlamadaReq")
            print(sample)
Exemple #24
0
    def testGroup_textData(self):
        myData = 'Pub Text Group Data'
        builtinTopicName = 'DCPSPublication'
        sawMyData = Event()

        class L(dds.Listener):
            def on_data_available(self, reader):
                nonlocal sawMyData
                while True:
                    r = reader.take(n=1)
                    if len(r) == 0:
                        break
                    elif r[0].status.valid_data:
                        try:
                            v = bytes(r[0].data.group_data.value).decode(
                                'ISO-8859-1')
                            if v == myData:
                                sawMyData.set()
                                break
                        except UnicodeError:
                            pass

        builtin_sub = self.dp.create_subscriber(
            qos=dds.Qos([dds.PartitionQosPolicy(['__BUILT-IN PARTITION__'])]))
        builtin_topic_info = ddsutil.find_and_register_topic(
            self.dp, builtinTopicName)
        builtin_reader = builtin_sub.create_datareader(
            builtin_topic_info.topic,
            qos=builtin_topic_info.topic.qos,
            listener=L())

        # Register a topic with a TopicdataQosPolicy
        p_qos = dds.Qos(policies=[dds.GroupdataQosPolicy(myData)])
        pub = self.dp.create_publisher(p_qos)

        info = ddsutil.get_dds_classes_from_idl('idl/Shapes.idl', "ShapeType")
        t = info.register_topic(self.dp, "T_testGroup_textData")
        self.assertIsNotNone(t, "Topic registration failed")

        dw = pub.create_datawriter(t)

        self.assertTrue(sawMyData.wait(10), 'Did not see expected data')
        builtin_reader.close()
        dw.close()
        pub.close()
 def serialize(self, data):
   factory = OpenSpliceMessageInfo.OpenSpliceMessageInfoFactory.instance()
   info = factory.createObject(data._NP_RepositoryId)
   if info:
     datatype = info.datatype()
     idlFile = info.idlFile()
     factory.deleteObject(info)
     try:
       gen_info = ddsutil.get_dds_classes_from_idl(idlFile, datatype)
       osdata = gen_info.topic_data_class(**OmniDataToDDSData(data, gen_info))
       if osdata:
         return OpenRTM_aist.ByteDataStreamBase.SERIALIZE_OK, osdata
       else:
         return OpenRTM_aist.ByteDataStreamBase.SERIALIZE_ERROR, osdata
     except:
       return OpenRTM_aist.ByteDataStreamBase.SERIALIZE_ERROR, None
   else:
     return OpenRTM_aist.ByteDataStreamBase.SERIALIZE_NOTFOUND, None
Exemple #26
0
    def test_registration(self):
        dp = dds.DomainParticipant()
        
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        t = gci.register_topic(dp, 'ST_test_registration')
        
        wr = dp.create_datawriter(t)
        #data = ShapeType(color='RED')
        data = ShapeType(color='RED',x=0,y=0,z=0,t=Inner(foo=0))
        
        h = wr.register_instance(data)
        self.assertIsNotNone(h, 'handle is None')
        self.assertIsInstance(h, int, 'handle is not int')

        wr.unregister_instance(data, h)
Exemple #27
0
    def test_on_sample_lost(self):
        handlerTriggered = threading.Event()
        saved_status = None

        class L(Listener):
            def on_sample_lost(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()

        qos = Qos(policies=[
            DestinationOrderQosPolicy(
                DDSDestinationOrderKind.BY_SOURCE_TIMESTAMP)
        ])

        dp = DomainParticipant()

        topic_name = 'ST_on_sample_lost'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)

        t = gci.register_topic(dp, topic_name)

        wr = dp.create_datawriter(t, qos)
        rd = dp.create_datareader(t, qos, L())

        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        data1 = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        t1 = DDSTime(1000, 0)
        t2 = DDSTime(1001, 0)
        # write out-of-order samples
        wr.write_ts(data1, t2)
        rd.take()
        wr.write_ts(data1, t1)
        self.assertTrue(handlerTriggered.wait(self.time_out),
                        'Event not triggered')
        self._check_status(saved_status, SampleLostStatus, [
            Info('total_count', int),
            Info('total_count_change', int),
        ])
    def test_liveliness_lost_status(self):
        dp = dds.DomainParticipant()
        
        topic_name = 'ST_liveliness_lost_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        wr = dp.create_datawriter(t)
        
        status = wr.liveliness_lost_status()
        Info = namedtuple('Info', ['name','type'])
        attrs = [Info('total_count', int),
            Info('total_count_change', int),
            ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.LivelinessLostStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type, '{} is not a {}'.format(a.name, a.type))
Exemple #29
0
    def test_on_requested_deadline_missed(self):
        handlerTriggered = threading.Event()
        write_time = 0.0
        delay = 0.0
        saved_status = None

        class L(Listener):
            def on_requested_deadline_missed(self, reader, status):
                nonlocal delay
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()
                delay = time.time() - write_time

        dp = DomainParticipant()

        topic_name = 'ST_on_requested_deadline_missed'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)

        t = gci.register_topic(dp, topic_name)

        qos = Qos(policies=[DeadlineQosPolicy(DDSDuration(1, 0))])
        wr = dp.create_datawriter(t, qos)
        rd = dp.create_datareader(t, qos, L())

        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        wr.write(data)
        write_time = time.time()
        self.assertTrue(handlerTriggered.wait(self.time_out),
                        'Event not triggered')
        self.assertGreaterEqual(delay, 1.0 - 0.05, 'Delay not >= 1.0s')
        self._check_status(saved_status, RequestedDeadlineMissedStatus, [
            Info('total_count', int),
            Info('total_count_change', int),
            Info('last_instance_handle', int),
        ])
    def test_requested_incompatible_qos_status(self):
        dp = dds.DomainParticipant()
        
        topic_name = 'ST_requested_incompatible_qos_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        rd = dp.create_datareader(t)
        
        status = rd.requested_incompatible_qos_status()
        Info = namedtuple('Info', ['name','type'])
        attrs = [Info('total_count', int),
            Info('total_count_change', int),
            Info('last_policy_id', dds.QosPolicyId),
            ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.RequestedIncompatibleQosStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type, '{} is not a {}'.format(a.name, a.type))
def conexxion_sendInfo():
    publi_sendinfo = multiprocessing.current_process()
    while getattr(publi_sendinfo, "do_run", True):
        qosprovider = QosProvider('file://DDS_DefaultQoS_All.xml',
                                  'DDS DefaultQosProfile')

        # Create participant
        domainparticipant = DomainParticipant(
            qos=qosprovider.get_participant_qos())

        # Create publisher with type suport class(dentro del parentersis)
        pub = domainparticipant.create_publisher(qos=Qos([
            DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT),
            ReliabilityQosPolicy(DDSReliabilityKind.RELIABLE),
            PartitionQosPolicy(['the_partition'])
        ]))

        # Generate python classes from IDL file
        gen_info = ddsutil.get_dds_classes_from_idl(
            'sendInfo.idl', 'com::ulma::supervisor::dds::sendInfo::SendInfo')
        # Type support class
        topic = gen_info.register_topic(domainparticipant, "SendInfo",
                                        qosprovider.get_topic_qos())

        AgentType = gen_info.get_class(
            "com::ulma::supervisor::dds::sendInfo::AgentReferenceType")

        # Create a writer
        writer = pub.create_datawriter(topic)
        writer = pub.create_datawriter(topic, qosprovider.get_writer_qos())

        while publi_sendinfo.do_run == True:
            s_id = AgentType(ld="modbus", ln="Mshuttle")
            d_id = AgentType(ld="Modbus", ln="MShuttle")
            sample = gen_info.topic_data_class(src_id=s_id, dst_agent_id=d_id)

            writer.write(sample)
            time.sleep(3.0)

            print("SendInfo")
            print(sample)
Exemple #32
0
    def test_on_requested_deadline_missed(self):
        handlerTriggered = threading.Event()
        write_time = 0.0
        delay = 0.0
        saved_status = None
        class L(Listener):
            def on_requested_deadline_missed(self, reader, status):
                nonlocal delay
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()
                delay = time.time() - write_time
        
        dp = DomainParticipant()
        
        topic_name = 'ST_on_requested_deadline_missed'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name)

        qos = Qos(policies=[
                DeadlineQosPolicy(DDSDuration(1,0))
            ])
        wr = dp.create_datawriter(t, qos)
        rd = dp.create_datareader(t, qos, L())
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        wr.write(data)
        write_time = time.time()
        self.assertTrue(handlerTriggered.wait(self.time_out), 'Event not triggered')
        self.assertGreaterEqual(delay, 1.0 - 0.05, 'Delay not >= 1.0s')
        self._check_status(saved_status, RequestedDeadlineMissedStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            Info('last_instance_handle', int), 
            ])
Exemple #33
0
    def test_on_sample_lost(self):
        handlerTriggered = threading.Event()
        saved_status = None
        
        class L(Listener):
            def on_sample_lost(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()
                
        qos = Qos(policies=[
            DestinationOrderQosPolicy(DDSDestinationOrderKind.BY_SOURCE_TIMESTAMP)
            ])
        
        dp = DomainParticipant()
        
        topic_name = 'ST_on_sample_lost'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name)
        
        wr = dp.create_datawriter(t, qos)
        rd = dp.create_datareader(t, qos, L())
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data1 = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        t1 = DDSTime(1000,0)
        t2 = DDSTime(1001,0)
        # write out-of-order samples
        wr.write_ts(data1, t2)
        rd.take()
        wr.write_ts(data1, t1)
        self.assertTrue(handlerTriggered.wait(self.time_out), 'Event not triggered')
        self._check_status(saved_status, SampleLostStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            ])
Exemple #34
0
    def test_on_sample_rejected(self):
        handlerTriggered = threading.Event()
        saved_status = None

        class L(Listener):
            def on_sample_rejected(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()

        dp = DomainParticipant()

        topic_name = 'ST_on_sample_rejected'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)

        t = gci.register_topic(dp, topic_name)

        qos = Qos(policies=[ResourceLimitsQosPolicy(max_samples=1)])

        wr = dp.create_datawriter(t)
        rd = dp.create_datareader(t, qos, L())

        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        data1 = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))
        data2 = ShapeType(color='BLUE', x=222, y=233, z=244, t=Inner(foo=255))

        wr.write(data1)
        self.assertFalse(handlerTriggered.is_set(), 'Event already triggered')
        wr.write(data2)
        self.assertTrue(handlerTriggered.wait(self.time_out),
                        'Event not triggered')
        self._check_status(saved_status, SampleRejectedStatus, [
            Info('total_count', int),
            Info('total_count_change', int),
            Info('last_reason', DDSSampleRejectedStatusKind),
            Info('last_instance_handle', int),
        ])
    def test_liveliness_changed_status(self):
        dp = dds.DomainParticipant()
        
        topic_name = 'ST_liveliness_changed_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        rd = dp.create_datareader(t)
        
        status = rd.liveliness_changed_status()
        Info = namedtuple('Info', ['name','type'])
        attrs = [Info('alive_count', int),
            Info('not_alive_count', int),
            Info('alive_count_change', int),
            Info('not_alive_count_change', int),
            Info('last_publication_handle', int)]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.LivelinessChangedStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type, '{} is not a {}'.format(a.name, a.type))
    def test_publication_matched_status(self):
        dp = dds.DomainParticipant()
        
        topic_name = 'ST_publication_matched_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        wr = dp.create_datawriter(t)
        
        status = wr.publication_matched_status()
        Info = namedtuple('Info', ['name','type'])
        attrs = [Info('total_count', int),
            Info('total_count_change', int),
            Info('current_count', int),
            Info('current_count_change', int),
            Info('last_subscription_handle', int)]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.PublicationMatchedStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type, '{} is not a {}'.format(a.name, a.type))
Exemple #37
0
    def test_wr_instance_lookup(self):
        dp = dds.DomainParticipant()

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        t = gci.register_topic(dp, 'ST_test_wr_instance_lookup')

        wr = dp.create_datawriter(t)
        #data = ShapeType(color='RED')
        data = ShapeType(color='RED',x=0,y=0,z=0,t=Inner(foo=0))
        dataUnreg = ShapeType(color='GREEN',x=0,y=0,z=0,t=Inner(foo=0))

        h = wr.register_instance(data)

        hlookup = wr.lookup_instance(data)
        self.assertEqual(hlookup, h)

        hUnreg = wr.lookup_instance(dataUnreg)
        self.assertIsNone(hUnreg)
    def test_sample_rejected_status(self):
        dp = dds.DomainParticipant()
        
        topic_name = 'ST_sample_rejected_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        rd = dp.create_datareader(t)
        
        status = rd.sample_rejected_status()
        Info = namedtuple('Info', ['name','type'])
        attrs = [Info('total_count', int),
            Info('total_count_change', int),
            Info('last_reason', dds.DDSSampleRejectedStatusKind),
            Info('last_instance_handle', int),
            ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.SampleRejectedStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type, '{} is not a {}'.format(a.name, a.type))
Exemple #39
0
    def test_on_sample_rejected(self):
        handlerTriggered = threading.Event()
        saved_status = None
        class L(Listener):
            def on_sample_rejected(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()
        
        dp = DomainParticipant()
        
        topic_name = 'ST_on_sample_rejected'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name)
        
        qos = Qos(policies=[
                ResourceLimitsQosPolicy(max_samples=1)
            ])
        
        wr = dp.create_datawriter(t)
        rd = dp.create_datareader(t, qos, L())
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data1 = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))
        data2 = ShapeType(color='BLUE', x=222, y=233, z=244, t=Inner(foo=255))
        
        wr.write(data1)
        self.assertFalse(handlerTriggered.is_set(), 'Event already triggered')
        wr.write(data2)
        self.assertTrue(handlerTriggered.wait(self.time_out), 'Event not triggered')
        self._check_status(saved_status, SampleRejectedStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            Info('last_reason', DDSSampleRejectedStatusKind), 
            Info('last_instance_handle', int), 
            ])
Exemple #40
0
    def test_liveliness_lost_status(self):
        dp = dds.DomainParticipant()

        topic_name = 'ST_liveliness_lost_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        wr = dp.create_datawriter(t)

        status = wr.liveliness_lost_status()
        Info = namedtuple('Info', ['name', 'type'])
        attrs = [
            Info('total_count', int),
            Info('total_count_change', int),
        ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.LivelinessLostStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type,
                                  '{} is not a {}'.format(a.name, a.type))
Exemple #41
0
    def test_on_requested_incompatible_qos(self):
        handlerTriggered = threading.Event()
        saved_status = None
        class L(Listener):
            def on_requested_incompatible_qos(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()
        
        dp = DomainParticipant()
        
        topic_name = 'ST_test_on_requested_incompatible_qos'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name)

        wqos = Qos(policies=[
                DurabilityQosPolicy(DDSDurabilityKind.VOLATILE)
            ])
        rqos = Qos(policies=[
                DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT)
            ])
        wr = dp.create_datawriter(t, wqos)
        rd = dp.create_datareader(t,rqos, L())
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        wr.write(data)
        self.assertTrue(handlerTriggered.wait(self.time_out), 'Event not triggered')
        self._check_status(saved_status, RequestedIncompatibleQosStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            Info('last_policy_id', QosPolicyId), 
            ])
Exemple #42
0
    def test_requested_incompatible_qos_status(self):
        dp = dds.DomainParticipant()

        topic_name = 'ST_requested_incompatible_qos_status'
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)
        t = gci.register_topic(dp, topic_name)

        rd = dp.create_datareader(t)

        status = rd.requested_incompatible_qos_status()
        Info = namedtuple('Info', ['name', 'type'])
        attrs = [
            Info('total_count', int),
            Info('total_count_change', int),
            Info('last_policy_id', dds.QosPolicyId),
        ]
        self.assertIsNotNone(status, 'status is None')
        self.assertIsInstance(status, dds.RequestedIncompatibleQosStatus)
        for a in attrs:
            self.assertTrue(hasattr(status, a.name))
            self.assertIsInstance(getattr(status, a.name), a.type,
                                  '{} is not a {}'.format(a.name, a.type))
Exemple #43
0
    def test_on_requested_incompatible_qos(self):
        handlerTriggered = threading.Event()
        saved_status = None

        class L(Listener):
            def on_requested_incompatible_qos(self, reader, status):
                nonlocal saved_status
                saved_status = status
                handlerTriggered.set()

        dp = DomainParticipant()

        topic_name = 'ST_test_on_requested_incompatible_qos'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path,
                                               self.shape_type_name)

        t = gci.register_topic(dp, topic_name)

        wqos = Qos(policies=[DurabilityQosPolicy(DDSDurabilityKind.VOLATILE)])
        rqos = Qos(policies=[DurabilityQosPolicy(DDSDurabilityKind.TRANSIENT)])
        wr = dp.create_datawriter(t, wqos)
        rd = dp.create_datareader(t, rqos, L())

        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')

        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        wr.write(data)
        self.assertTrue(handlerTriggered.wait(self.time_out),
                        'Event not triggered')
        self._check_status(saved_status, RequestedIncompatibleQosStatus, [
            Info('total_count', int),
            Info('total_count_change', int),
            Info('last_policy_id', QosPolicyId),
        ])
 def test_take_cond(self):
     dp = dds.DomainParticipant()
     
     gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
     ShapeType = gci.get_class('ShapeType')
     Inner = gci.get_class('Inner')
     
     t = gci.register_topic(dp, 'ST_test_take_cond')
     
     rd = dp.create_datareader(t)
     wr = dp.create_datawriter(t)
     
     qc = rd.create_querycondition(expression='color = %0', parameters=['RED'])
     
     dataR = ShapeType(color='RED',x=1,y=1,z=1,t=Inner(foo=1))
     dataG = ShapeType(color='GREEN',x=1,y=1,z=1,t=Inner(foo=1))
     
     wr.write(dataR)
     wr.write(dataG)
     
     data = rd.take_cond(qc,2)
     self.assertEqual(1, len(data))
     found = [d.color for d, _ in data]
     self.assertIn('RED',found)
Exemple #45
0
    def test_read_instance(self):
        dp = dds.DomainParticipant()
        
        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        t = gci.register_topic(dp, 'ST_test_read_instance')
        
        rd = dp.create_datareader(t)
        wr = dp.create_datawriter(t)
        
        dataR = ShapeType(color='RED',x=1,y=1,z=1,t=Inner(foo=1))
        dataG = ShapeType(color='GREEN',x=1,y=1,z=1,t=Inner(foo=1))
        
        keyR = ShapeType(color='RED',x=0,y=0,z=0,t=Inner(foo=0))
        
        hR = rd.lookup_instance(keyR)
        self.assertIsNone(hR)

        wr.write(dataR)
        wr.write(dataG)
        
        hR = rd.lookup_instance(keyR)
        self.assertIsInstance(hR, int)
        
        data = rd.read_instance(hR,n=2)
        self.assertEqual(1, len(data))
        found = [d.color for d, _ in data]
        self.assertIn('RED',found)
        
        #do it again
        data = rd.read_instance(hR,n=2)
        self.assertEqual(1, len(data))
        found = [d.color for d, _ in data]
        self.assertIn('RED',found)
Exemple #46
0
if __name__ == "__main__":

    qp = QosProfile('file://DDS_VolatileQoS_All.xml', 'DDS VolatileQosProfile')

    # Create participant
    dp = DomainParticipant(qos=qp.get_participant_qos())

    # Create publisher
    pub = dp.create_publisher(qos=qp.get_publisher_qos())

    # Create Subscriber
    sub = dp.create_subscriber(qos=qp.get_subscriber_qos())


    # Generate python classes from IDL file
    gen_info = ddsutil.get_dds_classes_from_idl('example2.idl', 'basic::module_Enum2::Enum2_struct')

    # Register topic
    topic = gen_info.register_topic(dp, "Example2", qp.get_topic_qos())

    # Create a writer
    writer = pub.create_datawriter(topic, qp.get_writer_qos())
    readerQos = qp.get_reader_qos()
    reader = sub.create_datareader(topic, readerQos, DataAvailableListener())
    reader2 = sub.create_datareader(topic, readerQos)

    # Topic data class
    ColorA = gen_info.get_class("basic::module_Enum2::Color")
    ColorZ = gen_info.get_class("basic::enumZ::Color")

    s = gen_info.topic_data_class(long1 = 4, color1 = ColorA.Green, color2=ColorZ.Blue, array=[ColorZ.Red, ColorZ.Blue])
Exemple #47
0

    qp = QosProfile('file://DDS_DefaultQoS_All.xml', 'DDS DefaultQosProfile')

    # Create participant
    dp = DomainParticipant(qos = qp.get_participant_qos())

    # Create publisher
    pub = dp.create_publisher(qos = qp.get_publisher_qos())

    # Create Subscriber
    sub = dp.create_subscriber(qos = qp.get_subscriber_qos())


    # Generate python classes from IDL file
    gen_info = ddsutil.get_dds_classes_from_idl('example1.idl',
                                                'basic::module_SequenceOfStruct::SequenceOfStruct_struct')

    # Type support class
    topic = gen_info.register_topic(dp, "Example1", qp.get_topic_qos())

    # Create a writer
    writer = pub.create_datawriter(topic, qp.get_writer_qos())
    readerQos = qp.get_reader_qos()
    reader = sub.create_datareader(topic, readerQos)

    Inner = gen_info.get_class("basic::module_SequenceOfStruct::Inner")
    inner1 = Inner(short1 = 999, double1=222)
    inner2 = Inner(short1 = 777, double1=333)

    # Topic data class
    s = gen_info.topic_data_class(long1=2,  seq1 = [inner1, inner2])
Exemple #48
0
    def test_liveliness(self):
        handlerTriggered = threading.Event()
        aliveTriggered = threading.Event()
        notaliveTriggered = threading.Event()
        write_time = 0.0
        delay = 0.0
        saved_lost_status = None
        saved_changed_status = None
        class L(Listener):
            def on_liveliness_lost(self, writer, status):
                nonlocal delay
                nonlocal saved_lost_status
                saved_lost_status = status
                handlerTriggered.set()
                delay = time.time() - write_time
        
        class RL(Listener):
            def on_liveliness_changed(self, reader, status):
                nonlocal saved_changed_status
                saved_changed_status = status
                if status.alive_count == 1:
                    aliveTriggered.set()
                else:
                    notaliveTriggered.set()

        qos = Qos(policies=[
                LivelinessQosPolicy(DDSLivelinessKind.MANUAL_BY_TOPIC,
                                    DDSDuration(1,0)),
                OwnershipQosPolicy(DDSOwnershipKind.EXCLUSIVE)
            ])
        dp = DomainParticipant()
        
        topic_name = 'ST_liveliness'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name, qos)

        wr = dp.create_datawriter(t, qos=qos, listener=L())
        rd = dp.create_datareader(t, qos=qos, listener=RL())
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))

        wr.write(data)
        write_time = time.time()
        self.assertTrue(handlerTriggered.wait(self.time_out), 'Event not triggered')
        self.assertGreaterEqual(delay, 1.0 - 0.05, 'Delay not >= 1.0s')
        self.assertTrue(aliveTriggered.wait(self.time_out), 'Alive not signaled to reader')
        self.assertTrue(notaliveTriggered.wait(self.time_out), 'Not Alive not signaled to reader')
        self._check_status(saved_lost_status, LivelinessLostStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            ])
        self._check_status(saved_changed_status, LivelinessChangedStatus, [
            Info('alive_count', int), 
            Info('not_alive_count', int), 
            Info('alive_count_change', int), 
            Info('not_alive_count_change', int), 
            Info('last_publication_handle', int), 
            ])
Exemple #49
0
    def test_data_available_listeners(self):
        dp_on_data_available_event = threading.Event()
        dp_on_publication_matched_event = threading.Event()
        dp_on_subscription_matched_event = threading.Event()

        p_on_publication_matched_event = threading.Event()
        s_on_data_available_event = threading.Event()
        s_on_subscription_matched_event = threading.Event()

        wr_on_publication_matched_event = threading.Event()

        rd_on_data_available_event = threading.Event()
        rd_on_subscription_matched_event = threading.Event()
        
        opm_event = threading.Event()
        osm_event = threading.Event()
        oda_event = threading.Event()
        
        pub_match_status = None
        sub_match_status = None
        
        class DPL(Listener):
            def on_data_available(self,reader):
                dp_on_data_available_event.set()
                oda_event.set()
            def on_publication_matched(self,writer,status):
                dp_on_publication_matched_event.set()
                opm_event.set()
            def on_subscription_matched(self,reader,status):
                dp_on_subscription_matched_event.set()
                osm_event.set()
                
        class PL(Listener):
            def on_publication_matched(self,writer, status):
                p_on_publication_matched_event.set()

        class SL(Listener):
            def on_data_available(self,reader):
                s_on_data_available_event.set()
                oda_event.set()
            def on_subscription_matched(self,reader, status):
                s_on_subscription_matched_event.set()
                osm_event.set()
                
        class WL(Listener):
            def on_publication_matched(self,writer, status):
                nonlocal pub_match_status
                pub_match_status = status
                wr_on_publication_matched_event.set()
                opm_event.set()
        
        class RL(Listener):
            def on_data_available(self,reader):
                rd_on_data_available_event.set()
                oda_event.set()
            def on_subscription_matched(self,reader, status):
                nonlocal sub_match_status
                sub_match_status = status
                rd_on_subscription_matched_event.set()
                osm_event.set()
        
        dp = DomainParticipant(listener=DPL())
        self.assertIsInstance(dp.listener, DPL, 'listener is not a DPL')

        topic_name = 'ST_data_available_listeners'

        gci = ddsutil.get_dds_classes_from_idl(self.idl_path, self.shape_type_name)
        
        t = gci.register_topic(dp, topic_name)
        
        pub = dp.create_publisher(listener=PL())
        self.assertIsInstance(pub.listener, PL, 'listener is not a PL')

        sub = dp.create_subscriber(listener=SL())
        self.assertIsInstance(sub.listener, SL, 'listener is not a SL')

        wr = pub.create_datawriter(t, listener=WL())
        self.assertIsInstance(wr.listener, WL, 'listener is not a WL')

        rd = sub.create_datareader(t, listener=RL())
        self.assertIsInstance(rd.listener, RL, 'listener is not a RL')
        
        ShapeType = gci.get_class('ShapeType')
        Inner = gci.get_class('Inner')
        
        data = ShapeType(color='GREEN', x=22, y=33, z=44, t=Inner(foo=55))
        
#         time.sleep(1.0)
        
        wr.write(data)

        
        TriggerState = collections.namedtuple('TriggerState',[
            'opm',
            'osm',
            'oda',
            ])

        actual_trigger_state = TriggerState(
            opm_event.wait(self.time_out), 
            osm_event.wait(self.time_out), 
            oda_event.wait(self.time_out))
        print(actual_trigger_state)
        
        self.assertEqual(
            actual_trigger_state,
            TriggerState(True, True, True)
            , 'Not all events triggered')

        EventState = collections.namedtuple('EventState',[
            'dp_opm',
            'p_opm',
            'wr_opm',
            'dp_osm',
            's_osm',
            'rd_osm',
            'dp_oda',
            's_oda',
            'rd_oda',
            ])
        
        actual_event_state = EventState(
            dp_on_publication_matched_event.is_set(),
            p_on_publication_matched_event.is_set(),
            wr_on_publication_matched_event.is_set(),
            dp_on_subscription_matched_event.is_set(),
            s_on_subscription_matched_event.is_set(),
            rd_on_subscription_matched_event.is_set(),
            dp_on_data_available_event.is_set(),
            s_on_data_available_event.is_set(),
            rd_on_data_available_event.is_set(),
            )
        expected_event_state = EventState(
            False, False, True,
            False, False, True,
            False, False, True,
            )
        print(actual_event_state)
        self.assertEqual(actual_event_state, expected_event_state, 'Incorrect listeners triggered')
#         time.sleep(1.0)
#         self.assertTrue(wr_on_publication_matched_event.wait(self.time_out), 'wr_on_publication_matched_event')
#         self.assertTrue(rd_on_subscription_matched_event.wait(self.time_out), 'rd_on_subscription_matched_event')
        
        self._check_status(pub_match_status, PublicationMatchedStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            Info('current_count', int), 
            Info('current_count_change', int), 
            Info('last_subscription_handle', int),
            ])
        self._check_status(sub_match_status, SubscriptionMatchedStatus, [
            Info('total_count', int), 
            Info('total_count_change', int), 
            Info('current_count', int), 
            Info('current_count_change', int), 
            Info('last_publication_handle', int),
            ])