@@ -38,23 +38,35 @@ def tearDown(self) -> None:
3838 self .executor .shutdown ()
3939 rclpy .shutdown ()
4040
41+ def assertTopicSubscribed (self , topic : str , timeout : float = 1.0 ) -> None :
42+ start_time = time .monotonic ()
43+ while not is_topic_subscribed (self .node , topic ):
44+ time .sleep (0.05 )
45+ if time .monotonic () - start_time > timeout :
46+ self .fail (f"Timed out waiting for topic '{ topic } ' to be subscribed." )
47+
48+ def assertTopicNotSubscribed (self , topic : str , timeout : float = 1.0 ) -> None :
49+ start_time = time .monotonic ()
50+ while is_topic_subscribed (self .node , topic ):
51+ time .sleep (0.05 )
52+ if time .monotonic () - start_time > timeout :
53+ self .fail (f"Timed out waiting for topic '{ topic } ' to be unsubscribed." )
54+
4155 def test_subscribe (self ) -> None :
4256 """Register a publisher on a clean topic with a good msg type."""
4357 topic = "/test_subscribe"
4458 msg_type = "std_msgs/String"
4559 client = "client_test_subscribe"
4660
4761 self .assertFalse (topic in manager ._subscribers )
48- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
62+ self .assertTopicNotSubscribed ( topic )
4963 manager .subscribe (client , topic , lambda _ : None , self .node , msg_type )
50- time .sleep (0.05 )
5164 self .assertTrue (topic in manager ._subscribers )
52- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
65+ self .assertTopicSubscribed ( topic )
5366
5467 manager .unsubscribe (client , topic )
55- time .sleep (0.05 )
5668 self .assertFalse (topic in manager ._subscribers )
57- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
69+ self .assertTopicNotSubscribed ( topic )
5870
5971 def test_register_subscriber_multiclient (self ) -> None :
6072 topic = "/test_register_subscriber_multiclient"
@@ -63,26 +75,22 @@ def test_register_subscriber_multiclient(self) -> None:
6375 client2 = "client_test_register_subscriber_multiclient_2"
6476
6577 self .assertFalse (topic in manager ._subscribers )
66- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
78+ self .assertTopicNotSubscribed ( topic )
6779 manager .subscribe (client1 , topic , lambda _ : None , self .node , msg_type )
68- time .sleep (0.05 )
6980 self .assertTrue (topic in manager ._subscribers )
70- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
81+ self .assertTopicSubscribed ( topic )
7182
7283 manager .subscribe (client2 , topic , lambda _ : None , self .node , msg_type )
73- time .sleep (0.05 )
7484 self .assertTrue (topic in manager ._subscribers )
75- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
85+ self .assertTopicSubscribed ( topic )
7686
7787 manager .unsubscribe (client1 , topic )
78- time .sleep (0.05 )
7988 self .assertTrue (topic in manager ._subscribers )
80- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
89+ self .assertTopicSubscribed ( topic )
8190
8291 manager .unsubscribe (client2 , topic )
83- time .sleep (0.05 )
8492 self .assertFalse (topic in manager ._subscribers )
85- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
93+ self .assertTopicNotSubscribed ( topic )
8694
8795 def test_register_publisher_conflicting_types (self ) -> None :
8896 topic = "/test_register_publisher_conflicting_types"
@@ -91,11 +99,10 @@ def test_register_publisher_conflicting_types(self) -> None:
9199 client = "client_test_register_publisher_conflicting_types"
92100
93101 self .assertFalse (topic in manager ._subscribers )
94- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
102+ self .assertTopicNotSubscribed ( topic )
95103 manager .subscribe (client , topic , lambda _ : None , self .node , msg_type )
96- time .sleep (0.05 )
97104 self .assertTrue (topic in manager ._subscribers )
98- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
105+ self .assertTopicSubscribed ( topic )
99106
100107 self .assertRaises (
101108 TypeConflictException ,
@@ -115,43 +122,39 @@ def test_register_multiple_publishers(self) -> None:
115122
116123 self .assertFalse (topic1 in manager ._subscribers )
117124 self .assertFalse (topic2 in manager ._subscribers )
118- self .assertFalse ( is_topic_subscribed ( self . node , topic1 ) )
119- self .assertFalse ( is_topic_subscribed ( self . node , topic2 ) )
125+ self .assertTopicNotSubscribed ( topic1 )
126+ self .assertTopicNotSubscribed ( topic2 )
120127
121128 manager .subscribe (client , topic1 , lambda _ : None , self .node , msg_type )
122- time .sleep (0.05 )
123129 self .assertTrue (topic1 in manager ._subscribers )
124- self .assertTrue ( is_topic_subscribed ( self . node , topic1 ) )
130+ self .assertTopicSubscribed ( topic1 )
125131 self .assertFalse (topic2 in manager ._subscribers )
126- self .assertFalse ( is_topic_subscribed ( self . node , topic2 ) )
132+ self .assertTopicNotSubscribed ( topic2 )
127133
128134 manager .subscribe (client , topic2 , lambda _ : None , self .node , msg_type )
129- time .sleep (0.05 )
130135 self .assertTrue (topic1 in manager ._subscribers )
131- self .assertTrue ( is_topic_subscribed ( self . node , topic1 ) )
136+ self .assertTopicSubscribed ( topic1 )
132137 self .assertTrue (topic2 in manager ._subscribers )
133- self .assertTrue ( is_topic_subscribed ( self . node , topic2 ) )
138+ self .assertTopicSubscribed ( topic2 )
134139
135140 manager .unsubscribe (client , topic1 )
136- time .sleep (0.05 )
137141 self .assertFalse (topic1 in manager ._subscribers )
138- self .assertFalse ( is_topic_subscribed ( self . node , topic1 ) )
142+ self .assertTopicNotSubscribed ( topic1 )
139143 self .assertTrue (topic2 in manager ._subscribers )
140- self .assertTrue ( is_topic_subscribed ( self . node , topic2 ) )
144+ self .assertTopicSubscribed ( topic2 )
141145
142146 manager .unsubscribe (client , topic2 )
143- time .sleep (0.05 )
144147 self .assertFalse (topic1 in manager ._subscribers )
145- self .assertFalse ( is_topic_subscribed ( self . node , topic1 ) )
148+ self .assertTopicNotSubscribed ( topic1 )
146149 self .assertFalse (topic2 in manager ._subscribers )
147- self .assertFalse ( is_topic_subscribed ( self . node , topic2 ) )
150+ self .assertTopicNotSubscribed ( topic2 )
148151
149152 def test_register_no_msgtype (self ) -> None :
150153 topic = "/test_register_no_msgtype"
151154 client = "client_test_register_no_msgtype"
152155
153156 self .assertFalse (topic in manager ._subscribers )
154- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
157+ self .assertTopicNotSubscribed ( topic )
155158 self .assertRaises (
156159 TopicNotEstablishedException , manager .subscribe , client , topic , None , self .node
157160 )
@@ -160,26 +163,24 @@ def test_register_infer_topictype(self) -> None:
160163 topic = "/test_register_infer_topictype"
161164 client = "client_test_register_infer_topictype"
162165
163- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
166+ self .assertTopicNotSubscribed ( topic )
164167
165168 subscriber_qos = QoSProfile (
166169 depth = 10 ,
167170 durability = DurabilityPolicy .TRANSIENT_LOCAL ,
168171 )
169172 self .node .create_subscription (String , topic , lambda * _args : None , subscriber_qos )
170173
171- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
174+ self .assertTopicSubscribed ( topic )
172175 self .assertFalse (topic in manager ._subscribers )
173176
174177 manager .subscribe (client , topic , lambda _ : None , self .node )
175- time .sleep (0.05 )
176178 self .assertTrue (topic in manager ._subscribers )
177- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
179+ self .assertTopicSubscribed ( topic )
178180
179181 manager .unsubscribe (client , topic )
180- time .sleep (0.05 )
181182 self .assertFalse (topic in manager ._subscribers )
182- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
183+ self .assertTopicSubscribed ( topic )
183184
184185 def test_register_multiple_notopictype (self ) -> None :
185186 topic = "/test_register_multiple_notopictype"
@@ -188,34 +189,30 @@ def test_register_multiple_notopictype(self) -> None:
188189 client2 = "client_test_register_multiple_notopictype_2"
189190
190191 self .assertFalse (topic in manager ._subscribers )
191- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
192+ self .assertTopicNotSubscribed ( topic )
192193
193194 manager .subscribe (client1 , topic , lambda _ : None , self .node , msg_type )
194- time .sleep (0.05 )
195195 self .assertTrue (topic in manager ._subscribers )
196- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
196+ self .assertTopicSubscribed ( topic )
197197
198198 manager .subscribe (client2 , topic , lambda _ : None , self .node )
199- time .sleep (0.05 )
200199 self .assertTrue (topic in manager ._subscribers )
201- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
200+ self .assertTopicSubscribed ( topic )
202201
203202 manager .unsubscribe (client1 , topic )
204- time .sleep (0.05 )
205203 self .assertTrue (topic in manager ._subscribers )
206- self .assertTrue ( is_topic_subscribed ( self . node , topic ) )
204+ self .assertTopicSubscribed ( topic )
207205
208206 manager .unsubscribe (client2 , topic )
209- time .sleep (0.05 )
210207 self .assertFalse (topic in manager ._subscribers )
211- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
208+ self .assertTopicNotSubscribed ( topic )
212209
213210 def test_subscribe_not_registered (self ) -> None :
214211 topic = "/test_subscribe_not_registered"
215212 client = "client_test_subscribe_not_registered"
216213
217214 self .assertFalse (topic in manager ._subscribers )
218- self .assertFalse ( is_topic_subscribed ( self . node , topic ) )
215+ self .assertTopicNotSubscribed ( topic )
219216 self .assertRaises (
220217 TopicNotEstablishedException , manager .subscribe , client , topic , None , self .node
221218 )
0 commit comments