diff --git a/examples/simpleperf.py b/examples/simpleperf.py index 1da4b66c1b2c7b990ffec14647bcfd5aa6f52934..7d16968d7066d5a2ba73f313af5843531c82510a 100755 --- a/examples/simpleperf.py +++ b/examples/simpleperf.py @@ -31,17 +31,16 @@ def __init__(self, n=2, **opts): def perfTest(): "Create network and run simple performance test" - topo = SingleSwitchTopo(n=4) - net = Mininet(topo=topo, - host=CPULimitedHost, link=TCLink) + topo = SingleSwitchTopo( n=4 ) + net = Mininet( topo=topo, + host=CPULimitedHost, link=TCLink, + autoStaticArp=True ) net.start() print "Dumping host connections" dumpNodeConnections(net.hosts) - print "Testing network connectivity" - net.pingAll() print "Testing bandwidth between h1 and h4" h1, h4 = net.getNodeByName('h1', 'h4') - net.iperf((h1, h4)) + results = net.iperf( ( h1, h4 ), l4Type='UDP' ) net.stop() if __name__ == '__main__': diff --git a/examples/test/test_simpleperf.py b/examples/test/test_simpleperf.py index d88da673381f6903883a6c5c895c071e2f3741b6..43fe71116573a818f0859f26e6f1b735dba041bd 100755 --- a/examples/test/test_simpleperf.py +++ b/examples/test/test_simpleperf.py @@ -6,12 +6,8 @@ import unittest import pexpect -import re import sys from mininet.log import setLogLevel -from mininet.net import Mininet -from mininet.node import CPULimitedHost -from mininet.link import TCLink from mininet.examples.simpleperf import SingleSwitchTopo @@ -19,35 +15,20 @@ class testSimplePerf( unittest.TestCase ): @unittest.skipIf( '-quick' in sys.argv, 'long test' ) def testE2E( self ): - "Run the example and verify ping and iperf results" + "Run the example and verify iperf results" + BW = 10 + TOLERANCE = .8 + expectedBw = BW * TOLERANCE p = pexpect.spawn( 'python -m mininet.examples.simpleperf' ) - # check ping results - p.expect( "Results: (\d+)% dropped", timeout=120 ) - loss = int( p.match.group( 1 ) ) - self.assertTrue( 0 < loss < 100 ) # check iperf results - p.expect( "Results: \['([\d\.]+) .bits/sec", timeout=480 ) - bw = float( p.match.group( 1 ) ) - self.assertTrue( bw > 0 ) + p.expect( "Results: \['10M', '([\d\.]+) .bits/sec", timeout=480 ) + measuredBw = float( p.match.group( 1 ) ) + lowerBound = expectedBw * TOLERANCE + upperBound = expectedBw + expectedBw * ( 1 - TOLERANCE ) + self.assertGreaterEqual( measuredBw, lowerBound ) + self.assertLessEqual( measuredBw, upperBound ) p.wait() - def testTopo( self ): - """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' ) - # 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( 0 < loss < 100 ) - if __name__ == '__main__': setLogLevel( 'warning' ) unittest.main()