diff --git a/examples/simpleperf.py b/examples/simpleperf.py index a5a08a7..84f39d3 100755 --- a/examples/simpleperf.py +++ b/examples/simpleperf.py @@ -16,22 +16,30 @@ from mininet.link import TCLink from mininet.util import dumpNodeConnections from mininet.log import setLogLevel +from sys import argv + class SingleSwitchTopo(Topo): "Single switch connected to n hosts." - def __init__(self, n=2, **opts): + def __init__(self, n=2, lossy=True, **opts): Topo.__init__(self, **opts) switch = self.addSwitch('s1') for h in range(n): # Each host gets 50%/n of system CPU host = self.addHost('h%s' % (h + 1), cpu=.5 / n) - # 10 Mbps, 5ms delay, 10% loss - self.addLink(host, switch, - bw=10, delay='5ms', loss=10, use_htb=True) + if lossy: + # 10 Mbps, 5ms delay, 10% packet loss + self.addLink(host, switch, + bw=10, delay='5ms', loss=10, use_htb=True) + else: + # 10 Mbps, 5ms delay, no packet loss + self.addLink(host, switch, + bw=10, delay='5ms', loss=0, use_htb=True) -def perfTest(): + +def perfTest( lossy=True ): "Create network and run simple performance test" - topo = SingleSwitchTopo( n=4 ) + topo = SingleSwitchTopo( n=4, lossy=lossy ) net = Mininet( topo=topo, host=CPULimitedHost, link=TCLink, autoStaticArp=True ) @@ -44,5 +52,6 @@ def perfTest(): net.stop() if __name__ == '__main__': - setLogLevel('info') - perfTest() + setLogLevel( 'info' ) + # Prevent test_simpleperf from failing due to packet loss + perfTest( lossy=( 'testmode' not in argv ) ) diff --git a/examples/test/test_simpleperf.py b/examples/test/test_simpleperf.py index 43fe711..f8e94d5 100755 --- a/examples/test/test_simpleperf.py +++ b/examples/test/test_simpleperf.py @@ -16,15 +16,15 @@ class testSimplePerf( unittest.TestCase ): @unittest.skipIf( '-quick' in sys.argv, 'long test' ) def testE2E( self ): "Run the example and verify iperf results" + # 10 Mb/s, plus or minus 20% tolerance BW = 10 - TOLERANCE = .8 - expectedBw = BW * TOLERANCE - p = pexpect.spawn( 'python -m mininet.examples.simpleperf' ) + TOLERANCE = .2 + p = pexpect.spawn( 'python -m mininet.examples.simpleperf testmode' ) # check iperf results p.expect( "Results: \['10M', '([\d\.]+) .bits/sec", timeout=480 ) measuredBw = float( p.match.group( 1 ) ) - lowerBound = expectedBw * TOLERANCE - upperBound = expectedBw + expectedBw * ( 1 - TOLERANCE ) + lowerBound = BW * ( 1 - TOLERANCE ) + upperBound = BW + ( 1 + TOLERANCE ) self.assertGreaterEqual( measuredBw, lowerBound ) self.assertLessEqual( measuredBw, upperBound ) p.wait()