Exemple #1
0
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)
Exemple #2
0
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