test_rosservice_command_line_offline.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # Software License Agreement (BSD License)
00003 #
00004 # Copyright (c) 2009, 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 import os
00035 import sys 
00036 import unittest
00037 import cStringIO
00038 import time
00039         
00040 import rostest
00041 
00042 from subprocess import Popen, PIPE, check_call, call
00043 
00044 class TestRosserviceOffline(unittest.TestCase):
00045 
00046     def setUp(self):
00047         pass
00048 
00049     ## test that the usage command works
00050     def test_cmd_help(self):
00051         cmd = 'rosservice'
00052         sub = ['args', 'info', 'list', 'call', 'type', 'uri', 'find']
00053         
00054         output = Popen([cmd], stdout=PIPE).communicate()[0]
00055         self.assert_('Commands' in output)
00056         output = Popen([cmd, '-h'], stdout=PIPE).communicate()[0]
00057         self.assert_('Commands' in output)
00058         # make sure all the commands are in the usage
00059         for c in sub:
00060             self.assert_("%s %s"%(cmd, c) in output, output)            
00061 
00062         for c in sub:
00063             output = Popen([cmd, c, '-h'], stdout=PIPE).communicate()
00064             self.assert_("Usage:" in output[0], output)
00065             # make sure usage refers to the command
00066             self.assert_("%s %s"%(cmd, c) in output[0], output)
00067 
00068     def test_offline(self):
00069         cmd = 'rosservice'
00070 
00071         # point at a different 'master'
00072         env = os.environ.copy()
00073         env['ROS_MASTER_URI'] = 'http://localhost:11312'
00074         kwds = { 'env': env, 'stdout': PIPE, 'stderr': PIPE}
00075 
00076         msg = "ERROR: Unable to communicate with master!\n"
00077 
00078         output = Popen([cmd, 'list'], **kwds).communicate()
00079         self.assert_(output[1].endswith(msg))
00080         output = Popen([cmd, 'type', 'add_two_ints'], **kwds).communicate()
00081         self.assert_(output[1].endswith(msg))
00082         output = Popen([cmd, 'uri', 'add_two_ints'], **kwds).communicate()
00083         self.assert_(output[1].endswith(msg))
00084         output = Popen([cmd, 'call', 'add_two_ints', '1', '2'], **kwds).communicate()
00085         self.assert_(output[1].endswith(msg))
00086         # - wait should still fail if master is offline
00087         output = Popen([cmd, 'call', '--wait', 'add_two_ints', '1', '2'], **kwds).communicate()
00088         self.assert_(output[1].endswith(msg))
00089         output = Popen([cmd, 'find', 'test_ros/AddTwoInts'], **kwds).communicate()
00090         self.assert_(output[1].endswith(msg))
00091         
00092 if __name__ == '__main__':
00093     rostest.unitrun('test_rosservice', NAME, TestRosserviceOffline, sys.argv, coverage_packages=[])


test_rosservice
Author(s): Ken Conley
autogenerated on Mon Oct 6 2014 11:53:51