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