Skip to content
Snippets Groups Projects
test_simpleperf.py 1.81 KiB
Newer Older
"""
Test for simpleperf.py
"""
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

class testSimplePerf( unittest.TestCase ):

    @unittest.skipIf( '-quick' in sys.argv, 'long test' )
        "Run the example and verify ping and iperf results"
        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( 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 )
        """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 )
        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 ) )
        self.assertTrue( loss > 0 and loss < 100 )

if __name__ == '__main__':
    setLogLevel( 'warning' )
    unittest.main()