@@ -24,6 +24,13 @@ def trigger_cb(self, request, response):
24
24
response .message = "called trigger service successfully"
25
25
return response
26
26
27
+ def trigger_long_cb (self , request , response ):
28
+ """Helper callback function for a long running test service with no arguments."""
29
+ time .sleep (0.5 )
30
+ response .success = True
31
+ response .message = "called trigger service successfully"
32
+ return response
33
+
27
34
def set_bool_cb (self , request , response ):
28
35
"""Helper callback function for a test service with arguments."""
29
36
response .success = request .data
@@ -51,6 +58,12 @@ def setUp(self):
51
58
self .trigger_cb ,
52
59
callback_group = self .cb_group ,
53
60
)
61
+ self .trigger_long_srv = self .node .create_service (
62
+ Trigger ,
63
+ self .node .get_name () + "/trigger_long" ,
64
+ self .trigger_long_cb ,
65
+ callback_group = self .cb_group ,
66
+ )
54
67
self .set_bool_srv = self .node .create_service (
55
68
SetBool ,
56
69
self .node .get_name () + "/set_bool" ,
@@ -63,8 +76,9 @@ def setUp(self):
63
76
64
77
def tearDown (self ):
65
78
self .executor .remove_node (self .node )
66
- self .node .destroy_node ()
67
79
self .executor .shutdown ()
80
+ self .exec_thread .join ()
81
+ self .node .destroy_node ()
68
82
rclpy .shutdown ()
69
83
70
84
def test_missing_arguments (self ):
@@ -99,12 +113,6 @@ def cb(msg, cid=None, compression="none"):
99
113
100
114
s .call_service (send_msg )
101
115
102
- timeout = 1.0
103
- start = time .time ()
104
- while time .time () - start < timeout :
105
- if received ["arrived" ]:
106
- break
107
-
108
116
self .assertTrue (received ["arrived" ])
109
117
values = received ["msg" ]["values" ]
110
118
self .assertEqual (values ["success" ], True )
@@ -136,12 +144,6 @@ def cb(msg, cid=None, compression="none"):
136
144
137
145
s .call_service (send_msg )
138
146
139
- timeout = 1.0
140
- start = time .time ()
141
- while time .time () - start < timeout :
142
- if received ["arrived" ]:
143
- break
144
-
145
147
self .assertTrue (received ["arrived" ])
146
148
values = received ["msg" ]["values" ]
147
149
self .assertEqual (values ["success" ], True )
@@ -175,11 +177,45 @@ def cb(msg, cid=None, compression="none"):
175
177
176
178
s .call_service (send_msg )
177
179
178
- timeout = 1.0
179
- start = time .time ()
180
- while time .time () - start < timeout :
181
- if received ["arrived" ]:
182
- break
180
+ self .assertTrue (received ["arrived" ])
181
+ self .assertFalse (received ["msg" ]["result" ])
182
+
183
+ def test_call_service_timeout (self ):
184
+
185
+ client = self .node .create_client (Trigger , self .trigger_long_srv .srv_name )
186
+ assert client .wait_for_service (1.0 )
187
+
188
+ proto = Protocol ("test_call_service_timeout" , self .node )
189
+ s = CallService (proto )
190
+ send_msg = loads (
191
+ dumps ({"op" : "call_service" , "service" : self .trigger_long_srv .srv_name , "timeout" : 2.0 })
192
+ )
193
+
194
+ received = {"msg" : None , "arrived" : False }
195
+
196
+ def cb (msg , cid = None , compression = "none" ):
197
+ print ("Received message" )
198
+ received ["msg" ] = msg
199
+ received ["arrived" ] = True
200
+
201
+ proto .send = cb
202
+
203
+ s .call_service (send_msg )
204
+
205
+ self .assertTrue (received ["arrived" ])
206
+ self .assertTrue (received ["msg" ]["result" ])
207
+ values = received ["msg" ]["values" ]
208
+ self .assertEqual (values ["success" ], True )
209
+ self .assertEqual (values ["message" ], "called trigger service successfully" )
210
+
211
+ send_msg = loads (
212
+ dumps ({"op" : "call_service" , "service" : self .trigger_long_srv .srv_name , "timeout" : 0.1 })
213
+ )
214
+ received = {"msg" : None , "arrived" : False }
215
+
216
+ s .call_service (send_msg )
183
217
184
218
self .assertTrue (received ["arrived" ])
185
219
self .assertFalse (received ["msg" ]["result" ])
220
+ values = received ["msg" ]["values" ]
221
+ self .assertEqual (values , "Timeout exceeded while waiting for service response" )
0 commit comments