def custom__handle_request(self, transport, request): # pragma: no cover import struct from rospy.impl.tcpros_service import convert_return_to_response from rospy.service import ServiceException try: # convert return type to response Message instance response = convert_return_to_response(self.handler(request), self.response_class) self.seq += 1 # ok byte transport.write_buff.write(struct.pack('<B', 1)) transport.send_message(response, self.seq) except ServiceException as e: rospy.core.rospydebug("handler raised ServiceException: %s" % e) self._write_service_error(transport, "service cannot process request: %s" % e) except Exception as e: # rospy.logerr("Error processing request: %s\n%s" % (e, traceback.print_exc())) self._write_service_error(transport, "error processing request: %s" % e)
def custom__handle_request(self, transport, request): # pragma: no cover import struct from rospy.impl.tcpros_service import convert_return_to_response from rospy.service import ServiceException try: # convert return type to response Message instance response = convert_return_to_response(self.handler(request), self.response_class) self.seq += 1 # ok byte transport.write_buff.write(struct.pack('<B', 1)) transport.send_message(response, self.seq) except ServiceException as e: rospy.core.rospydebug("handler raised ServiceException: %s" % e) self._write_service_error(transport, "service cannot process request: %s" % e) except Exception as e: # rospy.logerr("Error processing request: %s\n%s" % (e, traceback.print_exc())) self._write_service_error(transport, "error processing request: %s" % e)
def test_convert_return_to_response(self): import rospy from rospy.impl.tcpros_service import convert_return_to_response from test_rosmaster.srv import AddTwoIntsResponse cls = AddTwoIntsResponse v = cls(3) # test various ways that a user could reasonable return a # value for a single-arg message. This is actually our hardest # case. self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response(3, cls)) self.assertEquals(v, convert_return_to_response((3), cls)) self.assertEquals(v, convert_return_to_response([3], cls)) self.assertEquals(v, convert_return_to_response({'sum': 3}, cls)) for bad in [[1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s" % str(bad)) except rospy.ServiceException: pass # test multi-arg services from test_rospy.srv import MultipleAddTwoIntsResponse cls = MultipleAddTwoIntsResponse v = cls(1, 2) self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response((1, 2), cls)) self.assertEquals(v, convert_return_to_response([1, 2], cls)) self.assertEquals(v, convert_return_to_response({ 'ab': 1, 'cd': 2 }, cls)) for bad in [1, AddTwoIntsResponse(), [1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s" % str(bad)) except rospy.ServiceException: pass # test response with single, array field from test_rospy.srv import ListReturnResponse cls = ListReturnResponse v = cls([1, 2, 3]) self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response(((1, 2, 3), ), cls)) self.assertEquals(v, convert_return_to_response(([1, 2, 3], ), cls)) self.assertEquals(v, convert_return_to_response([[1, 2, 3]], cls)) self.assertEquals(v, convert_return_to_response({'abcd': [1, 2, 3]}, cls)) for bad in [[1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s" % str(bad)) except rospy.ServiceException: pass # test with empty response from test_rospy.srv import EmptySrvResponse cls = EmptySrvResponse v = cls() # - only valid return values are empty list, empty dict and a response instance self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response([], cls)) self.assertEquals(v, convert_return_to_response({}, cls)) # #2185: currently empty does not do any checking whatsoever, # disabling this test as it is not convert()s fault if 0: for bad in [1, AddTwoIntsResponse(), [1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s" % str(bad)) except rospy.ServiceException: pass
def test_convert_return_to_response(self): import rospy from rospy.impl.tcpros_service import convert_return_to_response from test_ros.srv import AddTwoIntsResponse cls = AddTwoIntsResponse v = cls(3) # test various ways that a user could reasonable return a # value for a single-arg message. This is actually our hardest # case. self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response(3, cls)) self.assertEquals(v, convert_return_to_response((3), cls)) self.assertEquals(v, convert_return_to_response([3], cls)) self.assertEquals(v, convert_return_to_response({'sum':3}, cls)) for bad in [[1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s"%str(bad)) except rospy.ServiceException: pass # test multi-arg services from test_rospy.srv import MultipleAddTwoIntsResponse cls = MultipleAddTwoIntsResponse v = cls(1, 2) self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response((1, 2), cls)) self.assertEquals(v, convert_return_to_response([1, 2], cls)) self.assertEquals(v, convert_return_to_response({'ab':1, 'cd': 2}, cls)) for bad in [1, AddTwoIntsResponse(), [1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s"%str(bad)) except rospy.ServiceException: pass # test response with single, array field from test_rospy.srv import ListReturnResponse cls = ListReturnResponse v = cls([1, 2, 3]) self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response(((1, 2, 3),), cls)) self.assertEquals(v, convert_return_to_response(([1, 2, 3],), cls)) self.assertEquals(v, convert_return_to_response([[1, 2, 3]], cls)) self.assertEquals(v, convert_return_to_response({'abcd':[1,2,3]}, cls)) for bad in [[1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s"%str(bad)) except rospy.ServiceException: pass # test with empty response from test_rospy.srv import EmptySrvResponse cls = EmptySrvResponse v = cls() # - only valid return values are empty list, empty dict and a response instance self.assertEquals(v, convert_return_to_response(v, cls)) self.assertEquals(v, convert_return_to_response([], cls)) self.assertEquals(v, convert_return_to_response({}, cls)) # #2185: currently empty does not do any checking whatsoever, # disabling this test as it is not convert()s fault if 0: for bad in [1, AddTwoIntsResponse(), [1, 2, 3], {'fake': 1}]: try: convert_return_to_response(bad, cls) self.fail("should have raised: %s"%str(bad)) except rospy.ServiceException: pass