ethernet_test.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 the Willow Garage 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 ##\author Jeremy Leibs
00035 
00036 import roslib
00037 roslib.load_manifest('qualification')
00038 
00039 from pr2_self_test_msgs.srv import *
00040 
00041 import rospy 
00042 
00043 NAME = 'ethernet'
00044 
00045 import os
00046 import sys
00047 from StringIO import StringIO
00048 
00049 def ethernet_test():
00050     rospy.init_node(NAME)
00051     
00052     name = rospy.myargv()[1]
00053     ip = rospy.myargv()[2]
00054     
00055     res = os.popen('ping -f -q -w 1 -s 32768 %s' % (ip)).readlines()
00056 
00057     r = TestResultRequest()
00058     r.plots = []
00059     
00060     if (len(res) > 1):
00061         tran = float(res[3].split()[0])
00062         recv = float(res[3].split()[3])
00063         
00064         r.html_result = r.html_result + '<p>Flood Ping Transmitted: %f</p>'%(tran)
00065         r.html_result = r.html_result + '<p>Flood Ping Received: %f</p>'%(recv)
00066 
00067         if ((tran - recv) <= 2):
00068           res = os.popen('netperf -H %s -t UDP_STREAM -l 1' % (ip)).readlines()
00069 
00070           speed = float(res[6].split()[3])
00071           speed_str = ''
00072           
00073           r.result = TestResultRequest.RESULT_PASS
00074           
00075           if (speed > 750):
00076             speed_str = 'Gigabit'
00077           elif (speed > 100):
00078             speed_str = 'Gigabit (slow)'
00079             r.result = TestResultRequest.RESULT_FAIL
00080           elif (speed > 75):
00081             speed_str = '100 Megabit'
00082             r.result = TestResultRequest.RESULT_HUMAN_REQUIRED
00083           elif (speed > 10):
00084             speed_str = '100 Megabit (slow)'
00085             r.result = TestResultRequest.RESULT_FAIL
00086           else:
00087             speed_str = '< 10 Megabit'
00088             r.result = TestResultRequest.RESULT_FAIL
00089           
00090           r.text_summary = speed_str
00091           r.html_result = r.html_result + '<p>Speed: %f (%s).</p>'%(speed, speed_str)
00092         else:
00093           r.text_summary = 'Too many packets lost.'
00094           r.html_result = r.html_result + '<p>Too many packets lost.</p>'
00095     else:
00096       r.text_summary = 'Running ping failed.'
00097       r.html_result = r.html_result + '<p>Running ping failed!</p>'
00098     
00099     # block until the test_result service is available
00100     rospy.wait_for_service('test_result')
00101     result_service = rospy.ServiceProxy('test_result', TestResult)
00102     result_service.call(r)
00103 
00104 if __name__ == "__main__":
00105     ethernet_test()


qualification
Author(s): Kevin Watts (watts@willowgarage.com), Josh Faust (jfaust@willowgarage.com)
autogenerated on Sat Dec 28 2013 17:57:34