def __init__(self, reader, topic_type, args):
     self.reader = reader
     self.topic_type = topic_type
     self.console_print = not args.filename
     self.enable_json = args.json
     self.enable_view = args.verbose
     self.dp_key = reader.participant.guid
     self.tracked_entities = {}
     self.tracked_disposed_entities = {}
     self.qoses = {}
     self.strings = ""
     self.read_cond = ReadCondition(reader, ViewState.Any | InstanceState.Alive | SampleState.NotRead)
     self.disposed_cond = ReadCondition(reader, ViewState.Any | InstanceState.NotAliveDisposed | SampleState.Any)
def test_condition_cleanup(common_setup):
    reader = DataReader(common_setup.dp, common_setup.tp)
    condition = ReadCondition(reader, 1234)

    del reader
    import gc
    gc.collect()

    del condition
Beispiel #3
0
def test_waitset_wait(common_setup):
    ws = WaitSet(common_setup.dp)

    rc1 = ReadCondition(common_setup.dr,
                        ViewState.Any | InstanceState.Any | SampleState.Any)
    ws.attach(rc1)

    assert ws.wait(duration(milliseconds=5)) == 0

    common_setup.dw.write(Message(message="Hi!"))

    assert ws.wait(duration(seconds=1)) == 1

    rc2 = ReadCondition(
        common_setup.dr,
        ViewState.Any | InstanceState.Any | SampleState.NotRead)
    ws.attach(rc2)

    assert ws.wait(duration(seconds=1)) == 2
Beispiel #4
0
def test_waitset_attachment(common_setup):
    ws = WaitSet(common_setup.dp)
    rc = ReadCondition(common_setup.dr,
                       ViewState.Any | InstanceState.Any | SampleState.Any)

    ws.attach(rc)
    assert ws.is_attached(rc)

    ws.detach(rc)
    assert not ws.is_attached(rc)
Beispiel #5
0
def discover_datatype(participant, topic_name: str):
    drp = BuiltinDataReader(participant, BuiltinTopicDcpsPublication)
    drpc = ReadCondition(drp, InstanceState.Alive)
    drs = BuiltinDataReader(participant, BuiltinTopicDcpsSubscription)
    drsc = ReadCondition(drs, InstanceState.Alive)
    ws = WaitSet(participant)
    ws.attach(drp)
    ws.attach(drs)

    while True:
        for s in drp.take_iter(condition=drpc,
                               timeout=duration(milliseconds=1)):
            if s.topic_name == topic_name and s.type_id is not None:
                return get_types_for_typeid(participant, s.type_id,
                                            duration(seconds=5))
        for s in drs.take_iter(condition=drsc,
                               timeout=duration(milliseconds=1)):
            if s.topic_name == topic_name and s.type_id is not None:
                return get_types_for_typeid(participant, s.type_id,
                                            duration(seconds=5))

        ws.wait(duration(milliseconds=4))
Beispiel #6
0
 def __init__(self, args, dp, qos, waitset):
     self.topic_name = args.topic
     self.seq = -1
     try:
         int_topic = Topic(dp, self.topic_name + "int", Integer, qos=qos)
         str_topic = Topic(dp, self.topic_name, String, qos=qos)
         self.int_writer = DataWriter(dp, int_topic, qos=qos)
         self.int_reader = DataReader(dp, int_topic, qos=qos)
         self.str_writer = DataWriter(dp, str_topic, qos=qos)
         self.str_reader = DataReader(dp, str_topic, qos=qos)
     except DDSException:
         raise SystemExit("Error: The arguments inputted are considered invalid for cyclonedds.")
     self.read_cond = ReadCondition(self.int_reader, ViewState.Any | InstanceState.Alive | SampleState.NotRead)
     waitset.attach(self.read_cond)
def test_readcondition_get_mask(common_setup):
    mask = SampleState.Any | InstanceState.Any | ViewState.Any
    rc = ReadCondition(common_setup.dr, mask)

    assert rc.mask == rc.get_mask() == mask

    mask = SampleState.NotRead | InstanceState.NotAliveNoWriters | ViewState.Old

    assert rc.mask == rc.get_mask() != mask

    rc = ReadCondition(common_setup.dr, mask)

    assert rc.mask == rc.get_mask() == mask
Beispiel #8
0
    def __init__(self, args, dp, eqos, waitset):
        self.dp = dp

        if args.topic:
            self.topic_name = args.topic
            self.dynamic = False
        else:
            self.topic_name = args.dynamic
            self.dynamic = True

        self.seq = -1  # Sequence number counter
        self.eqos = eqos  # Entity qos
        self.entities = {}  # Store writers and readers
        self.file = args.filename  # Write to file or not
        self.track_samples = {}  # Track read samples if needs to write to file
        try:
            self.listener = QosListener()
            self.pub = Publisher(dp, qos=self.eqos.publisher_qos)
            self.sub = Subscriber(dp,
                                  qos=self.eqos.subscriber_qos,
                                  listener=self.listener)

            if self.dynamic:
                ds, tmap = discover_datatype(self.dp, self.topic_name)
                self.entity = self.create_entities(ds, self.topic_name)
                self.type_map = tmap
                print(f"Discovered datatype dynamically:{ds}")
            else:
                for type in datatypes:
                    self.entities[type] = self.create_entities(
                        type, self.topic_name + type.postfix())

        except DDSException:
            raise Exception(
                "The arguments inputted are considered invalid for cyclonedds."
            )

        self.read_cond = ReadCondition(
            (self.entities[Integer]
             if not self.dynamic else self.entity).reader,
            ViewState.Any | InstanceState.Alive | SampleState.NotRead)
        waitset.attach(self.read_cond)
def test_readcondition_read(common_setup):
    rc = ReadCondition(
        common_setup.dr,
        SampleState.Any | ViewState.Any | InstanceState.NotAliveDisposed)

    assert not rc.triggered

    messages = [Message(message=f"Hi {i}!") for i in range(5)]
    for m in messages:
        common_setup.dw.write(m)

    received = common_setup.dr.read(N=5)

    assert messages == received

    common_setup.dw.dispose(messages[1])
    assert rc.triggered

    received = common_setup.dr.read(condition=rc)

    assert len(received) == 1 and received[0] == messages[1]
def test_readcondition_read(common_setup):
    tp = Topic(common_setup.dp, "hi_sayer", MessageKeyed)
    dr = DataReader(common_setup.dp, tp)
    dw = DataWriter(common_setup.dp, tp)
    rc = ReadCondition(dr, SampleState.Any | ViewState.Any | InstanceState.NotAliveDisposed)

    assert not rc.triggered

    messages = [MessageKeyed(user_id=i, message=f"Hi {i}!") for i in range(5)]
    for m in messages:
        dw.write(m)

    received = dr.read(N=5)

    assert messages == received

    dw.dispose(messages[1])
    assert rc.triggered

    received = dr.read(condition=rc)

    assert len(received) == 1 and received[0] == messages[1]
Beispiel #11
0
def test_readcondition_init(common_setup):
    rc = ReadCondition(common_setup.dr,
                       SampleState.Any | InstanceState.Any | ViewState.Any)
    assert isgoodentity(rc)
Beispiel #12
0
def test_readcondition_get_reader(common_setup):
    rc = ReadCondition(common_setup.dr,
                       SampleState.Any | InstanceState.Any | ViewState.Any)
    assert rc.get_datareader() == common_setup.dr