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
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
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)
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))
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
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]
def test_readcondition_init(common_setup): rc = ReadCondition(common_setup.dr, SampleState.Any | InstanceState.Any | ViewState.Any) assert isgoodentity(rc)
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