From 24b38126ececb3d7fed101640f33b67709598e74 Mon Sep 17 00:00:00 2001 From: Brian O'Connor Date: Tue, 10 Sep 2013 17:21:08 -0700 Subject: [PATCH] cleaned up and commented test_simpleperf.py --- examples/test/test_simpleperf.py | 38 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/examples/test/test_simpleperf.py b/examples/test/test_simpleperf.py index 2e589d7..319ebc5 100755 --- a/examples/test/test_simpleperf.py +++ b/examples/test/test_simpleperf.py @@ -1,10 +1,12 @@ #!/usr/bin/env python -"""TEST""" +""" +Test for simpleperf.py +""" import unittest import pexpect -from time import sleep +import re from mininet.log import setLogLevel from mininet.net import Mininet from mininet.node import CPULimitedHost @@ -13,24 +15,36 @@ from mininet.link import TCLink from mininet.examples.simpleperf import SingleSwitchTopo class testSimplePerf( unittest.TestCase ): - "Test ping with single switch topology (common code)." - def testE2E( self ): - results = [ "Results:", pexpect.EOF, pexpect.TIMEOUT ] + "Run the example and verify ping and iperf results" p = pexpect.spawn( 'python -m mininet.examples.simpleperf' ) - index = p.expect( results, timeout=600 ) - self.assertEqual( index, 0 ) + # check ping results + p.expect( "Results: (\d+)% dropped", timeout=120 ) + loss = int( p.match.group( 1 ) ) + self.assertTrue( loss > 0 and loss < 100 ) + # check iperf results + p.expect( "Results: \['([\d\.]+) .bits/sec", timeout=480 ) + bw = float( p.match.group( 1 ) ) + self.assertTrue( bw > 0 ) p.wait() def testTopo( self ): - topo = SingleSwitchTopo(n=4) - net = Mininet(topo=topo, - host=CPULimitedHost, link=TCLink) + """Import SingleSwitchTopo from example and test connectivity between two hosts + Note: this test may fail very rarely because it is non-deterministic + i.e. links are configured with 10% packet loss, but if we get unlucky and + none or all of the packets are dropped, the test will fail""" + topo = SingleSwitchTopo( n=4 ) + net = Mininet( topo=topo, host=CPULimitedHost, link=TCLink ) net.start() - h1, h4 = net.get('h1', 'h4') - h1.cmd( 'ping -c 1 %s' % h4.IP() ) + h1, h4 = net.get( 'h1', 'h4' ) + # have h1 ping h4 ten times + expectStr = '(\d+) packets transmitted, (\d+) received, (\d+)% packet loss' + output = h1.cmd( 'ping -c 10 %s' % h4.IP() ) + m = re.search( expectStr, output ) + loss = int( m.group( 3 ) ) net.stop() + self.assertTrue( loss > 0 and loss < 100 ) if __name__ == '__main__': setLogLevel( 'warning' )