Segment Routing tests
Change-Id: I9f7614372e7dd9b3524b6e37204b5bde9fafb8bd
diff --git a/TestON/tests/USECASE_SegmentRouting/Dependency/cord_fabric.py b/TestON/tests/USECASE_SegmentRouting/Dependency/cord_fabric.py
new file mode 100755
index 0000000..b710b12
--- /dev/null
+++ b/TestON/tests/USECASE_SegmentRouting/Dependency/cord_fabric.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+
+import os
+from optparse import OptionParser
+
+from mininet.net import Mininet
+from mininet.topo import Topo
+from mininet.node import RemoteController, UserSwitch, Host
+from mininet.link import TCLink
+from mininet.log import setLogLevel
+from mininet.cli import CLI
+
+# Parse command line options and dump results
+def parseOptions():
+ """Parse command line options"""
+ parser = OptionParser()
+ parser.add_option('--spine', dest='spine', type='int', default=2,
+ help='number of spine switches, default=2')
+ parser.add_option('--leaf', dest='leaf', type='int', default=2,
+ help='number of leaf switches, default=2')
+ parser.add_option('--fanout', dest='fanout', type='int', default=2,
+ help='number of hosts per leaf switch, default=2')
+ parser.add_option('--onos', dest='onos', type='int', default=0,
+ help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on')
+
+ (options, args) = parser.parse_args()
+ return options, args
+
+opts, args = parseOptions()
+
+class LeafAndSpine(Topo):
+ def __init__(self, spine=2, leaf=2, fanout=2, **opts):
+ "Create Leaf and Spine Topo."
+
+ Topo.__init__(self, **opts)
+
+ # Add spine switches
+ spines = {}
+ for s in range(spine):
+ spines[s] = self.addSwitch('spine10%s' % (s + 1), dpid="00000000010%s" % (s + 1))
+ # Set link speeds to 100Mb/s
+ linkopts = dict(bw=10)
+
+ # Add Leaf switches
+ for ls in range(leaf):
+ leafSwitch = self.addSwitch('leaf%s' % (ls + 1), dpid="00000000000%s" % (1+ls))
+ # Connect leaf to all spines
+ for s in range(spine):
+ switch = spines[s]
+ self.addLink(leafSwitch, switch, **linkopts)
+ # Add hosts under a leaf, fanout hosts per leaf switch
+ for f in range(fanout):
+ host = self.addHost('h%s' % (ls * fanout + f + 1),
+ cls=IpHost,
+ ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
+ gateway='10.0.%s.254' % (ls + 1))
+ self.addLink(host, leafSwitch, **linkopts)
+
+class IpHost(Host):
+ def __init__(self, name, gateway, *args, **kwargs):
+ super(IpHost, self).__init__(name, *args, **kwargs)
+ self.gateway = gateway
+
+ def config(self, **kwargs):
+ Host.config(self, **kwargs)
+ mtu = "ifconfig "+self.name+"-eth0 mtu 1490"
+ self.cmd(mtu)
+ self.cmd('ip route add default via %s' % self.gateway)
+
+def config(opts):
+ spine = opts.spine
+ leaf = opts.leaf
+ fanout = opts.fanout
+ controllers= [ os.environ['OC%s' % i] for i in range(1,opts.onos+1) ] if (opts.onos) else ['127.0.0.1']
+ topo = LeafAndSpine(spine=spine, leaf=leaf, fanout=fanout)
+ net = Mininet(topo=topo, link=TCLink, build=False,
+ switch=UserSwitch,
+ controller = None,
+ autoSetMacs = True)
+ i = 0
+ for ip in controllers:
+ net.addController( "c%s" % (i), controller=RemoteController, ip=ip)
+ i += 1;
+ net.build()
+ net.start()
+ CLI(net)
+ net.stop()
+
+if __name__ == '__main__':
+ setLogLevel('info')
+ config(opts)
+ os.system('sudo mn -c')
+
diff --git a/TestON/tests/USECASE_SegmentRouting/Dependency/startUp.py b/TestON/tests/USECASE_SegmentRouting/Dependency/startUp.py
new file mode 100644
index 0000000..bf2a2b6
--- /dev/null
+++ b/TestON/tests/USECASE_SegmentRouting/Dependency/startUp.py
@@ -0,0 +1,38 @@
+"""
+ This wrapper function is use for starting up onos instance
+"""
+
+import time
+import os
+import json
+
+def onosBuild( main, gitBranch ):
+ """
+ This includes pulling ONOS and building it using maven install
+ """
+
+ buildResult = main.FALSE
+
+ # Git checkout a branch of ONOS
+ checkOutResult = main.ONOSbench.gitCheckout( gitBranch )
+ # Does the git pull on the branch that was checked out
+ if not checkOutResult:
+ main.log.warn( "Failed to checked out " + gitBranch +
+ " branch")
+ else:
+ main.log.info( "Successfully checked out " + gitBranch +
+ " branch")
+ gitPullResult = main.ONOSbench.gitPull()
+ if gitPullResult == main.ERROR:
+ main.log.error( "Error pulling git branch" )
+ else:
+ main.log.info( "Successfully pulled " + gitBranch + " branch" )
+
+ # Maven clean install
+ buildResult = main.ONOSbench.cleanInstall()
+
+ return buildResult
+
+
+
+