From 706229da77f4fadc4b36de1b6a1f5c3c9b2fc0ec Mon Sep 17 00:00:00 2001 From: cody burkard <cody@onlab.us> Date: Wed, 17 Sep 2014 12:55:59 -0700 Subject: [PATCH] adding example and test for intf.config --- examples/intfOptions.py | 49 +++++++++++++++++++++++++++++++ examples/test/test_intfOptions.py | 45 ++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100755 examples/intfOptions.py create mode 100755 examples/test/test_intfOptions.py diff --git a/examples/intfOptions.py b/examples/intfOptions.py new file mode 100755 index 00000000..7e950274 --- /dev/null +++ b/examples/intfOptions.py @@ -0,0 +1,49 @@ +#!/usr/bin/python + +''' +example of using various TCIntf options. +reconfigures a single interface using intf.config() +to use different traffic control commands to test +bandwidth, loss, and delay +''' + +from mininet.net import Mininet +from mininet.log import setLogLevel, info +from mininet.link import TCLink + +def intfOptions(): + "run various traffic control commands on a single interface" + net = Mininet() + net.addController( 'c0' ) + h1 = net.addHost( 'h1' ) + h2 = net.addHost( 'h2' ) + s1 = net.addSwitch( 's1' ) + link1 = net.addLink( h1, s1, cls=TCLink ) + link2 = net.addLink( h2, s1 ) + net.start() + + # flush out latency from reactive forwarding delay + net.pingAll() + + info( '\n*** Configuring one intf with bandwidth of 5 Mb\n' ) + link1.intf1.config( bw=5 ) + info( '\n*** Running iperf to test\n' ) + net.iperf() + + info( '\n*** Configuring one intf with loss of 50%\n' ) + link1.intf1.config( loss=50 ) + info( '\n*** Running 20 pings to test\n' ) + info( net.hosts[ 0 ].cmd( 'ping -c 20 -i .2 10.0.0.2' ) ) + + + info( '\n*** Configuring one intf with delay of 15ms\n' ) + link1.intf1.config( delay='15ms' ) + info( '\n*** Run a ping to confirm delay' ) + net.pingPairFull() + + info( '\n*** Done testing\n' ) + net.stop() + +if __name__ == '__main__': + setLogLevel( 'info' ) + intfOptions() diff --git a/examples/test/test_intfOptions.py b/examples/test/test_intfOptions.py new file mode 100755 index 00000000..0235e7c2 --- /dev/null +++ b/examples/test/test_intfOptions.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +""" +Test for intfOptions.py +""" + +import unittest +import pexpect +import sys + +class testIntfOptions( unittest.TestCase ): + + def testIntfOptions( self ): + "verify that intf.config is correctly limiting traffic" + p = pexpect.spawn( 'python -m mininet.examples.intfOptions ' ) + tolerance = .8 + opts = [ "Results: \['([\d\.]+) .bits/sec", + "(\d+) packets transmitted, (\d+) received, (\d+)% packet loss, time (\d+)ms", + "h(\d+)->h(\d+): (\d)/(\d), rtt min/avg/max/mdev ([\d\.]+)/([\d\.]+)/([\d\.]+)/([\d\.]+) ms", + pexpect.EOF ] + while True: + index = p.expect( opts, timeout=600 ) + if index == 0: + bw = float( p.match.group( 1 ) ) + self.assertGreaterEqual( bw, float( 5 * tolerance ) ) + self.assertLessEqual( bw, float( 5 + 5 * ( 1 - tolerance ) ) ) + elif index == 1: + loss = int( p.match.group( 3 ) ) + msg = ( "testing packet loss at 50%\n", + "this test will sometimes fail\n", + "ran 20 pings accross network\n", + "packet loss is %d%%\n\n" + % loss ) + self.assertGreaterEqual( loss, 50 * .8, msg ) + self.assertLessEqual( loss, 50 + 50 * ( 1 - tolerance ), msg ) + elif index == 2: + delay = float( p.match.group( 6 ) ) + self.assertGreaterEqual( delay, 15 * .8 ) + self.assertLessEqual( delay, 15 + 15 * ( 1 - tolerance ) ) + else: + break + + +if __name__ == '__main__': + unittest.main() -- GitLab