Skip to content
Snippets Groups Projects
Commit 5789dae8 authored by lantz's avatar lantz
Browse files

Merge pull request #387 from cdburkard/patches/iperf_bw

use udp with iperf to measure loss. pings are not reliable
parents 0efde9c4 7eeaed99
No related branches found
No related tags found
No related merge requests found
...@@ -31,17 +31,16 @@ def __init__(self, n=2, **opts): ...@@ -31,17 +31,16 @@ def __init__(self, n=2, **opts):
def perfTest(): def perfTest():
"Create network and run simple performance test" "Create network and run simple performance test"
topo = SingleSwitchTopo(n=4) topo = SingleSwitchTopo( n=4 )
net = Mininet(topo=topo, net = Mininet( topo=topo,
host=CPULimitedHost, link=TCLink) host=CPULimitedHost, link=TCLink,
autoStaticArp=True )
net.start() net.start()
print "Dumping host connections" print "Dumping host connections"
dumpNodeConnections(net.hosts) dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
print "Testing bandwidth between h1 and h4" print "Testing bandwidth between h1 and h4"
h1, h4 = net.getNodeByName('h1', 'h4') h1, h4 = net.getNodeByName('h1', 'h4')
net.iperf((h1, h4)) results = net.iperf( ( h1, h4 ), l4Type='UDP' )
net.stop() net.stop()
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -6,12 +6,8 @@ ...@@ -6,12 +6,8 @@
import unittest import unittest
import pexpect import pexpect
import re
import sys import sys
from mininet.log import setLogLevel 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 from mininet.examples.simpleperf import SingleSwitchTopo
...@@ -19,35 +15,20 @@ class testSimplePerf( unittest.TestCase ): ...@@ -19,35 +15,20 @@ class testSimplePerf( unittest.TestCase ):
@unittest.skipIf( '-quick' in sys.argv, 'long test' ) @unittest.skipIf( '-quick' in sys.argv, 'long test' )
def testE2E( self ): 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' ) 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 # check iperf results
p.expect( "Results: \['([\d\.]+) .bits/sec", timeout=480 ) p.expect( "Results: \['10M', '([\d\.]+) .bits/sec", timeout=480 )
bw = float( p.match.group( 1 ) ) measuredBw = float( p.match.group( 1 ) )
self.assertTrue( bw > 0 ) lowerBound = expectedBw * TOLERANCE
upperBound = expectedBw + expectedBw * ( 1 - TOLERANCE )
self.assertGreaterEqual( measuredBw, lowerBound )
self.assertLessEqual( measuredBw, upperBound )
p.wait() 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__': if __name__ == '__main__':
setLogLevel( 'warning' ) setLogLevel( 'warning' )
unittest.main() unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment