...
Code Block |
---|
.... # issuing a mininet command # pingall should succeed since firewall disabled x = mininetCli.runCmd("pingall") # return is stored in x and the bigtest.Assert method can check for a specific string in the response bigtest.Assert("Results: 0%" in x) # you can use python's sleep to time out previous flows in switches time.sleep(5) # Sending a REST API command command = "http://%s:8080/wm/firewall/module/enable/json" % controllerIp x = urllib.urlopen(command).read() bigtest.Assert("running" in x) ... # clean up all rules - testing delete rule # first, retrieve all rule ids from GET rules command = "http://%s:8080/wm/firewall/rules/json" % controllerIp x = urllib.urlopen(command).read() parsedResult = json.loads(x) for i in range(len(parsedResult)): # example sending a REST DELETE command. Post can be used as well. params = "{\"ruleid\":\"%s\"}" % parsedResult[i]['ruleid'] command = "/wm/firewall/rules/json" url = "%s:8080" % controllerIp connection = timehttplib.sleepHTTPConnection(5url) # Sending a REST API connection.request("DELETE", command, params) x = connection.getresponse().read() bigtest.Assert("Rule deleted" in x) ... # iperf TCP works, UDP doesn't mininetCli.runCmd("h3 iperf -s &") x = mininetCli.runCmd("h7 iperf -c h3 -t 2") # bigtest.Assert can also test for a "not" case bigtest.Assert(not "connect failed" in command = "http://%s:8080/wm/firewall/module/enable/json" % controllerIp x = urllib.urlopen(command).read() bigtest.Assert("running" in x) ... # clean up all rules - testing delete rule # first, retrieve all rule ids from GET rules command = "http://%s:8080/wm/firewall/rules/json" % controllerIp x = urllib.urlopen(command).read() parsedResult = json.loads(x) for i in range(len(parsedResult)): # example sending a REST DELETE command. Post can be used as well. params = "{\"ruleid\":\"%s\"}" % parsedResult[i]['ruleid'] command = "/wm/firewall/rules/json" url = "%s:8080" % controllerIp connection = httplib.HTTPConnection(url) connection.request("DELETE", command, params) x = connection.getresponse().read() bigtest.Assert("Rule deleted" in x) ... # iperf TCP works, UDP doesn't mininetCli.runCmd("h3 iperf -s &") x = mininetCli.runCmd("h7 iperf -c h3 -t 2") # bigtest.Assert can also test for a "not" case bigtest.Assert(not "connect failed" in x) |
2. bigtest/forwarding/IslandTest1.py
This example shows yet a different style of test.
Code Block |
---|
import bigtest from mininet.net import Mininet from mininet.node import UserSwitch, RemoteController from mininet.cli import CLI from mininet.log import setLogLevel import bigtest.controller from bigtest.util.context import NetContext, EnvContext def addHost(net, N): name= 'h%d' % N ip = '10.0.0.%d' % N return net.addHost(name, ip=ip) def MultiControllerNet(c1ip, c2ip): "Create a network with multiple controllers." net = Mininet(controller=RemoteController, switch=UserSwitch) print "Creating controllers" c1 = net.addController(name = 'RemoteFloodlight1', controller = RemoteController, defaultIP=c1ip) c2 = net.addController(name = 'RemoteFloodlight2', controller = RemoteController, defaultIP=c2ip) print "*** Creating switches" s1 = net.addSwitch( 's1' ) s2 = net.addSwitch( 's2' ) s3 = net.addSwitch( 's3' ) s4 = net.addSwitch( 's4' ) print "*** Creating hosts" hosts1 = [ addHost( net, n ) for n in 3, 4 ] hosts2 = [ addHost( net, n ) for n in 5, 6 ] hosts3 = [ addHost( net, n ) for n in 7, 8 ] hosts4 = [ addHost( net, n ) for n in 9, 10 ] print "*** Creating links" for h in hosts1: s1.linkTo( h ) for h in hosts2: s2.linkTo( h ) for h in hosts3: s3.linkTo( h ) for h in hosts4: s4.linkTo( h ) s1.linkTo( s2 ) s2.linkTo( s3 ) s4.linkTo( s2 ) print "*** Building network" net.build() # In theory this doesn't do anything c1.start() c2.start() #print "*** Starting Switches" x) |
2. bigtest/forwarding/IslandTest1.py
This example shows yet a different style of test. Similarities can be easily seen in the way the two-node environment is set up. What's useful to see in this example is how you define an arbitrary topology of switches, with hosts connect to each, and each switch can be listening to a different controller at your choice. This is useful in simulating an OF island connected to non-OF island topology, since an island controlled by a controller B would appear as a non-OF network to controller A.
Code Block |
---|
import bigtest from mininet.net import Mininet from mininet.node import UserSwitch, RemoteController from mininet.cli import CLI from mininet.log import setLogLevel import bigtest.controller from bigtest.util.context import NetContext, EnvContext def addHost(net, N): name= 'h%d' % N ip = '10.0.0.%d' % N return net.addHost(name, ip=ip) def MultiControllerNet(c1ip, c2ip): "Create a network with multiple controllers." net = Mininet(controller=RemoteController, switch=UserSwitch) print "Creating controllers" c1 = net.addController(name = 'RemoteFloodlight1', controller = RemoteController, defaultIP=c1ip) c2 = net.addController(name = 'RemoteFloodlight2', controller = RemoteController, defaultIP=c2ip) print "*** Creating switches" s1 = net.addSwitch( 's1' ) s2 = net.addSwitch( 's2' ) s3 = net.addSwitch( 's3' ) s4 = net.addSwitch( 's4' ) print "*** Creating hosts" hosts1 = [ addHost( net, n ) for n in 3, 4 ] hosts2 = [ addHost( net, n ) for n in 5, 6 ] hosts3 = [ addHost( net, n ) for n in 7, 8 ] hosts4 = [ addHost( net, n ) for n in 9, 10 ] print "*** Creating links" for h in hosts1: s1.linkTo( h ) for h in hosts2: s2.linkTo( h ) for h in hosts3: s3.linkTo( h ) for h in hosts4: s1s4.startlinkTo( [c1]h ) s2 s1.startlinkTo( [c2]s2 ) s3s2.startlinkTo( [c1]s3 ) s4.startlinkTo( [c1]s2 ) return netprint "*** Building network" with EnvContext(bigtest.controller.TwoNodeTestnet.build()) as env: # In logtheory = bigtest.log.info this doesn't do anything controller1 = envc1.node1start() cli1 = controller1c2.clistart() controller2 = env.node2() #print "*** Starting Switches" cli2 = controller2s1.clistart() [c1] ) print "ip1:%s ip2:%s" % (controller1.ipAddress(), controller2.ipAddress()) s2.start( [c2] ) with NetContext(MultiControllerNet(controller1.ipAddress(), controller2.ipAddress())) as net: sleep(20)s3.start( [c1] ) s4.start( [c1] ) ##return net.pingAll() returns percentage drop so the bigtest.Assert(is to make sure 0% dropped) with EnvContext(bigtest.controller.TwoNodeTest()) as env: log = bigtest.log.info controller1 = env.node1() cli1 = controller1.cli() controller2 = env.node2() cli2 = controller2.cli() print "ip1:%s ip2:%s" % (controller1.ipAddress(), controller2.ipAddress()) with NetContext(MultiControllerNet(controller1.ipAddress(), controller2.ipAddress())) as net: sleep(20) ## net.pingAll() returns percentage drop so the bigtest.Assert(is to make sure 0% dropped) o = net.pingAll() bigtest.Assert(o == 0) |
Adding new unit tests
...