Skip to content

Commit 5d9869a

Browse files
committed
Add call service timeout test to rosbridge_server
1 parent 34c259f commit 5d9869a

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

rosbridge_server/test/websocket/call_service.test.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env python
22
import os
33
import sys
4+
import time
45
import unittest
56

67
from rclpy.callback_groups import ReentrantCallbackGroup
@@ -55,3 +56,55 @@ def service_cb(req, res):
5556
self.assertEqual(responses[0]["result"], True)
5657

5758
node.destroy_service(service)
59+
60+
def service_long_cb(req, res):
61+
time.sleep(0.2)
62+
self.assertTrue(req.data)
63+
res.success = True
64+
res.message = "Hello, world!"
65+
return res
66+
67+
service = node.create_service(
68+
SetBool, "/test_service_long", service_long_cb, callback_group=ReentrantCallbackGroup()
69+
)
70+
71+
responses_future, ws_client.message_handler = expect_messages(
72+
2, "WebSocket", node.get_logger()
73+
)
74+
responses_future.add_done_callback(lambda _: node.executor.wake())
75+
76+
ws_client.sendJson(
77+
{
78+
"op": "call_service",
79+
"type": "std_srvs/SetBool",
80+
"service": "/test_service_long",
81+
"args": {"data": True},
82+
"timeout": 0.1,
83+
}
84+
)
85+
86+
ws_client.sendJson(
87+
{
88+
"op": "call_service",
89+
"type": "std_srvs/SetBool",
90+
"service": "/test_service_long",
91+
"args": {"data": True},
92+
"timeout": 0.5,
93+
}
94+
)
95+
96+
responses = await responses_future
97+
self.assertEqual(len(responses), 2)
98+
self.assertEqual(responses[0]["op"], "service_response")
99+
self.assertEqual(responses[0]["service"], "/test_service_long")
100+
self.assertEqual(
101+
responses[0]["values"], "Timeout exceeded while waiting for service response"
102+
)
103+
self.assertEqual(responses[0]["result"], False)
104+
105+
self.assertEqual(responses[1]["op"], "service_response")
106+
self.assertEqual(responses[1]["service"], "/test_service_long")
107+
self.assertEqual(responses[1]["values"], {"success": True, "message": "Hello, world!"})
108+
self.assertEqual(responses[1]["result"], True)
109+
110+
node.destroy_service(service)

0 commit comments

Comments
 (0)