test_empty_service.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # Software License Agreement (BSD License)
00003 #
00004 # Copyright (c) 2008, Willow Garage, Inc.
00005 # All rights reserved.
00006 #
00007 # Redistribution and use in source and binary forms, with or without
00008 # modification, are permitted provided that the following conditions
00009 # are met:
00010 #
00011 #  * Redistributions of source code must retain the above copyright
00012 #    notice, this list of conditions and the following disclaimer.
00013 #  * Redistributions in binary form must reproduce the above
00014 #    copyright notice, this list of conditions and the following
00015 #    disclaimer in the documentation and/or other materials provided
00016 #    with the distribution.
00017 #  * Neither the name of Willow Garage, Inc. nor the names of its
00018 #    contributors may be used to endorse or promote products derived
00019 #    from this software without specific prior written permission.
00020 #
00021 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 # POSSIBILITY OF SUCH DAMAGE.
00033 
00034 ## Integration test for empty services to test serializers
00035 ## and transport
00036 
00037 PKG = 'test_rospy'
00038 NAME = 'empty_service'
00039 
00040 import sys, time
00041 import unittest
00042 
00043 import rospy, rostest
00044 from test_rospy.srv import *
00045 
00046 EMPTY_SERVICE      = 'empty_service'
00047 EMPTY_RETURN_SERVICE = 'empty_return_service'
00048 EMPTY_REQ_SERVICE  = 'empty_req_service'
00049 EMPTY_RESP_SERVICE = 'empty_resp_service'
00050 
00051 FAKE_SECRET = 123456
00052 
00053 WAIT_TIMEOUT = 10.0 #s
00054 
00055 def handle_empty(req):
00056     print "Returning empty"
00057     return EmptySrvResponse()
00058 
00059 def handle_return_empty(req):
00060     "print returning empty list"
00061     return []
00062 
00063 ## handle empty request 
00064 def handle_empty_req(req):
00065     print "Returning fake_secret"
00066     return EmptyReqSrvResponse(FAKE_SECRET)
00067 ## handle empty response 
00068 def handle_empty_resp(req):
00069     if req.fake_secret == FAKE_SECRET:
00070         print "Request validated, returning empty"        
00071         return EmptyRespSrvResponse()
00072     else:
00073         print "Request did not validate, returning None"
00074 
00075 def empty_service():
00076     rospy.init_node(NAME)
00077     s1 = rospy.Service(EMPTY_SERVICE, EmptySrv, handle_empty)
00078     s2 = rospy.Service(EMPTY_REQ_SERVICE, EmptyReqSrv, handle_empty_req)
00079     s3 = rospy.Service(EMPTY_RESP_SERVICE, EmptyRespSrv, handle_empty_resp)
00080     s4 = rospy.Service(EMPTY_RETURN_SERVICE, EmptySrv, handle_return_empty)
00081     rospy.spin()
00082 
00083 class TestEmptyServiceClient(unittest.TestCase):
00084         
00085     def _test(self, name, srv, req):
00086         rospy.wait_for_service(name, WAIT_TIMEOUT)        
00087         s = rospy.ServiceProxy(name, srv)
00088         resp = s.call(req)
00089         self.assert_(resp is not None)
00090         return resp
00091 
00092     # test that __call__ and s.call() work with no-args on an empty request
00093     def test_call_empty(self):
00094         rospy.wait_for_service(EMPTY_REQ_SERVICE, WAIT_TIMEOUT)        
00095         s = rospy.ServiceProxy(EMPTY_REQ_SERVICE, EmptyReqSrv)
00096         resp = s()
00097         self.assertEquals(FAKE_SECRET, resp.fake_secret, 
00098                           "fake_secret fields is not set as expected")        
00099         resp = s.call()
00100         self.assertEquals(FAKE_SECRET, resp.fake_secret, 
00101                           "fake_secret fields is not set as expected")        
00102         
00103     def test_empty(self):
00104         self._test(EMPTY_SERVICE, EmptySrv, EmptySrvRequest())
00105     # test that an empty return service handler can return an empty list
00106     def test_return_empty(self):
00107         self._test(EMPTY_RETURN_SERVICE, EmptySrv, EmptySrvRequest())
00108     def test_empty_req(self):
00109         resp = self._test(EMPTY_REQ_SERVICE, EmptyReqSrv,
00110                           EmptyReqSrvRequest())
00111         self.assertEquals(FAKE_SECRET, resp.fake_secret, 
00112                           "fake_secret fields is not set as expected")        
00113     def test_empty_resp(self):
00114         self._test(EMPTY_RESP_SERVICE, EmptyRespSrv,
00115                    EmptyRespSrvRequest(FAKE_SECRET))
00116         
00117 if __name__ == '__main__':
00118     if '--service' in sys.argv:
00119         empty_service()
00120     else:
00121         rostest.run(PKG, 'rospy_empty_service', TestEmptyServiceClient, sys.argv)


test_rospy
Author(s): Ken Conley/kwc@willowgarage.com
autogenerated on Sat Dec 28 2013 17:36:20