Remove old tests and add lost gerrit changes
Change-Id: Ia0a1c7ea55512febf30385d1aeb4c5715f2d3721
diff --git a/TestON/tests/CbenchBM/CbenchBM.params b/TestON/tests/CbenchBM/CbenchBM.params
deleted file mode 100644
index 33dc069..0000000
--- a/TestON/tests/CbenchBM/CbenchBM.params
+++ /dev/null
@@ -1,60 +0,0 @@
-<PARAMS>
-
- <testcases>1,2</testcases>
-
- <SCALE>1</SCALE>
- <availableNodes>7</availableNodes>
-
- <ENV>
- <cellName>CbenchBMcell</cellName>
- </ENV>
-
- <TEST>
- <skipCleanInstall>yes</skipCleanInstall>
- <mode>t</mode> #t throughput
- </TEST>
-
- <GIT>
- <autopull>off</autopull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <USER>admin</USER>
-
- <ip1>10.254.1.207</ip1>
- <port1>6633</port1>
-
- <ip2>10.254.1.202</ip2>
- <port2>6633</port2>
-
- <ip3>10.254.1.203</ip3>
- <port3>6633</port3>
-
- <ip4>10.254.1.204</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.5.205</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.5.206</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.5.201</ip7>
- <port7>6633</port7>
-
- </CTRL>
-
- <MN>
- <ip1>10.254.1.200</ip1>
- </MN>
-
- <BENCH>
- <user>admin</user>
- <ip1>10.254.1.200</ip1>
- </BENCH>
-
- <JSON>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/CbenchBM/CbenchBM.topo b/TestON/tests/CbenchBM/CbenchBM.topo
deleted file mode 100644
index 7b39c4e..0000000
--- a/TestON/tests/CbenchBM/CbenchBM.topo
+++ /dev/null
@@ -1,144 +0,0 @@
-<TOPOLOGY>
-
- <COMPONENT>
-
- <ONOSbench>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS><home>~/onos</home></COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>10.254.1.201</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.254.1.202</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.254.1.203</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.254.1.204</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
-
- <ONOS5>
- <host>10.254.1.205</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.254.1.206</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.254.1.207</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- </COMPONENT>
-
-</TOPOLOGY>
-
diff --git a/TestON/tests/CbenchBM/__init__.py b/TestON/tests/CbenchBM/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/CbenchBM/__init__.py
+++ /dev/null
diff --git a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py b/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
deleted file mode 100644
index b8598e4..0000000
--- a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
+++ /dev/null
@@ -1,1121 +0,0 @@
-"""
- Wrapper functions for FuncIntent
- This functions include Onosclidriver and Mininetclidriver driver functions
- Author: kelvin@onlab.us
-"""
-def __init__( self ):
- self.default = ''
-
-def hostIntent( main,
- name,
- host1,
- host2,
- onosNode=0,
- host1Id="",
- host2Id="",
- mac1="",
- mac2="",
- vlan1="-1",
- vlan2="-1",
- sw1="",
- sw2="",
- expectedLink=0 ):
- """
- Description:
- Verify add-host-intent
- Steps:
- - Discover hosts
- - Add host intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- Required:
- name - Type of host intent to add eg. IPV4 | VLAN | Dualstack
- host1 - Name of first host
- host2 - Name of second host
- Optional:
- host1Id - ONOS id of the first host eg. 00:00:00:00:00:01/-1
- host2Id - ONOS id of the second host
- mac1 - Mac address of first host
- mac2 - Mac address of the second host
- vlan1 - Vlan tag of first host, defaults to -1
- vlan2 - Vlan tag of second host, defaults to -1
- sw1 - First switch to bring down & up for rerouting purpose
- sw2 - Second switch to bring down & up for rerouting purpose
- expectedLink - Expected link when the switches are down, it should
- be two links lower than the links before the two
- switches are down
- """
- import time
-
- # Assert variables
- assert main, "There is no main variable"
- assert name, "variable name is empty"
- assert host1 and host2, "You must specify hosts"
-
- global itemName
- itemName = name
- h1Id = host1Id
- h2Id = host2Id
- h1Mac = mac1
- h2Mac = mac2
- vlan1 = vlan1
- vlan2 = vlan2
- hostNames = [ host1 , host2 ]
- intentsId = []
- stepResult = main.TRUE
- pingResult = main.TRUE
- intentResult = main.TRUE
- removeIntentResult = main.TRUE
- flowResult = main.TRUE
- topoResult = main.TRUE
- linkDownResult = main.TRUE
- linkUpResult = main.TRUE
- onosNode = int( onosNode )
-
- if main.hostsData:
- if not h1Mac:
- h1Mac = main.hostsData[ host1 ][ 'mac' ]
- if not h2Mac:
- h2Mac = main.hostsData[ host2 ][ 'mac' ]
- if main.hostsData[ host1 ][ 'vlan' ] != '-1':
- vlan1 = main.hostsData[ host1 ][ 'vlan' ]
- if main.hostsData[ host2 ][ 'vlan' ] != '-1':
- vlan2 = main.hostsData[ host2 ][ 'vlan' ]
- if not h1Id:
- h1Id = main.hostsData[ host1 ][ 'id' ]
- if not h2Id:
- h2Id = main.hostsData[ host2 ][ 'id' ]
-
- assert h1Id and h2Id, "You must specify host IDs"
- if not ( h1Id and h2Id ):
- main.log.info( "There are no host IDs" )
- return main.FALSE
-
- # Discover hosts using arping
- if not main.hostsData:
- main.log.info( itemName + ": Discover host using arping" )
- main.Mininet1.arping( host=host1 )
- main.Mininet1.arping( host=host2 )
- host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
- host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
-
- # Check flows count in each node
- checkFlowsCount( main )
-
- # Checking connectivity before installing intents
- main.log.info( itemName + ": Check hosts connection before adding intents" )
- checkPing = pingallHosts( main, hostNames )
- if not checkPing:
- main.log.info( itemName + ": Ping did not go through " +
- "before adding intents" )
- else:
- main.log.debug( itemName + ": Pinged successful before adding " +
- "intents,please check fwd app if it is activated" )
-
- # Adding host intents
- main.log.info( itemName + ": Adding host intents" )
- intent1 = main.CLIs[ onosNode ].addHostIntent( hostIdOne=h1Id,
- hostIdTwo=h2Id )
- intentsId.append( intent1 )
- time.sleep( 5 )
-
- # Check intents state
- time.sleep( 30 )
- intentResult = checkIntentState( main, intentsId )
- checkFlowsCount( main )
-
- # Check intents state again if first check fails...
- if not intentResult:
- intentResult = checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Ping hosts
- firstPingResult = pingallHosts( main, hostNames )
- if not firstPingResult:
- main.log.debug( "First ping failed, there must be" +
- " something wrong with ONOS performance" )
-
- # Ping hosts again...
- pingResult = pingResult and pingallHosts( main, hostNames )
- time.sleep( 5 )
-
- # Test rerouting if these variables exist
- if sw1 and sw2 and expectedLink:
- # link down
- linkDownResult = link( main, sw1, sw2, "down" )
- intentResult = intentResult and checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, expectedLink )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link down
- if linkDownResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link down" )
- else:
- main.log.error( itemName + ": Failed to bring link down" )
-
- # link up
- linkUpResult = link( main, sw1, sw2, "up" )
- time.sleep( 5 )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, main.numLinks )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link up
- if linkUpResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link back up" )
- else:
- main.log.error( itemName + ": Failed to bring link back up" )
-
- # Remove all intents
- removeIntentResult = removeAllIntents( main, intentsId )
-
- stepResult = pingResult and linkDownResult and linkUpResult \
- and intentResult and removeIntentResult
-
- return stepResult
-
-def pointIntent( main,
- name,
- host1,
- host2,
- onosNode=0,
- deviceId1="",
- deviceId2="",
- port1="",
- port2="",
- ethType="",
- mac1="",
- mac2="",
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ip1="",
- ip2="",
- tcp1="",
- tcp2="",
- sw1="",
- sw2="",
- expectedLink=0 ):
-
- """
- Description:
- Verify add-point-intent
- Steps:
- - Get device ids | ports
- - Add point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- Required:
- name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
- host1 - Name of first host
- host2 - Name of second host
- Optional:
- deviceId1 - ONOS device id of the first switch, the same as the
- location of the first host eg. of:0000000000000001/1,
- located at device 1 port 1
- deviceId2 - ONOS device id of the second switch
- port1 - The port number where the first host is attached
- port2 - The port number where the second host is attached
- ethType - Ethernet type eg. IPV4, IPV6
- mac1 - Mac address of first host
- mac2 - Mac address of the second host
- bandwidth - Bandwidth capacity
- lambdaAlloc - Allocate lambda, defaults to False
- ipProto - IP protocol
- ip1 - IP address of first host
- ip2 - IP address of second host
- tcp1 - TCP port of first host
- tcp2 - TCP port of second host
- sw1 - First switch to bring down & up for rerouting purpose
- sw2 - Second switch to bring down & up for rerouting purpose
- expectedLink - Expected link when the switches are down, it should
- be two links lower than the links before the two
- switches are down
- """
-
- import time
- assert main, "There is no main variable"
- assert name, "variable name is empty"
- assert host1 and host2, "You must specify hosts"
-
- global itemName
- itemName = name
- host1 = host1
- host2 = host2
- hostNames = [ host1, host2 ]
- intentsId = []
-
- pingResult = main.TRUE
- intentResult = main.TRUE
- removeIntentResult = main.TRUE
- flowResult = main.TRUE
- topoResult = main.TRUE
- linkDownResult = main.TRUE
- linkUpResult = main.TRUE
- onosNode = int( onosNode )
-
- # Checking connectivity before installing intents
- main.log.info( itemName + ": Check hosts connection before adding intents" )
- checkPing = pingallHosts( main, hostNames )
- if not checkPing:
- main.log.info( itemName + ": Ping did not go through " +
- "before adding intents" )
- else:
- main.log.debug( itemName + ": Pinged successful before adding " +
- "intents,please check fwd app if it is activated" )
-
- # Adding bidirectional point intents
- main.log.info( itemName + ": Adding point intents" )
- intent1 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
- egressDevice=deviceId2,
- portIngress=port1,
- portEgress=port2,
- ethType=ethType,
- ethSrc=mac1,
- ethDst=mac2,
- bandwidth=bandwidth,
- lambdaAlloc=lambdaAlloc,
- ipProto=ipProto,
- ipSrc=ip1,
- ipDst=ip2,
- tcpSrc=tcp1,
- tcpDst=tcp2 )
-
- intentsId.append( intent1 )
- time.sleep( 5 )
- intent2 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
- egressDevice=deviceId1,
- portIngress=port2,
- portEgress=port1,
- ethType=ethType,
- ethSrc=mac2,
- ethDst=mac1,
- bandwidth=bandwidth,
- lambdaAlloc=lambdaAlloc,
- ipProto=ipProto,
- ipSrc=ip2,
- ipDst=ip1,
- tcpSrc=tcp2,
- tcpDst=tcp1 )
- intentsId.append( intent2 )
-
- # Check intents state
- time.sleep( 30 )
- intentResult = checkIntentState( main, intentsId )
- # Check flows count in each node
- checkFlowsCount( main )
-
- # Check intents state again if first check fails...
- if not intentResult:
- intentResult = checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Ping hosts
- firstPingResult = pingallHosts( main, hostNames )
- if not firstPingResult:
- main.log.debug( "First ping failed, there must be" +
- " something wrong with ONOS performance" )
-
- # Ping hosts again...
- pingResult = pingResult and pingallHosts( main, hostNames )
- time.sleep( 5 )
-
- # Test rerouting if these variables exist
- if sw1 and sw2 and expectedLink:
- # link down
- linkDownResult = link( main, sw1, sw2, "down" )
- intentResult = intentResult and checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, expectedLink )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link down
- if linkDownResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link down" )
- else:
- main.log.error( itemName + ": Failed to bring link down" )
-
- # link up
- linkUpResult = link( main, sw1, sw2, "up" )
- time.sleep( 5 )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, main.numLinks )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link up
- if linkUpResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link back up" )
- else:
- main.log.error( itemName + ": Failed to bring link back up" )
-
- # Remove all intents
- removeIntentResult = removeAllIntents( main, intentsId )
-
- stepResult = pingResult and linkDownResult and linkUpResult \
- and intentResult and removeIntentResult
-
- return stepResult
-
-def singleToMultiIntent( main,
- name,
- hostNames,
- onosNode=0,
- devices="",
- ports=None,
- ethType="",
- macs=None,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="",
- sw2="",
- expectedLink=0 ):
- """
- Verify Single to Multi Point intents
- NOTE:If main.hostsData is not defined, variables data should be passed in the
- same order index wise. All devices in the list should have the same
- format, either all the devices have its port or it doesn't.
- eg. hostName = [ 'h1', 'h2' ,.. ]
- devices = [ 'of:0000000000000001', 'of:0000000000000002', ...]
- ports = [ '1', '1', ..]
- ...
- Description:
- Verify add-single-to-multi-intent iterates through the list of given
- host | devices and add intents
- Steps:
- - Get device ids | ports
- - Add single to multi point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- Required:
- name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
- hostNames - List of host names
- Optional:
- devices - List of device ids in the same order as the hosts
- in hostNames
- ports - List of port numbers in the same order as the device in
- devices
- ethType - Ethernet type eg. IPV4, IPV6
- macs - List of hosts mac address in the same order as the hosts in
- hostNames
- bandwidth - Bandwidth capacity
- lambdaAlloc - Allocate lambda, defaults to False
- ipProto - IP protocol
- ipAddresses - IP addresses of host in the same order as the hosts in
- hostNames
- tcp - TCP ports in the same order as the hosts in hostNames
- sw1 - First switch to bring down & up for rerouting purpose
- sw2 - Second switch to bring down & up for rerouting purpose
- expectedLink - Expected link when the switches are down, it should
- be two links lower than the links before the two
- switches are down
- """
-
- import time
- import copy
- assert main, "There is no main variable"
- assert hostNames, "You must specify hosts"
- assert devices or main.hostsData, "You must specify devices"
-
- global itemName
- itemName = name
- tempHostsData = {}
- intentsId = []
- onosNode = int( onosNode )
-
- macsDict = {}
- ipDict = {}
- if hostNames and devices:
- if len( hostNames ) != len( devices ):
- main.log.debug( "hosts and devices does not have the same length" )
- #print "len hostNames = ", len( hostNames )
- #print "len devices = ", len( devices )
- return main.FALSE
- if ports:
- if len( ports ) != len( devices ):
- main.log.error( "Ports and devices does " +
- "not have the same length" )
- #print "len devices = ", len( devices )
- #print "len ports = ", len( ports )
- return main.FALSE
- else:
- main.log.info( "Device Ports are not specified" )
- if macs:
- for i in range( len( devices ) ):
- macsDict[ devices[ i ] ] = macs[ i ]
-
- elif hostNames and not devices and main.hostsData:
- devices = []
- main.log.info( "singleToMultiIntent function is using main.hostsData" )
- for host in hostNames:
- devices.append( main.hostsData.get( host ).get( 'location' ) )
- macsDict[ main.hostsData.get( host ).get( 'location' ) ] = \
- main.hostsData.get( host ).get( 'mac' )
- ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
- main.hostsData.get( host ).get( 'ipAddresses' )
- #print main.hostsData
-
- #print 'host names = ', hostNames
- #print 'devices = ', devices
- #print "macsDict = ", macsDict
-
- pingResult = main.TRUE
- intentResult = main.TRUE
- removeIntentResult = main.TRUE
- flowResult = main.TRUE
- topoResult = main.TRUE
- linkDownResult = main.TRUE
- linkUpResult = main.TRUE
-
- devicesCopy = copy.copy( devices )
- if ports:
- portsCopy = copy.copy( ports )
- main.log.info( itemName + ": Adding single point to multi point intents" )
-
- # Check flows count in each node
- checkFlowsCount( main )
-
- # Checking connectivity before installing intents
- main.log.info( itemName + ": Check hosts connection before adding intents" )
- checkPing = pingallHosts( main, hostNames )
- if not checkPing:
- main.log.info( itemName + ": Ping did not go through " +
- "before adding intents" )
- else:
- main.log.debug( itemName + ": Pinged successful before adding " +
- "intents,please check fwd app if it is activated" )
-
- # Adding bidirectional point intents
- for i in range( len( devices ) ):
- ingressDevice = devicesCopy[ i ]
- egressDeviceList = copy.copy( devicesCopy )
- egressDeviceList.remove( ingressDevice )
- if ports:
- portIngress = portsCopy[ i ]
- portEgressList = copy.copy( portsCopy )
- del portEgressList[ i ]
- else:
- portIngress = ""
- portEgressList = None
- if not macsDict:
- srcMac = ""
- else:
- srcMac = macsDict[ ingressDevice ]
- if srcMac == None:
- main.log.debug( "There is no MAC in device - " + ingressDevice )
- srcMac = ""
-
- intentsId.append(
- main.CLIs[ onosNode ].addSinglepointToMultipointIntent(
- ingressDevice=ingressDevice,
- egressDeviceList=egressDeviceList,
- portIngress=portIngress,
- portEgressList=portEgressList,
- ethType=ethType,
- ethSrc=srcMac,
- bandwidth=bandwidth,
- lambdaAlloc=lambdaAlloc,
- ipProto=ipProto,
- ipSrc="",
- ipDst="",
- tcpSrc="",
- tcpDst="" ) )
-
- # Wait some time for the flow to go through when using multi instance
- time.sleep( 10 )
- pingResult = pingallHosts( main, hostNames )
-
- # Check intents state
- time.sleep( 30 )
- intentResult = checkIntentState( main, intentsId )
-
- # Check intents state again if first check fails...
- if not intentResult:
- intentResult = checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
- # Ping hosts again...
- pingResult = pingResult and pingallHosts( main, hostNames )
- time.sleep( 5 )
-
- # Test rerouting if these variables exist
- if sw1 and sw2 and expectedLink:
- # link down
- linkDownResult = link( main, sw1, sw2, "down" )
- intentResult = intentResult and checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, expectedLink )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link down
- if linkDownResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link down" )
- else:
- main.log.error( itemName + ": Failed to bring link down" )
-
- # link up
- linkUpResult = link( main, sw1, sw2, "up" )
- time.sleep( 5 )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, main.numLinks )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link up
- if linkUpResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link back up" )
- else:
- main.log.error( itemName + ": Failed to bring link back up" )
-
- # Remove all intents
- removeIntentResult = removeAllIntents( main, intentsId )
-
- stepResult = pingResult and linkDownResult and linkUpResult \
- and intentResult and removeIntentResult
-
- return stepResult
-
-def multiToSingleIntent( main,
- name,
- hostNames,
- onosNode=0,
- devices="",
- ports=None,
- ethType="",
- macs=None,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="",
- sw2="",
- expectedLink=0 ):
- """
- Verify Single to Multi Point intents
- NOTE:If main.hostsData is not defined, variables data should be passed in the
- same order index wise. All devices in the list should have the same
- format, either all the devices have its port or it doesn't.
- eg. hostName = [ 'h1', 'h2' ,.. ]
- devices = [ 'of:0000000000000001', 'of:0000000000000002', ...]
- ports = [ '1', '1', ..]
- ...
- Description:
- Verify add-multi-to-single-intent
- Steps:
- - Get device ids | ports
- - Add multi to single point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- Required:
- name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
- hostNames - List of host names
- Optional:
- devices - List of device ids in the same order as the hosts
- in hostNames
- ports - List of port numbers in the same order as the device in
- devices
- ethType - Ethernet type eg. IPV4, IPV6
- macs - List of hosts mac address in the same order as the hosts in
- hostNames
- bandwidth - Bandwidth capacity
- lambdaAlloc - Allocate lambda, defaults to False
- ipProto - IP protocol
- ipAddresses - IP addresses of host in the same order as the hosts in
- hostNames
- tcp - TCP ports in the same order as the hosts in hostNames
- sw1 - First switch to bring down & up for rerouting purpose
- sw2 - Second switch to bring down & up for rerouting purpose
- expectedLink - Expected link when the switches are down, it should
- be two links lower than the links before the two
- switches are down
- """
-
- import time
- import copy
- assert main, "There is no main variable"
- assert hostNames, "You must specify hosts"
- assert devices or main.hostsData, "You must specify devices"
-
- global itemName
- itemName = name
- tempHostsData = {}
- intentsId = []
- onosNode = int( onosNode )
-
- macsDict = {}
- ipDict = {}
- if hostNames and devices:
- if len( hostNames ) != len( devices ):
- main.log.debug( "hosts and devices does not have the same length" )
- #print "len hostNames = ", len( hostNames )
- #print "len devices = ", len( devices )
- return main.FALSE
- if ports:
- if len( ports ) != len( devices ):
- main.log.error( "Ports and devices does " +
- "not have the same length" )
- #print "len devices = ", len( devices )
- #print "len ports = ", len( ports )
- return main.FALSE
- else:
- main.log.info( "Device Ports are not specified" )
- if macs:
- for i in range( len( devices ) ):
- macsDict[ devices[ i ] ] = macs[ i ]
- elif hostNames and not devices and main.hostsData:
- devices = []
- main.log.info( "multiToSingleIntent function is using main.hostsData" )
- for host in hostNames:
- devices.append( main.hostsData.get( host ).get( 'location' ) )
- macsDict[ main.hostsData.get( host ).get( 'location' ) ] = \
- main.hostsData.get( host ).get( 'mac' )
- ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
- main.hostsData.get( host ).get( 'ipAddresses' )
- #print main.hostsData
-
- #print 'host names = ', hostNames
- #print 'devices = ', devices
- #print "macsDict = ", macsDict
-
- pingResult = main.TRUE
- intentResult = main.TRUE
- removeIntentResult = main.TRUE
- flowResult = main.TRUE
- topoResult = main.TRUE
- linkDownResult = main.TRUE
- linkUpResult = main.TRUE
-
- devicesCopy = copy.copy( devices )
- if ports:
- portsCopy = copy.copy( ports )
- main.log.info( itemName + ": Adding multi point to single point intents" )
-
- # Check flows count in each node
- checkFlowsCount( main )
-
- # Checking connectivity before installing intents
- main.log.info( itemName + ": Check hosts connection before adding intents" )
- checkPing = pingallHosts( main, hostNames )
- if not checkPing:
- main.log.info( itemName + ": Ping did not go through " +
- "before adding intents" )
- else:
- main.log.debug( itemName + ": Pinged successful before adding " +
- "intents,please check fwd app if it is activated" )
-
- # Adding bidirectional point intents
- for i in range( len( devices ) ):
- egressDevice = devicesCopy[ i ]
- ingressDeviceList = copy.copy( devicesCopy )
- ingressDeviceList.remove( egressDevice )
- if ports:
- portEgress = portsCopy[ i ]
- portIngressList = copy.copy( portsCopy )
- del portIngressList[ i ]
- else:
- portEgress = ""
- portIngressList = None
- if not macsDict:
- dstMac = ""
- else:
- dstMac = macsDict[ egressDevice ]
- if dstMac == None:
- main.log.debug( "There is no MAC in device - " + egressDevice )
- dstMac = ""
-
- intentsId.append(
- main.CLIs[ onosNode ].addMultipointToSinglepointIntent(
- ingressDeviceList=ingressDeviceList,
- egressDevice=egressDevice,
- portIngressList=portIngressList,
- portEgress=portEgress,
- ethType=ethType,
- ethDst=dstMac,
- bandwidth=bandwidth,
- lambdaAlloc=lambdaAlloc,
- ipProto=ipProto,
- ipSrc="",
- ipDst="",
- tcpSrc="",
- tcpDst="" ) )
-
- pingResult = pingallHosts( main, hostNames )
-
- # Check intents state
- time.sleep( 30 )
- intentResult = checkIntentState( main, intentsId )
-
- # Check intents state again if first check fails...
- if not intentResult:
- intentResult = checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
- # Ping hosts again...
- pingResult = pingResult and pingallHosts( main, hostNames )
- time.sleep( 5 )
-
- # Test rerouting if these variables exist
- if sw1 and sw2 and expectedLink:
- # link down
- linkDownResult = link( main, sw1, sw2, "down" )
- intentResult = intentResult and checkIntentState( main, intentsId )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, expectedLink )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link down
- if linkDownResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link down" )
- else:
- main.log.error( itemName + ": Failed to bring link down" )
-
- # link up
- linkUpResult = link( main, sw1, sw2, "up" )
- time.sleep( 5 )
-
- # Check flows count in each node
- checkFlowsCount( main )
- # Verify flows
- checkFlowsState( main )
-
- # Check OnosTopology
- topoResult = checkTopology( main, main.numLinks )
-
- # Ping hosts
- pingResult = pingResult and pingallHosts( main, hostNames )
-
- intentResult = checkIntentState( main, intentsId )
-
- # Checks ONOS state in link up
- if linkUpResult and topoResult and pingResult and intentResult:
- main.log.info( itemName + ": Successfully brought link back up" )
- else:
- main.log.error( itemName + ": Failed to bring link back up" )
-
- # Remove all intents
- removeIntentResult = removeAllIntents( main, intentsId )
-
- stepResult = pingResult and linkDownResult and linkUpResult \
- and intentResult and removeIntentResult
-
- return stepResult
-
-def pingallHosts( main, hostList, pingType="ipv4" ):
- # Ping all host in the hosts list variable
- print "Pinging : ", hostList
- pingResult = main.TRUE
- pingResult = main.Mininet1.pingallHosts( hostList, pingType )
- return pingResult
-
-def getHostsData( main ):
- """
- Use fwd app and pingall to discover all the hosts
- """
- import json
- activateResult = main.TRUE
- appCheck = main.TRUE
- getDataResult = main.TRUE
- main.log.info( "Activating reactive forwarding app " )
- activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
-
- for i in range( main.numCtrls ):
- appCheck = appCheck and main.CLIs[ i ].appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[ i ].apps() )
- main.log.warn( main.CLIs[ i ].appIDs() )
-
- pingResult = main.Mininet1.pingall()
- hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
- hosts = main.Mininet1.getHosts().keys()
- # TODO: Make better use of new getHosts function
- for host in hosts:
- main.hostsData[ host ] = {}
- main.hostsData[ host ][ 'mac' ] = \
- main.Mininet1.getMacAddress( host ).upper()
- for hostj in hostsJson:
- if main.hostsData[ host ][ 'mac' ] == hostj[ 'mac' ]:
- main.hostsData[ host ][ 'id' ] = hostj[ 'id' ]
- main.hostsData[ host ][ 'vlan' ] = hostj[ 'vlan' ]
- main.hostsData[ host ][ 'location' ] = \
- hostj[ 'location' ][ 'elementId' ] + '/' + \
- hostj[ 'location' ][ 'port' ]
- main.hostsData[ host ][ 'ipAddresses' ] = hostj[ 'ipAddresses' ]
-
- main.log.info( "Deactivating reactive forwarding app " )
- deactivateResult = main.CLIs[ 0 ].deactivateApp( "org.onosproject.fwd" )
- if activateResult and deactivateResult and main.hostsData:
- main.log.info( "Successfully used fwd app to discover hosts " )
- getDataResult = main.TRUE
- else:
- main.log.info( "Failed to use fwd app to discover hosts " )
- getDataResult = main.FALSE
-
- print main.hostsData
-
- return getDataResult
-
-def checkTopology( main, expectedLink ):
- statusResult = main.TRUE
- # Check onos topology
- main.log.info( itemName + ": Checking ONOS topology " )
-
- for i in range( main.numCtrls ):
- topologyResult = main.CLIs[ i ].topology()
- statusResult = main.ONOSbench.checkStatus( topologyResult,
- main.numSwitch,
- expectedLink )\
- and statusResult
- if not statusResult:
- main.log.error( itemName + ": Topology mismatch" )
- else:
- main.log.info( itemName + ": Topology match" )
- return statusResult
-
-def checkIntentState( main, intentsId ):
- """
- This function will check intent state to make sure all the intents
- are in INSTALLED state
- """
-
- intentResult = main.TRUE
- results = []
-
- main.log.info( itemName + ": Checking intents state" )
- # First check of intents
- for i in range( main.numCtrls ):
- tempResult = main.CLIs[ i ].checkIntentState( intentsId=intentsId )
- results.append( tempResult )
-
- expectedState = [ 'INSTALLED', 'INSTALLING' ]
-
- if all( result == main.TRUE for result in results ):
- main.log.info( itemName + ": Intents are installed correctly" )
- else:
- # Wait for at least 5 second before checking the intents again
- time.sleep( 5 )
- results = []
- # Second check of intents since some of the intents may be in
- # INSTALLING state, they should be in INSTALLED at this time
- for i in range( main.numCtrls ):
- tempResult = main.CLIs[ i ].checkIntentState(
- intentsId=intentsId )
- results.append( tempResult )
- if all( result == main.TRUE for result in results ):
- main.log.info( itemName + ": Intents are installed correctly" )
- else:
- main.log.error( itemName + ": Intents are NOT installed correctly" )
- intentResult = main.FALSE
-
- return intentResult
-
-def checkFlowsState( main ):
-
- main.log.info( itemName + ": Check flows state" )
- checkFlowsResult = main.CLIs[ 0 ].checkFlowsState()
- return checkFlowsResult
-
-def link( main, sw1, sw2, option):
-
- # link down
- main.log.info( itemName + ": Bring link " + option + "between " +
- sw1 + " and " + sw2 )
- linkResult = main.Mininet1.link( end1=sw1, end2=sw2, option=option )
- return linkResult
-
-def removeAllIntents( main, intentsId ):
- """
- Remove all intents in the intentsId
- """
- import time
- intentsRemaining = []
- removeIntentResult = main.TRUE
- # Remove intents
- for intent in intentsId:
- main.CLIs[ 0 ].removeIntent( intentId=intent, purge=True )
-
- time.sleep( 5 )
- # Checks if there is remaining intents using intents()
- intentsRemaining = main.CLIs[ 0 ].intents( jsonFormat=False )
- # If there is remianing intents then remove intents should fail
-
- if intentsRemaining:
- main.log.info( itemName + ": There are " +
- str( len( intentsRemaining ) ) + " intents remaining, "
- + "failed to remove all the intents " )
- removeIntentResult = main.FALSE
- main.log.info( intentsRemaining )
- else:
- main.log.info( itemName + ": There are no intents remaining, " +
- "successfully removed all the intents." )
- removeIntentResult = main.TRUE
- return removeIntentResult
-
-def checkFlowsCount( main ):
- """
- Check flows count in each node
- """
- import json
-
- flowsCount = []
- main.log.info( itemName + ": Checking flows count in each ONOS node" )
- for i in range( main.numCtrls ):
- summaryResult = main.CLIs[ i ].summary()
- if not summaryResult:
- main.log.error( itemName + ": There is something wrong with " +
- "summary command" )
- return main.FALSE
- else:
- summaryJson = json.loads( summaryResult )
- flowsCount.append( summaryJson.get( 'flows' ) )
-
- if flowsCount:
- if all( flows==flowsCount[ 0 ] for flows in flowsCount ):
- main.log.info( itemName + ": There are " + str( flowsCount[ 0 ] ) +
- " flows in all ONOS node" )
- else:
- for i in range( main.numCtrls ):
- main.log.debug( itemName + ": ONOS node " + str( i ) + " has " +
- flowsCount[ i ] + " flows" )
- else:
- main.log.error( "Checking flows count failed, check summary command" )
- return main.FALSE
-
- return main.TRUE
-
diff --git a/TestON/tests/FuncIntent/Dependency/__init__.py b/TestON/tests/FuncIntent/Dependency/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/FuncIntent/Dependency/__init__.py
+++ /dev/null
diff --git a/TestON/tests/FuncIntent/FuncIntent.params b/TestON/tests/FuncIntent/FuncIntent.params
deleted file mode 100644
index e7c8b40..0000000
--- a/TestON/tests/FuncIntent/FuncIntent.params
+++ /dev/null
@@ -1,34 +0,0 @@
-<PARAMS>
-
- <testcases>10,11,12,13,1003</testcases>
-
- <SCALE>1,3</SCALE>
- <availableNodes>3</availableNodes>
- <ENV>
- <cellName>functionality</cellName>
- <cellApps>drivers,openflow,proxyarp,mobility</cellApps>
- </ENV>
- <GIT>
- <pull>False</pull>
- <branch>master</branch>
- </GIT>
- <CTRL>
- <num>3</num>
- <ip1>OC1</ip1>
- <port1>6633</port1>
- <ip2>OC2</ip2>
- <port2>6633</port2>
- <ip3>OC3</ip3>
- <port3>6633</port3>
- </CTRL>
- <BENCH>
- <user>admin</user>
- <ip1>OCN</ip1>
- </BENCH>
- <MININET>
- <switch>7</switch>
- <links>20</links>
- <topo>~/mininet/custom/newFuncTopo.py</topo>
- </MININET>
-
-</PARAMS>
diff --git a/TestON/tests/FuncIntent/FuncIntent.py b/TestON/tests/FuncIntent/FuncIntent.py
deleted file mode 100644
index 3a716ee..0000000
--- a/TestON/tests/FuncIntent/FuncIntent.py
+++ /dev/null
@@ -1,836 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import json
-
-class FuncIntent:
-
- def __init__( self ):
- self.default = ''
-
- def CASE10( self, main ):
- import time
- import os
- import imp
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-log
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- global init
- global globalONOSip
- try:
- if type(init) is not bool:
- init = False
- except NameError:
- init = False
-
- main.wrapper = imp.load_source( 'FuncIntentFunction',
- '/home/admin/ONLabTest/TestON/tests/' +
- 'FuncIntent/Dependency/' +
- 'FuncIntentFunction.py' )
- #Local variables
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- apps = main.params[ 'ENV' ][ 'cellApps' ]
- gitBranch = main.params[ 'GIT' ][ 'branch' ]
- benchIp = os.environ[ 'OCN' ]
- benchUser = main.params[ 'BENCH' ][ 'user' ]
- topology = main.params[ 'MININET' ][ 'topo' ]
- main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
- main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
- main.numCtrls = main.params[ 'CTRL' ][ 'num' ]
- main.ONOSport = []
- main.hostsData = {}
- PULLCODE = False
- if main.params[ 'GIT' ][ 'pull' ] == 'True':
- PULLCODE = True
- main.case( "Setting up test environment" )
- main.CLIs = []
- for i in range( 1, int( main.numCtrls ) + 1 ):
- main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- main.ONOSport.append( main.params[ 'CTRL' ][ 'port' + str( i ) ] )
-
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- if init == False:
- init = True
-
- main.scale = ( main.params[ 'SCALE' ] ).split( "," )
- main.numCtrls = int( main.scale[ 0 ] )
-
- if PULLCODE:
- main.step( "Git checkout and pull " + gitBranch )
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == main.ERROR:
- main.log.error( "Error pulling git branch" )
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.ONOSbench.cleanInstall()
- stepResult = cleanInstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully compiled " +
- "latest ONOS",
- onfail="Failed to compile " +
- "latest ONOS" )
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
-
- globalONOSip = main.ONOSbench.getOnosIps()
-
- maxNodes = ( len(globalONOSip) - 2 )
-
- main.numCtrls = int( main.scale[ 0 ] )
- main.scale.remove( main.scale[ 0 ] )
-
- main.ONOSip = []
- for i in range( maxNodes ):
- main.ONOSip.append( globalONOSip[i] )
-
- #kill off all onos processes
- main.log.info( "Safety check, killing all ONOS processes" +
- " before initiating enviornment setup" )
- for i in range(maxNodes):
- main.ONOSbench.onosDie( globalONOSip[ i ] )
-
- print "NODE COUNT = ", main.numCtrls
- main.log.info( "Creating cell file" )
- cellIp = []
- for i in range( main.numCtrls ):
- cellIp.append( str( main.ONOSip[ i ] ) )
- print cellIp
- main.ONOSbench.createCellFile( benchIp, cellName, "",
- str( apps ), *cellIp )
-
- main.step( "Apply cell to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- stepResult = cellResult and verifyResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully applied cell to " + \
- "environment",
- onfail="Failed to apply cell to environment " )
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- stepResult = packageResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully created ONOS package",
- onfail="Failed to create ONOS package" )
-
- main.step( "Uninstalling ONOS package" )
- onosUninstallResult = main.TRUE
- for i in range( main.numCtrls ):
- onosUninstallResult = onosUninstallResult and \
- main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
- stepResult = onosUninstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully uninstalled ONOS package",
- onfail="Failed to uninstall ONOS package" )
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for i in range( main.numCtrls ):
- onosInstallResult = onosInstallResult and \
- main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
- stepResult = onosInstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully installed ONOS package",
- onfail="Failed to install ONOS package" )
-
- time.sleep( 20 )
- main.step( "Starting ONOS service" )
- stopResult = main.TRUE
- startResult = main.TRUE
- onosIsUp = main.TRUE
- for i in range( main.numCtrls ):
- onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
- if onosIsUp == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up, stop and " +
- "start ONOS again " )
- for i in range( main.numCtrls ):
- stopResult = stopResult and \
- main.ONOSbench.onosStop( main.ONOSip[ i ] )
- for i in range( main.numCtrls ):
- startResult = startResult and \
- main.ONOSbench.onosStart( main.ONOSip[ i ] )
- stepResult = onosIsUp and stopResult and startResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="ONOS service is ready",
- onfail="ONOS service did not start properly" )
-
- main.step( "Start ONOS cli" )
- cliResult = main.TRUE
- for i in range( main.numCtrls ):
- cliResult = cliResult and \
- main.CLIs[i].startOnosCli( main.ONOSip[ i ] )
- stepResult = cliResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully start ONOS cli",
- onfail="Failed to start ONOS cli" )
-
- def CASE9( self, main ):
- '''
- Report errors/warnings/exceptions
- '''
- main.log.info( "Error report: \n" )
- main.ONOSbench.logReport( globalONOSip[0],
- [ "INFO", "FOLLOWER", "WARN", "flow", "ERROR" , "Except" ],
- "s" )
- #main.ONOSbench.logReport( globalONOSip[1], [ "INFO" ], "d" )
-
- def CASE11( self, main ):
- """
- Start mininet
- """
- main.log.report( "Start Mininet topology" )
- main.log.case( "Start Mininet topology" )
-
- main.step( "Starting Mininet Topology" )
- topoResult = main.Mininet1.startNet( topoFile=topology )
- stepResult = topoResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully loaded topology",
- onfail="Failed to load topology" )
- # Exit if topology did not load properly
- if not topoResult:
- main.cleanup()
- main.exit()
-
- def CASE12( self, main ):
- """
- Assign mastership to controllers
- """
- import re
-
- main.case( "Assign switches to controllers" )
- main.step( "Assigning switches to controllers" )
- assignResult = main.TRUE
- switchList = []
-
- # Creates a list switch name, use getSwitch() function later...
- for i in range( 1, ( main.numSwitch + 1 ) ):
- switchList.append( 's' + str( i ) )
-
- assignResult = main.Mininet1.assignSwController( sw=switchList,
- ip=main.ONOSip,
- port=main.ONOSport )
- if not assignResult:
- main.cleanup()
- main.exit()
-
- for i in range( 1, ( main.numSwitch + 1 ) ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
- assignResult = assignResult and main.TRUE
- else:
- assignResult = main.FALSE
- stepResult = assignResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully assigned switches" +
- "to controller",
- onfail="Failed to assign switches to " +
- "controller" )
- def CASE13( self, main ):
- """
- Discover all hosts and store its data to a dictionary
- """
- main.case( "Discover all hosts" )
-
- stepResult = main.TRUE
- main.step( "Discover all hosts using pingall " )
- stepResult = main.wrapper.getHostsData( main )
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully discovered hosts",
- onfail="Failed to discover hosts" )
-
- def CASE14( self, main ):
- """
- Stop mininet
- """
- main.log.report( "Stop Mininet topology" )
- main.log.case( "Stop Mininet topology" )
-
- main.step( "Stopping Mininet Topology" )
- topoResult = main.Mininet1.stopNet( )
- stepResult = topoResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully stop mininet",
- onfail="Failed to stop mininet" )
- # Exit if topology did not load properly
- if not topoResult:
- main.cleanup()
- main.exit()
-
- def CASE1001( self, main ):
- """
- Add host intents between 2 host:
- - Discover hosts
- - Add host intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- """
- import time
- import json
- import re
-
- # Assert variables - These variable's name|format must be followed
- # if you want to use the wrapper function
- assert main, "There is no main"
- assert main.CLIs, "There is no main.CLIs"
- assert main.Mininet1, "Mininet handle should be named Mininet1"
- assert main.numSwitch, "Placed the total number of switch topology in \
- main.numSwitch"
-
- main.case( "Add host intents between 2 host" )
-
- stepResult = main.TRUE
- main.step( "IPV4: Add host intents between h1 and h9" )
- stepResult = main.wrapper.hostIntent( main,
- onosNode='0',
- name='IPV4',
- host1='h1',
- host2='h9',
- host1Id='00:00:00:00:00:01/-1',
- host2Id='00:00:00:00:00:09/-1',
- sw1='s5',
- sw2='s2',
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4: Add host intent successful",
- onfail="IPV4: Add host intent failed" )
-
- stepResult = main.TRUE
- main.step( "DUALSTACK1: Add host intents between h3 and h11" )
- stepResult = main.wrapper.hostIntent( main,
- name='DUALSTACK',
- host1='h3',
- host2='h11',
- host1Id='00:00:00:00:00:03/-1',
- host2Id='00:00:00:00:00:0B/-1',
- sw1='s5',
- sw2='s2',
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="DUALSTACK1: Add host intent" +
- " successful",
- onfail="DUALSTACK1: Add host intent failed" )
-
- stepResult = main.TRUE
- main.step( "DUALSTACK2: Add host intents between h1 and h11" )
- stepResult = main.wrapper.hostIntent( main,
- name='DUALSTACK2',
- host1='h1',
- host2='h11',
- sw1='s5',
- sw2='s2',
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="DUALSTACK2: Add host intent" +
- " successful",
- onfail="DUALSTACK2: Add host intent failed" )
-
- stepResult = main.TRUE
- main.step( "1HOP: Add host intents between h1 and h3" )
- stepResult = main.wrapper.hostIntent( main,
- name='1HOP',
- host1='h1',
- host2='h3' )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="1HOP: Add host intent" +
- " successful",
- onfail="1HOP: Add host intent failed" )
-
- stepResult = main.TRUE
- main.step( "VLAN1: Add vlan host intents between h4 and h12" )
- stepResult = main.wrapper.hostIntent( main,
- name='VLAN1',
- host1='h4',
- host2='h12',
- host1Id='00:00:00:00:00:04/100',
- host2Id='00:00:00:00:00:0C/100',
- sw1='s5',
- sw2='s2',
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="VLAN1: Add vlan host" +
- " intent successful",
- onfail="VLAN1: Add vlan host intent failed" )
-
- stepResult = main.TRUE
- main.step( "VLAN2: Add inter vlan host intents between h13 and h20" )
- stepResult = main.wrapper.hostIntent( main,
- name='VLAN2',
- host1='h13',
- host2='h20' )
-
- utilities.assert_equals( expect=main.FALSE,
- actual=stepResult,
- onpass="VLAN2: Add inter vlan host" +
- " intent successful",
- onfail="VLAN2: Add inter vlan host" +
- " intent failed" )
-
- def CASE1002( self, main ):
- """
- Add point intents between 2 hosts:
- - Get device ids | ports
- - Add point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- """
- import time
- import json
- import re
-
- # Assert variables - These variable's name|format must be followed
- # if you want to use the wrapper function
- assert main, "There is no main"
- assert main.CLIs, "There is no main.CLIs"
- assert main.Mininet1, "Mininet handle should be named Mininet1"
- assert main.numSwitch, "Placed the total number of switch topology in \
- main.numSwitch"
-
- main.case( "Add point intents between 2 devices" )
-
- stepResult = main.TRUE
- # No option point intents
- main.step( "NOOPTION: Add point intents between h1 and h9" )
- stepResult = main.wrapper.pointIntent(
- main,
- name="NOOPTION",
- host1="h1",
- host2="h9",
- deviceId1="of:0000000000000005/1",
- deviceId2="of:0000000000000006/1",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- stepResult = main.TRUE
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="NOOPTION: Add point intent successful",
- onfail="NOOPTION: Add point intent failed" )
-
- stepResult = main.TRUE
- stepResult = main.wrapper.pointIntent(
- main,
- name="IPV4",
- host1="h1",
- host2="h9",
- deviceId1="of:0000000000000005/1",
- deviceId2="of:0000000000000006/1",
- port1="",
- port2="",
- ethType="IPV4",
- mac1="00:00:00:00:00:01",
- mac2="00:00:00:00:00:09",
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ip1="",
- ip2="",
- tcp1="",
- tcp2="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4: Add point intent successful",
- onfail="IPV4: Add point intent failed" )
-
- stepResult = main.TRUE
- stepResult = main.wrapper.pointIntent(
- main,
- name="IPV4_2",
- host1="h1",
- host2="h9",
- deviceId1="of:0000000000000005/1",
- deviceId2="of:0000000000000006/1",
- ipProto=1,
- ip1="",
- ip2="",
- tcp1="",
- tcp2="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4_2: Add point intent successful",
- onfail="IPV4_2: Add point intent failed" )
-
- stepResult = main.TRUE
- main.step( "DUALSTACK1: Add point intents between h1 and h9" )
- stepResult = main.wrapper.pointIntent(
- main,
- name="DUALSTACK1",
- host1="h3",
- host2="h11",
- deviceId1="of:0000000000000005",
- deviceId2="of:0000000000000006",
- port1="3",
- port2="3",
- ethType="IPV4",
- mac1="00:00:00:00:00:03",
- mac2="00:00:00:00:00:0B",
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ip1="",
- ip2="",
- tcp1="",
- tcp2="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="DUALSTACK1: Add point intent" +
- " successful",
- onfail="DUALSTACK1: Add point intent failed" )
- stepResult = main.TRUE
- main.step( "VLAN: Add point intents between h5 and h21" )
- stepResult = main.wrapper.pointIntent(
- main,
- name="VLAN",
- host1="h5",
- host2="h21",
- deviceId1="of:0000000000000005/5",
- deviceId2="of:0000000000000007/5",
- port1="",
- port2="",
- ethType="IPV4",
- mac1="00:00:00:00:00:05",
- mac2="00:00:00:00:00:15",
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ip1="",
- ip2="",
- tcp1="",
- tcp2="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="VLAN: Add point intent successful",
- onfail="VLAN: Add point intent failed" )
-
- stepResult = main.TRUE
- main.step( "1HOP: Add point intents between h1 and h3" )
- stepResult = main.wrapper.hostIntent( main,
- name='1HOP',
- host1='h1',
- host2='h3' )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="1HOP: Add point intent" +
- " successful",
- onfail="1HOP: Add point intent failed" )
-
- def CASE1003( self, main ):
- """
- Add single point to multi point intents
- - Get device ids
- - Add single point to multi point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- """
- assert main, "There is no main"
- assert main.CLIs, "There is no main.CLIs"
- assert main.Mininet1, "Mininet handle should be named Mininet1"
- assert main.numSwitch, "Placed the total number of switch topology in \
- main.numSwitch"
-
- main.case( "Add single point to multi point intents between devices" )
-
- stepResult = main.TRUE
- hostNames = [ 'h8', 'h16', 'h24' ]
- devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
- 'of:0000000000000007/8' ]
- macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
-
- main.step( "NOOPTION: Add single point to multi point intents" )
- stepResult = main.wrapper.singleToMultiIntent(
- main,
- name="NOOPTION",
- hostNames=hostNames,
- devices=devices,
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="NOOPTION: Successfully added single "
- + " point to multi point intents",
- onfail="NOOPTION: Failed to add single point" +
- " to multi point intents" )
-
- stepResult = main.TRUE
- main.step( "IPV4: Add single point to multi point intents" )
- stepResult = main.wrapper.singleToMultiIntent(
- main,
- name="IPV4",
- hostNames=hostNames,
- devices=devices,
- ports=None,
- ethType="IPV4",
- macs=macs,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4: Successfully added single point"
- + " to multi point intents",
- onfail="IPV4: Failed to add single point" +
- " to multi point intents" )
-
- stepResult = main.TRUE
- main.step( "IPV4_2: Add single point to multi point intents" )
- hostNames = [ 'h8', 'h16', 'h24' ]
- stepResult = main.wrapper.singleToMultiIntent(
- main,
- name="IPV4",
- hostNames=hostNames,
- ethType="IPV4",
- lambdaAlloc=False )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4_2: Successfully added single "
- + " point to multi point intents",
- onfail="IPV4_2: Failed to add single point" +
- " to multi point intents" )
- stepResult = main.TRUE
- main.step( "VLAN: Add single point to multi point intents" )
- hostNames = [ 'h4', 'h12', 'h20' ]
- devices = [ 'of:0000000000000005/4', 'of:0000000000000006/4', \
- 'of:0000000000000007/4' ]
- macs = [ '00:00:00:00:00:04', '00:00:00:00:00:0C', '00:00:00:00:00:14' ]
- stepResult = main.wrapper.singleToMultiIntent(
- main,
- name="VLAN",
- hostNames=hostNames,
- devices=devices,
- ports=None,
- ethType="IPV4",
- macs=macs,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="VLAN: Successfully added single point"
- + " to multi point intents",
- onfail="VLAN: Failed to add single point" +
- " to multi point intents" )
-
- def CASE1004( self, main ):
- """
- Add multi point to single point intents
- - Get device ids
- - Add multi point to single point intents
- - Check intents
- - Verify flows
- - Ping hosts
- - Reroute
- - Link down
- - Verify flows
- - Check topology
- - Ping hosts
- - Link up
- - Verify flows
- - Check topology
- - Ping hosts
- - Remove intents
- """
- assert main, "There is no main"
- assert main.CLIs, "There is no main.CLIs"
- assert main.Mininet1, "Mininet handle should be named Mininet1"
- assert main.numSwitch, "Placed the total number of switch topology in \
- main.numSwitch"
-
- main.case( "Add multi point to single point intents between devices" )
-
- stepResult = main.TRUE
- hostNames = [ 'h8', 'h16', 'h24' ]
- devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
- 'of:0000000000000007/8' ]
- macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
-
- main.step( "NOOPTION: Add multi point to single point intents" )
- stepResult = main.wrapper.multiToSingleIntent(
- main,
- name="NOOPTION",
- hostNames=hostNames,
- devices=devices,
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="NOOPTION: Successfully added multi "
- + " point to single point intents",
- onfail="NOOPTION: Failed to add multi point" +
- " to single point intents" )
-
- stepResult = main.TRUE
- main.step( "IPV4: Add multi point to single point intents" )
- stepResult = main.wrapper.multiToSingleIntent(
- main,
- name="IPV4",
- hostNames=hostNames,
- devices=devices,
- ports=None,
- ethType="IPV4",
- macs=macs,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4: Successfully added multi point"
- + " to single point intents",
- onfail="IPV4: Failed to add multi point" +
- " to single point intents" )
-
- stepResult = main.TRUE
- main.step( "IPV4_2: Add multi point to single point intents" )
- hostNames = [ 'h8', 'h16', 'h24' ]
- stepResult = main.wrapper.multiToSingleIntent(
- main,
- name="IPV4",
- hostNames=hostNames,
- ethType="IPV4",
- lambdaAlloc=False )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="IPV4_2: Successfully added multi point"
- + " to single point intents",
- onfail="IPV4_2: Failed to add multi point" +
- " to single point intents" )
-
- stepResult = main.TRUE
- main.step( "VLAN: Add multi point to single point intents" )
- hostNames = [ 'h5', 'h13', 'h21' ]
- devices = [ 'of:0000000000000005/5', 'of:0000000000000006/5', \
- 'of:0000000000000007/5' ]
- macs = [ '00:00:00:00:00:05', '00:00:00:00:00:0D', '00:00:00:00:00:15' ]
- stepResult = main.wrapper.multiToSingleIntent(
- main,
- name="VLAN",
- hostNames=hostNames,
- devices=devices,
- ports=None,
- ethType="IPV4",
- macs=macs,
- bandwidth="",
- lambdaAlloc=False,
- ipProto="",
- ipAddresses="",
- tcp="",
- sw1="s5",
- sw2="s2",
- expectedLink=18 )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="VLAN: Successfully added multi point"
- + " to single point intents",
- onfail="VLAN: Failed to add multi point" +
- " to single point intents" )
diff --git a/TestON/tests/FuncIntent/FuncIntent.topo b/TestON/tests/FuncIntent/FuncIntent.topo
deleted file mode 100755
index e6613de..0000000
--- a/TestON/tests/FuncIntent/FuncIntent.topo
+++ /dev/null
@@ -1,52 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS>
- <home>~/ONOS</home>
- </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
- <Mininet1>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </Mininet1>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/FuncIntent/__init__.py b/TestON/tests/FuncIntent/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/FuncIntent/__init__.py
+++ /dev/null
diff --git a/TestON/tests/FuncPlatform/Dependency/App.py b/TestON/tests/FuncPlatform/Dependency/App.py
deleted file mode 100644
index 5410c32..0000000
--- a/TestON/tests/FuncPlatform/Dependency/App.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""
-Methods related to application interaction
-
-"""
-
-
-def __init__( self ):
- self.ip = '127.0.0.1'
-
-def activate( apps, nodeToActivateFrom=0 ):
- """
- Activate specified applications from node specified
-
- Ex) apps = ['metrics', 'fwd']
- nodeToActivateFrom = range( 0, nodes )
- """
- if isinstance( apps, ( int, basestring ) ):
- main.log.error( 'Please pass in a list of strings for args' )
- return main.FALSE
-
- if not isinstance( nodeToActivateFrom, ( int ) ) or \
- nodeToActivateFrom < 0:
- main.log.error( 'Incorrect node specified' )
- return main.FALSE
-
- # TODO: Start log capture and listen for exceptions
- # and errors. Also investigate possible keywords
- # to listen for when activating applications
-
-
- for app in apps:
- # Check if app str in appList is in the main scope
- # definition main.appList
- if app not in main.appList:
- main.log.error( 'Invalid app name given' )
- return main.FALSE
-
- try:
- # NOTE: assumes node 1 is always activating application
- appOutput = main.CLIs[nodeToActivateFrom].activateApp(
- main.appList[app] )
- except KeyError:
- main.log.error( 'There was an error with the key '+
- str(app) + '. Check the appList dictionary' )
- return main.FALSE
- except Exception:
- main.log.error( 'Uncaught exception error while ' +
- 'activating applications: ' + str(app) )
- return main.FALSE
-
- return main.TRUE
-
-def deactivate( apps, nodeToDeactivateFrom=0 ):
- """
- Deactivate specified applications from node specified
-
- """
- main.log.report( 'deactivate implment me' )
-
-def isAppInstallSuccess():
- """
- Check the app list across clusters to determine
- that apps have been installed successfully
-
- """
-
- main.log.report( 'isAppInstallSuccess implement me' )
-
diff --git a/TestON/tests/FuncPlatform/Dependency/Logger.py b/TestON/tests/FuncPlatform/Dependency/Logger.py
deleted file mode 100644
index 22d3f61..0000000
--- a/TestON/tests/FuncPlatform/Dependency/Logger.py
+++ /dev/null
@@ -1,57 +0,0 @@
-
-def __init__( self ):
- self.ip = '127.0.0.1'
-
-def checkOnosLog( nodeIp, option='',
- outputType=0):
- """
- Listens to the log for any Errors and Exceptions.
-
- Runs 'onos-check-logs <option>'
- This script only returns if there are any errors
- or exceptions
-
- outputType
- 0: Return output of log
- 1: Return (#Errors, #Exceptions, #Warn)
-
- """
- if not isinstance( option, basestring ):
- main.log.error( 'Incorrect grep format specified' )
- return main.FALSE
-
- try:
- main.log.info( 'Starting Onos-log listening for '+
- str(option) )
- cmd = 'onos-check-logs ' + str(nodeIp) + ' old'
- if outputType == 0:
- main.ONOSbench.handle.sendline( cmd )
- main.ONOSbench.handle.expect( cmd )
- main.ONOSbench.handle.expect('\$')
- logResult = main.ONOSbench.handle.before
- return logResult
- elif outputType == 1:
- # Important in assertion criteria
- # to determine how much warn / error is
- # acceptable
- return 'Implement option 1'
- else:
- main.log.error( 'Incorrect outputType specified' )
- return main.FALSE
-
- except Exception:
- main.log.exception( self.name + ': Uncaught exception' )
- main.cleanup()
- main.exit()
-
-def setLogLevel( level ):
- """
- Set the log level of onos
- """
- main.log.info( 'setLogLevel implement me' )
-
-def getLogReport( nodeIp, searchTerms ):
- """
- Refer to CLI driver for 'logReport'
- """
- main.log.info( 'getLogReport - implement me!' )
diff --git a/TestON/tests/FuncPlatform/Dependency/Shutdown.py b/TestON/tests/FuncPlatform/Dependency/Shutdown.py
deleted file mode 100644
index ba77bbd..0000000
--- a/TestON/tests/FuncPlatform/Dependency/Shutdown.py
+++ /dev/null
@@ -1,19 +0,0 @@
-
-def __init__( self ):
- self.ip = '127.0.0.1'
-
-def killOnosNodes( nodeIps ):
- """
- Kill all components of Onos on
- given list of ips
-
- Ex) nodeIps = ['10.0.0.1', '10.0.0.2']
- """
- killResult = main.TRUE
-
- for node in nodeIps:
- killResult = killResult and main.ONOSbench.onosDie( node )
- if killResult == main.TRUE:
- main.log.info( str(node) + ' was killed' )
-
- return killResult
diff --git a/TestON/tests/FuncPlatform/Dependency/Startup.py b/TestON/tests/FuncPlatform/Dependency/Startup.py
deleted file mode 100644
index f3f90a9..0000000
--- a/TestON/tests/FuncPlatform/Dependency/Startup.py
+++ /dev/null
@@ -1,219 +0,0 @@
-
-"""
-Startup related methods for ONOS
-
-Guidelines:
- * Group sequential functionalities together
- * Methods should not be dependent on platform
- * Return main.TRUE on success or comprehensive error message
- on failure (TBD)
- * All methods should be consistent in expected behavior
-"""
-import time
-import json
-
-def __init__( self ):
- self.ip = '127.0.0.1'
-
-def gitPullAndMci( branchName, commitLog=False ):
- """
- Pull from branch repository specified and compile changes
- If commitLog is True, report commit information
-
- Any errors / warnings will be handled by respective
- driver function calls
- """
- co = main.ONOSbench.gitCheckout( branchName )
- gp = main.ONOSbench.gitPull()
- ci = main.ONOSbench.cleanInstall()
-
- if co and gp and ci == main.TRUE:
- if commitLog:
- main.log.report( 'Commit information - ' )
- main.ONOSbench.getVersion(report=True)
-
- return main.TRUE
-
- else:
- # TODO: Comprehensive error message
- return 'git pull and mci failed'
-
-def initOnosStartupSequence( cellName, appStr, benchIp, mnIp, onosIps ):
- """
- Startup sequence includes the following:
- * Create cell file
- * Set cell variables on ONOS bench
- * Verify cell
- * Create ONOS package
- * Force install ONOS package
- * Start ONOS service
- * Start ONOS cli
-
- Also verifies that Onos is up and running by
- 'isup' driver function which executs
- 'onos-wait-for-start'
- """
-
- # NOTE: leave out create cell file until bug addressed
- #cf = main.ONOSbench.createCellFile( benchIp, cellName, mnIp,
- # str(appStr), *onosIps )
- numNodes = len(onosIps)
-
- sc = main.ONOSbench.setCell( cellName )
- vc = main.ONOSbench.verifyCell()
- op = main.ONOSbench.onosPackage()
- for addr in onosIps:
- oi = main.ONOSbench.onosInstall( node = addr )
-
- time.sleep( 5 )
-
- iu = main.TRUE
- for node in onosIps:
- iu = iu and main.ONOSbench.isup( node )
-
- cli = main.TRUE
- for node in range( 0, numNodes ):
- cli = cli and main.CLIs[node].startOnosCli( onosIps[node] )
-
- # Check if all nodes are discovered correctly using
- # 'nodes' command in Onos Cli
- na = main.TRUE
- try:
- nodeCmdJson = json.loads( main.CLIs[0].nodes() )
- for node in nodeCmdJson:
- if node['state'] != 'ACTIVE':
- main.log.warn( str( node['id'] ) +
- ' Node is not in ACTIVE state.' )
- na = main.FALSE
- if na != main.FALSE:
- main.log.info( 'All nodes discovered successfully' )
- except Exception:
- main.log.error( 'nodes command did not execute properly' )
- return main.FALSE
-
- if sc and vc and op and oi and iu and cli and na == main.TRUE:
- return main.TRUE
- else:
- return main.FALSE
-
-def installOnosFromTar( wgetAddr, nodeIps ):
- """
- Install Onos directly from tar.gz file.
- Due to the nature of the specific steps required
- to startup Onos in this fashion, all commands
- required to start Onos from tar.gz will be
- grouped in this method.
-
- 1) wget latest onos tar.gz on onos node
- 2) untar package
- 3) specify onos-config cluster
- 4) start onos via onos-service
- 5) form onos cluster using onos-form-cluster
- 6) check for successful startup
-
- Specify the download link for the tar.gz.
- Provide a list of nodeIps
-
- Ex) wgetAddr = 'https://mytargzdownload.com/file.tar.gz'
- nodeIps = ['10.0.0.1', '10.0.0.2']
- """
- if isinstance( nodeIps, ( int, basestring ) ):
- main.log.error( 'Please pass in a list of string nodes' )
- return main.FALSE
-
- # Obtain filename from provided address
- # assumes that filename is separated by '/' character
- f_name = ''
- addr = str( wgetAddr ).split('/')
- for phrase in addr:
- if 'tar.gz' in phrase:
- f_name = str( phrase )
- main.log.info( 'Using ' + f_name + ' as file' )
-
- clusterCount = len( nodeIps )
-
- main.log.info( 'Initiating Onos installation sequence ' +
- 'using tar.gz ... This may take a few minutes' )
-
- for node in range( 0, clusterCount ):
- # Use the wgetAddr to download a new tar.gz from server
- try:
- main.ONOSnode[node].handle.sendline( 'wget ' + wgetAddr )
- main.ONOSnode[node].handle.expect( 'saved' )
- main.ONOSnode[node].handle.expect( '\$' )
- main.log.info( 'Successfully downloaded tar.gz ' +
- 'on node: ' + str( main.ONOSips[node] ) )
- except Exception:
- # NOTE: Additional exception may be appropriate
- main.log.error( 'Uncaught exception while ' +
- 'downloading Onos tar.gz: ' +
- main.ONOSnode[node].handle.before )
- return main.FALSE
-
- for node in range( 0, clusterCount ):
- # Untar files on all nodes, then enter the
- # newly created directory
- try:
- main.ONOSnode[node].handle.sendline( 'tar zxvf ' + f_name )
- # Verbose output of tar will contain some onos returns
- main.ONOSnode[node].handle.expect( 'onos' )
- main.ONOSnode[node].handle.expect( '\$' )
- # NOTE: Making an assumption here:
- # the directory created by tar file has a name that
- # starts with 'onos-' followed by version number
- # '1.2.0'. If this is NOT true, this method must
- # be changed to enter the correct directory.
- # The directory name is currently dynamic
- # and depends on the day at which you downloaded
- # the tar file
- # Enter onos- wildcard to disregard its version / date
- # suffix
- main.ONOSnode[node].handle.sendline( 'cd onos-*' )
- main.ONOSnode[node].handle.expect( '\$' )
-
- main.ONOSnode[node].handle.sendline( 'pwd' )
- main.ONOSnode[node].handle.expect( 'pwd' )
- main.ONOSnode[node].handle.expect( '\$' )
- pwd = main.ONOSnode[node].handle.before
- if 'onos' in str(pwd):
- main.log.info( 'tar zxvf ' + f_name + ' successful ' +
- 'on node ' + str( main.ONOSips[node] ) )
-
- except Exception:
- main.log.error( 'Uncaught exception while executing ' +
- 'tar zxvf of ' + f_name + ': ' +
- main.ONOSnode[node].handle.before +
- main.ONOSnode[node].handle.after)
- return main.FALSE
-
- for node in range( 0, clusterCount ):
- try:
- main.ONOSnode[node].handle.sendline( 'bin/onos-service '+
- 'server &' )
- # Send some extra characters to run the process
- main.ONOSnode[node].handle.sendline( '' )
- main.ONOSnode[node].handle.sendline( '' )
- main.ONOSnode[node].handle.expect( '\$' )
- except Exception:
- main.log.error( 'Uncaught exception while executing ' +
- 'onos-service server command ' +
- str( main.ONOSnode[node].handle.before ) )
- return main.FALSE
-
- iu = main.TRUE
- for node in nodeIps:
- iu = iu and main.ONOSbench.isup( node )
-
- if iu == main.TRUE:
- return main.TRUE
- else:
- return main.FALSE
-
-def addAndStartOnosNode( nodeIps ):
- """
- A scale-out scenario that adds specified list of
- nodes and starts those instances.
-
- Ex) nodeIps = ['10.0.0.2', '10.0.0.3', 10.0.0.4']
- """
- main.log.info( 'addAndStartOnosNode implement me!' )
diff --git a/TestON/tests/FuncPlatform/FuncPlatform.params b/TestON/tests/FuncPlatform/FuncPlatform.params
deleted file mode 100644
index 3895660..0000000
--- a/TestON/tests/FuncPlatform/FuncPlatform.params
+++ /dev/null
@@ -1,63 +0,0 @@
-<PARAMS>
- <testcases>1,2,3,4</testcases>
- <DEP>
- <startupSrc>
- /home/admin/ONLabTest/TestON/tests/FuncPlatform/Dependency/Startup.py
- </startupSrc>
- <startupClassName>
- Startup
- </startupClassName>
-
- <appSrc>
- /home/admin/ONLabTest/TestON/tests/FuncPlatform/Dependency/App.py
- </appSrc>
- <appClassName>
- App
- </appClassName>
-
- <logSrc>
- /home/admin/ONLabTest/TestON/tests/FuncPlatform/Dependency/Logger.py
- </logSrc>
- <logClassName>
- Log
- </logClassName>
-
- <shutdownSrc>
- /home/admin/ONLabTest/TestON/tests/FuncPlatform/Dependency/Shutdown.py
- </shutdownSrc>
- <shutdownClassName>
- Shutdown
- </shutdownClassName>
-
- <targz>
- http://downloads.onosproject.org/nightly/onos-1.2.0.latest-NIGHTLY.tar.gz
- </targz>
- </DEP>
-
- <CTRL>
- <num>3</num>
- <port>6633</port>
- <ip1>10.128.174.1</ip1>
- <ip2>10.128.174.2</ip2>
- <ip3>10.128.174.3</ip3>
- </CTRL>
-
- <MN>
- <ip>10.128.10.90</ip>
- </MN>
-
- <BENCH>
- <ip>10.128.174.10</ip>
- </BENCH>
-
- <CELL>
- <name>func_plat</name>
- <appStr>"drivers,openflow"</appStr>
- </CELL>
-
- <GIT>
- <branchName>master</branchName>
- <pull>off</pull>
- </GIT>
-
-</PARAMS>
diff --git a/TestON/tests/FuncPlatform/FuncPlatform.py b/TestON/tests/FuncPlatform/FuncPlatform.py
deleted file mode 100644
index 60b1aa0..0000000
--- a/TestON/tests/FuncPlatform/FuncPlatform.py
+++ /dev/null
@@ -1,194 +0,0 @@
-"""
-FuncPlatform
-
-A functional test designed to test the environment and
-gather information on startup -> shutdown related issues.
-
-Future works may also include security mode startup /
-shutdown check and cfg get and set.
-
-Abstracting the collection of commands that go hand in hand
-should allow easy rearrangement of steps to replicate or
-create scenarios.
-For example:
- CASE N - Represents a particular scenario
- Steps - Represents abstraction methods called from
- dependency
- 1. Bring ONOS 1 up
- 2. Activate application X
- 3. Activate application Y
- 4. Deactivate application X
-
-The ideal platform test script should have incredible
-robustness to possible exceptions and report the most
-useful error messages.
-
-contributers to contact for help:
-andrew@onlab.us
-"""
-
-class FuncPlatform:
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Main scope initialization case
- Must include to run any other test cases
- """
- import imp
-
- # NOTE: Hardcoded application name subject to change
- # closely monitor and make changes when necessary
- # (or implement ways to dynamically get names)
- main.appList = {
- 'bgprouter' : 'org.onosproject.bgprouter',
- 'config' : 'org.onosproject.config',
- 'cordfabric' : 'org.onosproject.cordfabric',
- 'demo' : 'org.onosproject.demo',
- 'distributedprimitives' : 'org.onosproject.distributedprimitives',
- 'election' : 'org.onosproject.election',
- 'flowrule' : 'org.onosproject.flowrule',
- 'fwd' : 'org.onosproject.fwd',
- 'intentperf' : 'org.onosproject.intentperf',
- 'messagingperf' : 'org.onosproject.messagingperf',
- 'metrics' : 'org.onosproject.metrics',
- 'mobility' : 'org.onosproject.mobility',
- 'netconf' : 'org.onosproject.netconf',
- 'null' : 'org.onosproject.null',
- 'optical' : 'org.onosproject.optical',
- 'pcep' : 'org.onosproject.pcep',
- 'proxyarp' : 'org.onosproject.proxyarp',
- 'reactive.routing' : 'org.onosproject.reactive.routing',
- 'sdnip' : 'org.onosproject.sdnip',
- 'segmentrouting' : 'org.onosproject.segmentrouting',
- 'tunnel' : 'org.onosproject.tunnel',
- 'virtualbng' : 'org.onosproject.virtualbng',
- 'xosintegration' : 'org.onosproject.xosintegration'
- }
- # List of ONOS ip's specififed in params
- main.ONOSips = []
- main.CLIs = []
- main.ONOSnode = []
-
- for node in range( 0, int(main.params['CTRL']['num']) ):
- main.ONOSips.append( main.params['CTRL']['ip'+str(node+1)] )
- main.CLIs.append(
- getattr( main, 'ONOS' + str(node+1) + 'cli' ) )
- main.ONOSnode.append(
- getattr( main, 'ONOS' + str(node+1) ) )
-
- # Application source and name definitions
- startupSrc = main.params['DEP']['startupSrc']
- startupClassName = main.params['DEP']['startupClassName']
-
- appClassName = main.params['DEP']['appClassName']
- appSrc = main.params['DEP']['appSrc']
-
- logClassName = main.params['DEP']['logClassName']
- logSrc = main.params['DEP']['logSrc']
-
- shutdownClassName = main.params['DEP']['shutdownClassName']
- shutdownSrc = main.params['DEP']['shutdownSrc']
-
- # Importing dependency class(es)
- # Refer to source files in Dependency folder to
- # make changes to its respective methods
- # Be weary of naming collisions
- try:
- main.startup = imp.load_source( startupClassName, startupSrc )
- main.app = imp.load_source( appClassName, appSrc )
- main.onosLog = imp.load_source( logClassName, logSrc )
- main.shutdown = imp.load_source( shutdownClassName, shutdownSrc )
- except ImportError:
- main.log.error( 'Error importing class file(s). Please ' +
- 'check file location' )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- import time
-
- cellName = main.params['CELL']['name']
- appStr = main.params['CELL']['appStr']
- benchIp = main.params['BENCH']['ip']
- branchName = main.params['GIT']['branchName']
- gitPull = main.params['GIT']['pull']
- mnIp = main.params['MN']['ip']
-
- main.case( 'Setup environment and install ONOS' )
- if gitPull == 'on':
- main.step( 'Git pull and clean install' )
- gitPullResult = main.startup.gitPullAndMci( branchName )
- utilities.assert_equals( expect=main.TRUE,
- actual=gitPullResult,
- onpass='Git pull and install successful',
- onfail='Git pull and install failed: ' +
- str(gitPullResult) )
-
- main.step( 'Initiate ONOS startup sequence' )
- startupResult = main.startup.initOnosStartupSequence(
- cellName, appStr, benchIp, mnIp, main.ONOSips )
- utilities.assert_equals( expect=main.TRUE,
- actual=startupResult,
- onpass='ONOS startup sequence successful',
- onfail='ONOS startup sequence failed: ' +
- str(startupResult) )
-
- def CASE3( self, main ):
- import time
-
- main.case( 'Activate applications and check installation' )
-
- # NOTE: Test only
- # Unceremoniously kill onos 2
- main.ONOSbench.onosDie( '10.128.174.2' )
-
- time.sleep( 30 )
-
- main.step( 'Sample Onos log check' )
- logResult = main.onosLog.checkOnosLog( main.ONOSips[0] )
- main.log.info( logResult )
- # TODO: Define pass criteria
- utilities.assert_equals( expect=main.TRUE,
- actual=main.TRUE,
- onpass= 'Logging successful',
- onfail= 'Logging failed ' )
-
- # Sample app activation
- main.step( 'Activating applications metrics and fwd' )
- appList = ['metrics', 'fwd']
- appResult = main.app.activate( appList )
- utilities.assert_equals( expect=main.TRUE,
- actual=appResult,
- onpass= 'App activation of ' + str(appList) + ' successful',
- onfail= 'App activation failed ' + str(appResult) )
-
- def CASE4( self, main ):
- """
- Download ONOS tar.gz built from latest nightly
- (following tutorial on wiki) and run ONOS directly on the
- instance
- """
- import imp
-
- targz = main.params['DEP']['targz']
- clusterCount = main.params['CTRL']['num']
-
- main.case( 'Install ONOS from onos.tar.gz file' )
-
- main.step( 'Killing all ONOS instances previous started' )
- killResult = main.shutdown.killOnosNodes( main.ONOSips )
- utilities.assert_equals( expect=main.TRUE,
- actual = killResult,
- onpass = 'All Onos nodes successfully killed',
- onfail = 'Onos nodes were not successfully killed' )
-
- main.step( 'Starting ONOS using tar.gz on all nodes' )
- installResult = main.startup.installOnosFromTar( targz, main.ONOSips )
- utilities.assert_equals( expect=main.TRUE,
- actual = installResult,
- onpass= 'Onos tar.gz installation successful',
- onfail= 'Onos tar.gz installation failed' )
-
-
diff --git a/TestON/tests/FuncPlatform/FuncPlatform.topo b/TestON/tests/FuncPlatform/FuncPlatform.topo
deleted file mode 100644
index f19e8f8..0000000
--- a/TestON/tests/FuncPlatform/FuncPlatform.topo
+++ /dev/null
@@ -1,82 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.174.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1>
- <host>10.128.174.1</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.174.2</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.174.3</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS1cli>
- <host>10.128.174.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>10.128.174.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>10.128.174.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <MininetOvs>
- <host>10.128.10.90</host>
- <user>admin</user>
- <password></password>
- <type>MininetCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS>
- <arg1> --custom topo-perf-2sw.py </arg1>
- <arg2> --arp --mac --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </MininetOvs>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/FuncTopo/Dependency/FuncTopoFunction.py b/TestON/tests/FuncTopo/Dependency/FuncTopoFunction.py
deleted file mode 100644
index 41b3258..0000000
--- a/TestON/tests/FuncTopo/Dependency/FuncTopoFunction.py
+++ /dev/null
@@ -1,344 +0,0 @@
-"""
- Wrapper function for FuncTopo
- Includes onosclidriver and mininetclidriver functions
-"""
-import time
-import json
-import re
-
-def __init__( self ):
- self.default = ''
-
-def testTopology( main, topoFile='', args='', mnCmd='', clean=True ):
- """
- Description:
- This function combines different wrapper functions in this module
- to simulate a topology test
- Test Steps:
- - Load topology
- - Discover topology
- - Compare topology
- - pingall
- - Bring links down
- - Compare topology
- - pingall
- - Bring links up
- - Compare topology
- - pingall
- Options:
- clean: Does sudo mn -c to clean mininet residue
- Please read mininetclidriver.py >> startNet( .. ) function for details
- Returns:
- Returns main.TRUE if the test is successful, main.FALSE otherwise
- """
- testTopoResult = main.TRUE
- compareTopoResult = main.TRUE
- topoObjectResult = main.TRUE
- stopResult = main.TRUE
-
- if clean:
- # Cleans minient
- stopResult = stopMininet( main )
-
- # Restart ONOS to clear hosts test new mininet topology
- restartONOSResult = restartONOS( main )
-
- # Starts topology
- startResult = startNewTopology( main, topoFile, args, mnCmd )
-
- # Gets list of switches in mininet
- assignSwitch( main )
-
- # This function activates fwd app then does pingall as well as store
- # hosts data in a variable main.hostsData
- getHostsResult = getHostsData( main )
-
- # Create topology object using sts
- topoObjectResult = createTopoObject( main )
-
- # Compare Topology
- compareTopoResult = compareTopo( main )
-
- testTopoResult = startResult and topoObjectResult and \
- compareTopoResult and getHostsResult
-
-
- return testTopoResult
-
-def startNewTopology( main, topoFile='', args='', mnCmd='' ):
- """
- Description:
- This wrapper function starts new topology
- Options:
- Please read mininetclidriver.py >> startNet( .. ) function for details
- Return:
- Returns main.TRUE if topology is successfully created by mininet,
- main.FALSE otherwise
- NOTE:
- Assumes Mininet1 is the name of the handler
- """
- assert main, "There is no main variable"
- assert main.Mininet1, "Mininet 1 is not created"
- result = main.TRUE
-
- main.log.info( main.topoName + ": Starting new Mininet topology" )
-
- # log which method is being used
- if topoFile:
- main.log.info( main.topoName + ": Starting topology with " +
- topoFile + "topology file" )
- elif not topoFile and not mnCmd:
- main.log.info( main.topoName + ": Starting topology using" +
- " the topo file" )
- elif topoFile and mnCmd:
- main.log.error( main.topoName + ": You can only use one " +
- "method to start a topology" )
- elif mnCmd:
- main.log.info( main.topoName + ": Starting topology with '" +
- mnCmd + "' Mininet command" )
-
-
- result = main.Mininet1.startNet( topoFile=topoFile,
- args=args,
- mnCmd=mnCmd )
-
- return result
-
-def stopMininet( main ):
- """
- Stops current topology and execute mn -c basically triggers
- stopNet in mininetclidrivers
-
- NOTE: Mininet should be running when issuing this command other wise
- the this function will cause the test to stop
- """
- stopResult = main.TRUE
- stopResult = main.Mininet1.stopNet()
- time.sleep( 30 )
- if not stopResult:
- main.log.info( main.topoName + ": Did not stop Mininet topology" )
- return stopResult
-
-def createTopoObject( main ):
- """
- Creates topology object using sts module
- """
- from sts.topology.teston_topology import TestONTopology
- global MNTopo
- try:
- ctrls = []
- main.log.info( main.topoName + ": Creating topology object" +
- " from mininet" )
- for node in main.nodes:
- temp = ( node, node.name, node.ip_address, 6633 )
- ctrls.append( temp )
- MNTopo = TestONTopology( main.Mininet1, ctrls )
- except Exception:
- objResult = main.FALSE
- else:
- objResult = main.TRUE
-
- return objResult
-
-def compareTopo( main ):
- """
- Compare topology( devices, links, ports, hosts ) between ONOS and
- mininet using sts
- """
- assert MNTopo, "There is no MNTopo object"
- devices = []
- links = []
- ports = []
- hosts = []
- switchResult = []
- linksResult = []
- portsResult = []
- hostsResult = []
- compareTopoResult = main.TRUE
-
- for i in range( main.numCtrls ):
- devices.append( json.loads( main.CLIs[ i ].devices() ) )
- links.append( json.loads( main.CLIs[ i ].links() ) )
- ports.append( json.loads( main.CLIs[ i ].ports() ) )
- hosts.append( json.loads( main.CLIs[ i ].hosts() ) )
-
- # Comparing switches
- main.log.info( main.topoName + ": Comparing switches in each ONOS nodes" +
- " with Mininet" )
- for i in range( main.numCtrls ):
- tempResult = main.Mininet1.compareSwitches( MNTopo, devices[ i ] )
- switchResult.append( tempResult )
- if tempResult == main.FALSE:
- main.log.error( main.topoName + ": ONOS-" + str( i + 1 ) +
- " switch view is incorrect " )
-
- if all( result == main.TRUE for result in switchResult ):
- main.log.info( main.topoName + ": Switch view in all ONOS nodes "+
- "are correct " )
- else:
- compareTopoResult = main.FALSE
-
- # Comparing ports
- main.log.info( main.topoName + ": Comparing ports in each ONOS nodes" +
- " with Mininet" )
- for i in range( main.numCtrls ):
- tempResult = main.Mininet1.comparePorts( MNTopo, ports[ i ] )
- portsResult.append( tempResult )
- if tempResult == main.FALSE:
- main.log.error( main.topoName + ": ONOS-" + str( i + 1 ) +
- " ports view are incorrect " )
-
- if all( result == main.TRUE for result in portsResult ):
- main.log.info( main.topoName + ": Ports view in all ONOS nodes "+
- "are correct " )
- else:
- compareTopoResult = main.FALSE
-
- # Comparing links
- main.log.info( main.topoName + ": Comparing links in each ONOS nodes" +
- " with Mininet" )
- for i in range( main.numCtrls ):
- tempResult = main.Mininet1.compareLinks( MNTopo, links[ i ] )
- linksResult.append( tempResult )
- if tempResult == main.FALSE:
- main.log.error( main.topoName + ": ONOS-" + str( i + 1 ) +
- " links view are incorrect " )
-
- if all( result == main.TRUE for result in linksResult ):
- main.log.info( main.topoName + ": Links view in all ONOS nodes "+
- "are correct " )
- else:
- compareTopoResult = main.FALSE
-
- # Comparing hosts
- main.log.info( main.topoName + ": Comparing hosts in each ONOS nodes" +
- " with Mininet" )
- for i in range( main.numCtrls ):
- tempResult = main.Mininet1.compareHosts( MNTopo, hosts[ i ] )
- hostsResult.append( tempResult )
- if tempResult == main.FALSE:
- main.log.error( main.topoName + ": ONOS-" + str( i + 1 ) +
- " hosts view are incorrect " )
-
- if all( result == main.TRUE for result in hostsResult ):
- main.log.info( main.topoName + ": Hosts view in all ONOS nodes "+
- "are correct " )
- else:
- compareTopoResult = main.FALSE
-
- return compareTopoResult
-
-def assignSwitch( main ):
- """
- Returns switch list using getSwitch in Mininet driver
- """
- switchList = []
- assignResult = main.TRUE
- switchList = main.Mininet1.getSwitch()
- assignResult = main.Mininet1.assignSwController( sw=switchList,
- ip=main.ONOSip[ 0 ],
- port=6633 )
-
- for sw in switchList:
- response = main.Mininet1.getSwController( sw )
- if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
- assignResult = assignResult and main.TRUE
- else:
- assignResult = main.FALSE
-
- return switchList
-
-def getHostsData( main ):
- """
- Use fwd app and pingall to discover all the hosts
- """
- activateResult = main.TRUE
- appCheck = main.TRUE
- getDataResult = main.TRUE
- main.log.info( main.topoName + ": Activating reactive forwarding app " )
- activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
- if main.hostsData:
- main.hostsData = {}
- for i in range( main.numCtrls ):
- appCheck = appCheck and main.CLIs[ i ].appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[ i ].apps() )
- main.log.warn( main.CLIs[ i ].appIDs() )
-
- pingResult = main.Mininet1.pingall( timeout=900 )
- hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
- hosts = main.Mininet1.getHosts()
- for host in hosts:
- main.hostsData[ host ] = {}
- main.hostsData[ host ][ 'mac' ] = \
- main.Mininet1.getMacAddress( host ).upper()
- for hostj in hostsJson:
- if main.hostsData[ host ][ 'mac' ] == hostj[ 'mac' ]:
- main.hostsData[ host ][ 'id' ] = hostj[ 'id' ]
- main.hostsData[ host ][ 'vlan' ] = hostj[ 'vlan' ]
- main.hostsData[ host ][ 'location' ] = \
- hostj[ 'location' ][ 'elementId' ] + '/' + \
- hostj[ 'location' ][ 'port' ]
- main.hostsData[ host ][ 'ipAddresses' ] = hostj[ 'ipAddresses' ]
-
- if activateResult and main.hostsData:
- main.log.info( main.topoName + ": Successfully used fwd app" +
- " to discover hosts " )
- getDataResult = main.TRUE
- else:
- main.log.info( main.topoName + ": Failed to use fwd app" +
- " to discover hosts " )
- getDataResult = main.FALSE
-
- # This data can be use later for intents
- print main.hostsData
-
- return getDataResult
-
-def restartONOS( main ):
- """
- Description:
- Stop and start ONOS that clears hosts,devices etc. in order to test
- new mininet topology
- Return:
- Retruns main.TRUE for a successful restart, main.FALSE otherwise.
- """
- stopResult = []
- startResult = []
- restartResult = main.TRUE
-
- main.log.info( main.topoName + ": Stopping ONOS cluster" )
- for node in main.nodes:
- startResult.append( main.ONOSbench.onosStop( nodeIp=node.ip_address ) )
-
- if all( result == main.TRUE for result in stopResult ):
- main.log.info( main.topoName + ": Successfully stopped ONOS cluster" )
- else:
- restartResult = main.FALSE
- main.log.error( main.topoName + ": Failed to stop ONOS cluster" )
-
- time.sleep( 15 )
-
- main.log.info( main.topoName + ": Starting ONOS cluster" )
- for node in main.nodes:
- startResult.append( main.ONOSbench.onosStart( nodeIp=node.ip_address ) )
-
- if all( result == main.TRUE for result in startResult ):
- main.log.info( main.topoName + ": Successfully start ONOS cluster" )
- else:
- restartResult = main.FALSE
- main.log.error( main.topoName + ": Failed to start ONOS cluster" )
-
- # Start ONOS CLIs again
- main.log.info( main.topoName + ": Starting ONOS CLI" )
- cliResult = main.TRUE
- for i in range( main.numCtrls ):
- cliResult = cliResult and \
- main.CLIs[ i ].startOnosCli( main.ONOSip[ i ] )
-
- time.sleep( 15 )
-
- return restartResult
-
-
-
diff --git a/TestON/tests/FuncTopo/FuncTopo.py b/TestON/tests/FuncTopo/FuncTopo.py
deleted file mode 100644
index b2e2a6a..0000000
--- a/TestON/tests/FuncTopo/FuncTopo.py
+++ /dev/null
@@ -1,218 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import json
-
-class FuncTopo:
-
- def __init__( self ):
- self.default = ''
-
- def CASE10( self, main ):
- import time
- import os
- import imp
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-log
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- global init
- global globalONOSip
- try:
- if type(init) is not bool:
- init = False
- except NameError:
- init = False
-
- main.wrapper = imp.load_source( 'FuncTopoFunction', '/home/admin/' +
- 'TestON/tests/FuncTopo/Dependency/' +
- 'FuncTopoFunction.py')
-
- #Local variables
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- apps = main.params[ 'ENV' ][ 'cellApps' ]
- gitBranch = main.params[ 'GIT' ][ 'branch' ]
- benchIp = os.environ[ 'OCN' ]
- benchUser = main.params[ 'BENCH' ][ 'user' ]
- topology = main.params[ 'MININET' ][ 'topo' ]
- main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
- main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
- main.numCtrls = main.params[ 'CTRL' ][ 'num' ]
- main.ONOSport = []
- main.hostsData = {}
- main.topoName = " "
- PULLCODE = False
- if main.params[ 'GIT' ][ 'pull' ] == 'True':
- PULLCODE = True
- main.case( "Setting up test environment" )
- main.CLIs = []
- main.nodes = []
- for i in range( 1, int( main.numCtrls ) + 1 ):
- main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- main.nodes.append( getattr( main, 'ONOS' + str( i ) ) )
- main.ONOSport.append( main.params[ 'CTRL' ][ 'port' + str( i ) ] )
-
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- if init == False:
- init = True
-
- main.scale = ( main.params[ 'SCALE' ] ).split( "," )
- main.numCtrls = int( main.scale[ 0 ] )
-
- if PULLCODE:
- main.step( "Git checkout and pull " + gitBranch )
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == main.ERROR:
- main.log.error( "Error pulling git branch" )
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.ONOSbench.cleanInstall()
- stepResult = cleanInstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully compiled " +
- "latest ONOS",
- onfail="Failed to compile " +
- "latest ONOS" )
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
-
- globalONOSip = main.ONOSbench.getOnosIps()
- maxNodes = ( len(globalONOSip) - 2 )
-
- main.numCtrls = int( main.scale[ 0 ] )
- main.scale.remove( main.scale[ 0 ] )
-
- main.ONOSip = []
- for i in range( maxNodes ):
- main.ONOSip.append( globalONOSip[i] )
-
- #kill off all onos processes
- main.log.info( "Safety check, killing all ONOS processes" +
- " before initiating enviornment setup" )
- for i in range(maxNodes):
- main.ONOSbench.onosDie( globalONOSip[ i ] )
-
- print "NODE COUNT = ", main.numCtrls
- main.log.info( "Creating cell file" )
- cellIp = []
- for i in range( main.numCtrls ):
- cellIp.append( str( main.ONOSip[ i ] ) )
- print cellIp
- main.ONOSbench.createCellFile( benchIp, cellName, "",
- str( apps ), *cellIp )
-
- main.step( "Apply cell to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- stepResult = cellResult and verifyResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully applied cell to " + \
- "environment",
- onfail="Failed to apply cell to environment " )
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- stepResult = packageResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully created ONOS package",
- onfail="Failed to create ONOS package" )
-
- main.step( "Uninstalling ONOS package" )
- onosUninstallResult = main.TRUE
- for i in range( main.numCtrls ):
- onosUninstallResult = onosUninstallResult and \
- main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
- stepResult = onosUninstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully uninstalled ONOS package",
- onfail="Failed to uninstall ONOS package" )
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for i in range( main.numCtrls ):
- onosInstallResult = onosInstallResult and \
- main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
- stepResult = onosInstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully installed ONOS package",
- onfail="Failed to install ONOS package" )
-
- time.sleep( 10 )
- main.step( "Starting ONOS service" )
- stopResult = main.TRUE
- startResult = main.TRUE
- onosIsUp = main.TRUE
- for i in range( main.numCtrls ):
- onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
- if onosIsUp == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up, stop and " +
- "start ONOS again " )
- for i in range( main.numCtrls ):
- stopResult = stopResult and \
- main.ONOSbench.onosStop( main.ONOSip[ i ] )
- for i in range( main.numCtrls ):
- startResult = startResult and \
- main.ONOSbench.onosStart( main.ONOSip[ i ] )
- stepResult = onosIsUp and stopResult and startResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="ONOS service is ready",
- onfail="ONOS service did not start properly" )
-
- def CASE9( self, main ):
- '''
- Report errors/warnings/exceptions
- '''
- main.log.info("Error report: \n")
- main.ONOSbench.logReport( globalONOSip[0],
- [ "INFO","FOLLOWER","WARN",
- "flow","ERROR","Except" ],
- "s" )
- #main.ONOSbench.logReport( globalONOSip[1], [ "INFO" ], "d" )
-
- def CASE1001( self, main ):
- """
- Test topology discovery
- """
- main.case( "Topology discovery test" )
-
-
- main.step( "Torus 5-5 topology" )
- main.topoName = "TORUS5-5"
- mnCmd = "mn --topo=torus,5,5 --mac"
- stepResult = main.wrapper.testTopology( main,
- mnCmd=mnCmd,
- clean=False )
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Torus 5-5 topology successful",
- onfail="Torus 5-5 topology failed" )
-
- main.topoName = "TREE3-3"
- stepResult = main.TRUE
- main.step( "Tree 3-3 topology" )
- mnCmd = "mn --topo=tree,3,3 --mac"
- stepResult = main.wrapper.testTopology( main,
- mnCmd=mnCmd,
- clean=True )
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Tree 3-3 topology successful",
- onfail="Tree 3-3 topology failed" )
diff --git a/TestON/tests/FuncTopo/__init__.py b/TestON/tests/FuncTopo/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/FuncTopo/__init__.py
+++ /dev/null
diff --git a/TestON/tests/HATestClusterRestart/HATestClusterRestart.params b/TestON/tests/HATestClusterRestart/HATestClusterRestart.params
deleted file mode 100644
index 207e693..0000000
--- a/TestON/tests/HATestClusterRestart/HATestClusterRestart.params
+++ /dev/null
@@ -1,71 +0,0 @@
-<PARAMS>
- <testcases>1,2,8,3,8,4,5,14,16,17,[6],8,3,7,4,15,17,9,8,4,10,8,4,11,8,4,12,8,4,13</testcases>
- <ENV>
- <cellName>HA</cellName>
- </ENV>
- <Git> False </Git>
- <branch> master </branch>
- <num_controllers> 7 </num_controllers>
- <tcpdump> False </tcpdump>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
-
- <ip2>10.128.30.12</ip2>
- <port2>6633</port2>
-
- <ip3>10.128.30.13</ip3>
- <port3>6633</port3>
-
- <ip4>10.128.30.14</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.30.15</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.30.16</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.30.17</ip7>
- <port7>6633</port7>
- </CTRL>
- <TESTONUSER>admin</TESTONUSER>
- <TESTONIP>10.128.30.9</TESTONIP>
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
- <timers>
- <LinkDiscovery>.2</LinkDiscovery>
- <SwitchDiscovery>.2</SwitchDiscovery>
- </timers>
- <kill>
- <switch> s5 </switch>
- <dpid> 0000000000005000 </dpid>
- <links> h5 s2 s1 s6 </links>
- </kill>
- <MNtcpdump>
- <intf>eth0</intf>
- <port> </port>
- <folder>~/packet_captures/</folder>
- </MNtcpdump>
-</PARAMS>
diff --git a/TestON/tests/HATestClusterRestart/HATestClusterRestart.py b/TestON/tests/HATestClusterRestart/HATestClusterRestart.py
deleted file mode 100644
index 4ecc271..0000000
--- a/TestON/tests/HATestClusterRestart/HATestClusterRestart.py
+++ /dev/null
@@ -1,3999 +0,0 @@
-"""
-Description: This test is to determine if ONOS can handle
- all of it's nodes restarting
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machines
-CASE2: Assign devices to controllers
-CASE21: Assign mastership to controllers
-CASE3: Assign intents
-CASE4: Ping across added host intents
-CASE5: Reading state of ONOS
-CASE6: The Failure case.
-CASE7: Check state after control plane failure
-CASE8: Compare topo
-CASE9: Link s3-s28 down
-CASE10: Link s3-s28 up
-CASE11: Switch down
-CASE12: Switch up
-CASE13: Clean up
-CASE14: start election app on all onos nodes
-CASE15: Check that Leadership Election is still functional
-CASE16: Install Distributed Primitives app
-CASE17: Check for basic functionality with distributed primitives
-"""
-
-
-class HATestClusterRestart:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- cell <name>
- onos-verify-cell
- NOTE: temporary - onos-remove-raft-logs
- onos-uninstall
- start mininet
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- start cli sessions
- start tcpdump
- """
- main.log.info( "ONOS HA test: Restart all ONOS nodes - " +
- "initialization" )
- main.case( "Setting up test environment" )
- main.caseExplaination = "Setup the test environment including " +\
- "installing ONOS, starting Mininet and ONOS" +\
- "cli sessions."
- # TODO: save all the timers and output them for plotting
-
- # load some variables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- gitBranch = main.params[ 'branch' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # set global variables
- global ONOS1Port
- global ONOS2Port
- global ONOS3Port
- global ONOS4Port
- global ONOS5Port
- global ONOS6Port
- global ONOS7Port
- global numControllers
- # These are for csv plotting in jenkins
- global labels
- global data
- labels = []
- data = []
- numControllers = int( main.params[ 'num_controllers' ] )
-
- # FIXME: just get controller port from params?
- # TODO: do we really need all these?
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- ONOS4Port = main.params[ 'CTRL' ][ 'port4' ]
- ONOS5Port = main.params[ 'CTRL' ][ 'port5' ]
- ONOS6Port = main.params[ 'CTRL' ][ 'port6' ]
- ONOS7Port = main.params[ 'CTRL' ][ 'port7' ]
-
- global CLIs
- CLIs = []
- global nodes
- nodes = []
- for i in range( 1, numControllers + 1 ):
- CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- nodes.append( getattr( main, 'ONOS' + str( i ) ) )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- # FIXME:this is short term fix
- main.log.info( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.log.info( "Uninstalling ONOS" )
- for node in nodes:
- main.ONOSbench.onosUninstall( node.ip_address )
-
- # Make sure ONOS is DEAD
- main.log.info( "Killing any ONOS processes" )
- killResults = main.TRUE
- for node in nodes:
- killed = main.ONOSbench.onosKill( node.ip_address )
- killResults = killResults and killed
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Starting Mininet" )
- mnResult = main.Mininet1.startNet( )
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet Started",
- onfail="Error starting Mininet" )
-
- main.step( "Git checkout and pull " + gitBranch )
- if PULLCODE:
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- # values of 1 or 3 are good
- utilities.assert_lesser( expect=0, actual=gitPullResult,
- onpass="Git pull successful",
- onfail="Git pull failed" )
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Using mvn clean install" )
- cleanInstallResult = main.TRUE
- if PULLCODE and gitPullResult == main.TRUE:
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- utilities.assert_equals( expect=main.TRUE,
- actual=cleanInstallResult,
- onpass="MCI successful",
- onfail="MCI failed" )
- # GRAPHS
- # NOTE: important params here:
- # job = name of Jenkins job
- # Plot Name = Plot-HA, only can be used if multiple plots
- # index = The number of the graph under plot name
- job = "HAClusterRestart"
- plotName = "Plot-HA"
- graphs = '<ac:structured-macro ac:name="html">\n'
- graphs += '<ac:plain-text-body><![CDATA[\n'
- graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
- '/plot/' + plotName + '/getPlot?index=0' +\
- '&width=500&height=300"' +\
- 'noborder="0" width="500" height="300" scrolling="yes" ' +\
- 'seamless="seamless"></iframe>\n'
- graphs += ']]></ac:plain-text-body>\n'
- graphs += '</ac:structured-macro>\n'
- main.log.wiki(graphs)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- utilities.assert_equals( expect=main.TRUE, actual=packageResult,
- onpass="ONOS package successful",
- onfail="ONOS package failed" )
-
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for node in nodes:
- tmpResult = main.ONOSbench.onosInstall( options="-f",
- node=node.ip_address )
- onosInstallResult = onosInstallResult and tmpResult
- utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult,
- onpass="ONOS install successful",
- onfail="ONOS install failed" )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onosIsupResult = main.TRUE
- for node in nodes:
- started = main.ONOSbench.isup( node.ip_address )
- if not started:
- main.log.error( node.name + " didn't start!" )
- main.ONOSbench.onosStop( node.ip_address )
- main.ONOSbench.onosStart( node.ip_address )
- onosIsupResult = onosIsupResult and started
- if onosIsupResult == main.TRUE:
- break
- utilities.assert_equals( expect=main.TRUE, actual=onosIsupResult,
- onpass="ONOS startup successful",
- onfail="ONOS startup failed" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].startOnosCli,
- name="startOnosCli-" + str( i ),
- args=[nodes[i].ip_address] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- cliResults = cliResults and t.result
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli startup successful",
- onfail="ONOS cli startup failed" )
-
- if main.params[ 'tcpdump' ].lower() == "true":
- main.step( "Start Packet Capture MN" )
- main.Mininet2.startTcpdump(
- str( main.params[ 'MNtcpdump' ][ 'folder' ] ) + str( main.TEST )
- + "-MN.pcap",
- intf=main.params[ 'MNtcpdump' ][ 'intf' ],
- port=main.params[ 'MNtcpdump' ][ 'port' ] )
-
- main.step( "App Ids check" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- if cliResults == main.FALSE:
- main.log.error( "Failed to start ONOS, stopping test" )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- """
- Assign devices to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning devices to controllers" )
- main.caseExplaination = "Assign switches to ONOS using 'ovs-vsctl' " +\
- "and check that an ONOS node becomes the " +\
- "master of the device."
- main.step( "Assign switches to controllers" )
-
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- swList = []
- for i in range( 1, 29 ):
- swList.append( "s" + str( i ) )
- main.Mininet1.assignSwController( sw=swList, ip=ipList )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except Exception:
- main.log.info( repr( response ) )
- for node in nodes:
- if re.search( "tcp:" + node.ip_address, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.error( "Error, node " + node.ip_address + " is " +
- "not in the list of controllers s" +
- str( i ) + " is connecting to." )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- def CASE21( self, main ):
- """
- Assign mastership to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning Controller roles for switches" )
- main.caseExplaination = "Check that ONOS is connected to each " +\
- "device. Then manually assign" +\
- " mastership to specific ONOS nodes using" +\
- " 'device-role'"
- main.step( "Assign mastership of switches to specific controllers" )
- # Manually assign mastership to the controller we want
- roleCall = main.TRUE
-
- ipList = [ ]
- deviceList = []
- try:
- for i in range( 1, 29 ): # switches 1 through 28
- # set up correct variables:
- if i == 1:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "1000" ).get( 'id' )
- elif i == 2:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "2000" ).get( 'id' )
- elif i == 3:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "3000" ).get( 'id' )
- elif i == 4:
- ip = nodes[ 3 ].ip_address # ONOS4
- deviceId = main.ONOScli1.getDevice( "3004" ).get( 'id' )
- elif i == 5:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "5000" ).get( 'id' )
- elif i == 6:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "6000" ).get( 'id' )
- elif i == 7:
- ip = nodes[ 5 ].ip_address # ONOS6
- deviceId = main.ONOScli1.getDevice( "6007" ).get( 'id' )
- elif i >= 8 and i <= 17:
- ip = nodes[ 4 ].ip_address # ONOS5
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i >= 18 and i <= 27:
- ip = nodes[ 6 ].ip_address # ONOS7
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i == 28:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "2800" ).get( 'id' )
- else:
- main.log.error( "You didn't write an else statement for " +
- "switch s" + str( i ) )
- roleCall = main.FALSE
- # Assign switch
- assert deviceId, "No device id for s" + str( i ) + " in ONOS"
- # TODO: make this controller dynamic
- roleCall = roleCall and main.ONOScli1.deviceRole( deviceId,
- ip )
- ipList.append( ip )
- deviceList.append( deviceId )
- except ( AttributeError, AssertionError ):
- main.log.exception( "Something is wrong with ONOS device view" )
- main.log.info( main.ONOScli1.devices() )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCall,
- onpass="Re-assigned switch mastership to designated controller",
- onfail="Something wrong with deviceRole calls" )
-
- main.step( "Check mastership was correctly assigned" )
- roleCheck = main.TRUE
- # NOTE: This is due to the fact that device mastership change is not
- # atomic and is actually a multi step process
- time.sleep( 5 )
- for i in range( len( ipList ) ):
- ip = ipList[i]
- deviceId = deviceList[i]
- # Check assignment
- master = main.ONOScli1.getRole( deviceId ).get( 'master' )
- if ip in master:
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
- main.log.error( "Error, controller " + ip + " is not" +
- " master " + "of device " +
- str( deviceId ) + ". Master is " +
- repr( master ) + "." )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCheck,
- onpass="Switches were successfully reassigned to designated " +
- "controller",
- onfail="Switches were not successfully reassigned" )
-
- def CASE3( self, main ):
- """
- Assign intents
- """
- import time
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- try:
- labels
- except NameError:
- main.log.error( "labels not defined, setting to []" )
- labels = []
- try:
- data
- except NameError:
- main.log.error( "data not defined, setting to []" )
- data = []
- # NOTE: we must reinstall intents until we have a persistant intent
- # datastore!
- main.case( "Adding host Intents" )
- main.caseExplaination = "Discover hosts by using pingall then " +\
- "assign predetermined host-to-host intents." +\
- " After installation, check that the intent" +\
- " is distributed to all nodes and the state" +\
- " is INSTALLED"
-
- # install onos-app-fwd
- main.step( "Install reactive forwarding app" )
- installResults = CLIs[0].activateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=installResults,
- onpass="Install fwd successful",
- onfail="Install fwd failed" )
-
- main.step( "Check app ids" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Discovering Hosts( Via pingall for now )" )
- # FIXME: Once we have a host discovery mechanism, use that instead
- # REACTIVE FWD test
- pingResult = main.FALSE
- for i in range(2): # Retry if pingall fails first time
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- if i == 0:
- utilities.assert_equals(
- expect=main.TRUE,
- actual=pingResult,
- onpass="Reactive Pingall test passed",
- onfail="Reactive Pingall failed, " +
- "one or more ping pairs failed" )
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" %
- ( time2 - time1 ) )
- # timeout for fwd flows
- time.sleep( 11 )
- # uninstall onos-app-fwd
- main.step( "Uninstall reactive forwarding app" )
- uninstallResult = CLIs[0].deactivateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=uninstallResult,
- onpass="Uninstall fwd successful",
- onfail="Uninstall fwd failed" )
-
- main.step( "Check app ids" )
- threads = []
- appCheck2 = main.TRUE
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck2 = appCheck2 and t.result
- if appCheck2 != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck2,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Add host intents via cli" )
- intentIds = []
- # TODO: move the host numbers to params
- # Maybe look at all the paths we ping?
- intentAddResult = True
- hostResult = main.TRUE
- for i in range( 8, 18 ):
- main.log.info( "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: getHost can return None
- host1Dict = main.ONOScli1.getHost( host1 )
- host2Dict = main.ONOScli1.getHost( host2 )
- host1Id = None
- host2Id = None
- if host1Dict and host2Dict:
- host1Id = host1Dict.get( 'id', None )
- host2Id = host2Dict.get( 'id', None )
- if host1Id and host2Id:
- nodeNum = ( i % 7 )
- tmpId = CLIs[ nodeNum ].addHostIntent( host1Id, host2Id )
- if tmpId:
- main.log.info( "Added intent with id: " + tmpId )
- intentIds.append( tmpId )
- else:
- main.log.error( "addHostIntent returned: " +
- repr( tmpId ) )
- else:
- main.log.error( "Error, getHost() failed for h" + str( i ) +
- " and/or h" + str( i + 10 ) )
- hosts = CLIs[ 0 ].hosts()
- main.log.warn( "Hosts output: " )
- try:
- main.log.warn( json.dumps( json.loads( hosts ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( hosts ) )
- hostResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE, actual=hostResult,
- onpass="Found a host id for each host",
- onfail="Error looking up host ids" )
-
- intentStart = time.time()
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- for intent in intentIds:
- if intent in onosIds:
- pass # intent submitted is in onos
- else:
- intentAddResult = False
- if intentAddResult:
- intentStop = time.time()
- else:
- intentStop = None
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- installedCheck = True
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- missingIntents = False
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- missingIntents = True
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- intentAddResult = bool( intentAddResult and not missingIntents and
- installedCheck )
- if not intentAddResult:
- main.log.error( "Error in pushing host intents to ONOS" )
-
- main.step( "Intent Anti-Entropy dispersion" )
- for i in range(100):
- correct = True
- main.log.info( "Submitted intents: " + str( sorted( intentIds ) ) )
- for cli in CLIs:
- onosIds = []
- ids = cli.getAllIntentsId()
- onosIds.append( ids )
- main.log.debug( "Intents in " + cli.name + ": " +
- str( sorted( onosIds ) ) )
- if sorted( ids ) != sorted( intentIds ):
- main.log.warn( "Set of intent IDs doesn't match" )
- correct = False
- break
- else:
- intents = json.loads( cli.intents() )
- for intent in intents:
- if intent[ 'state' ] != "INSTALLED":
- main.log.warn( "Intent " + intent[ 'id' ] +
- " is " + intent[ 'state' ] )
- correct = False
- break
- if correct:
- break
- else:
- time.sleep(1)
- if not intentStop:
- intentStop = time.time()
- global gossipTime
- gossipTime = intentStop - intentStart
- main.log.info( "It took about " + str( gossipTime ) +
- " seconds for all intents to appear in each node" )
- append = False
- title = "Gossip Intents"
- count = 1
- while append is False:
- curTitle = title + str( count )
- if curTitle not in labels:
- labels.append( curTitle )
- data.append( str( gossipTime ) )
- append = True
- else:
- count += 1
- # FIXME: make this time configurable/calculate based off of number of
- # nodes and gossip rounds
- utilities.assert_greater_equals(
- expect=40, actual=gossipTime,
- onpass="ECM anti-entropy for intents worked within " +
- "expected time",
- onfail="Intent ECM anti-entropy took too long" )
- if gossipTime <= 40:
- intentAddResult = True
-
- if not intentAddResult or "key" in pendingMap:
- import time
- installedCheck = True
- main.log.info( "Sleeping 60 seconds to see if intents are found" )
- time.sleep( 60 )
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- # Iter through intents of a node
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- def CASE4( self, main ):
- """
- Ping across added host intents
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Verify connectivity by sendind traffic across Intents" )
- main.caseExplaination = "Ping across added host intents to check " +\
- "functionality and check the state of " +\
- "the intent"
- main.step( "Ping across added host intents" )
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- main.step( "Check Intent state" )
- installedCheck = False
- loopCount = 0
- while not installedCheck and loopCount < 40:
- installedCheck = True
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- # Print states
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- if not installedCheck:
- time.sleep( 1 )
- loopCount += 1
- utilities.assert_equals( expect=True, actual=installedCheck,
- onpass="Intents are all INSTALLED",
- onfail="Intents are not all in " +
- "INSTALLED state" )
-
- main.step( "Check leadership of topics" )
- leaders = main.ONOScli1.leaders()
- topicCheck = main.TRUE
- try:
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- # TODO: Look at Devices as topics now that it uses this system
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- # FIXME: topics.append( "org.onosproject.election" )
- # Print leaders output
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- topicCheck = main.FALSE
- else:
- main.log.error( "leaders() returned None" )
- topicCheck = main.FALSE
- except ( ValueError, TypeError ):
- topicCheck = main.FALSE
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # TODO: Check for a leader of these topics
- # Check all nodes
- if topicCheck:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- utilities.assert_equals( expect=main.TRUE, actual=topicCheck,
- onpass="intent Partitions is in leaders",
- onfail="Some topics were lost " )
- # Print partitions
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- # Print Pending Map
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- if not installedCheck:
- main.log.info( "Waiting 60 seconds to see if the state of " +
- "intents change" )
- time.sleep( 60 )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
- # Print flowrules
- main.log.debug( CLIs[0].flows( jsonFormat=False ) )
- main.step( "Wait a minute then ping again" )
- # the wait is above
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- def CASE5( self, main ):
- """
- Reading state of ONOS
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Setting up and gathering data for current state" )
- # The general idea for this test case is to pull the state of
- # ( intents,flows, topology,... ) from each ONOS node
- # We can then compare them with each other and also with past states
-
- main.step( "Check that each switch has a master" )
- global mastershipState
- mastershipState = '[]'
-
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Get the Mastership of each switch from each controller" )
- ONOSMastership = []
- mastershipCheck = main.FALSE
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( ONOSMastership[ i ] ) )
- elif rolesResults and consistentMastership:
- mastershipCheck = main.TRUE
- mastershipState = ONOSMastership[ 0 ]
-
- main.step( "Get the intents from each controller" )
- global intentState
- intentState = []
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
- main.log.error( "Intents not consistent" )
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
-
- if intentsResults:
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " Id"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- # get all intent keys in the cluster
- keys = []
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id', "Error" ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End table view
-
- if intentsResults and not consistentIntents:
- # print the json objects
- n = len(ONOSIntents)
- main.log.debug( "ONOS" + str( n ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ -1 ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- for i in range( numControllers ):
- if ONOSIntents[ i ] != ONOSIntents[ -1 ]:
- main.log.debug( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[i] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- else:
- main.log.debug( nodes[ i ].name + " intents match ONOS" +
- str( n ) + " intents" )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
- intentState = ONOSIntents[ 0 ]
-
- main.step( "Get the flows from each controller" )
- global flowState
- flowState = []
- ONOSFlows = []
- ONOSFlowsJson = []
- flowCheck = main.FALSE
- consistentFlows = True
- flowsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].flows,
- name="flows-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- # NOTE: Flows command can take some time to run
- time.sleep(30)
- for t in threads:
- t.join()
- result = t.result
- ONOSFlows.append( result )
-
- for i in range( numControllers ):
- num = str( i + 1 )
- if not ONOSFlows[ i ] or "Error" in ONOSFlows[ i ]:
- main.log.error( "Error in getting ONOS" + num + " flows" )
- main.log.warn( "ONOS" + num + " flows response: " +
- repr( ONOSFlows[ i ] ) )
- flowsResults = False
- ONOSFlowsJson.append( None )
- else:
- try:
- ONOSFlowsJson.append( json.loads( ONOSFlows[ i ] ) )
- except ( ValueError, TypeError ):
- # FIXME: change this to log.error?
- main.log.exception( "Error in parsing ONOS" + num +
- " response as json." )
- main.log.error( repr( ONOSFlows[ i ] ) )
- ONOSFlowsJson.append( None )
- flowsResults = False
- utilities.assert_equals(
- expect=True,
- actual=flowsResults,
- onpass="No error in reading flows output",
- onfail="Error in reading flows from ONOS" )
-
- main.step( "Check for consistency in Flows from each controller" )
- tmp = [ len( i ) == len( ONOSFlowsJson[ 0 ] ) for i in ONOSFlowsJson ]
- if all( tmp ):
- main.log.info( "Flow count is consistent across all ONOS nodes" )
- else:
- consistentFlows = False
- utilities.assert_equals(
- expect=True,
- actual=consistentFlows,
- onpass="The flow count is consistent across all ONOS nodes",
- onfail="ONOS nodes have different flow counts" )
-
- if flowsResults and not consistentFlows:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- json.dumps( json.loads( ONOSFlows[i] ), sort_keys=True,
- indent=4, separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- repr( ONOSFlows[ i ] ) )
- elif flowsResults and consistentFlows:
- flowCheck = main.TRUE
- flowState = ONOSFlows[ 0 ]
-
- main.step( "Get the OF Table entries" )
- global flows
- flows = []
- for i in range( 1, 29 ):
- flows.append( main.Mininet2.getFlowTable( 1.3, "s" + str( i ) ) )
- if flowCheck == main.FALSE:
- for table in flows:
- main.log.warn( table )
- # TODO: Compare switch flow tables with ONOS flow tables
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Collecting topology information from ONOS" )
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- # FIXME: better handling of this, print which node
- # Maybe use thread name?
- main.log.exception( "Error parsing json output of hosts" )
- # FIXME: should this be an empty json object instead?
- hosts.append( None )
-
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Host view is consistent across ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Each host has an IP address" )
- ipResult = main.TRUE
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if not host.get( 'ipAddresses', [ ] ):
- main.log.error( "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=ipResult,
- onpass="The ips of the hosts aren't empty",
- onfail="The ip of at least one host is missing" )
-
- # Strongly connected clusters of devices
- main.step( "Cluster view is consistent across ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
- # there should always only be one cluster
- main.step( "Cluster view correct across ONOS nodes" )
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[ 0 ] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
-
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- main.step( "Hosts are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Hosts are correct",
- onfail="Hosts are incorrect" )
-
- def CASE6( self, main ):
- """
- The Failure case.
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- try:
- labels
- except NameError:
- main.log.error( "labels not defined, setting to []" )
- global labels
- labels = []
- try:
- data
- except NameError:
- main.log.error( "data not defined, setting to []" )
- global data
- data = []
- # Reset non-persistent variables
- try:
- iCounterValue = 0
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
-
- main.case( "Restart entire ONOS cluster" )
-
- main.step( "Killing ONOS nodes" )
- killResults = main.TRUE
- killTime = time.time()
- for node in nodes:
- killed = main.ONOSbench.onosKill( node.ip_address )
- killResults = killResults and killed
- utilities.assert_equals( expect=main.TRUE, actual=killResults,
- onpass="ONOS nodes killed",
- onfail="ONOS kill unsuccessful" )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onosIsupResult = main.TRUE
- for node in nodes:
- started = main.ONOSbench.isup( node.ip_address )
- if not started:
- main.log.error( node.name + " didn't start!" )
- onosIsupResult = onosIsupResult and started
- if onosIsupResult == main.TRUE:
- break
- utilities.assert_equals( expect=main.TRUE, actual=onosIsupResult,
- onpass="ONOS restarted",
- onfail="ONOS restart NOT successful" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].startOnosCli,
- name="startOnosCli-" + str( i ),
- args=[nodes[i].ip_address] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- cliResults = cliResults and t.result
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli started",
- onfail="ONOS clis did not restart" )
-
- # Grab the time of restart so we chan check how long the gossip
- # protocol has had time to work
- main.restartTime = time.time() - killTime
- main.log.debug( "Restart time: " + str( main.restartTime ) )
- labels.append( "Restart" )
- data.append( str( main.restartTime ) )
-
- # FIXME: revisit test plan for election with madan
- # Rerun for election on restarted nodes
- runResults = main.TRUE
- for cli in CLIs:
- run = CLIs[0].electionTestRun()
- if run != main.TRUE:
- main.log.error( "Error running for election on " + cli.name )
- runResults = runResults and run
- utilities.assert_equals( expect=main.TRUE, actual=runResults,
- onpass="Reran for election",
- onfail="Failed to rerun for election" )
-
- # TODO: Make this configurable
- time.sleep( 60 )
- main.log.debug( CLIs[0].nodes( jsonFormat=False ) )
- main.log.debug( CLIs[0].leaders( jsonFormat=False ) )
- main.log.debug( CLIs[0].partitions( jsonFormat=False ) )
-
- def CASE7( self, main ):
- """
- Check state after ONOS failure
- """
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Running ONOS Constant State Tests" )
-
- main.step( "Check that each switch has a master" )
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Read device roles from ONOS" )
- ONOSMastership = []
- mastershipCheck = main.FALSE
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- elif rolesResults and not consistentMastership:
- mastershipCheck = main.TRUE
-
- '''
- description2 = "Compare switch roles from before failure"
- main.step( description2 )
- try:
- currentJson = json.loads( ONOSMastership[0] )
- oldJson = json.loads( mastershipState )
- except ( ValueError, TypeError ):
- main.log.exception( "Something is wrong with parsing " +
- "ONOSMastership[0] or mastershipState" )
- main.log.error( "ONOSMastership[0]: " + repr( ONOSMastership[0] ) )
- main.log.error( "mastershipState" + repr( mastershipState ) )
- main.cleanup()
- main.exit()
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- switchDPID = str(
- main.Mininet1.getSwitchDPID( switch="s" + str( i ) ) )
- current = [ switch[ 'master' ] for switch in currentJson
- if switchDPID in switch[ 'id' ] ]
- old = [ switch[ 'master' ] for switch in oldJson
- if switchDPID in switch[ 'id' ] ]
- if current == old:
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.warn( "Mastership of switch %s changed" % switchDPID )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Mastership of Switches was not changed",
- onfail="Mastership of some switches changed" )
- '''
- # NOTE: we expect mastership to change on controller failure
-
- main.step( "Get the intents and compare across all nodes" )
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
-
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " ID"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- # get all intent keys in the cluster
- keys = []
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id' ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End table view
-
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
- intentStates = []
- for node in ONOSIntents: # Iter through ONOS nodes
- nodeStates = []
- # Iter through intents of a node
- try:
- for intent in json.loads( node ):
- nodeStates.append( intent[ 'state' ] )
- except ( ValueError, TypeError ):
- main.log.exception( "Error in parsing intents" )
- main.log.error( repr( node ) )
- intentStates.append( nodeStates )
- out = [ (i, nodeStates.count( i ) ) for i in set( nodeStates ) ]
- main.log.info( dict( out ) )
-
- if intentsResults and not consistentIntents:
- for i in range( numControllers ):
- main.log.warn( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.warn( json.dumps(
- json.loads( ONOSIntents[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
-
- # NOTE: Store has no durability, so intents are lost across system
- # restarts
- """
- main.step( "Compare current intents with intents before the failure" )
- # NOTE: this requires case 5 to pass for intentState to be set.
- # maybe we should stop the test if that fails?
- sameIntents = main.FALSE
- if intentState and intentState == ONOSIntents[ 0 ]:
- sameIntents = main.TRUE
- main.log.info( "Intents are consistent with before failure" )
- # TODO: possibly the states have changed? we may need to figure out
- # what the acceptable states are
- elif len( intentState ) == len( ONOSIntents[ 0 ] ):
- sameIntents = main.TRUE
- try:
- before = json.loads( intentState )
- after = json.loads( ONOSIntents[ 0 ] )
- for intent in before:
- if intent not in after:
- sameIntents = main.FALSE
- main.log.debug( "Intent is not currently in ONOS " +
- "(at least in the same form):" )
- main.log.debug( json.dumps( intent ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- if sameIntents == main.FALSE:
- try:
- main.log.debug( "ONOS intents before: " )
- main.log.debug( json.dumps( json.loads( intentState ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- main.log.debug( "Current ONOS intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ 0 ] ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameIntents,
- onpass="Intents are consistent with before failure",
- onfail="The Intents changed during failure" )
- intentCheck = intentCheck and sameIntents
- """
- main.step( "Get the OF Table entries and compare to before " +
- "component failure" )
- FlowTables = main.TRUE
- flows2 = []
- for i in range( 28 ):
- main.log.info( "Checking flow table on s" + str( i + 1 ) )
- tmpFlows = main.Mininet2.getFlowTable( 1.3, "s" + str( i + 1 ) )
- flows2.append( tmpFlows )
- tempResult = main.Mininet2.flowComp(
- flow1=flows[ i ],
- flow2=tmpFlows )
- FlowTables = FlowTables and tempResult
- if FlowTables == main.FALSE:
- main.log.info( "Differences in flow table for switch: s" +
- str( i + 1 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=FlowTables,
- onpass="No changes were found in the flow tables",
- onfail="Changes were found in the flow tables" )
-
- # main.step( "Check the continuous pings to ensure that no packets " +
- # "were dropped during component failure" )
- main.Mininet2.pingKill( main.params[ 'TESTONUSER' ],
- main.params[ 'TESTONIP' ] )
- LossInPings = main.FALSE
- # NOTE: checkForLoss returns main.FALSE with 0% packet loss
- for i in range( 8, 18 ):
- main.log.info(
- "Checking for a loss in pings along flow from s" +
- str( i ) )
- LossInPings = main.Mininet2.checkForLoss(
- "/tmp/ping.h" +
- str( i ) ) or LossInPings
- if LossInPings == main.TRUE:
- main.log.info( "Loss in ping detected" )
- elif LossInPings == main.ERROR:
- main.log.info( "There are multiple mininet process running" )
- elif LossInPings == main.FALSE:
- main.log.info( "No Loss in the pings" )
- main.log.info( "No loss of dataplane connectivity" )
- # utilities.assert_equals(
- # expect=main.FALSE,
- # actual=LossInPings,
- # onpass="No Loss of connectivity",
- # onfail="Loss of dataplane connectivity detected" )
-
- # NOTE: Since intents are not persisted with IntnentStore,
- # we expect loss in dataplane connectivity
- LossInPings = main.FALSE
-
- main.step( "Leadership Election is still functional" )
- # Test of LeadershipElection
- leaderList = []
- leaderResult = main.TRUE
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- leaderList.append( leaderN )
- if leaderN == main.FALSE:
- # error in response
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, check the" +
- " error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- main.log.error( cli.name +
- " shows no leader for the election-app." )
- leaderResult = main.FALSE
- if len( set( leaderList ) ) != 1:
- leaderResult = main.FALSE
- main.log.error(
- "Inconsistent view of leader for the election test app" )
- # TODO: print the list
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- def CASE8( self, main ):
- """
- Compare topo
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Compare ONOS Topology view to Mininet topology" )
- main.caseExplaination = "Compare topology objects between Mininet" +\
- " and ONOS"
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- hostAttachmentResults = True
- topoResult = main.FALSE
- elapsed = 0
- count = 0
- main.step( "Collecting topology information from ONOS" )
- startTime = time.time()
- # Give time for Gossip to work
- while topoResult == main.FALSE and elapsed < 60:
- count += 1
- cliStart = time.time()
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- ipResult = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing hosts results" )
- main.log.error( repr( t.result ) )
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host is None or host.get( 'ipAddresses', [] ) == []:
- main.log.error(
- "DEBUG:Error with host ipAddresses on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
-
- elapsed = time.time() - startTime
- cliTime = time.time() - cliStart
- print "Elapsed time: " + str( elapsed )
- print "CLI time: " + str( cliTime )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
- # CHECKING HOST ATTACHMENT POINTS
- hostAttachment = True
- noHosts = False
- # FIXME: topo-HA/obelisk specific mappings:
- # key is mac and value is dpid
- mappings = {}
- for i in range( 1, 29 ): # hosts 1 through 28
- # set up correct variables:
- macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
- if i == 1:
- deviceId = "1000".zfill(16)
- elif i == 2:
- deviceId = "2000".zfill(16)
- elif i == 3:
- deviceId = "3000".zfill(16)
- elif i == 4:
- deviceId = "3004".zfill(16)
- elif i == 5:
- deviceId = "5000".zfill(16)
- elif i == 6:
- deviceId = "6000".zfill(16)
- elif i == 7:
- deviceId = "6007".zfill(16)
- elif i >= 8 and i <= 17:
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i >= 18 and i <= 27:
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i == 28:
- deviceId = "2800".zfill(16)
- mappings[ macId ] = deviceId
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- if hosts[ controller ] == []:
- main.log.warn( "There are no hosts discovered" )
- noHosts = True
- else:
- for host in hosts[ controller ]:
- mac = None
- location = None
- device = None
- port = None
- try:
- mac = host.get( 'mac' )
- assert mac, "mac field could not be found for this host object"
-
- location = host.get( 'location' )
- assert location, "location field could not be found for this host object"
-
- # Trim the protocol identifier off deviceId
- device = str( location.get( 'elementId' ) ).split(':')[1]
- assert device, "elementId field could not be found for this host location object"
-
- port = location.get( 'port' )
- assert port, "port field could not be found for this host location object"
-
- # Now check if this matches where they should be
- if mac and device and port:
- if str( port ) != "1":
- main.log.error( "The attachment port is incorrect for " +
- "host " + str( mac ) +
- ". Expected: 1 Actual: " + str( port) )
- hostAttachment = False
- if device != mappings[ str( mac ) ]:
- main.log.error( "The attachment device is incorrect for " +
- "host " + str( mac ) +
- ". Expected: " + mappings[ str( mac ) ] +
- " Actual: " + device )
- hostAttachment = False
- else:
- hostAttachment = False
- except AssertionError:
- main.log.exception( "Json object not as expected" )
- main.log.error( repr( host ) )
- hostAttachment = False
- else:
- main.log.error( "No hosts json output or \"Error\"" +
- " in output. hosts = " +
- repr( hosts[ controller ] ) )
- if noHosts is False:
- # TODO: Find a way to know if there should be hosts in a
- # given point of the test
- hostAttachment = True
-
- # END CHECKING HOST ATTACHMENT POINTS
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
- hostAttachmentResults = hostAttachmentResults and\
- hostAttachment
- topoResult = ( devicesResults and linksResults
- and hostsResults and ipResult and
- hostAttachmentResults )
-
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Hosts view is consistent across all ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Hosts information is correct" )
- hostsResults = hostsResults and ipResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Host information is correct",
- onfail="Host information is incorrect" )
-
- main.step( "Host attachment points to the network" )
- utilities.assert_equals(
- expect=True,
- actual=hostAttachmentResults,
- onpass="Hosts are correctly attached to the network",
- onfail="ONOS did not correctly attach hosts to the network" )
-
- # Strongly connected clusters of devices
- main.step( "Clusters view is consistent across all ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
-
- main.step( "There is only one SCC" )
- # there should always only be one cluster
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[0] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- topoResult = ( devicesResults and linksResults
- and hostsResults and consistentHostsResult
- and consistentClustersResult and clusterResults
- and ipResult and hostAttachmentResults )
-
- topoResult = topoResult and int( count <= 2 )
- note = "note it takes about " + str( int( cliTime ) ) + \
- " seconds for the test to make all the cli calls to fetch " +\
- "the topology from each ONOS instance"
- main.log.info(
- "Very crass estimate for topology discovery/convergence( " +
- str( note ) + " ): " + str( elapsed ) + " seconds, " +
- str( count ) + " tries" )
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- # FIXME: move this to an ONOS state case
- main.step( "Checking ONOS nodes" )
- nodesOutput = []
- nodeResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].nodes,
- name="nodes-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- nodesOutput.append( t.result )
- ips = [ node.ip_address for node in nodes ]
- for i in nodesOutput:
- try:
- current = json.loads( i )
- for node in current:
- currentResult = main.FALSE
- if node['ip'] in ips: # node in nodes() output is in cell
- if node['state'] == 'ACTIVE':
- currentResult = main.TRUE
- else:
- main.log.error( "Error in ONOS node availability" )
- main.log.error(
- json.dumps( current,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- break
- nodeResults = nodeResults and currentResult
- except ( ValueError, TypeError ):
- main.log.error( "Error parsing nodes output" )
- main.log.warn( repr( i ) )
- utilities.assert_equals( expect=main.TRUE, actual=nodeResults,
- onpass="Nodes check successful",
- onfail="Nodes check NOT successful" )
-
- def CASE9( self, main ):
- """
- Link s3-s28 down
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Turn off a link to ensure that Link Discovery " +\
- "is working properly"
- main.case( description )
-
- main.step( "Kill Link between s3 and s28" )
- LinkDown = main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link down to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkDown,
- onpass="Link down successful",
- onfail="Failed to bring link down" )
- # TODO do some sort of check here
-
- def CASE10( self, main ):
- """
- Link s3-s28 up
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Restore a link to ensure that Link Discovery is " + \
- "working properly"
- main.case( description )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link up to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkUp,
- onpass="Link up successful",
- onfail="Failed to bring link up" )
- # TODO do some sort of check here
-
- def CASE11( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.case( description )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
-
- # TODO: Make this switch parameterizable
- main.step( "Kill " + switch )
- main.log.info( "Deleting " + switch )
- main.Mininet1.delSwitch( switch )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ] is False:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Kill switch successful",
- onfail="Failed to kill switch?" )
-
- def CASE12( self, main ):
- """
- Switch Up
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
- links = main.params[ 'kill' ][ 'links' ].split()
- description = "Adding a switch to ensure it is discovered correctly"
- main.case( description )
-
- main.step( "Add back " + switch )
- main.Mininet1.addSwitch( switch, dpid=switchDPID )
- for peer in links:
- main.Mininet1.addLink( switch, peer )
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- main.Mininet1.assignSwController( sw=switch, ip=ipList )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch up to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ]:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="add switch successful",
- onfail="Failed to add switch?" )
-
- def CASE13( self, main ):
- """
- Clean up
- """
- import os
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # printing colors to terminal
- colors = { 'cyan': '\033[96m', 'purple': '\033[95m',
- 'blue': '\033[94m', 'green': '\033[92m',
- 'yellow': '\033[93m', 'red': '\033[91m', 'end': '\033[0m' }
- main.case( "Test Cleanup" )
- main.step( "Killing tcpdumps" )
- main.Mininet2.stopTcpdump()
-
- main.step( "Copying MN pcap and ONOS log files to test station" )
- testname = main.TEST
- teststationUser = main.params[ 'TESTONUSER' ]
- teststationIP = main.params[ 'TESTONIP' ]
- # NOTE: MN Pcap file is being saved to ~/packet_captures
- # scp this file as MN and TestON aren't necessarily the same vm
- # FIXME: scp
- # mn files
- # TODO: Load these from params
- # NOTE: must end in /
- logFolder = "/opt/onos/log/"
- logFiles = [ "karaf.log", "karaf.log.1" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
-
- # std*.log's
- # NOTE: must end in /
- logFolder = "/opt/onos/var/"
- logFiles = [ "stderr.log", "stdout.log" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
- # sleep so scp can finish
- time.sleep( 10 )
-
- main.step( "Stopping Mininet" )
- mnResult = main.Mininet1.stopNet()
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet stopped",
- onfail="MN cleanup NOT successful" )
-
- main.step( "Checking ONOS Logs for errors" )
- for node in nodes:
- print colors[ 'purple' ] + "Checking logs for errors on " + \
- node.name + ":" + colors[ 'end' ]
- print main.ONOSbench.checkLogs( node.ip_address, restart=True )
-
- main.step( "Packing and rotating pcap archives" )
- os.system( "~/TestON/dependencies/rotate.sh " + str( testname ) )
-
- try:
- timerLog = open( main.logdir + "/Timers.csv", 'w')
- main.log.error( ", ".join( labels ) + "\n" + ", ".join( data ) )
- timerLog.write( ", ".join( labels ) + "\n" + ", ".join( data ) )
- timerLog.close()
- except NameError, e:
- main.log.exception(e)
-
- def CASE14( self, main ):
- """
- start election app on all onos nodes
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case("Start Leadership Election app")
- main.step( "Install leadership election app" )
- appResult = main.ONOScli1.activateApp( "org.onosproject.election" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=appResult,
- onpass="Election app installed",
- onfail="Something went wrong with installing Leadership election" )
-
- main.step( "Run for election on each node" )
- leaderResult = main.TRUE
- leaders = []
- for cli in CLIs:
- cli.electionTestRun()
- for cli in CLIs:
- leader = cli.electionTestLeader()
- if leader is None or leader == main.FALSE:
- main.log.error( cli.name + ": Leader for the election app " +
- "should be an ONOS node, instead got '" +
- str( leader ) + "'" )
- leaderResult = main.FALSE
- leaders.append( leader )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Successfully ran for leadership",
- onfail="Failed to run for leadership" )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- def CASE15( self, main ):
- """
- Check that Leadership Election is still functional
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- leaderResult = main.TRUE
- description = "Check that Leadership Election is still functional"
- main.case( description )
- # NOTE: Need to re-run since being a canidate is not persistant
- main.step( "Run for election on each node" )
- leaderResult = main.TRUE
- leaders = []
- for cli in CLIs:
- cli.electionTestRun()
- for cli in CLIs:
- leader = cli.electionTestLeader()
- if leader is None or leader == main.FALSE:
- main.log.error( cli.name + ": Leader for the election app " +
- "should be an ONOS node, instead got '" +
- str( leader ) + "'" )
- leaderResult = main.FALSE
- leaders.append( leader )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Successfully ran for leadership",
- onfail="Failed to run for leadership" )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- main.step( "Find current leader and withdraw" )
- leader = main.ONOScli1.electionTestLeader()
- # do some sanity checking on leader before using it
- withdrawResult = main.FALSE
- if leader is None or leader == main.FALSE:
- main.log.error(
- "Leader for the election app should be an ONOS node," +
- "instead got '" + str( leader ) + "'" )
- leaderResult = main.FALSE
- oldLeader = None
- for i in range( len( CLIs ) ):
- if leader == nodes[ i ].ip_address:
- oldLeader = CLIs[ i ]
- break
- else: # FOR/ELSE statement
- main.log.error( "Leader election, could not find current leader" )
- if oldLeader:
- withdrawResult = oldLeader.electionTestWithdraw()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=withdrawResult,
- onpass="Node was withdrawn from election",
- onfail="Node was not withdrawn from election" )
-
- main.step( "Make sure new leader is elected" )
- # FIXME: use threads
- leaderList = []
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- leaderList.append( leaderN )
- if leaderN == leader:
- main.log.error( cli.name + " still sees " + str( leader ) +
- " as leader after they withdrew" )
- leaderResult = main.FALSE
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, " +
- "check the error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- # node may not have recieved the event yet
- time.sleep(7)
- leaderN = cli.electionTestLeader()
- leaderList.pop()
- leaderList.append( leaderN )
- consistentLeader = main.FALSE
- if len( set( leaderList ) ) == 1:
- main.log.info( "Each Election-app sees '" +
- str( leaderList[ 0 ] ) +
- "' as the leader" )
- consistentLeader = main.TRUE
- else:
- main.log.error(
- "Inconsistent responses for leader of Election-app:" )
- for n in range( len( leaderList ) ):
- main.log.error( "ONOS" + str( n + 1 ) + " response: " +
- str( leaderList[ n ] ) )
- leaderResult = leaderResult and consistentLeader
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- main.step( "Run for election on old leader( just so everyone " +
- "is in the hat )" )
- if oldLeader:
- runResult = oldLeader.electionTestRun()
- else:
- runResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=runResult,
- onpass="App re-ran for election",
- onfail="App failed to run for election" )
-
- main.step( "Leader did not change when old leader re-ran" )
- afterRun = main.ONOScli1.electionTestLeader()
- # verify leader didn't just change
- if afterRun == leaderList[ 0 ]:
- afterResult = main.TRUE
- else:
- afterResult = main.FALSE
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=afterResult,
- onpass="Old leader successfully re-ran for election",
- onfail="Something went wrong with Leadership election after " +
- "the old leader re-ran for election" )
-
- def CASE16( self, main ):
- """
- Install Distributed Primitives app
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # Variables for the distributed primitives tests
- global pCounterName
- global iCounterName
- global pCounterValue
- global iCounterValue
- global onosSet
- global onosSetName
- pCounterName = "TestON-Partitions"
- iCounterName = "TestON-inMemory"
- pCounterValue = 0
- iCounterValue = 0
- onosSet = set([])
- onosSetName = "TestON-set"
-
- description = "Install Primitives app"
- main.case( description )
- main.step( "Install Primitives app" )
- appName = "org.onosproject.distributedprimitives"
- appResults = CLIs[0].activateApp( appName )
- utilities.assert_equals( expect=main.TRUE,
- actual=appResults,
- onpass="Primitives app activated",
- onfail="Primitives app not activated" )
- time.sleep( 5 ) # To allow all nodes to activate
-
- def CASE17( self, main ):
- """
- Check for basic functionality with distributed primitives
- """
- import json
- # Make sure variables are defined/set
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert pCounterName, "pCounterName not defined"
- assert iCounterName, "iCounterName not defined"
- assert onosSetName, "onosSetName not defined"
- # NOTE: assert fails if value is 0/None/Empty/False
- try:
- pCounterValue
- except NameError:
- main.log.error( "pCounterValue not defined, setting to 0" )
- pCounterValue = 0
- try:
- iCounterValue
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
- try:
- onosSet
- except NameError:
- main.log.error( "onosSet not defined, setting to empty Set" )
- onosSet = set([])
- # Variables for the distributed primitives tests. These are local only
- addValue = "a"
- addAllValue = "a b c d e f"
- retainValue = "c d e f"
-
- description = "Check for basic functionality with distributed " +\
- "primitives"
- main.case( description )
- main.caseExplaination = "Test the methods of the distributed primitives (counters and sets) throught the cli"
- # DISTRIBUTED ATOMIC COUNTERS
- main.step( "Increment and get a default counter on each node" )
- pCounters = []
- threads = []
- addedPValues = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="counterIncrement-" + str( i ),
- args=[ pCounterName ] )
- pCounterValue += 1
- addedPValues.append( pCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- pCounters.append( t.result )
- # Check that counter incremented numController times
- pCounterResults = True
- for i in addedPValues:
- tmpResult = i in pCounters
- pCounterResults = pCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in partitioned "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=pCounterResults,
- onpass="Default counter incremented",
- onfail="Error incrementing default" +
- " counter" )
-
- main.step( "Increment and get an in memory counter on each node" )
- iCounters = []
- addedIValues = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="icounterIncrement-" + str( i ),
- args=[ iCounterName ],
- kwargs={ "inMemory": True } )
- iCounterValue += 1
- addedIValues.append( iCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- iCounters.append( t.result )
- # Check that counter incremented numController times
- iCounterResults = True
- for i in addedIValues:
- tmpResult = i in iCounters
- iCounterResults = iCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in the in-memory "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=iCounterResults,
- onpass="In memory counter incremented",
- onfail="Error incrementing in memory" +
- " counter" )
-
- main.step( "Check counters are consistant across nodes" )
- onosCounters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counters,
- name="counters-" + str( i ) )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- onosCounters.append( t.result )
- tmp = [ i == onosCounters[ 0 ] for i in onosCounters ]
- if all( tmp ):
- main.log.info( "Counters are consistent across all nodes" )
- consistentCounterResults = main.TRUE
- else:
- main.log.error( "Counters are not consistent across all nodes" )
- consistentCounterResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=consistentCounterResults,
- onpass="ONOS counters are consistent " +
- "across nodes",
- onfail="ONOS Counters are inconsistent " +
- "across nodes" )
-
- main.step( "Counters we added have the correct values" )
- correctResults = main.TRUE
- for i in range( numControllers ):
- current = json.loads( onosCounters[i] )
- pValue = None
- iValue = None
- try:
- for database in current:
- partitioned = database.get( 'partitionedDatabaseCounters' )
- if partitioned:
- for value in partitioned:
- if value.get( 'name' ) == pCounterName:
- pValue = value.get( 'value' )
- break
- inMemory = database.get( 'inMemoryDatabaseCounters' )
- if inMemory:
- for value in inMemory:
- if value.get( 'name' ) == iCounterName:
- iValue = value.get( 'value' )
- break
- except AttributeError, e:
- main.log.error( "ONOS" + str( i + 1 ) + " counters result " +
- "is not as expected" )
- correctResults = main.FALSE
- if pValue == pCounterValue:
- main.log.info( "Partitioned counter value is correct" )
- else:
- main.log.error( "Partitioned counter value is incorrect," +
- " expected value: " + str( pCounterValue )
- + " current value: " + str( pValue ) )
- correctResults = main.FALSE
- if iValue == iCounterValue:
- main.log.info( "In memory counter value is correct" )
- else:
- main.log.error( "In memory counter value is incorrect, " +
- "expected value: " + str( iCounterValue ) +
- " current value: " + str( iValue ) )
- correctResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=correctResults,
- onpass="Added counters are correct",
- onfail="Added counters are incorrect" )
- # DISTRIBUTED SETS
- main.step( "Distributed Set get" )
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
-
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=getResults,
- onpass="Set elements are correct",
- onfail="Set elements are incorrect" )
-
- main.step( "Distributed Set size" )
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
-
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- utilities.assert_equals( expect=main.TRUE,
- actual=sizeResults,
- onpass="Set sizes are correct",
- onfail="Set sizes are incorrect" )
-
- main.step( "Distributed Set add()" )
- onosSet.add( addValue )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAdd-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addResults = main.FALSE
- else:
- # unexpected result
- addResults = main.FALSE
- if addResults != main.TRUE:
- main.log.error( "Error executing set add" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addResults = addResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addResults,
- onpass="Set add correct",
- onfail="Set add was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set contains()" )
- containsResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContains-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsResponses.append( t.result )
-
- containsResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsResults,
- onpass="Set contains is functional",
- onfail="Set contains failed" )
-
- main.step( "Distributed Set containsAll()" )
- containsAllResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContainsAll-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addAllValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsAllResponses.append( t.result )
-
- containsAllResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsAllResults,
- onpass="Set containsAll is functional",
- onfail="Set containsAll failed" )
-
- main.step( "Distributed Set remove()" )
- onosSet.remove( addValue )
- removeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemove-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeResults = main.TRUE
- for i in range( numControllers ):
- if removeResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeResponses[ i ] == main.ERROR:
- # Error in execution
- removeResults = main.FALSE
- else:
- # unexpected result
- removeResults = main.FALSE
- if removeResults != main.TRUE:
- main.log.error( "Error executing set remove" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeResults = removeResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeResults,
- onpass="Set remove correct",
- onfail="Set remove was incorrect" )
-
- main.step( "Distributed Set removeAll()" )
- onosSet.difference_update( addAllValue.split() )
- removeAllResponses = []
- threads = []
- try:
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemoveAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeAllResponses.append( t.result )
- except Exception, e:
- main.log.exception(e)
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeAllResults = main.TRUE
- for i in range( numControllers ):
- if removeAllResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeAllResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeAllResponses[ i ] == main.ERROR:
- # Error in execution
- removeAllResults = main.FALSE
- else:
- # unexpected result
- removeAllResults = main.FALSE
- if removeAllResults != main.TRUE:
- main.log.error( "Error executing set removeAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeAllResults = removeAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeAllResults,
- onpass="Set removeAll correct",
- onfail="Set removeAll was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set clear()" )
- onosSet.clear()
- clearResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestClear-" + str( i ),
- args=[ onosSetName, " "], # Values doesn't matter
- kwargs={ "clear": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- clearResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- clearResults = main.TRUE
- for i in range( numControllers ):
- if clearResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif clearResponses[ i ] == main.FALSE:
- # Nothing set, probably fine
- pass
- elif clearResponses[ i ] == main.ERROR:
- # Error in execution
- clearResults = main.FALSE
- else:
- # unexpected result
- clearResults = main.FALSE
- if clearResults != main.TRUE:
- main.log.error( "Error executing set clear" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- clearResults = clearResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=clearResults,
- onpass="Set clear correct",
- onfail="Set clear was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set retain()" )
- onosSet.intersection_update( retainValue.split() )
- retainResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRetain-" + str( i ),
- args=[ onosSetName, retainValue ],
- kwargs={ "retain": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- retainResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- retainResults = main.TRUE
- for i in range( numControllers ):
- if retainResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif retainResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif retainResponses[ i ] == main.ERROR:
- # Error in execution
- retainResults = main.FALSE
- else:
- # unexpected result
- retainResults = main.FALSE
- if retainResults != main.TRUE:
- main.log.error( "Error executing set retain" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " +
- str( size ) + " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- retainResults = retainResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=retainResults,
- onpass="Set retain correct",
- onfail="Set retain was incorrect" )
-
diff --git a/TestON/tests/HATestClusterRestart/HATestClusterRestart.topo b/TestON/tests/HATestClusterRestart/HATestClusterRestart.topo
deleted file mode 100644
index 9305025..0000000
--- a/TestON/tests/HATestClusterRestart/HATestClusterRestart.topo
+++ /dev/null
@@ -1,169 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
-
- <ONOScli4>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli4>
-
-
- <ONOScli5>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli5>
-
-
- <ONOScli6>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli6>
-
-
- <ONOScli7>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli7>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.30.12</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.30.13</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.128.30.14</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.128.30.15</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.128.30.16</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.128.30.17</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> none </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/HATestClusterRestart/__init__.py b/TestON/tests/HATestClusterRestart/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/HATestClusterRestart/__init__.py
+++ /dev/null
diff --git a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.params b/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.params
deleted file mode 100644
index 956d889..0000000
--- a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.params
+++ /dev/null
@@ -1,71 +0,0 @@
-<PARAMS>
- <testcases>1,2,8,3,4,5,14,16,17,[6],8,7,4,15,17,9,8,4,10,8,4,11,8,4,12,8,4,13</testcases>
- <ENV>
- <cellName>HA</cellName>
- </ENV>
- <Git>False</Git>
- <branch> master </branch>
- <num_controllers> 7 </num_controllers>
- <tcpdump> False </tcpdump>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
-
- <ip2>10.128.30.12</ip2>
- <port2>6633</port2>
-
- <ip3>10.128.30.13</ip3>
- <port3>6633</port3>
-
- <ip4>10.128.30.14</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.30.15</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.30.16</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.30.17</ip7>
- <port7>6633</port7>
- </CTRL>
- <TESTONUSER>admin</TESTONUSER>
- <TESTONIP>10.128.30.9</TESTONIP>
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
- <timers>
- <LinkDiscovery>.2</LinkDiscovery>
- <SwitchDiscovery>.2</SwitchDiscovery>
- </timers>
- <kill>
- <switch> s5 </switch>
- <dpid> 0000000000005000 </dpid>
- <links> h5 s2 s1 s6 </links>
- </kill>
- <MNtcpdump>
- <intf>eth0</intf>
- <port> </port>
- <folder>~/packet_captures/</folder>
- </MNtcpdump>
-</PARAMS>
diff --git a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.py b/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.py
deleted file mode 100644
index a81845f..0000000
--- a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.py
+++ /dev/null
@@ -1,3929 +0,0 @@
-"""
-Description: This test is to determine if ONOS can handle
- a minority of it's nodes restarting
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machines
-CASE2: Assign devices to controllers
-CASE21: Assign mastership to controllers
-CASE3: Assign intents
-CASE4: Ping across added host intents
-CASE5: Reading state of ONOS
-CASE6: The Failure case.
-CASE7: Check state after control plane failure
-CASE8: Compare topo
-CASE9: Link s3-s28 down
-CASE10: Link s3-s28 up
-CASE11: Switch down
-CASE12: Switch up
-CASE13: Clean up
-CASE14: start election app on all onos nodes
-CASE15: Check that Leadership Election is still functional
-CASE16: Install Distributed Primitives app
-CASE17: Check for basic functionality with distributed primitives
-"""
-
-
-class HATestMinorityRestart:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- cell <name>
- onos-verify-cell
- NOTE: temporary - onos-remove-raft-logs
- onos-uninstall
- start mininet
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- start cli sessions
- start tcpdump
- """
- main.log.info( "ONOS HA test: Restart minority of ONOS nodes - " +
- "initialization" )
- main.case( "Setting up test environment" )
- main.caseExplaination = "Setup the test environment including " +\
- "installing ONOS, starting Mininet and ONOS" +\
- "cli sessions."
- # TODO: save all the timers and output them for plotting
-
- # load some variables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- gitBranch = main.params[ 'branch' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # set global variables
- global ONOS1Port
- global ONOS2Port
- global ONOS3Port
- global ONOS4Port
- global ONOS5Port
- global ONOS6Port
- global ONOS7Port
- global numControllers
- numControllers = int( main.params[ 'num_controllers' ] )
-
- # FIXME: just get controller port from params?
- # TODO: do we really need all these?
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- ONOS4Port = main.params[ 'CTRL' ][ 'port4' ]
- ONOS5Port = main.params[ 'CTRL' ][ 'port5' ]
- ONOS6Port = main.params[ 'CTRL' ][ 'port6' ]
- ONOS7Port = main.params[ 'CTRL' ][ 'port7' ]
-
- global CLIs
- CLIs = []
- global nodes
- nodes = []
- for i in range( 1, numControllers + 1 ):
- CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- nodes.append( getattr( main, 'ONOS' + str( i ) ) )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- # FIXME:this is short term fix
- main.log.info( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.log.info( "Uninstalling ONOS" )
- for node in nodes:
- main.ONOSbench.onosUninstall( node.ip_address )
-
- # Make sure ONOS is DEAD
- main.log.info( "Killing any ONOS processes" )
- killResults = main.TRUE
- for node in nodes:
- killed = main.ONOSbench.onosKill( node.ip_address )
- killResults = killResults and killed
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Starting Mininet" )
- mnResult = main.Mininet1.startNet( )
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet Started",
- onfail="Error starting Mininet" )
-
- main.step( "Git checkout and pull " + gitBranch )
- if PULLCODE:
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- # values of 1 or 3 are good
- utilities.assert_lesser( expect=0, actual=gitPullResult,
- onpass="Git pull successful",
- onfail="Git pull failed" )
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Using mvn clean install" )
- cleanInstallResult = main.TRUE
- if PULLCODE and gitPullResult == main.TRUE:
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- utilities.assert_equals( expect=main.TRUE,
- actual=cleanInstallResult,
- onpass="MCI successful",
- onfail="MCI failed" )
- # GRAPHS
- # NOTE: important params here:
- # job = name of Jenkins job
- # Plot Name = Plot-HA, only can be used if multiple plots
- # index = The number of the graph under plot name
- job = "HAMinorityRestart"
- plotName = "Plot-HA"
- graphs = '<ac:structured-macro ac:name="html">\n'
- graphs += '<ac:plain-text-body><![CDATA[\n'
- graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
- '/plot/' + plotName + '/getPlot?index=0' +\
- '&width=500&height=300"' +\
- 'noborder="0" width="500" height="300" scrolling="yes" ' +\
- 'seamless="seamless"></iframe>\n'
- graphs += ']]></ac:plain-text-body>\n'
- graphs += '</ac:structured-macro>\n'
- main.log.wiki(graphs)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- utilities.assert_equals( expect=main.TRUE, actual=packageResult,
- onpass="ONOS package successful",
- onfail="ONOS package failed" )
-
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for node in nodes:
- tmpResult = main.ONOSbench.onosInstall( options="-f",
- node=node.ip_address )
- onosInstallResult = onosInstallResult and tmpResult
- utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult,
- onpass="ONOS install successful",
- onfail="ONOS install failed" )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onosIsupResult = main.TRUE
- for node in nodes:
- started = main.ONOSbench.isup( node.ip_address )
- if not started:
- main.log.error( node.name + " didn't start!" )
- main.ONOSbench.onosStop( node.ip_address )
- main.ONOSbench.onosStart( node.ip_address )
- onosIsupResult = onosIsupResult and started
- if onosIsupResult == main.TRUE:
- break
- utilities.assert_equals( expect=main.TRUE, actual=onosIsupResult,
- onpass="ONOS startup successful",
- onfail="ONOS startup failed" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].startOnosCli,
- name="startOnosCli-" + str( i ),
- args=[nodes[i].ip_address] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- cliResults = cliResults and t.result
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli startup successful",
- onfail="ONOS cli startup failed" )
-
- if main.params[ 'tcpdump' ].lower() == "true":
- main.step( "Start Packet Capture MN" )
- main.Mininet2.startTcpdump(
- str( main.params[ 'MNtcpdump' ][ 'folder' ] ) + str( main.TEST )
- + "-MN.pcap",
- intf=main.params[ 'MNtcpdump' ][ 'intf' ],
- port=main.params[ 'MNtcpdump' ][ 'port' ] )
-
- main.step( "App Ids check" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- if cliResults == main.FALSE:
- main.log.error( "Failed to start ONOS, stopping test" )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- """
- Assign devices to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning devices to controllers" )
- main.caseExplaination = "Assign switches to ONOS using 'ovs-vsctl' " +\
- "and check that an ONOS node becomes the " +\
- "master of the device."
- main.step( "Assign switches to controllers" )
-
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- swList = []
- for i in range( 1, 29 ):
- swList.append( "s" + str( i ) )
- main.Mininet1.assignSwController( sw=swList, ip=ipList )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except Exception:
- main.log.info( repr( response ) )
- for node in nodes:
- if re.search( "tcp:" + node.ip_address, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.error( "Error, node " + node.ip_address + " is " +
- "not in the list of controllers s" +
- str( i ) + " is connecting to." )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- def CASE21( self, main ):
- """
- Assign mastership to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning Controller roles for switches" )
- main.caseExplaination = "Check that ONOS is connected to each " +\
- "device. Then manually assign" +\
- " mastership to specific ONOS nodes using" +\
- " 'device-role'"
- main.step( "Assign mastership of switches to specific controllers" )
- # Manually assign mastership to the controller we want
- roleCall = main.TRUE
-
- ipList = [ ]
- deviceList = []
- try:
- for i in range( 1, 29 ): # switches 1 through 28
- # set up correct variables:
- if i == 1:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "1000" ).get( 'id' )
- elif i == 2:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "2000" ).get( 'id' )
- elif i == 3:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "3000" ).get( 'id' )
- elif i == 4:
- ip = nodes[ 3 ].ip_address # ONOS4
- deviceId = main.ONOScli1.getDevice( "3004" ).get( 'id' )
- elif i == 5:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "5000" ).get( 'id' )
- elif i == 6:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "6000" ).get( 'id' )
- elif i == 7:
- ip = nodes[ 5 ].ip_address # ONOS6
- deviceId = main.ONOScli1.getDevice( "6007" ).get( 'id' )
- elif i >= 8 and i <= 17:
- ip = nodes[ 4 ].ip_address # ONOS5
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i >= 18 and i <= 27:
- ip = nodes[ 6 ].ip_address # ONOS7
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i == 28:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "2800" ).get( 'id' )
- else:
- main.log.error( "You didn't write an else statement for " +
- "switch s" + str( i ) )
- roleCall = main.FALSE
- # Assign switch
- assert deviceId, "No device id for s" + str( i ) + " in ONOS"
- # TODO: make this controller dynamic
- roleCall = roleCall and main.ONOScli1.deviceRole( deviceId,
- ip )
- ipList.append( ip )
- deviceList.append( deviceId )
- except ( AttributeError, AssertionError ):
- main.log.exception( "Something is wrong with ONOS device view" )
- main.log.info( main.ONOScli1.devices() )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCall,
- onpass="Re-assigned switch mastership to designated controller",
- onfail="Something wrong with deviceRole calls" )
-
- main.step( "Check mastership was correctly assigned" )
- roleCheck = main.TRUE
- # NOTE: This is due to the fact that device mastership change is not
- # atomic and is actually a multi step process
- time.sleep( 5 )
- for i in range( len( ipList ) ):
- ip = ipList[i]
- deviceId = deviceList[i]
- # Check assignment
- master = main.ONOScli1.getRole( deviceId ).get( 'master' )
- if ip in master:
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
- main.log.error( "Error, controller " + ip + " is not" +
- " master " + "of device " +
- str( deviceId ) + ". Master is " +
- repr( master ) + "." )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCheck,
- onpass="Switches were successfully reassigned to designated " +
- "controller",
- onfail="Switches were not successfully reassigned" )
-
- def CASE3( self, main ):
- """
- Assign intents
- """
- import time
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Adding host Intents" )
- main.caseExplaination = "Discover hosts by using pingall then " +\
- "assign predetermined host-to-host intents." +\
- " After installation, check that the intent" +\
- " is distributed to all nodes and the state" +\
- " is INSTALLED"
-
- # install onos-app-fwd
- main.step( "Install reactive forwarding app" )
- installResults = CLIs[0].activateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=installResults,
- onpass="Install fwd successful",
- onfail="Install fwd failed" )
-
- main.step( "Check app ids" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Discovering Hosts( Via pingall for now )" )
- # FIXME: Once we have a host discovery mechanism, use that instead
- # REACTIVE FWD test
- pingResult = main.FALSE
- for i in range(2): # Retry if pingall fails first time
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- if i == 0:
- utilities.assert_equals(
- expect=main.TRUE,
- actual=pingResult,
- onpass="Reactive Pingall test passed",
- onfail="Reactive Pingall failed, " +
- "one or more ping pairs failed" )
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" %
- ( time2 - time1 ) )
- # timeout for fwd flows
- time.sleep( 11 )
- # uninstall onos-app-fwd
- main.step( "Uninstall reactive forwarding app" )
- uninstallResult = CLIs[0].deactivateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=uninstallResult,
- onpass="Uninstall fwd successful",
- onfail="Uninstall fwd failed" )
-
- main.step( "Check app ids" )
- threads = []
- appCheck2 = main.TRUE
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck2 = appCheck2 and t.result
- if appCheck2 != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck2,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Add host intents via cli" )
- intentIds = []
- # TODO: move the host numbers to params
- # Maybe look at all the paths we ping?
- intentAddResult = True
- hostResult = main.TRUE
- for i in range( 8, 18 ):
- main.log.info( "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: getHost can return None
- host1Dict = main.ONOScli1.getHost( host1 )
- host2Dict = main.ONOScli1.getHost( host2 )
- host1Id = None
- host2Id = None
- if host1Dict and host2Dict:
- host1Id = host1Dict.get( 'id', None )
- host2Id = host2Dict.get( 'id', None )
- if host1Id and host2Id:
- nodeNum = ( i % 7 )
- tmpId = CLIs[ nodeNum ].addHostIntent( host1Id, host2Id )
- if tmpId:
- main.log.info( "Added intent with id: " + tmpId )
- intentIds.append( tmpId )
- else:
- main.log.error( "addHostIntent returned: " +
- repr( tmpId ) )
- else:
- main.log.error( "Error, getHost() failed for h" + str( i ) +
- " and/or h" + str( i + 10 ) )
- hosts = CLIs[ 0 ].hosts()
- main.log.warn( "Hosts output: " )
- try:
- main.log.warn( json.dumps( json.loads( hosts ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( hosts ) )
- hostResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE, actual=hostResult,
- onpass="Found a host id for each host",
- onfail="Error looking up host ids" )
-
- intentStart = time.time()
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- for intent in intentIds:
- if intent in onosIds:
- pass # intent submitted is in onos
- else:
- intentAddResult = False
- if intentAddResult:
- intentStop = time.time()
- else:
- intentStop = None
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- installedCheck = True
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- missingIntents = False
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- missingIntents = True
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- intentAddResult = bool( intentAddResult and not missingIntents and
- installedCheck )
- if not intentAddResult:
- main.log.error( "Error in pushing host intents to ONOS" )
-
- main.step( "Intent Anti-Entropy dispersion" )
- for i in range(100):
- correct = True
- main.log.info( "Submitted intents: " + str( sorted( intentIds ) ) )
- for cli in CLIs:
- onosIds = []
- ids = cli.getAllIntentsId()
- onosIds.append( ids )
- main.log.debug( "Intents in " + cli.name + ": " +
- str( sorted( onosIds ) ) )
- if sorted( ids ) != sorted( intentIds ):
- main.log.warn( "Set of intent IDs doesn't match" )
- correct = False
- break
- else:
- intents = json.loads( cli.intents() )
- for intent in intents:
- if intent[ 'state' ] != "INSTALLED":
- main.log.warn( "Intent " + intent[ 'id' ] +
- " is " + intent[ 'state' ] )
- correct = False
- break
- if correct:
- break
- else:
- time.sleep(1)
- if not intentStop:
- intentStop = time.time()
- global gossipTime
- gossipTime = intentStop - intentStart
- main.log.info( "It took about " + str( gossipTime ) +
- " seconds for all intents to appear in each node" )
- # FIXME: make this time configurable/calculate based off of number of
- # nodes and gossip rounds
- utilities.assert_greater_equals(
- expect=40, actual=gossipTime,
- onpass="ECM anti-entropy for intents worked within " +
- "expected time",
- onfail="Intent ECM anti-entropy took too long" )
- if gossipTime <= 40:
- intentAddResult = True
-
- if not intentAddResult or "key" in pendingMap:
- import time
- installedCheck = True
- main.log.info( "Sleeping 60 seconds to see if intents are found" )
- time.sleep( 60 )
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- # Iter through intents of a node
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- def CASE4( self, main ):
- """
- Ping across added host intents
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Verify connectivity by sendind traffic across Intents" )
- main.caseExplaination = "Ping across added host intents to check " +\
- "functionality and check the state of " +\
- "the intent"
- main.step( "Ping across added host intents" )
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- main.step( "Check Intent state" )
- installedCheck = False
- loopCount = 0
- while not installedCheck and loopCount < 40:
- installedCheck = True
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- # Print states
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- if not installedCheck:
- time.sleep( 1 )
- loopCount += 1
- utilities.assert_equals( expect=True, actual=installedCheck,
- onpass="Intents are all INSTALLED",
- onfail="Intents are not all in " +
- "INSTALLED state" )
-
- main.step( "Check leadership of topics" )
- leaders = main.ONOScli1.leaders()
- topicCheck = main.TRUE
- try:
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- # TODO: Look at Devices as topics now that it uses this system
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- # FIXME: topics.append( "org.onosproject.election" )
- # Print leaders output
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- topicCheck = main.FALSE
- else:
- main.log.error( "leaders() returned None" )
- topicCheck = main.FALSE
- except ( ValueError, TypeError ):
- topicCheck = main.FALSE
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # TODO: Check for a leader of these topics
- # Check all nodes
- if topicCheck:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- utilities.assert_equals( expect=main.TRUE, actual=topicCheck,
- onpass="intent Partitions is in leaders",
- onfail="Some topics were lost " )
- # Print partitions
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- # Print Pending Map
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- if not installedCheck:
- main.log.info( "Waiting 60 seconds to see if the state of " +
- "intents change" )
- time.sleep( 60 )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
- # Print flowrules
- main.log.debug( CLIs[0].flows( jsonFormat=False ) )
- main.step( "Wait a minute then ping again" )
- # the wait is above
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- def CASE5( self, main ):
- """
- Reading state of ONOS
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Setting up and gathering data for current state" )
- # The general idea for this test case is to pull the state of
- # ( intents,flows, topology,... ) from each ONOS node
- # We can then compare them with each other and also with past states
-
- main.step( "Check that each switch has a master" )
- global mastershipState
- mastershipState = '[]'
-
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Get the Mastership of each switch from each controller" )
- ONOSMastership = []
- mastershipCheck = main.FALSE
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( ONOSMastership[ i ] ) )
- elif rolesResults and consistentMastership:
- mastershipCheck = main.TRUE
- mastershipState = ONOSMastership[ 0 ]
-
- main.step( "Get the intents from each controller" )
- global intentState
- intentState = []
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
- main.log.error( "Intents not consistent" )
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
-
- if intentsResults:
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " Id"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- # get all intent keys in the cluster
- keys = []
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id', "Error" ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End table view
-
- if intentsResults and not consistentIntents:
- # print the json objects
- n = len(ONOSIntents)
- main.log.debug( "ONOS" + str( n ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ -1 ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- for i in range( numControllers ):
- if ONOSIntents[ i ] != ONOSIntents[ -1 ]:
- main.log.debug( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[i] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- else:
- main.log.debug( nodes[ i ].name + " intents match ONOS" +
- str( n ) + " intents" )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
- intentState = ONOSIntents[ 0 ]
-
- main.step( "Get the flows from each controller" )
- global flowState
- flowState = []
- ONOSFlows = []
- ONOSFlowsJson = []
- flowCheck = main.FALSE
- consistentFlows = True
- flowsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].flows,
- name="flows-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- # NOTE: Flows command can take some time to run
- time.sleep(30)
- for t in threads:
- t.join()
- result = t.result
- ONOSFlows.append( result )
-
- for i in range( numControllers ):
- num = str( i + 1 )
- if not ONOSFlows[ i ] or "Error" in ONOSFlows[ i ]:
- main.log.error( "Error in getting ONOS" + num + " flows" )
- main.log.warn( "ONOS" + num + " flows response: " +
- repr( ONOSFlows[ i ] ) )
- flowsResults = False
- ONOSFlowsJson.append( None )
- else:
- try:
- ONOSFlowsJson.append( json.loads( ONOSFlows[ i ] ) )
- except ( ValueError, TypeError ):
- # FIXME: change this to log.error?
- main.log.exception( "Error in parsing ONOS" + num +
- " response as json." )
- main.log.error( repr( ONOSFlows[ i ] ) )
- ONOSFlowsJson.append( None )
- flowsResults = False
- utilities.assert_equals(
- expect=True,
- actual=flowsResults,
- onpass="No error in reading flows output",
- onfail="Error in reading flows from ONOS" )
-
- main.step( "Check for consistency in Flows from each controller" )
- tmp = [ len( i ) == len( ONOSFlowsJson[ 0 ] ) for i in ONOSFlowsJson ]
- if all( tmp ):
- main.log.info( "Flow count is consistent across all ONOS nodes" )
- else:
- consistentFlows = False
- utilities.assert_equals(
- expect=True,
- actual=consistentFlows,
- onpass="The flow count is consistent across all ONOS nodes",
- onfail="ONOS nodes have different flow counts" )
-
- if flowsResults and not consistentFlows:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- json.dumps( json.loads( ONOSFlows[i] ), sort_keys=True,
- indent=4, separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- repr( ONOSFlows[ i ] ) )
- elif flowsResults and consistentFlows:
- flowCheck = main.TRUE
- flowState = ONOSFlows[ 0 ]
-
- main.step( "Get the OF Table entries" )
- global flows
- flows = []
- for i in range( 1, 29 ):
- flows.append( main.Mininet2.getFlowTable( 1.3, "s" + str( i ) ) )
- if flowCheck == main.FALSE:
- for table in flows:
- main.log.warn( table )
- # TODO: Compare switch flow tables with ONOS flow tables
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Collecting topology information from ONOS" )
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- # FIXME: better handling of this, print which node
- # Maybe use thread name?
- main.log.exception( "Error parsing json output of hosts" )
- # FIXME: should this be an empty json object instead?
- hosts.append( None )
-
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Host view is consistent across ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Each host has an IP address" )
- ipResult = main.TRUE
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if not host.get( 'ipAddresses', [ ] ):
- main.log.error( "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=ipResult,
- onpass="The ips of the hosts aren't empty",
- onfail="The ip of at least one host is missing" )
-
- # Strongly connected clusters of devices
- main.step( "Cluster view is consistent across ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
- # there should always only be one cluster
- main.step( "Cluster view correct across ONOS nodes" )
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[ 0 ] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
-
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- main.step( "Hosts are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Hosts are correct",
- onfail="Hosts are incorrect" )
-
- def CASE6( self, main ):
- """
- The Failure case.
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Restart minority of ONOS nodes" )
- main.step( "Killing 3 ONOS nodes" )
- killTime = time.time()
- # TODO: Randomize these nodes or base this on partitions
- # TODO: use threads in this case
- killResults = main.ONOSbench.onosKill( nodes[0].ip_address )
- time.sleep( 10 )
- killResults = killResults and\
- main.ONOSbench.onosKill( nodes[1].ip_address )
- time.sleep( 10 )
- killResults = killResults and\
- main.ONOSbench.onosKill( nodes[2].ip_address )
- utilities.assert_equals( expect=main.TRUE, actual=killResults,
- onpass="ONOS Killed successfully",
- onfail="ONOS kill NOT successful" )
-
- main.step( "Checking if ONOS is up yet" )
- count = 0
- onosIsupResult = main.FALSE
- while onosIsupResult == main.FALSE and count < 10:
- onos1Isup = main.ONOSbench.isup( nodes[0].ip_address )
- onos2Isup = main.ONOSbench.isup( nodes[1].ip_address )
- onos3Isup = main.ONOSbench.isup( nodes[2].ip_address )
- onosIsupResult = onos1Isup and onos2Isup and onos3Isup
- count = count + 1
- # TODO: if it becomes an issue, we can retry this step a few times
- utilities.assert_equals( expect=main.TRUE, actual=onosIsupResult,
- onpass="ONOS restarted successfully",
- onfail="ONOS restart NOT successful" )
-
- main.step( "Restarting ONOS CLIs" )
- cliResult1 = main.ONOScli1.startOnosCli( nodes[0].ip_address )
- cliResult2 = main.ONOScli2.startOnosCli( nodes[1].ip_address )
- cliResult3 = main.ONOScli3.startOnosCli( nodes[2].ip_address )
- cliResults = cliResult1 and cliResult2 and cliResult3
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli restarted",
- onfail="ONOS cli did not restart" )
-
- # Grab the time of restart so we chan check how long the gossip
- # protocol has had time to work
- main.restartTime = time.time() - killTime
- main.log.debug( "Restart time: " + str( main.restartTime ) )
- '''
- # FIXME: revisit test plan for election with madan
- # Rerun for election on restarted nodes
- run1 = CLIs[0].electionTestRun()
- run2 = CLIs[1].electionTestRun()
- run3 = CLIs[2].electionTestRun()
- runResults = run1 and run2 and run3
- utilities.assert_equals( expect=main.TRUE, actual=runResults,
- onpass="Reran for election",
- onfail="Failed to rerun for election" )
- '''
- # TODO: MAke this configurable. Also, we are breaking the above timer
- time.sleep( 60 )
- main.log.debug( CLIs[0].nodes( jsonFormat=False ) )
- main.log.debug( CLIs[0].leaders( jsonFormat=False ) )
- main.log.debug( CLIs[0].partitions( jsonFormat=False ) )
-
- def CASE7( self, main ):
- """
- Check state after ONOS failure
- """
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Running ONOS Constant State Tests" )
-
- main.step( "Check that each switch has a master" )
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Read device roles from ONOS" )
- ONOSMastership = []
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
-
- # NOTE: we expect mastership to change on controller failure
- '''
- description2 = "Compare switch roles from before failure"
- main.step( description2 )
- try:
- currentJson = json.loads( ONOSMastership[0] )
- oldJson = json.loads( mastershipState )
- except ( ValueError, TypeError ):
- main.log.exception( "Something is wrong with parsing " +
- "ONOSMastership[0] or mastershipState" )
- main.log.error( "ONOSMastership[0]: " + repr( ONOSMastership[0] ) )
- main.log.error( "mastershipState" + repr( mastershipState ) )
- main.cleanup()
- main.exit()
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- switchDPID = str(
- main.Mininet1.getSwitchDPID( switch="s" + str( i ) ) )
- current = [ switch[ 'master' ] for switch in currentJson
- if switchDPID in switch[ 'id' ] ]
- old = [ switch[ 'master' ] for switch in oldJson
- if switchDPID in switch[ 'id' ] ]
- if current == old:
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.warn( "Mastership of switch %s changed" % switchDPID )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Mastership of Switches was not changed",
- onfail="Mastership of some switches changed" )
- '''
-
- main.step( "Get the intents and compare across all nodes" )
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
-
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " ID"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- # get all intent keys in the cluster
- keys = []
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id' ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End table view
-
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
- intentStates = []
- for node in ONOSIntents: # Iter through ONOS nodes
- nodeStates = []
- # Iter through intents of a node
- try:
- for intent in json.loads( node ):
- nodeStates.append( intent[ 'state' ] )
- except ( ValueError, TypeError ):
- main.log.exception( "Error in parsing intents" )
- main.log.error( repr( node ) )
- intentStates.append( nodeStates )
- out = [ (i, nodeStates.count( i ) ) for i in set( nodeStates ) ]
- main.log.info( dict( out ) )
-
- if intentsResults and not consistentIntents:
- for i in range( numControllers ):
- main.log.warn( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.warn( json.dumps(
- json.loads( ONOSIntents[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
-
- # NOTE: Store has no durability, so intents are lost across system
- # restarts
- main.step( "Compare current intents with intents before the failure" )
- # NOTE: this requires case 5 to pass for intentState to be set.
- # maybe we should stop the test if that fails?
- sameIntents = main.FALSE
- if intentState and intentState == ONOSIntents[ 0 ]:
- sameIntents = main.TRUE
- main.log.info( "Intents are consistent with before failure" )
- # TODO: possibly the states have changed? we may need to figure out
- # what the acceptable states are
- elif len( intentState ) == len( ONOSIntents[ 0 ] ):
- sameIntents = main.TRUE
- try:
- before = json.loads( intentState )
- after = json.loads( ONOSIntents[ 0 ] )
- for intent in before:
- if intent not in after:
- sameIntents = main.FALSE
- main.log.debug( "Intent is not currently in ONOS " +
- "(at least in the same form):" )
- main.log.debug( json.dumps( intent ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- if sameIntents == main.FALSE:
- try:
- main.log.debug( "ONOS intents before: " )
- main.log.debug( json.dumps( json.loads( intentState ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- main.log.debug( "Current ONOS intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ 0 ] ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameIntents,
- onpass="Intents are consistent with before failure",
- onfail="The Intents changed during failure" )
- intentCheck = intentCheck and sameIntents
-
- main.step( "Get the OF Table entries and compare to before " +
- "component failure" )
- FlowTables = main.TRUE
- flows2 = []
- for i in range( 28 ):
- main.log.info( "Checking flow table on s" + str( i + 1 ) )
- tmpFlows = main.Mininet2.getFlowTable( 1.3, "s" + str( i + 1 ) )
- flows2.append( tmpFlows )
- tempResult = main.Mininet2.flowComp(
- flow1=flows[ i ],
- flow2=tmpFlows )
- FlowTables = FlowTables and tempResult
- if FlowTables == main.FALSE:
- main.log.info( "Differences in flow table for switch: s" +
- str( i + 1 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=FlowTables,
- onpass="No changes were found in the flow tables",
- onfail="Changes were found in the flow tables" )
-
- main.step( "Check the continuous pings to ensure that no packets " +
- "were dropped during component failure" )
- main.Mininet2.pingKill( main.params[ 'TESTONUSER' ],
- main.params[ 'TESTONIP' ] )
- LossInPings = main.FALSE
- # NOTE: checkForLoss returns main.FALSE with 0% packet loss
- for i in range( 8, 18 ):
- main.log.info(
- "Checking for a loss in pings along flow from s" +
- str( i ) )
- LossInPings = main.Mininet2.checkForLoss(
- "/tmp/ping.h" +
- str( i ) ) or LossInPings
- if LossInPings == main.TRUE:
- main.log.info( "Loss in ping detected" )
- elif LossInPings == main.ERROR:
- main.log.info( "There are multiple mininet process running" )
- elif LossInPings == main.FALSE:
- main.log.info( "No Loss in the pings" )
- main.log.info( "No loss of dataplane connectivity" )
- utilities.assert_equals(
- expect=main.FALSE,
- actual=LossInPings,
- onpass="No Loss of connectivity",
- onfail="Loss of dataplane connectivity detected" )
-
- main.step( "Leadership Election is still functional" )
- # Test of LeadershipElection
- leaderList = []
- # FIXME: make sure this matches nodes that were restarted
- restarted = [ nodes[0].ip_address, nodes[1].ip_address,
- nodes[2].ip_address ]
-
- leaderResult = main.TRUE
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- leaderList.append( leaderN )
- if leaderN == main.FALSE:
- # error in response
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, check the" +
- " error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- main.log.error( cli.name +
- " shows no leader for the election-app was" +
- " elected after the old one died" )
- leaderResult = main.FALSE
- elif leaderN in restarted:
- main.log.error( cli.name + " shows " + str( leaderN ) +
- " as leader for the election-app, but it " +
- "was restarted" )
- leaderResult = main.FALSE
- if len( set( leaderList ) ) != 1:
- leaderResult = main.FALSE
- main.log.error(
- "Inconsistent view of leader for the election test app" )
- # TODO: print the list
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- def CASE8( self, main ):
- """
- Compare topo
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Compare ONOS Topology view to Mininet topology" )
- main.caseExplaination = "Compare topology objects between Mininet" +\
- " and ONOS"
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- hostAttachmentResults = True
- topoResult = main.FALSE
- elapsed = 0
- count = 0
- main.step( "Collecting topology information from ONOS" )
- startTime = time.time()
- # Give time for Gossip to work
- while topoResult == main.FALSE and elapsed < 60:
- count += 1
- cliStart = time.time()
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- ipResult = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing hosts results" )
- main.log.error( repr( t.result ) )
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host is None or host.get( 'ipAddresses', [] ) == []:
- main.log.error(
- "DEBUG:Error with host ipAddresses on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
-
- elapsed = time.time() - startTime
- cliTime = time.time() - cliStart
- print "Elapsed time: " + str( elapsed )
- print "CLI time: " + str( cliTime )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
- # CHECKING HOST ATTACHMENT POINTS
- hostAttachment = True
- zeroHosts = False
- # FIXME: topo-HA/obelisk specific mappings:
- # key is mac and value is dpid
- mappings = {}
- for i in range( 1, 29 ): # hosts 1 through 28
- # set up correct variables:
- macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
- if i == 1:
- deviceId = "1000".zfill(16)
- elif i == 2:
- deviceId = "2000".zfill(16)
- elif i == 3:
- deviceId = "3000".zfill(16)
- elif i == 4:
- deviceId = "3004".zfill(16)
- elif i == 5:
- deviceId = "5000".zfill(16)
- elif i == 6:
- deviceId = "6000".zfill(16)
- elif i == 7:
- deviceId = "6007".zfill(16)
- elif i >= 8 and i <= 17:
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i >= 18 and i <= 27:
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i == 28:
- deviceId = "2800".zfill(16)
- mappings[ macId ] = deviceId
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- if hosts[ controller ] == []:
- main.log.warn( "There are no hosts discovered" )
- zeroHosts = True
- else:
- for host in hosts[ controller ]:
- mac = None
- location = None
- device = None
- port = None
- try:
- mac = host.get( 'mac' )
- assert mac, "mac field could not be found for this host object"
-
- location = host.get( 'location' )
- assert location, "location field could not be found for this host object"
-
- # Trim the protocol identifier off deviceId
- device = str( location.get( 'elementId' ) ).split(':')[1]
- assert device, "elementId field could not be found for this host location object"
-
- port = location.get( 'port' )
- assert port, "port field could not be found for this host location object"
-
- # Now check if this matches where they should be
- if mac and device and port:
- if str( port ) != "1":
- main.log.error( "The attachment port is incorrect for " +
- "host " + str( mac ) +
- ". Expected: 1 Actual: " + str( port) )
- hostAttachment = False
- if device != mappings[ str( mac ) ]:
- main.log.error( "The attachment device is incorrect for " +
- "host " + str( mac ) +
- ". Expected: " + mappings[ str( mac ) ] +
- " Actual: " + device )
- hostAttachment = False
- else:
- hostAttachment = False
- except AssertionError:
- main.log.exception( "Json object not as expected" )
- main.log.error( repr( host ) )
- hostAttachment = False
- else:
- main.log.error( "No hosts json output or \"Error\"" +
- " in output. hosts = " +
- repr( hosts[ controller ] ) )
- if zeroHosts is False:
- hostAttachment = True
-
- # END CHECKING HOST ATTACHMENT POINTS
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
- hostAttachmentResults = hostAttachmentResults and\
- hostAttachment
-
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Hosts view is consistent across all ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Hosts information is correct" )
- hostsResults = hostsResults and ipResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Host information is correct",
- onfail="Host information is incorrect" )
-
- main.step( "Host attachment points to the network" )
- utilities.assert_equals(
- expect=True,
- actual=hostAttachmentResults,
- onpass="Hosts are correctly attached to the network",
- onfail="ONOS did not correctly attach hosts to the network" )
-
- # Strongly connected clusters of devices
- main.step( "Clusters view is consistent across all ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
-
- main.step( "There is only one SCC" )
- # there should always only be one cluster
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[0] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- topoResult = ( devicesResults and linksResults
- and hostsResults and consistentHostsResult
- and consistentClustersResult and clusterResults
- and ipResult and hostAttachmentResults )
-
- topoResult = topoResult and int( count <= 2 )
- note = "note it takes about " + str( int( cliTime ) ) + \
- " seconds for the test to make all the cli calls to fetch " +\
- "the topology from each ONOS instance"
- main.log.info(
- "Very crass estimate for topology discovery/convergence( " +
- str( note ) + " ): " + str( elapsed ) + " seconds, " +
- str( count ) + " tries" )
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- # FIXME: move this to an ONOS state case
- main.step( "Checking ONOS nodes" )
- nodesOutput = []
- nodeResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].nodes,
- name="nodes-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- nodesOutput.append( t.result )
- ips = [ node.ip_address for node in nodes ]
- for i in nodesOutput:
- try:
- current = json.loads( i )
- for node in current:
- currentResult = main.FALSE
- if node['ip'] in ips: # node in nodes() output is in cell
- if node['state'] == 'ACTIVE':
- currentResult = main.TRUE
- else:
- main.log.error( "Error in ONOS node availability" )
- main.log.error(
- json.dumps( current,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- break
- nodeResults = nodeResults and currentResult
- except ( ValueError, TypeError ):
- main.log.error( "Error parsing nodes output" )
- main.log.warn( repr( i ) )
- utilities.assert_equals( expect=main.TRUE, actual=nodeResults,
- onpass="Nodes check successful",
- onfail="Nodes check NOT successful" )
-
- def CASE9( self, main ):
- """
- Link s3-s28 down
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Turn off a link to ensure that Link Discovery " +\
- "is working properly"
- main.case( description )
-
- main.step( "Kill Link between s3 and s28" )
- LinkDown = main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link down to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkDown,
- onpass="Link down successful",
- onfail="Failed to bring link down" )
- # TODO do some sort of check here
-
- def CASE10( self, main ):
- """
- Link s3-s28 up
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Restore a link to ensure that Link Discovery is " + \
- "working properly"
- main.case( description )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link up to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkUp,
- onpass="Link up successful",
- onfail="Failed to bring link up" )
- # TODO do some sort of check here
-
- def CASE11( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.case( description )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
-
- # TODO: Make this switch parameterizable
- main.step( "Kill " + switch )
- main.log.info( "Deleting " + switch )
- main.Mininet1.delSwitch( switch )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ] is False:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Kill switch successful",
- onfail="Failed to kill switch?" )
-
- def CASE12( self, main ):
- """
- Switch Up
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
- links = main.params[ 'kill' ][ 'links' ].split()
- description = "Adding a switch to ensure it is discovered correctly"
- main.case( description )
-
- main.step( "Add back " + switch )
- main.Mininet1.addSwitch( switch, dpid=switchDPID )
- for peer in links:
- main.Mininet1.addLink( switch, peer )
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- main.Mininet1.assignSwController( sw=switch, ip=ipList )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch up to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ]:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="add switch successful",
- onfail="Failed to add switch?" )
-
- def CASE13( self, main ):
- """
- Clean up
- """
- import os
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # printing colors to terminal
- colors = { 'cyan': '\033[96m', 'purple': '\033[95m',
- 'blue': '\033[94m', 'green': '\033[92m',
- 'yellow': '\033[93m', 'red': '\033[91m', 'end': '\033[0m' }
- main.case( "Test Cleanup" )
- main.step( "Killing tcpdumps" )
- main.Mininet2.stopTcpdump()
-
- main.step( "Copying MN pcap and ONOS log files to test station" )
- testname = main.TEST
- teststationUser = main.params[ 'TESTONUSER' ]
- teststationIP = main.params[ 'TESTONIP' ]
- # NOTE: MN Pcap file is being saved to ~/packet_captures
- # scp this file as MN and TestON aren't necessarily the same vm
- # FIXME: scp
- # mn files
- # TODO: Load these from params
- # NOTE: must end in /
- logFolder = "/opt/onos/log/"
- logFiles = [ "karaf.log", "karaf.log.1" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
-
- # std*.log's
- # NOTE: must end in /
- logFolder = "/opt/onos/var/"
- logFiles = [ "stderr.log", "stdout.log" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
- # sleep so scp can finish
- time.sleep( 10 )
-
- main.step( "Stopping Mininet" )
- mnResult = main.Mininet1.stopNet()
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet stopped",
- onfail="MN cleanup NOT successful" )
-
- main.step( "Checking ONOS Logs for errors" )
- for node in nodes:
- print colors[ 'purple' ] + "Checking logs for errors on " + \
- node.name + ":" + colors[ 'end' ]
- print main.ONOSbench.checkLogs( node.ip_address, restart=True )
-
- main.step( "Packing and rotating pcap archives" )
- os.system( "~/TestON/dependencies/rotate.sh " + str( testname ) )
-
- try:
- timerLog = open( main.logdir + "/Timers.csv", 'w')
- # Overwrite with empty line and close
- labels = "Gossip Intents, Restart"
- data = str( gossipTime ) + ", " + str( main.restartTime )
- timerLog.write( labels + "\n" + data )
- timerLog.close()
- except NameError, e:
- main.log.exception(e)
-
- def CASE14( self, main ):
- """
- start election app on all onos nodes
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case("Start Leadership Election app")
- main.step( "Install leadership election app" )
- appResult = main.ONOScli1.activateApp( "org.onosproject.election" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=appResult,
- onpass="Election app installed",
- onfail="Something went wrong with installing Leadership election" )
-
- main.step( "Run for election on each node" )
- leaderResult = main.TRUE
- leaders = []
- for cli in CLIs:
- cli.electionTestRun()
- for cli in CLIs:
- leader = cli.electionTestLeader()
- if leader is None or leader == main.FALSE:
- main.log.error( cli.name + ": Leader for the election app " +
- "should be an ONOS node, instead got '" +
- str( leader ) + "'" )
- leaderResult = main.FALSE
- leaders.append( leader )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Successfully ran for leadership",
- onfail="Failed to run for leadership" )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- def CASE15( self, main ):
- """
- Check that Leadership Election is still functional
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- leaderResult = main.TRUE
- description = "Check that Leadership Election is still functional"
- main.case( description )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- leaders = []
- for cli in CLIs:
- leader = cli.electionTestLeader()
- leaders.append( leader )
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- main.step( "Find current leader and withdraw" )
- leader = main.ONOScli1.electionTestLeader()
- # do some sanity checking on leader before using it
- withdrawResult = main.FALSE
- if leader is None or leader == main.FALSE:
- main.log.error(
- "Leader for the election app should be an ONOS node," +
- "instead got '" + str( leader ) + "'" )
- leaderResult = main.FALSE
- oldLeader = None
- for i in range( len( CLIs ) ):
- if leader == nodes[ i ].ip_address:
- oldLeader = CLIs[ i ]
- break
- else: # FOR/ELSE statement
- main.log.error( "Leader election, could not find current leader" )
- if oldLeader:
- withdrawResult = oldLeader.electionTestWithdraw()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=withdrawResult,
- onpass="Node was withdrawn from election",
- onfail="Node was not withdrawn from election" )
-
- main.step( "Make sure new leader is elected" )
- # FIXME: use threads
- leaderList = []
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- leaderList.append( leaderN )
- if leaderN == leader:
- main.log.error( cli.name + " still sees " + str( leader ) +
- " as leader after they withdrew" )
- leaderResult = main.FALSE
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, " +
- "check the error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- # node may not have recieved the event yet
- time.sleep(7)
- leaderN = cli.electionTestLeader()
- leaderList.pop()
- leaderList.append( leaderN )
- consistentLeader = main.FALSE
- if len( set( leaderList ) ) == 1:
- main.log.info( "Each Election-app sees '" +
- str( leaderList[ 0 ] ) +
- "' as the leader" )
- consistentLeader = main.TRUE
- else:
- main.log.error(
- "Inconsistent responses for leader of Election-app:" )
- for n in range( len( leaderList ) ):
- main.log.error( "ONOS" + str( n + 1 ) + " response: " +
- str( leaderList[ n ] ) )
- leaderResult = leaderResult and consistentLeader
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- main.step( "Run for election on old leader( just so everyone " +
- "is in the hat )" )
- if oldLeader:
- runResult = oldLeader.electionTestRun()
- else:
- runResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=runResult,
- onpass="App re-ran for election",
- onfail="App failed to run for election" )
-
- main.step( "Leader did not change when old leader re-ran" )
- afterRun = main.ONOScli1.electionTestLeader()
- # verify leader didn't just change
- if afterRun == leaderList[ 0 ]:
- afterResult = main.TRUE
- else:
- afterResult = main.FALSE
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=afterResult,
- onpass="Old leader successfully re-ran for election",
- onfail="Something went wrong with Leadership election after " +
- "the old leader re-ran for election" )
-
- def CASE16( self, main ):
- """
- Install Distributed Primitives app
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # Variables for the distributed primitives tests
- global pCounterName
- global iCounterName
- global pCounterValue
- global iCounterValue
- global onosSet
- global onosSetName
- pCounterName = "TestON-Partitions"
- iCounterName = "TestON-inMemory"
- pCounterValue = 0
- iCounterValue = 0
- onosSet = set([])
- onosSetName = "TestON-set"
-
- description = "Install Primitives app"
- main.case( description )
- main.step( "Install Primitives app" )
- appName = "org.onosproject.distributedprimitives"
- appResults = CLIs[0].activateApp( appName )
- utilities.assert_equals( expect=main.TRUE,
- actual=appResults,
- onpass="Primitives app activated",
- onfail="Primitives app not activated" )
- time.sleep( 5 ) # To allow all nodes to activate
-
- def CASE17( self, main ):
- """
- Check for basic functionality with distributed primitives
- """
- import json
- # Make sure variables are defined/set
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert pCounterName, "pCounterName not defined"
- assert iCounterName, "iCounterName not defined"
- assert onosSetName, "onosSetName not defined"
- # NOTE: assert fails if value is 0/None/Empty/False
- try:
- pCounterValue
- except NameError:
- main.log.error( "pCounterValue not defined, setting to 0" )
- pCounterValue = 0
- try:
- iCounterValue
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
- try:
- onosSet
- except NameError:
- main.log.error( "onosSet not defined, setting to empty Set" )
- onosSet = set([])
- # Variables for the distributed primitives tests. These are local only
- addValue = "a"
- addAllValue = "a b c d e f"
- retainValue = "c d e f"
-
- description = "Check for basic functionality with distributed " +\
- "primitives"
- main.case( description )
- main.caseExplaination = "Test the methods of the distributed primitives (counters and sets) throught the cli"
- # DISTRIBUTED ATOMIC COUNTERS
- main.step( "Increment and get a default counter on each node" )
- pCounters = []
- threads = []
- addedPValues = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="counterIncrement-" + str( i ),
- args=[ pCounterName ] )
- pCounterValue += 1
- addedPValues.append( pCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- pCounters.append( t.result )
- # Check that counter incremented numController times
- pCounterResults = True
- for i in addedPValues:
- tmpResult = i in pCounters
- pCounterResults = pCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in partitioned "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=pCounterResults,
- onpass="Default counter incremented",
- onfail="Error incrementing default" +
- " counter" )
-
- main.step( "Increment and get an in memory counter on each node" )
- iCounters = []
- addedIValues = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="icounterIncrement-" + str( i ),
- args=[ iCounterName ],
- kwargs={ "inMemory": True } )
- iCounterValue += 1
- addedIValues.append( iCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- iCounters.append( t.result )
- # Check that counter incremented numController times
- iCounterResults = True
- for i in addedIValues:
- tmpResult = i in iCounters
- iCounterResults = iCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in the in-memory "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=iCounterResults,
- onpass="In memory counter incremented",
- onfail="Error incrementing in memory" +
- " counter" )
-
- main.step( "Check counters are consistant across nodes" )
- onosCounters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counters,
- name="counters-" + str( i ) )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- onosCounters.append( t.result )
- tmp = [ i == onosCounters[ 0 ] for i in onosCounters ]
- if all( tmp ):
- main.log.info( "Counters are consistent across all nodes" )
- consistentCounterResults = main.TRUE
- else:
- main.log.error( "Counters are not consistent across all nodes" )
- consistentCounterResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=consistentCounterResults,
- onpass="ONOS counters are consistent " +
- "across nodes",
- onfail="ONOS Counters are inconsistent " +
- "across nodes" )
-
- main.step( "Counters we added have the correct values" )
- correctResults = main.TRUE
- for i in range( numControllers ):
- current = json.loads( onosCounters[i] )
- pValue = None
- iValue = None
- try:
- for database in current:
- partitioned = database.get( 'partitionedDatabaseCounters' )
- if partitioned:
- for value in partitioned:
- if value.get( 'name' ) == pCounterName:
- pValue = value.get( 'value' )
- break
- inMemory = database.get( 'inMemoryDatabaseCounters' )
- if inMemory:
- for value in inMemory:
- if value.get( 'name' ) == iCounterName:
- iValue = value.get( 'value' )
- break
- except AttributeError, e:
- main.log.error( "ONOS" + str( i + 1 ) + " counters result " +
- "is not as expected" )
- correctResults = main.FALSE
- if pValue == pCounterValue:
- main.log.info( "Partitioned counter value is correct" )
- else:
- main.log.error( "Partitioned counter value is incorrect," +
- " expected value: " + str( pCounterValue )
- + " current value: " + str( pValue ) )
- correctResults = main.FALSE
- if iValue == iCounterValue:
- main.log.info( "In memory counter value is correct" )
- else:
- main.log.error( "In memory counter value is incorrect, " +
- "expected value: " + str( iCounterValue ) +
- " current value: " + str( iValue ) )
- correctResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=correctResults,
- onpass="Added counters are correct",
- onfail="Added counters are incorrect" )
- # DISTRIBUTED SETS
- main.step( "Distributed Set get" )
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
-
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=getResults,
- onpass="Set elements are correct",
- onfail="Set elements are incorrect" )
-
- main.step( "Distributed Set size" )
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
-
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- utilities.assert_equals( expect=main.TRUE,
- actual=sizeResults,
- onpass="Set sizes are correct",
- onfail="Set sizes are incorrect" )
-
- main.step( "Distributed Set add()" )
- onosSet.add( addValue )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAdd-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addResults = main.FALSE
- else:
- # unexpected result
- addResults = main.FALSE
- if addResults != main.TRUE:
- main.log.error( "Error executing set add" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addResults = addResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addResults,
- onpass="Set add correct",
- onfail="Set add was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set contains()" )
- containsResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContains-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsResponses.append( t.result )
-
- containsResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsResults,
- onpass="Set contains is functional",
- onfail="Set contains failed" )
-
- main.step( "Distributed Set containsAll()" )
- containsAllResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContainsAll-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addAllValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsAllResponses.append( t.result )
-
- containsAllResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsAllResults,
- onpass="Set containsAll is functional",
- onfail="Set containsAll failed" )
-
- main.step( "Distributed Set remove()" )
- onosSet.remove( addValue )
- removeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemove-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeResults = main.TRUE
- for i in range( numControllers ):
- if removeResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeResponses[ i ] == main.ERROR:
- # Error in execution
- removeResults = main.FALSE
- else:
- # unexpected result
- removeResults = main.FALSE
- if removeResults != main.TRUE:
- main.log.error( "Error executing set remove" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeResults = removeResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeResults,
- onpass="Set remove correct",
- onfail="Set remove was incorrect" )
-
- main.step( "Distributed Set removeAll()" )
- onosSet.difference_update( addAllValue.split() )
- removeAllResponses = []
- threads = []
- try:
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemoveAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeAllResponses.append( t.result )
- except Exception, e:
- main.log.exception(e)
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeAllResults = main.TRUE
- for i in range( numControllers ):
- if removeAllResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeAllResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeAllResponses[ i ] == main.ERROR:
- # Error in execution
- removeAllResults = main.FALSE
- else:
- # unexpected result
- removeAllResults = main.FALSE
- if removeAllResults != main.TRUE:
- main.log.error( "Error executing set removeAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeAllResults = removeAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeAllResults,
- onpass="Set removeAll correct",
- onfail="Set removeAll was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set clear()" )
- onosSet.clear()
- clearResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestClear-" + str( i ),
- args=[ onosSetName, " "], # Values doesn't matter
- kwargs={ "clear": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- clearResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- clearResults = main.TRUE
- for i in range( numControllers ):
- if clearResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif clearResponses[ i ] == main.FALSE:
- # Nothing set, probably fine
- pass
- elif clearResponses[ i ] == main.ERROR:
- # Error in execution
- clearResults = main.FALSE
- else:
- # unexpected result
- clearResults = main.FALSE
- if clearResults != main.TRUE:
- main.log.error( "Error executing set clear" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- clearResults = clearResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=clearResults,
- onpass="Set clear correct",
- onfail="Set clear was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set retain()" )
- onosSet.intersection_update( retainValue.split() )
- retainResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRetain-" + str( i ),
- args=[ onosSetName, retainValue ],
- kwargs={ "retain": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- retainResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- retainResults = main.TRUE
- for i in range( numControllers ):
- if retainResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif retainResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif retainResponses[ i ] == main.ERROR:
- # Error in execution
- retainResults = main.FALSE
- else:
- # unexpected result
- retainResults = main.FALSE
- if retainResults != main.TRUE:
- main.log.error( "Error executing set retain" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " +
- str( size ) + " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- retainResults = retainResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=retainResults,
- onpass="Set retain correct",
- onfail="Set retain was incorrect" )
-
diff --git a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.topo b/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.topo
deleted file mode 100644
index 9305025..0000000
--- a/TestON/tests/HATestMinorityRestart/HATestMinorityRestart.topo
+++ /dev/null
@@ -1,169 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
-
- <ONOScli4>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli4>
-
-
- <ONOScli5>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli5>
-
-
- <ONOScli6>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli6>
-
-
- <ONOScli7>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli7>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.30.12</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.30.13</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.128.30.14</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.128.30.15</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.128.30.16</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.128.30.17</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> none </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/HATestMinorityRestart/__init__.py b/TestON/tests/HATestMinorityRestart/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/HATestMinorityRestart/__init__.py
+++ /dev/null
diff --git a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.params b/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.params
deleted file mode 100644
index f82aba3..0000000
--- a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.params
+++ /dev/null
@@ -1,90 +0,0 @@
-<PARAMS>
-
-#List of test cases:
-#CASE1: Compile ONOS and push it to the test machines
-#CASE2: Assign mastership to controllers
-#CASE3: Assign intents
-#CASE4: Ping across added host intents
-#CASE5: Reading state of ONOS
-#CASE6: The Failure case. We will create IPTables rules here.
-#CASE7: Check state after control plane partition.
-#CASE8: Compare topo
-#CASE9: Link s3-s28 down
-#CASE10: Link s3-s28 up
-#CASE11: Switch down
-#CASE12: Switch up
-#CASE13: Clean up
-#CASE14: start election app on all onos nodes
-#CASE15: Check that Leadership Election is still functional
-#CASE16: Repair network partition
- #1,2,8,3,4,5,14,[6],8,7,4,15,9,8,4,10,8,4,11,8,4,12,8,4,13
- <testcases>1,2,5,14,[6],8,7,4,15,9,8,4,10,8,4,11,8,4,12,8,4,16,13</testcases>
- <ENV>
- <cellName>HA</cellName>
- </ENV>
- <Git> False </Git>
- <branch> master </branch>
- <num_controllers> 7 </num_controllers>
- <tcpdump> False </tcpdump>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
-
- <ip2>10.128.30.12</ip2>
- <port2>6633</port2>
-
- <ip3>10.128.30.13</ip3>
- <port3>6633</port3>
-
- <ip4>10.128.30.14</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.30.15</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.30.16</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.30.17</ip7>
- <port7>6633</port7>
- </CTRL>
- <TESTONUSER>admin</TESTONUSER>
- <TESTONIP>10.128.30.9</TESTONIP>
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
- <timers>
- <LinkDiscovery>.2</LinkDiscovery>
- <SwitchDiscovery>.2</SwitchDiscovery>
- </timers>
- <kill>
- <switch> s5 </switch>
- <dpid> 0000000000005000 </dpid>
- <links> h5 s2 s1 s6 </links>
- </kill>
- <MNtcpdump>
- <intf>eth0</intf>
- <port> </port>
- <folder>~/packet_captures/</folder>
- </MNtcpdump>
-</PARAMS>
diff --git a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.py b/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.py
deleted file mode 100644
index d2a2ec1..0000000
--- a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.py
+++ /dev/null
@@ -1,2012 +0,0 @@
-"""
-Description: This test is to determine how ONOS behaves in a control network
- partion. ONOS 1,2,3 will be split into a sub cluster and ONOS
- 4,5,6,7 will be in another sub-cluster.
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machines
-CASE2: Assign mastership to controllers
-CASE3: Assign intents
-CASE4: Ping across added host intents
-CASE5: Reading state of ONOS
-CASE6: The Failure case. We will create IPTables rules here.
-CASE7: Check state after control plane partition.
-CASE8: Compare topo
-CASE9: Link s3-s28 down
-CASE10: Link s3-s28 up
-CASE11: Switch down
-CASE12: Switch up
-CASE13: Clean up
-CASE14: start election app on all onos nodes
-CASE15: Check that Leadership Election is still functional
-CASE16: Repair network partition
-"""
-# FIXME: Add new comparison case for during the failure?
-class HATestNetworkPartition:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- cell <name>
- onos-verify-cell
- NOTE: temporary - onos-remove-raft-logs
- onos-uninstall
- start mininet
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- start cli sessions
- start tcpdump
- """
- main.log.report( "ONOS HA test: Network partition - initialization" )
- main.log.report( "This test will partition a 7 node cluster into " +
- "3 node and 4 node sub clusters by blocking " +
- "communication between nodes." )
- main.case( "Setting up test environment" )
- # TODO: save all the timers and output them for plotting
-
- # load some vairables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- gitBranch = main.params[ 'branch' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # set global variables
- global ONOS1Ip
- global ONOS1Port
- global ONOS2Ip
- global ONOS2Port
- global ONOS3Ip
- global ONOS3Port
- global ONOS4Ip
- global ONOS4Port
- global ONOS5Ip
- global ONOS5Port
- global ONOS6Ip
- global ONOS6Port
- global ONOS7Ip
- global ONOS7Port
- global numControllers
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- ONOS4Ip = main.params[ 'CTRL' ][ 'ip4' ]
- ONOS4Port = main.params[ 'CTRL' ][ 'port4' ]
- ONOS5Ip = main.params[ 'CTRL' ][ 'ip5' ]
- ONOS5Port = main.params[ 'CTRL' ][ 'port5' ]
- ONOS6Ip = main.params[ 'CTRL' ][ 'ip6' ]
- ONOS6Port = main.params[ 'CTRL' ][ 'port6' ]
- ONOS7Ip = main.params[ 'CTRL' ][ 'ip7' ]
- ONOS7Port = main.params[ 'CTRL' ][ 'port7' ]
- numControllers = int( main.params[ 'num_controllers' ] )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- # FIXME:this is short term fix
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
- main.ONOSbench.onosUninstall( ONOS2Ip )
- main.ONOSbench.onosUninstall( ONOS3Ip )
- main.ONOSbench.onosUninstall( ONOS4Ip )
- main.ONOSbench.onosUninstall( ONOS5Ip )
- main.ONOSbench.onosUninstall( ONOS6Ip )
- main.ONOSbench.onosUninstall( ONOS7Ip )
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Starting Mininet" )
- main.Mininet1.startNet( )
-
- main.step( "Compiling the latest version of ONOS" )
- if PULLCODE:
- main.step( "Git checkout and pull " + gitBranch )
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
-
- main.step( "Using mvn clean and install" )
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- main.ONOSbench.getVersion( report=True )
- # GRAPHS
- # NOTE: important params here:
- # job = name of Jenkins job
- # Plot Name = Plot-HA, only can be used if multiple plots
- # index = The number of the graph under plot name
- job = "HANetworkPartition"
- graphs = '<ac:structured-macro ac:name="html">\n'
- graphs += '<ac:plain-text-body><![CDATA[\n'
- graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
- '/plot/getPlot?index=0&width=500&height=300"' +\
- 'noborder="0" width="500" height="300" scrolling="yes" '+\
- 'seamless="seamless"></iframe>\n'
- graphs += ']]></ac:plain-text-body>\n'
- graphs += '</ac:structured-macro>\n'
- main.log.wiki(graphs)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS3Ip )
- onos4InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS4Ip )
- onos5InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS5Ip )
- onos6InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS6Ip )
- onos7InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS7Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult\
- and onos3InstallResult and onos4InstallResult\
- and onos5InstallResult and onos6InstallResult\
- and onos7InstallResult
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
- main.ONOSbench.onosStop( ONOS1Ip )
- main.ONOSbench.onosStart( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- if not onos2Isup:
- main.log.report( "ONOS2 didn't start!" )
- main.ONOSbench.onosStop( ONOS2Ip )
- main.ONOSbench.onosStart( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- if not onos3Isup:
- main.log.report( "ONOS3 didn't start!" )
- main.ONOSbench.onosStop( ONOS3Ip )
- main.ONOSbench.onosStart( ONOS3Ip )
- onos4Isup = main.ONOSbench.isup( ONOS4Ip )
- if not onos4Isup:
- main.log.report( "ONOS4 didn't start!" )
- main.ONOSbench.onosStop( ONOS4Ip )
- main.ONOSbench.onosStart( ONOS4Ip )
- onos5Isup = main.ONOSbench.isup( ONOS5Ip )
- if not onos5Isup:
- main.log.report( "ONOS5 didn't start!" )
- main.ONOSbench.onosStop( ONOS5Ip )
- main.ONOSbench.onosStart( ONOS5Ip )
- onos6Isup = main.ONOSbench.isup( ONOS6Ip )
- if not onos6Isup:
- main.log.report( "ONOS6 didn't start!" )
- main.ONOSbench.onosStop( ONOS6Ip )
- main.ONOSbench.onosStart( ONOS6Ip )
- onos7Isup = main.ONOSbench.isup( ONOS7Ip )
- if not onos7Isup:
- main.log.report( "ONOS7 didn't start!" )
- main.ONOSbench.onosStop( ONOS7Ip )
- main.ONOSbench.onosStart( ONOS7Ip )
- onosIsupResult = onos1Isup and onos2Isup and onos3Isup\
- and onos4Isup and onos5Isup and onos6Isup and onos7Isup
- if onosIsupResult == main.TRUE:
- break
-
- cliResult1 = main.ONOScli1.startOnosCli( ONOS1Ip )
- cliResult2 = main.ONOScli2.startOnosCli( ONOS2Ip )
- cliResult3 = main.ONOScli3.startOnosCli( ONOS3Ip )
- cliResult4 = main.ONOScli4.startOnosCli( ONOS4Ip )
- cliResult5 = main.ONOScli5.startOnosCli( ONOS5Ip )
- cliResult6 = main.ONOScli6.startOnosCli( ONOS6Ip )
- cliResult7 = main.ONOScli7.startOnosCli( ONOS7Ip )
- cliResults = cliResult1 and cliResult2 and cliResult3 and\
- cliResult4 and cliResult5 and cliResult6 and cliResult7
-
- if main.params[ 'tcpdump' ].lower() == "true":
- main.step( "Start Packet Capture MN" )
- main.Mininet2.startTcpdump(
- str( main.params[ 'MNtcpdump' ][ 'folder' ] ) + str( main.TEST )
- + "-MN.pcap",
- intf=main.params[ 'MNtcpdump' ][ 'intf' ],
- port=main.params[ 'MNtcpdump' ][ 'port' ] )
-
- case1Result = ( cleanInstallResult and packageResult and
- cellResult and verifyResult and onosInstallResult
- and onosIsupResult and cliResults )
-
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- if case1Result == main.FALSE:
- main.log.error( "Failed to start ONOS, stopping test" )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- """
- Assign mastership to controllers
- """
- import re
-
- main.log.report( "Assigning switches to controllers" )
- main.case( "Assigning Controllers" )
- main.step( "Assign switches to controllers" )
-
- for i in range( 1, 29 ):
- main.Mininet1.assignSwController(
- sw=str( i ),
- count=numControllers,
- ip1=ONOS1Ip, port1=ONOS1Port,
- ip2=ONOS2Ip, port2=ONOS2Port,
- ip3=ONOS3Ip, port3=ONOS3Port,
- ip4=ONOS4Ip, port4=ONOS4Port,
- ip5=ONOS5Ip, port5=ONOS5Port,
- ip6=ONOS6Ip, port6=ONOS6Port,
- ip7=ONOS7Ip, port7=ONOS7Port )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except:
- main.log.info( repr( response ) )
- if re.search( "tcp:" + ONOS1Ip, response )\
- and re.search( "tcp:" + ONOS2Ip, response )\
- and re.search( "tcp:" + ONOS3Ip, response )\
- and re.search( "tcp:" + ONOS4Ip, response )\
- and re.search( "tcp:" + ONOS5Ip, response )\
- and re.search( "tcp:" + ONOS6Ip, response )\
- and re.search( "tcp:" + ONOS7Ip, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- mastershipCheck = main.FALSE
- if mastershipCheck == main.TRUE:
- main.log.report( "Switch mastership assigned correctly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- # Manually assign mastership to the controller we want
- roleCall = main.TRUE
- roleCheck = main.TRUE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "1000" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS1Ip )
- # Check assignment
- if ONOS1Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "2800" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS1Ip )
- # Check assignment
- if ONOS1Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "2000" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS2Ip )
- # Check assignment
- if ONOS2Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "3000" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS2Ip )
- # Check assignment
- if ONOS2Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "5000" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS3Ip )
- # Check assignment
- if ONOS3Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "6000" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS3Ip )
- # Check assignment
- if ONOS3Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- # Assign switch
- deviceId = main.ONOScli1.getDevice( "3004" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS4Ip )
- # Check assignment
- if ONOS4Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- for i in range( 8, 18 ):
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS5Ip )
- # Check assignment
- if ONOS5Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- deviceId = main.ONOScli1.getDevice( "6007" ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS6Ip )
- # Check assignment
- if ONOS6Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- for i in range( 18, 28 ):
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- roleCall = roleCall and main.ONOScli1.deviceRole(
- deviceId,
- ONOS7Ip )
- # Check assignment
- if ONOS7Ip in main.ONOScli1.getRole( deviceId ).get( 'master' ):
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCall,
- onpass="Re-assigned switch mastership to designated controller",
- onfail="Something wrong with deviceRole calls" )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCheck,
- onpass="Switches were successfully reassigned to designated " +
- "controller",
- onfail="Switches were not successfully reassigned" )
- mastershipCheck = mastershipCheck and roleCall and roleCheck
- utilities.assert_equals( expect=main.TRUE, actual=mastershipCheck,
- onpass="Switch mastership correctly assigned",
- onfail="Error in (re)assigning switch" +
- " mastership" )
-
- def CASE3( self, main ):
- """
- Assign intents
- """
- import time
- import json
- main.log.report( "Adding host intents" )
- main.case( "Adding host Intents" )
-
- main.step( "Discovering Hosts( Via pingall for now )" )
- # FIXME: Once we have a host discovery mechanism, use that instead
-
- # install onos-app-fwd
- main.log.info( "Install reactive forwarding app" )
- appResults = CLIs[0].activateApp( "org.onosproject.fwd" )
- '''
- main.ONOScli1.featureInstall( "onos-app-fwd" )
- main.ONOScli2.featureInstall( "onos-app-fwd" )
- main.ONOScli3.featureInstall( "onos-app-fwd" )
- main.ONOScli4.featureInstall( "onos-app-fwd" )
- main.ONOScli5.featureInstall( "onos-app-fwd" )
- main.ONOScli6.featureInstall( "onos-app-fwd" )
- main.ONOScli7.featureInstall( "onos-app-fwd" )
- '''
-
- # REACTIVE FWD test
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=pingResult,
- onpass="Reactive Pingall test passed",
- onfail="Reactive Pingall failed, one or more ping pairs failed" )
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" % ( time2 - time1 ) )
-
- # uninstall onos-app-fwd
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and CLIs[0].deactivateApp( "org.onosproject.fwd" )
- '''
- main.ONOScli1.featureUninstall( "onos-app-fwd" )
- main.ONOScli2.featureUninstall( "onos-app-fwd" )
- main.ONOScli3.featureUninstall( "onos-app-fwd" )
- main.ONOScli4.featureUninstall( "onos-app-fwd" )
- main.ONOScli5.featureUninstall( "onos-app-fwd" )
- main.ONOScli6.featureUninstall( "onos-app-fwd" )
- main.ONOScli7.featureUninstall( "onos-app-fwd" )
- '''
- # timeout for fwd flows
- time.sleep( 10 )
-
- main.step( "Add host intents" )
- # TODO: move the host numbers to params
- # Maybe look at all the paths we ping?
- intentAddResult = True
- for i in range( 8, 18 ):
- main.log.info( "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: getHost can return None
- host1Dict = main.ONOScli1.getHost( host1 )
- host2Dict = main.ONOScli1.getHost( host2 )
- host1Id = None
- host2Id = None
- if host1Dict and host2Dict:
- host1Id = host1Dict.get( 'id', None )
- host2Id = host2Dict.get( 'id', None )
- if host1Id and host2Id:
- # distribute the intents across ONOS nodes
- nodeNum = ( i % 7 ) + 1
- node = getattr( main, ( 'ONOScli' + str( nodeNum ) ) )
- tmpResult = node.addHostIntent(
- host1Id,
- host2Id )
- else:
- main.log.error( "Error, getHost() failed" )
- main.log.warn( json.dumps( json.loads( main.ONOScli1.hosts() ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- tmpResult = main.FALSE
- intentAddResult = bool( pingResult and intentAddResult
- and tmpResult )
- # FIXME Check that intents were added?
- # TODO Use the new return from add host command and look at each
- # intent individually
- #
- #
- #
- #
- #
- #
- # End of for loop to add intents
- # Print the intent states
- intents = main.ONOScli1.intents( )
- intentStates = []
- for intent in json.loads( intents ): # Iter through intents of a node
- intentStates.append( intent.get( 'state', None ) )
- out = [ (i, intentStates.count( i ) ) for i in set( intentStates ) ]
- main.log.info( dict( out ) )
-
- utilities.assert_equals(
- expect=True,
- actual=intentAddResult,
- onpass="Pushed host intents to ONOS",
- onfail="Error in pushing host intents to ONOS" )
- # TODO Check if intents all exist in datastore
-
- def CASE4( self, main ):
- """
- Ping across added host intents
- """
- import json
- description = " Ping across added host intents"
- main.log.report( description )
- main.case( description )
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.report(
- "Intents have not been installed correctly, pings failed." )
- main.log.warn( "ONOS1 intents: " )
- main.log.warn( json.dumps( json.loads( main.ONOScli1.intents() ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- if PingResult == main.TRUE:
- main.log.report(
- "Intents have been installed correctly and verified by pings" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- def CASE5( self, main ):
- """
- Reading state of ONOS
- """
- import json
- # assumes that sts is already in you PYTHONPATH
- from sts.topology.teston_topology import TestONTopology
-
- main.log.report( "Setting up and gathering data for current state" )
- main.case( "Setting up and gathering data for current state" )
- # The general idea for this test case is to pull the state of
- # ( intents,flows, topology,... ) from each ONOS node
- # We can then compare them with eachother and also with past states
-
- main.step( "Get the Mastership of each switch from each controller" )
- global mastershipState
- mastershipState = []
-
- # Assert that each device has a master
- ONOS1MasterNotNull = main.ONOScli1.rolesNotNull()
- ONOS2MasterNotNull = main.ONOScli2.rolesNotNull()
- ONOS3MasterNotNull = main.ONOScli3.rolesNotNull()
- ONOS4MasterNotNull = main.ONOScli4.rolesNotNull()
- ONOS5MasterNotNull = main.ONOScli5.rolesNotNull()
- ONOS6MasterNotNull = main.ONOScli6.rolesNotNull()
- ONOS7MasterNotNull = main.ONOScli7.rolesNotNull()
- rolesNotNull = ONOS1MasterNotNull and ONOS2MasterNotNull and\
- ONOS3MasterNotNull and ONOS4MasterNotNull and\
- ONOS5MasterNotNull and ONOS6MasterNotNull and\
- ONOS7MasterNotNull
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- ONOS1Mastership = main.ONOScli1.roles()
- ONOS2Mastership = main.ONOScli2.roles()
- ONOS3Mastership = main.ONOScli3.roles()
- ONOS4Mastership = main.ONOScli4.roles()
- ONOS5Mastership = main.ONOScli5.roles()
- ONOS6Mastership = main.ONOScli6.roles()
- ONOS7Mastership = main.ONOScli7.roles()
- if "Error" in ONOS1Mastership or not ONOS1Mastership\
- or "Error" in ONOS2Mastership or not ONOS2Mastership\
- or "Error" in ONOS3Mastership or not ONOS3Mastership\
- or "Error" in ONOS4Mastership or not ONOS4Mastership\
- or "Error" in ONOS5Mastership or not ONOS5Mastership\
- or "Error" in ONOS6Mastership or not ONOS6Mastership\
- or "Error" in ONOS7Mastership or not ONOS7Mastership:
- main.log.report( "Error in getting ONOS roles" )
- for i in range( 1, numControllers + 1 ):
- mastership = eval( "ONOS" + str( i ) + "Mastership" )
- main.log.warn(
- "ONOS" + str( i ) + " mastership response: " +
- repr( mastership ) )
- consistentMastership = main.FALSE
- elif ONOS1Mastership == ONOS2Mastership\
- and ONOS1Mastership == ONOS3Mastership\
- and ONOS1Mastership == ONOS4Mastership\
- and ONOS1Mastership == ONOS5Mastership\
- and ONOS1Mastership == ONOS6Mastership\
- and ONOS1Mastership == ONOS7Mastership:
- mastershipState = ONOS1Mastership
- consistentMastership = main.TRUE
- main.log.report(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- for i in range( 1, numControllers + 1 ):
- mastership = eval( "ONOS" + str( i ) + "Mastership" )
- main.log.warn( "ONOS" + str( i ) + " roles: " +
- json.dumps( json.loads( mastership ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- consistentMastership = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- main.step( "Get the intents from each controller" )
- global intentState
- intentState = []
- ONOS1Intents = main.ONOScli1.intents( jsonFormat=True )
- ONOS2Intents = main.ONOScli2.intents( jsonFormat=True )
- ONOS3Intents = main.ONOScli3.intents( jsonFormat=True )
- ONOS4Intents = main.ONOScli4.intents( jsonFormat=True )
- ONOS5Intents = main.ONOScli5.intents( jsonFormat=True )
- ONOS6Intents = main.ONOScli6.intents( jsonFormat=True )
- ONOS7Intents = main.ONOScli7.intents( jsonFormat=True )
- intentCheck = main.FALSE
- if "Error" in ONOS1Intents or not ONOS1Intents\
- or "Error" in ONOS2Intents or not ONOS2Intents\
- or "Error" in ONOS3Intents or not ONOS3Intents\
- or "Error" in ONOS4Intents or not ONOS4Intents\
- or "Error" in ONOS5Intents or not ONOS5Intents\
- or "Error" in ONOS6Intents or not ONOS6Intents\
- or "Error" in ONOS7Intents or not ONOS7Intents:
- main.log.report( "Error in getting ONOS intents" )
- for i in range( 1, numControllers + 1 ):
- intents = eval( "ONOS" + str( i ) + "Intents" )
- main.log.warn(
- "ONOS" + str( i ) + " intents response: " +
- repr( intents ) )
- elif ONOS1Intents == ONOS2Intents\
- and ONOS1Intents == ONOS3Intents\
- and ONOS1Intents == ONOS4Intents\
- and ONOS1Intents == ONOS5Intents\
- and ONOS1Intents == ONOS6Intents\
- and ONOS1Intents == ONOS7Intents:
- intentState = ONOS1Intents
- intentCheck = main.TRUE
- main.log.report( "Intents are consistent across all ONOS nodes" )
- else:
- for i in range( 1, numControllers + 1 ):
- intents = eval( "ONOS" + str( i ) + "Intents" )
- main.log.warn( "ONOS" + str( i ) + " intents: " +
- json.dumps( json.loads( intents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=intentCheck,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
-
- main.step( "Get the flows from each controller" )
- global flowState
- flowState = []
- ONOS1Flows = main.ONOScli1.flows( jsonFormat=True )
- ONOS2Flows = main.ONOScli2.flows( jsonFormat=True )
- ONOS3Flows = main.ONOScli3.flows( jsonFormat=True )
- ONOS4Flows = main.ONOScli4.flows( jsonFormat=True )
- ONOS5Flows = main.ONOScli5.flows( jsonFormat=True )
- ONOS6Flows = main.ONOScli6.flows( jsonFormat=True )
- ONOS7Flows = main.ONOScli7.flows( jsonFormat=True )
- ONOS1FlowsJson = json.loads( ONOS1Flows )
- ONOS2FlowsJson = json.loads( ONOS2Flows )
- ONOS3FlowsJson = json.loads( ONOS3Flows )
- ONOS4FlowsJson = json.loads( ONOS4Flows )
- ONOS5FlowsJson = json.loads( ONOS5Flows )
- ONOS6FlowsJson = json.loads( ONOS6Flows )
- ONOS7FlowsJson = json.loads( ONOS7Flows )
- flowCheck = main.FALSE
- if "Error" in ONOS1Flows or not ONOS1Flows\
- or "Error" in ONOS2Flows or not ONOS2Flows\
- or "Error" in ONOS3Flows or not ONOS3Flows\
- or "Error" in ONOS4Flows or not ONOS4Flows\
- or "Error" in ONOS5Flows or not ONOS5Flows\
- or "Error" in ONOS6Flows or not ONOS6Flows\
- or "Error" in ONOS7Flows or not ONOS7Flows:
- main.log.report( "Error in getting ONOS intents" )
- for i in range( 1, numControllers + 1 ):
- flowsIter = eval( "ONOS" + str( i ) + "Flows" )
- main.log.warn( "ONOS" + str( i ) + " flows repsponse: " +
- flowsIter )
- elif len( ONOS1FlowsJson ) == len( ONOS2FlowsJson )\
- and len( ONOS1FlowsJson ) == len( ONOS3FlowsJson )\
- and len( ONOS1FlowsJson ) == len( ONOS4FlowsJson )\
- and len( ONOS1FlowsJson ) == len( ONOS5FlowsJson )\
- and len( ONOS1FlowsJson ) == len( ONOS6FlowsJson )\
- and len( ONOS1FlowsJson ) == len( ONOS7FlowsJson ):
- # TODO: Do a better check, maybe compare flows on switches?
- flowState = ONOS1Flows
- flowCheck = main.TRUE
- main.log.report( "Flow count is consistent across all ONOS nodes" )
- else:
- for i in range( 1, numControllers + 1 ):
- flowsJson = eval( "ONOS" + str( i ) + "FlowsJson" )
- main.log.warn( "ONOS" + str( i ) + " flows repsponse: " +
- json.dumps( flowsJson,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=flowCheck,
- onpass="The flow count is consistent across all ONOS nodes",
- onfail="ONOS nodes have different flow counts" )
-
- main.step( "Get the OF Table entries" )
- global flows
- flows = []
- for i in range( 1, 29 ):
- flows.append( main.Mininet2.getFlowTable( 1.3, "s" + str( i ) ) )
-
- # TODO: Compare switch flow tables with ONOS flow tables
-
- main.step( "Start continuous pings" )
- for i in range( 1, 11 ):
- source = main.params[ 'PING' ][ 'source' + str( i ) ]
- target = main.params[ 'PING' ][ 'target' + str( i ) ]
- main.Mininet2.pingLong(
- src=source,
- target=target,
- pingTime=500 )
- main.step( "Create TestONTopology object" )
- ctrls = []
- count = 1
- while True:
- temp = ()
- if ( 'ip' + str( count ) ) in main.params[ 'CTRL' ]:
- temp = temp + ( getattr( main, ( 'ONOS' + str( count ) ) ), )
- temp = temp + ( "ONOS" + str( count ), )
- temp = temp + ( main.params[ 'CTRL' ][ 'ip' + str( count ) ], )
- temp = temp + \
- ( eval( main.params[ 'CTRL' ][ 'port' + str( count ) ] ), )
- ctrls.append( temp )
- count = count + 1
- else:
- break
- MNTopo = TestONTopology(
- main.Mininet1,
- ctrls ) # can also add Intent API info for intent operations
-
- main.step( "Collecting topology information from ONOS" )
- # TODO Refactor to a loop? We want all similar calls together?
- # So get all "devices" as close together as possible
- devices = []
- print "ONOS1"
- devices.append( main.ONOScli1.devices() )
- print "ONOS2"
- devices.append( main.ONOScli2.devices() )
- print "ONOS3"
- devices.append( main.ONOScli3.devices() )
- print "ONOS4"
- devices.append( main.ONOScli4.devices() )
- print "ONOS5"
- devices.append( main.ONOScli5.devices() )
- print "ONOS6"
- devices.append( main.ONOScli6.devices() )
- print "ONOS7"
- devices.append( main.ONOScli7.devices() )
- hosts = []
- hosts.append( main.ONOScli1.hosts() )
- hosts.append( main.ONOScli2.hosts() )
- hosts.append( main.ONOScli3.hosts() )
- hosts.append( main.ONOScli4.hosts() )
- hosts.append( main.ONOScli5.hosts() )
- hosts.append( main.ONOScli6.hosts() )
- hosts.append( main.ONOScli7.hosts() )
- ports = []
- ports.append( main.ONOScli1.ports() )
- ports.append( main.ONOScli2.ports() )
- ports.append( main.ONOScli3.ports() )
- ports.append( main.ONOScli4.ports() )
- ports.append( main.ONOScli5.ports() )
- ports.append( main.ONOScli6.ports() )
- ports.append( main.ONOScli7.ports() )
- links = []
- links.append( main.ONOScli1.links() )
- links.append( main.ONOScli2.links() )
- links.append( main.ONOScli3.links() )
- links.append( main.ONOScli4.links() )
- links.append( main.ONOScli5.links() )
- links.append( main.ONOScli6.links() )
- links.append( main.ONOScli7.links() )
- clusters = []
- clusters.append( main.ONOScli1.clusters() )
- clusters.append( main.ONOScli2.clusters() )
- clusters.append( main.ONOScli3.clusters() )
- clusters.append( main.ONOScli4.clusters() )
- clusters.append( main.ONOScli5.clusters() )
- clusters.append( main.ONOScli6.clusters() )
- clusters.append( main.ONOScli7.clusters() )
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.report( "hosts from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.report( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- # Strongly connected clusters of devices
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.report( "clusters from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.report( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
- # there should always only be one cluster
- numClusters = len( json.loads( clusters[ 0 ] ) )
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " +
- str( numClusters ) +
- " SCCs" )
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- portsResults = main.TRUE
- linksResults = main.TRUE
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] or "Error" not in devices[ controller ]:
- currentDevicesResult = main.Mininet1.compareSwitches(
- MNTopo,
- json.loads(
- devices[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if ports[ controller ] or "Error" not in ports[ controller ]:
- currentPortsResult = main.Mininet1.comparePorts(
- MNTopo,
- json.loads(
- ports[ controller ] ) )
- else:
- currentPortsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentPortsResult,
- onpass="ONOS" + controllerStr +
- " ports view is correct",
- onfail="ONOS" + controllerStr +
- " ports view is incorrect" )
-
- if links[ controller ] or "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- MNTopo,
- json.loads(
- links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- devicesResults = devicesResults and currentDevicesResult
- portsResults = portsResults and currentPortsResult
- linksResults = linksResults and currentLinksResult
-
- topoResult = devicesResults and portsResults and linksResults\
- and consistentHostsResult and consistentClustersResult
- utilities.assert_equals( expect=main.TRUE, actual=topoResult,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- finalAssert = main.TRUE
- finalAssert = finalAssert and topoResult and flowCheck \
- and intentCheck and consistentMastership and rolesNotNull
- utilities.assert_equals( expect=main.TRUE, actual=finalAssert,
- onpass="State check successful",
- onfail="State check NOT successful" )
-
- def CASE6( self, main ):
- """
- The Failure case. We will create IPTables rules here.
- """
- import time
- main.log.report( "Wait 30 seconds instead of inducing a failure" )
- time.sleep( 30 )
-
- # 1 blocks 4,5,6,7, mn
- # 2 blocks 4,5,6,7, mn
- # 3 blocks 4,5,6,7, mn
- # 4 block 1,2,3
- # 5 blocks 1,2,3
- # 6 blocks 1,2,3
- # 7 blocks 1,2,3
-
- # TODO: use new log command
- logcmd = "log:log \" About to partition the ONOS nodes\""
- main.ONOScli1.handle.sendline( logcmd )
- main.ONOScli1.handle.expect( "onos>" )
- print main.ONOScli1.handle.before
- main.ONOScli2.handle.sendline( logcmd )
- main.ONOScli2.handle.expect( "onos>" )
- print main.ONOScli2.handle.before
- main.ONOScli3.handle.sendline( logcmd )
- main.ONOScli3.handle.expect( "onos>" )
- print main.ONOScli3.handle.before
- main.ONOScli4.handle.sendline( logcmd )
- main.ONOScli4.handle.expect( "onos>" )
- print main.ONOScli4.handle.before
- main.ONOScli5.handle.sendline( logcmd )
- main.ONOScli5.handle.expect( "onos>" )
- print main.ONOScli5.handle.before
- main.ONOScli6.handle.sendline( logcmd )
- main.ONOScli6.handle.expect( "onos>" )
- print main.ONOScli6.handle.before
- main.ONOScli7.handle.sendline( logcmd )
- main.ONOScli7.handle.expect( "onos>" )
- print main.ONOScli7.handle.before
-
- nodes = []
- #create list of ONOS components
- for controller in range( 1, numControllers + 1 ):
- # loop through ONOS handlers
- node = getattr( main, ( 'ONOS' + str( controller ) ) )
- nodes.append( node )
- for node in nodes:
- # if node is in first half (rounded down )
- # ( 0 through 2 ) < ( 3.5 - 1)
- if nodes.index( node ) < ( numControllers / 2.0 - 1 ):
- # blocked nodes are the last half ( rounded up )
- # // is forced integer division
- for blockNode in nodes[ (numControllers // 2 + 1) * -1: ]:
- # block all traffic between these ONOS nodes
- # NOTE: ONOS 1 and 2 don't support state tracking
- node.setIpTables( blockNode.ip_address, states=False )
- node.setIpTables( blockNode.ip_address,
- direction="OUTPUT" , states=False )
- # block traffic between smaller subcluster and Mininet
- # TODO make OF controller port confgigurable
- # FIXME Remove this once ONOS can deal with the conflicting
- # device mastership
- node.setIpTables( main.Mininet1.ip_address, 6633,
- packet_type="tcp", states=False )
- else: # the larger subcluster
- # blocked nodes are the first half
- for blockNode in nodes[ :(numControllers // 2 ) ]:
- # block all traffic between these ONOS nodes
- node.setIpTables( blockNode.ip_address )
- node.setIpTables( blockNode.ip_address,
- direction="OUTPUT" )
- #FIXME update this
- utilities.assert_equals(
- expect=main.TRUE,
- actual=main.TRUE,
- onpass="Sleeping 30 seconds",
- onfail="Something is terribly wrong with my math" )
- main.ONOScli1.handle.sendline( "devices -j" )
- main.ONOScli1.handle.expect( ["onos>", "\$"] )
- print main.ONOScli1.handle.before
- main.ONOScli2.handle.sendline( "devices -j" )
- main.ONOScli2.handle.expect( ["onos>", "\$"] )
- print main.ONOScli2.handle.before
- main.ONOScli3.handle.sendline( "devices -j" )
- main.ONOScli3.handle.expect( ["onos>", "\$"] )
- print main.ONOScli3.handle.before
- main.ONOScli4.handle.sendline( "devices -j" )
- main.ONOScli4.handle.expect( ["onos>", "\$"] )
- print main.ONOScli4.handle.before
- main.ONOScli5.handle.sendline( "devices -j" )
- main.ONOScli5.handle.expect( ["onos>", "\$"] )
- print main.ONOScli5.handle.before
- main.ONOScli6.handle.sendline( "devices -j" )
- main.ONOScli6.handle.expect( ["onos>", "\$"] )
- print main.ONOScli6.handle.before
- main.ONOScli7.handle.sendline( "devices -j" )
- main.ONOScli7.handle.expect( ["onos>", "\$"] )
- print main.ONOScli7.handle.before
- time.sleep(100000)
-
-
- def CASE7( self, main ):
- """
- Check state after ONOS failure
- """
- import json
- main.case( "Running ONOS Constant State Tests" )
-
- # Assert that each device has a master
- ONOS1MasterNotNull = main.ONOScli1.rolesNotNull()
- ONOS2MasterNotNull = main.ONOScli2.rolesNotNull()
- ONOS3MasterNotNull = main.ONOScli3.rolesNotNull()
- ONOS4MasterNotNull = main.ONOScli4.rolesNotNull()
- ONOS5MasterNotNull = main.ONOScli5.rolesNotNull()
- ONOS6MasterNotNull = main.ONOScli6.rolesNotNull()
- ONOS7MasterNotNull = main.ONOScli7.rolesNotNull()
- rolesNotNull = ONOS1MasterNotNull and ONOS2MasterNotNull and\
- ONOS3MasterNotNull and ONOS4MasterNotNull and\
- ONOS5MasterNotNull and ONOS6MasterNotNull and\
- ONOS7MasterNotNull
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Check if switch roles are consistent across all nodes" )
- ONOS1Mastership = main.ONOScli1.roles()
- ONOS2Mastership = main.ONOScli2.roles()
- ONOS3Mastership = main.ONOScli3.roles()
- ONOS4Mastership = main.ONOScli4.roles()
- ONOS5Mastership = main.ONOScli5.roles()
- ONOS6Mastership = main.ONOScli6.roles()
- ONOS7Mastership = main.ONOScli7.roles()
- if "Error" in ONOS1Mastership or not ONOS1Mastership\
- or "Error" in ONOS2Mastership or not ONOS2Mastership\
- or "Error" in ONOS3Mastership or not ONOS3Mastership\
- or "Error" in ONOS4Mastership or not ONOS4Mastership\
- or "Error" in ONOS5Mastership or not ONOS5Mastership\
- or "Error" in ONOS6Mastership or not ONOS6Mastership\
- or "Error" in ONOS7Mastership or not ONOS7Mastership:
- main.log.error( "Error in getting ONOS mastership" )
- main.log.warn( "ONOS1 mastership response: " +
- repr( ONOS1Mastership ) )
- main.log.warn( "ONOS2 mastership response: " +
- repr( ONOS2Mastership ) )
- main.log.warn( "ONOS3 mastership response: " +
- repr( ONOS3Mastership ) )
- main.log.warn( "ONOS4 mastership response: " +
- repr( ONOS4Mastership ) )
- main.log.warn( "ONOS5 mastership response: " +
- repr( ONOS5Mastership ) )
- main.log.warn( "ONOS6 mastership response: " +
- repr( ONOS6Mastership ) )
- main.log.warn( "ONOS7 mastership response: " +
- repr( ONOS7Mastership ) )
- consistentMastership = main.FALSE
- elif ONOS1Mastership == ONOS2Mastership\
- and ONOS1Mastership == ONOS3Mastership\
- and ONOS1Mastership == ONOS4Mastership\
- and ONOS1Mastership == ONOS5Mastership\
- and ONOS1Mastership == ONOS6Mastership\
- and ONOS1Mastership == ONOS7Mastership:
- consistentMastership = main.TRUE
- main.log.report(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- for i in range( 1, numControllers + 1 ):
- mastership = eval( "ONOS" + str( i ) + "Mastership" )
- main.log.warn( "ONOS" + str( i ) + " roles: " +
- json.dumps( json.loads( mastership ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- consistentMastership = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- description2 = "Compare switch roles from before failure"
- main.step( description2 )
-
- currentJson = json.loads( ONOS1Mastership )
- oldJson = json.loads( mastershipState )
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- switchDPID = str(
- main.Mininet1.getSwitchDPID( switch="s" + str( i ) ) )
-
- current = [ switch[ 'master' ] for switch in currentJson
- if switchDPID in switch[ 'id' ] ]
- old = [ switch[ 'master' ] for switch in oldJson
- if switchDPID in switch[ 'id' ] ]
- if current == old:
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.warn( "Mastership of switch %s changed" % switchDPID )
- mastershipCheck = main.FALSE
- if mastershipCheck == main.TRUE:
- main.log.report( "Mastership of Switches was not changed" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Mastership of Switches was not changed",
- onfail="Mastership of some switches changed" )
- mastershipCheck = mastershipCheck and consistentMastership
-
- main.step( "Get the intents and compare across all nodes" )
- ONOS1Intents = main.ONOScli1.intents( jsonFormat=True )
- ONOS2Intents = main.ONOScli2.intents( jsonFormat=True )
- ONOS3Intents = main.ONOScli3.intents( jsonFormat=True )
- ONOS4Intents = main.ONOScli4.intents( jsonFormat=True )
- ONOS5Intents = main.ONOScli5.intents( jsonFormat=True )
- ONOS6Intents = main.ONOScli6.intents( jsonFormat=True )
- ONOS7Intents = main.ONOScli7.intents( jsonFormat=True )
- intentCheck = main.FALSE
- if "Error" in ONOS1Intents or not ONOS1Intents\
- or "Error" in ONOS2Intents or not ONOS2Intents\
- or "Error" in ONOS3Intents or not ONOS3Intents\
- or "Error" in ONOS4Intents or not ONOS4Intents\
- or "Error" in ONOS5Intents or not ONOS5Intents\
- or "Error" in ONOS6Intents or not ONOS6Intents\
- or "Error" in ONOS7Intents or not ONOS7Intents:
- main.log.report( "Error in getting ONOS intents" )
- main.log.warn( "ONOS1 intents response: " + repr( ONOS1Intents ) )
- main.log.warn( "ONOS2 intents response: " + repr( ONOS2Intents ) )
- main.log.warn( "ONOS3 intents response: " + repr( ONOS3Intents ) )
- main.log.warn( "ONOS4 intents response: " + repr( ONOS4Intents ) )
- main.log.warn( "ONOS5 intents response: " + repr( ONOS5Intents ) )
- main.log.warn( "ONOS6 intents response: " + repr( ONOS6Intents ) )
- main.log.warn( "ONOS7 intents response: " + repr( ONOS7Intents ) )
- elif ONOS1Intents == ONOS2Intents\
- and ONOS1Intents == ONOS3Intents\
- and ONOS1Intents == ONOS4Intents\
- and ONOS1Intents == ONOS5Intents\
- and ONOS1Intents == ONOS6Intents\
- and ONOS1Intents == ONOS7Intents:
- intentCheck = main.TRUE
- main.log.report( "Intents are consistent across all ONOS nodes" )
- else:
- for i in range( 1, numControllers + 1 ):
- intents = eval( "ONOS" + str( i ) + "Intents" )
- main.log.warn( "ONOS" + str( i ) + " intents: " +
- json.dumps( json.loads( ONOS1Intents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=intentCheck,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
- # Print the intent states
- intents = []
- intents.append( ONOS1Intents )
- intents.append( ONOS2Intents )
- intents.append( ONOS3Intents )
- intents.append( ONOS4Intents )
- intents.append( ONOS5Intents )
- intents.append( ONOS6Intents )
- intents.append( ONOS7Intents )
- intentStates = []
- for node in intents: # Iter through ONOS nodes
- nodeStates = []
- for intent in json.loads( node ): # Iter through intents of a node
- nodeStates.append( intent[ 'state' ] )
- intentStates.append( nodeStates )
- out = [ (i, nodeStates.count( i ) ) for i in set( nodeStates ) ]
- main.log.info( dict( out ) )
- # NOTE: Hazelcast has no durability, so intents are lost across system
- # restarts
- main.step( "Compare current intents with intents before the failure" )
- # NOTE: this requires case 5 to pass for intentState to be set.
- # maybe we should stop the test if that fails?
- sameIntents = main.TRUE
- if intentState and intentState == ONOS1Intents:
- sameIntents = main.TRUE
- main.log.report( "Intents are consistent with before failure" )
- # TODO: possibly the states have changed? we may need to figure out
- # what the aceptable states are
- else:
- try:
- main.log.warn( "ONOS1 intents: " )
- print json.dumps( json.loads( ONOS1Intents ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) )
- except:
- pass
- sameIntents = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameIntents,
- onpass="Intents are consistent with before failure",
- onfail="The Intents changed during failure" )
- intentCheck = intentCheck and sameIntents
-
- main.step( "Get the OF Table entries and compare to before " +
- "component failure" )
- FlowTables = main.TRUE
- flows2 = []
- for i in range( 28 ):
- main.log.info( "Checking flow table on s" + str( i + 1 ) )
- tmpFlows = main.Mininet2.getFlowTable( 1.3, "s" + str( i + 1 ) )
- flows2.append( tmpFlows )
- tempResult = main.Mininet2.flowComp(
- flow1=flows[ i ],
- flow2=tmpFlows )
- FlowTables = FlowTables and tempResult
- if FlowTables == main.FALSE:
- main.log.info( "Differences in flow table for switch: s" +
- str( i + 1 ) )
- if FlowTables == main.TRUE:
- main.log.report( "No changes were found in the flow tables" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=FlowTables,
- onpass="No changes were found in the flow tables",
- onfail="Changes were found in the flow tables" )
-
- main.step( "Check the continuous pings to ensure that no packets " +
- "were dropped during component failure" )
- # FIXME: This check is always failing. Investigate cause
- # NOTE: this may be something to do with file permsissions
- # or slight change in format
- main.Mininet2.pingKill(
- main.params[ 'TESTONUSER' ],
- main.params[ 'TESTONIP' ] )
- LossInPings = main.FALSE
- # NOTE: checkForLoss returns main.FALSE with 0% packet loss
- for i in range( 8, 18 ):
- main.log.info(
- "Checking for a loss in pings along flow from s" +
- str( i ) )
- LossInPings = main.Mininet2.checkForLoss(
- "/tmp/ping.h" +
- str( i ) ) or LossInPings
- if LossInPings == main.TRUE:
- main.log.info( "Loss in ping detected" )
- elif LossInPings == main.ERROR:
- main.log.info( "There are multiple mininet process running" )
- elif LossInPings == main.FALSE:
- main.log.info( "No Loss in the pings" )
- main.log.report( "No loss of dataplane connectivity" )
- utilities.assert_equals(
- expect=main.FALSE,
- actual=LossInPings,
- onpass="No Loss of connectivity",
- onfail="Loss of dataplane connectivity detected" )
-
- # Test of LeadershipElection
- # FIXME Update this for network partition case
- # NOTE: this only works for the sanity test. In case of failures,
- # leader will likely change
- leader = ONOS1Ip
- leaderResult = main.TRUE
- for controller in range( 1, numControllers + 1 ):
- # loop through ONOScli handlers
- node = getattr( main, ( 'ONOScli' + str( controller ) ) )
- leaderN = node.electionTestLeader()
- # verify leader is ONOS1
- if leaderN == leader:
- # all is well
- # NOTE: In failure scenario, this could be a new node, maybe
- # check != ONOS1
- pass
- elif leaderN == main.FALSE:
- # error in response
- main.log.report( "Something is wrong with " +
- "electionTestLeader function," +
- " check the error logs" )
- leaderResult = main.FALSE
- elif leader != leaderN:
- leaderResult = main.FALSE
- main.log.report( "ONOS" + str( controller ) + " sees " +
- str( leaderN ) +
- " as the leader of the election app. " +
- "Leader should be " + str( leader ) )
- if leaderResult:
- main.log.report( "Leadership election tests passed( consistent " +
- "view of leader across listeners and a new " +
- "leader was re-elected if applicable )" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- result = mastershipCheck and intentCheck and FlowTables and\
- ( not LossInPings ) and rolesNotNull and leaderResult
- result = int( result )
- if result == main.TRUE:
- main.log.report( "Constant State Tests Passed" )
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Constant State Tests Passed",
- onfail="Constant state tests failed" )
-
- def CASE8( self, main ):
- """
- Compare topo
- """
- import sys
- # FIXME add this path to params
- sys.path.append( "/home/admin/sts" )
- # assumes that sts is already in you PYTHONPATH
- from sts.topology.teston_topology import TestONTopology
- import json
- import time
-
- description = "Compare ONOS Topology view to Mininet topology"
- main.case( description )
- main.log.report( description )
- main.step( "Create TestONTopology object" )
- ctrls = []
- count = 1
- while True:
- temp = ()
- if ( 'ip' + str( count ) ) in main.params[ 'CTRL' ]:
- temp = temp + ( getattr( main, ( 'ONOS' + str( count ) ) ), )
- temp = temp + ( "ONOS" + str( count ), )
- temp = temp + ( main.params[ 'CTRL' ][ 'ip' + str( count ) ], )
- temp = temp + \
- ( eval( main.params[ 'CTRL' ][ 'port' + str( count ) ] ), )
- ctrls.append( temp )
- count = count + 1
- else:
- break
- MNTopo = TestONTopology(
- main.Mininet1,
- ctrls ) # can also add Intent API info for intent operations
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- portsResults = main.TRUE
- linksResults = main.TRUE
- topoResult = main.FALSE
- elapsed = 0
- count = 0
- main.step( "Collecting topology information from ONOS" )
- startTime = time.time()
- # Give time for Gossip to work
- while topoResult == main.FALSE and elapsed < 60:
- count = count + 1
- if count > 1:
- # TODO: Depricate STS usage
- MNTopo = TestONTopology(
- main.Mininet1,
- ctrls )
- cliStart = time.time()
- devices = []
- devices.append( main.ONOScli1.devices() )
- devices.append( main.ONOScli2.devices() )
- devices.append( main.ONOScli3.devices() )
- devices.append( main.ONOScli4.devices() )
- devices.append( main.ONOScli5.devices() )
- devices.append( main.ONOScli6.devices() )
- devices.append( main.ONOScli7.devices() )
- hosts = []
- hosts.append( json.loads( main.ONOScli1.hosts() ) )
- hosts.append( json.loads( main.ONOScli2.hosts() ) )
- hosts.append( json.loads( main.ONOScli3.hosts() ) )
- hosts.append( json.loads( main.ONOScli4.hosts() ) )
- hosts.append( json.loads( main.ONOScli5.hosts() ) )
- hosts.append( json.loads( main.ONOScli6.hosts() ) )
- hosts.append( json.loads( main.ONOScli7.hosts() ) )
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host[ 'ipAddresses' ] == []:
- main.log.error(
- "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ports = []
- ports.append( main.ONOScli1.ports() )
- ports.append( main.ONOScli2.ports() )
- ports.append( main.ONOScli3.ports() )
- ports.append( main.ONOScli4.ports() )
- ports.append( main.ONOScli5.ports() )
- ports.append( main.ONOScli6.ports() )
- ports.append( main.ONOScli7.ports() )
- links = []
- links.append( main.ONOScli1.links() )
- links.append( main.ONOScli2.links() )
- links.append( main.ONOScli3.links() )
- links.append( main.ONOScli4.links() )
- links.append( main.ONOScli5.links() )
- links.append( main.ONOScli6.links() )
- links.append( main.ONOScli7.links() )
- clusters = []
- clusters.append( main.ONOScli1.clusters() )
- clusters.append( main.ONOScli2.clusters() )
- clusters.append( main.ONOScli3.clusters() )
- clusters.append( main.ONOScli4.clusters() )
- clusters.append( main.ONOScli5.clusters() )
- clusters.append( main.ONOScli6.clusters() )
- clusters.append( main.ONOScli7.clusters() )
-
- elapsed = time.time() - startTime
- cliTime = time.time() - cliStart
- print "CLI time: " + str( cliTime )
-
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] or "Error" not in devices[
- controller ]:
- currentDevicesResult = main.Mininet1.compareSwitches(
- MNTopo,
- json.loads(
- devices[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if ports[ controller ] or "Error" not in ports[ controller ]:
- currentPortsResult = main.Mininet1.comparePorts(
- MNTopo,
- json.loads(
- ports[ controller ] ) )
- else:
- currentPortsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentPortsResult,
- onpass="ONOS" + controllerStr +
- " ports view is correct",
- onfail="ONOS" + controllerStr +
- " ports view is incorrect" )
-
- if links[ controller ] or "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- MNTopo,
- json.loads(
- links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
- devicesResults = devicesResults and currentDevicesResult
- portsResults = portsResults and currentPortsResult
- linksResults = linksResults and currentLinksResult
-
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.report( "hosts from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.report( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- # Strongly connected clusters of devices
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.report( "clusters from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.report( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
- # there should always only be one cluster
- numClusters = len( json.loads( clusters[ 0 ] ) )
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " +
- str( numClusters ) +
- " SCCs" )
-
- topoResult = ( devicesResults and portsResults and linksResults
- and consistentHostsResult
- and consistentClustersResult )
-
- topoResult = topoResult and int( count <= 2 )
- note = "note it takes about " + str( int( cliTime ) ) + \
- " seconds for the test to make all the cli calls to fetch " +\
- "the topology from each ONOS instance"
- main.log.info(
- "Very crass estimate for topology discovery/convergence( " +
- str( note ) + " ): " + str( elapsed ) + " seconds, " +
- str( count ) + " tries" )
- utilities.assert_equals( expect=main.TRUE, actual=topoResult,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
- if topoResult == main.TRUE:
- main.log.report( "ONOS topology view matches Mininet topology" )
-
- def CASE9( self, main ):
- """
- Link s3-s28 down
- """
- import time
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Turn off a link to ensure that Link Discovery " +\
- "is working properly"
- main.log.report( description )
- main.case( description )
-
- main.step( "Kill Link between s3 and s28" )
- LinkDown = main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- main.log.info(
- "Waiting " +
- str( linkSleep ) +
- " seconds for link down to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkDown,
- onpass="Link down succesful",
- onfail="Failed to bring link down" )
- # TODO do some sort of check here
-
- def CASE10( self, main ):
- """
- Link s3-s28 up
- """
- import time
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Restore a link to ensure that Link Discovery is " + \
- "working properly"
- main.log.report( description )
- main.case( description )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- main.log.info(
- "Waiting " +
- str( linkSleep ) +
- " seconds for link up to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkUp,
- onpass="Link up succesful",
- onfail="Failed to bring link up" )
- # TODO do some sort of check here
-
- def CASE11( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.log.report( description )
- main.case( description )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
-
- # TODO: Make this switch parameterizable
- main.step( "Kill " + switch )
- main.log.report( "Deleting " + switch )
- main.Mininet1.delSwitch( switch )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ] is False:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Kill switch succesful",
- onfail="Failed to kill switch?" )
-
- def CASE12( self, main ):
- """
- Switch Up
- """
- # NOTE: You should probably run a topology check after this
- import time
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
- links = main.params[ 'kill' ][ 'links' ].split()
- description = "Adding a switch to ensure it is discovered correctly"
- main.log.report( description )
- main.case( description )
-
- main.step( "Add back " + switch )
- main.log.report( "Adding back " + switch )
- main.Mininet1.addSwitch( switch, dpid=switchDPID )
- for peer in links:
- main.Mininet1.addLink( switch, peer )
- main.Mininet1.assignSwController(
- sw=switch.split( 's' )[ 1 ],
- count=numControllers,
- ip1=ONOS1Ip,
- port1=ONOS1Port,
- ip2=ONOS2Ip,
- port2=ONOS2Port,
- ip3=ONOS3Ip,
- port3=ONOS3Port,
- ip4=ONOS4Ip,
- port4=ONOS4Port,
- ip5=ONOS5Ip,
- port5=ONOS5Port,
- ip6=ONOS6Ip,
- port6=ONOS6Port,
- ip7=ONOS7Ip,
- port7=ONOS7Port )
- main.log.info(
- "Waiting " +
- str( switchSleep ) +
- " seconds for switch up to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ]:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="add switch succesful",
- onfail="Failed to add switch?" )
-
- def CASE13( self, main ):
- """
- Clean up
- """
- import os
- import time
- # TODO: make use of this elsewhere
- ips = []
- ips.append( ONOS1Ip )
- ips.append( ONOS2Ip )
- ips.append( ONOS3Ip )
- ips.append( ONOS4Ip )
- ips.append( ONOS5Ip )
- ips.append( ONOS6Ip )
- ips.append( ONOS7Ip )
-
- # printing colors to terminal
- colors = {}
- colors[ 'cyan' ] = '\033[96m'
- colors[ 'purple' ] = '\033[95m'
- colors[ 'blue' ] = '\033[94m'
- colors[ 'green' ] = '\033[92m'
- colors[ 'yellow' ] = '\033[93m'
- colors[ 'red' ] = '\033[91m'
- colors[ 'end' ] = '\033[0m'
- description = "Test Cleanup"
- main.log.report( description )
- main.case( description )
- main.step( "Killing tcpdumps" )
- main.Mininet2.stopTcpdump()
-
- main.step( "Checking ONOS Logs for errors" )
- for i in range( 7 ):
- print colors[ 'purple' ] + "Checking logs for errors on " + \
- "ONOS" + str( i + 1 ) + ":" + colors[ 'end' ]
- print main.ONOSbench.checkLogs( ips[ i ] )
-
- main.step( "Copying MN pcap and ONOS log files to test station" )
- testname = main.TEST
- teststationUser = main.params[ 'TESTONUSER' ]
- teststationIP = main.params[ 'TESTONIP' ]
- # NOTE: MN Pcap file is being saved to ~/packet_captures
- # scp this file as MN and TestON aren't necessarily the same vm
- # FIXME: scp
- # mn files
- # TODO: Load these from params
- # NOTE: must end in /
- logFolder = "/opt/onos/log/"
- logFiles = [ "karaf.log", "karaf.log.1" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for i in range( 7 ):
- main.ONOSbench.handle.sendline( "scp sdn@" + ips[ i ] + ":" +
- logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-ONOS" + str( i + 1 ) + "-" +
- f )
- # std*.log's
- # NOTE: must end in /
- logFolder = "/opt/onos/var/"
- logFiles = [ "stderr.log", "stdout.log" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for i in range( 7 ):
- main.ONOSbench.handle.sendline( "scp sdn@" + ips[ i ] + ":" +
- logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-ONOS" + str( i + 1 ) + "-" +
- f )
- # sleep so scp can finish
- time.sleep( 10 )
- main.step( "Packing and rotating pcap archives" )
- os.system( "~/TestON/dependencies/rotate.sh " + str( testname ) )
-
- # TODO: actually check something here
- utilities.assert_equals( expect=main.TRUE, actual=main.TRUE,
- onpass="Test cleanup successful",
- onfail="Test cleanup NOT successful" )
-
- def CASE14( self, main ):
- """
- start election app on all onos nodes
- """
- leaderResult = main.TRUE
- # install app on onos 1
- main.log.info( "Install leadership election app" )
- main.ONOScli1.featureInstall( "onos-app-election" )
- # wait for election
- # check for leader
- leader = main.ONOScli1.electionTestLeader()
- # verify leader is ONOS1
- if leader == ONOS1Ip:
- # all is well
- pass
- elif leader is None:
- # No leader elected
- main.log.report( "No leader was elected" )
- leaderResult = main.FALSE
- elif leader == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.report( "Something is wrong with electionTestLeader" +
- " function, check the error logs" )
- leaderResult = main.FALSE
- else:
- # error in response
- main.log.report(
- "Unexpected response from electionTestLeader function:'" +
- str( leader ) +
- "'" )
- leaderResult = main.FALSE
-
- # install on other nodes and check for leader.
- # Should be onos1 and each app should show the same leader
- for controller in range( 2, numControllers + 1 ):
- # loop through ONOScli handlers
- node = getattr( main, ( 'ONOScli' + str( controller ) ) )
- node.featureInstall( "onos-app-election" )
- leaderN = node.electionTestLeader()
- # verify leader is ONOS1
- if leaderN == ONOS1Ip:
- # all is well
- pass
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.report( "Something is wrong with " +
- "electionTestLeader function, check the" +
- " error logs" )
- leaderResult = main.FALSE
- elif leader != leaderN:
- leaderResult = main.FALSE
- main.log.report( "ONOS" + str( controller ) + " sees " +
- str( leaderN ) +
- " as the leader of the election app. Leader" +
- " should be " +
- str( leader ) )
- if leaderResult:
- main.log.report( "Leadership election tests passed( consistent " +
- "view of leader across listeners and a leader " +
- "was elected )" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- def CASE15( self, main ):
- """
- Check that Leadership Election is still functional
- """
- leaderResult = main.TRUE
- description = "Check that Leadership Election is still functional"
- main.log.report( description )
- main.case( description )
- main.step( "Find current leader and withdraw" )
- leader = main.ONOScli1.electionTestLeader()
- withdrawResult = main.FALSE
- if leader == ONOS1Ip:
- oldLeader = getattr( main, "ONOScli1" )
- elif leader == ONOS2Ip:
- oldLeader = getattr( main, "ONOScli2" )
- elif leader == ONOS3Ip:
- oldLeader = getattr( main, "ONOScli3" )
- elif leader == ONOS4Ip:
- oldLeader = getattr( main, "ONOScli4" )
- elif leader == ONOS5Ip:
- oldLeader = getattr( main, "ONOScli5" )
- elif leader == ONOS6Ip:
- oldLeader = getattr( main, "ONOScli6" )
- elif leader == ONOS7Ip:
- oldLeader = getattr( main, "ONOScli7" )
- elif leader is None or leader == main.FALSE:
- main.log.report(
- "Leader for the election app should be an ONOS node," +
- "instead got '" +
- str( leader ) +
- "'" )
- leaderResult = main.FALSE
- withdrawResult = oldLeader.electionTestWithdraw()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=withdrawResult,
- onpass="App was withdrawn from election",
- onfail="App was not withdrawn from election" )
-
- main.step( "Make sure new leader is elected" )
- leaderList = []
- for controller in range( 1, numControllers + 1 ):
- # loop through ONOScli handlers
- node = getattr( main, ( 'ONOScli' + str( controller ) ) )
- leaderList.append( node.electionTestLeader() )
- for leaderN in leaderList:
- if leaderN == leader:
- main.log.report(
- "ONOS" +
- str( controller ) +
- " still sees " +
- str( leader ) +
- " as leader after they withdrew" )
- leaderResult = main.FALSE
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.report( "Something is wrong with " +
- "electionTestLeader function, " +
- "check the error logs" )
- leaderResult = main.FALSE
- consistentLeader = main.FALSE
- if len( set( leaderList ) ) == 1:
- main.log.info( "Each Election-app sees '" +
- str( leaderList[ 0 ] ) +
- "' as the leader" )
- consistentLeader = main.TRUE
- else:
- main.log.report(
- "Inconsistent responses for leader of Election-app:" )
- for n in range( len( leaderList ) ):
- main.log.report( "ONOS" + str( n + 1 ) + " response: " +
- str( leaderList[ n ] ) )
- if leaderResult:
- main.log.report( "Leadership election tests passed( consistent " +
- "view of leader across listeners and a new " +
- "leader was elected when the old leader " +
- "resigned )" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- main.step( "Run for election on old leader( just so everyone "
- "is in the hat )" )
- runResult = oldLeader.electionTestRun()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=runResult,
- onpass="App re-ran for election",
- onfail="App failed to run for election" )
- if consistentLeader == main.TRUE:
- afterRun = main.ONOScli1.electionTestLeader()
- # verify leader didn't just change
- if afterRun == leaderList[ 0 ]:
- leaderResult = main.TRUE
- else:
- leaderResult = main.FALSE
- # TODO: assert on run and withdraw results?
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election after " +
- "the old leader re-ran for election" )
- def CASE16( self ):
- """
- """
- main.ONOScli1.handle.sendline( "sudo iptables -F" )
- main.ONOScli1.handle.expect( "\$" )
- main.ONOScli2.handle.sendline( "sudo iptables -F" )
- main.ONOScli2.handle.expect( "\$" )
- main.ONOScli3.handle.sendline( "sudo iptables -F" )
- main.ONOScli3.handle.expect( "\$" )
- main.ONOScli4.handle.sendline( "sudo iptables -F" )
- main.ONOScli4.handle.expect( "\$" )
- main.ONOScli5.handle.sendline( "sudo iptables -F" )
- main.ONOScli5.handle.expect( "\$" )
- main.ONOScli6.handle.sendline( "sudo iptables -F" )
- main.ONOScli6.handle.expect( "\$" )
- main.ONOScli7.handle.sendline( "sudo iptables -F" )
- main.ONOScli7.handle.expect( "\$" )
-
diff --git a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.topo b/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.topo
deleted file mode 100644
index 7b32cc2..0000000
--- a/TestON/tests/HATestNetworkPartition/HATestNetworkPartition.topo
+++ /dev/null
@@ -1,170 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
-
- <ONOScli4>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli4>
-
-
- <ONOScli5>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli5>
-
-
- <ONOScli6>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli6>
-
-
- <ONOScli7>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli7>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.30.12</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.30.13</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.128.30.14</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.128.30.15</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.128.30.16</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.128.30.17</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> none </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/HATestNetworkPartition/__init__.py b/TestON/tests/HATestNetworkPartition/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/HATestNetworkPartition/__init__.py
+++ /dev/null
diff --git a/TestON/tests/HATestSanity/HATestSanity.params b/TestON/tests/HATestSanity/HATestSanity.params
deleted file mode 100644
index 1e9d141..0000000
--- a/TestON/tests/HATestSanity/HATestSanity.params
+++ /dev/null
@@ -1,90 +0,0 @@
-<PARAMS>
- #List of test cases:
- #CASE1: Compile ONOS and push it to the test machines
- #CASE2: Assign mastership to controllers
- #CASE3: Assign intents
- #CASE4: Ping across added host intents
- #CASE5: Reading state of ONOS
- #CASE6: The Failure case. Since this is the Sanity test, we do nothing.
- #CASE7: Check state after control plane failure
- #CASE8: Compare topo
- #CASE9: Link s3-s28 down
- #CASE10: Link s3-s28 up
- #CASE11: Switch down
- #CASE12: Switch up
- #CASE13: Clean up
- #CASE14: start election app on all onos nodes
- #CASE15: Check that Leadership Election is still functional
- #CASE16: Install Distributed Primitives app
- #CASE17: Check for basic functionality with distributed primitives
- #1,2,8,3,4,5,14,16,17,[6],8,7,4,15,17,9,8,4,10,8,4,11,8,4,12,8,4,13
- <testcases>1,2,8,21,8,3,4,5,14,16,17,[6],8,7,4,15,17,9,8,4,10,8,4,11,8,4,12,8,4,13</testcases>
- <ENV>
- <cellName>HA</cellName>
- </ENV>
- <Git> True </Git>
- <branch> master </branch>
- <num_controllers> 7 </num_controllers>
- <tcpdump> False </tcpdump>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
-
- <ip2>10.128.30.12</ip2>
- <port2>6633</port2>
-
- <ip3>10.128.30.13</ip3>
- <port3>6633</port3>
-
- <ip4>10.128.30.14</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.30.15</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.30.16</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.30.17</ip7>
- <port7>6633</port7>
- </CTRL>
- <TESTONUSER>admin</TESTONUSER>
- <TESTONIP>10.128.30.9</TESTONIP>
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
- <timers>
- <LinkDiscovery>.2</LinkDiscovery>
- <SwitchDiscovery>.2</SwitchDiscovery>
- </timers>
- <kill>
- <switch> s5 </switch>
- <dpid> 0000000000005000 </dpid>
- <links> h5 s2 s1 s6 </links>
- </kill>
- <MNtcpdump>
- <intf>eth0</intf>
- <port> </port>
- <folder>~/packet_captures/</folder>
- </MNtcpdump>
-</PARAMS>
diff --git a/TestON/tests/HATestSanity/HATestSanity.py b/TestON/tests/HATestSanity/HATestSanity.py
deleted file mode 100644
index 8d952c7..0000000
--- a/TestON/tests/HATestSanity/HATestSanity.py
+++ /dev/null
@@ -1,3891 +0,0 @@
-"""
-Description: This test is to determine if the HA test setup is
- working correctly. There are no failures so this test should
- have a 100% pass rate
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machines
-CASE2: Assign devices to controllers
-CASE21: Assign mastership to controllers
-CASE3: Assign intents
-CASE4: Ping across added host intents
-CASE5: Reading state of ONOS
-CASE6: The Failure case. Since this is the Sanity test, we do nothing.
-CASE7: Check state after control plane failure
-CASE8: Compare topo
-CASE9: Link s3-s28 down
-CASE10: Link s3-s28 up
-CASE11: Switch down
-CASE12: Switch up
-CASE13: Clean up
-CASE14: start election app on all onos nodes
-CASE15: Check that Leadership Election is still functional
-CASE16: Install Distributed Primitives app
-CASE17: Check for basic functionality with distributed primitives
-"""
-
-
-class HATestSanity:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- cell <name>
- onos-verify-cell
- NOTE: temporary - onos-remove-raft-logs
- onos-uninstall
- start mininet
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- start cli sessions
- start tcpdump
- """
- main.log.info( "ONOS HA Sanity test - initialization" )
- main.case( "Setting up test environment" )
- main.caseExplaination = "Setup the test environment including " +\
- "installing ONOS, starting Mininet and ONOS" +\
- "cli sessions."
- # TODO: save all the timers and output them for plotting
-
- # load some variables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- gitBranch = main.params[ 'branch' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # set global variables
- global ONOS1Port
- global ONOS2Port
- global ONOS3Port
- global ONOS4Port
- global ONOS5Port
- global ONOS6Port
- global ONOS7Port
- global numControllers
- numControllers = int( main.params[ 'num_controllers' ] )
-
- # FIXME: just get controller port from params?
- # TODO: do we really need all these?
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- ONOS4Port = main.params[ 'CTRL' ][ 'port4' ]
- ONOS5Port = main.params[ 'CTRL' ][ 'port5' ]
- ONOS6Port = main.params[ 'CTRL' ][ 'port6' ]
- ONOS7Port = main.params[ 'CTRL' ][ 'port7' ]
-
- global CLIs
- CLIs = []
- global nodes
- nodes = []
- for i in range( 1, numControllers + 1 ):
- CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- nodes.append( getattr( main, 'ONOS' + str( i ) ) )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- # FIXME:this is short term fix
- main.log.info( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.log.info( "Uninstalling ONOS" )
- for node in nodes:
- main.ONOSbench.onosUninstall( node.ip_address )
-
- # Make sure ONOS is DEAD
- main.log.info( "Killing any ONOS processes" )
- killResults = main.TRUE
- for node in nodes:
- killed = main.ONOSbench.onosKill( node.ip_address )
- killResults = killResults and killed
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Starting Mininet" )
- mnResult = main.Mininet1.startNet( )
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet Started",
- onfail="Error starting Mininet" )
-
- main.step( "Git checkout and pull " + gitBranch )
- if PULLCODE:
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- # values of 1 or 3 are good
- utilities.assert_lesser( expect=0, actual=gitPullResult,
- onpass="Git pull successful",
- onfail="Git pull failed" )
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Using mvn clean install" )
- cleanInstallResult = main.TRUE
- if PULLCODE and gitPullResult == main.TRUE:
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- utilities.assert_equals( expect=main.TRUE,
- actual=cleanInstallResult,
- onpass="MCI successful",
- onfail="MCI failed" )
- # GRAPHS
- # NOTE: important params here:
- # job = name of Jenkins job
- # Plot Name = Plot-HA, only can be used if multiple plots
- # index = The number of the graph under plot name
- job = "HASanity"
- plotName = "Plot-HA"
- graphs = '<ac:structured-macro ac:name="html">\n'
- graphs += '<ac:plain-text-body><![CDATA[\n'
- graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
- '/plot/' + plotName + '/getPlot?index=0' +\
- '&width=500&height=300"' +\
- 'noborder="0" width="500" height="300" scrolling="yes" ' +\
- 'seamless="seamless"></iframe>\n'
- graphs += ']]></ac:plain-text-body>\n'
- graphs += '</ac:structured-macro>\n'
- main.log.wiki(graphs)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- utilities.assert_equals( expect=main.TRUE, actual=packageResult,
- onpass="ONOS package successful",
- onfail="ONOS package failed" )
-
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for node in nodes:
- tmpResult = main.ONOSbench.onosInstall( options="-f",
- node=node.ip_address )
- onosInstallResult = onosInstallResult and tmpResult
- utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult,
- onpass="ONOS install successful",
- onfail="ONOS install failed" )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onosIsupResult = main.TRUE
- for node in nodes:
- started = main.ONOSbench.isup( node.ip_address )
- if not started:
- main.log.error( node.name + " didn't start!" )
- main.ONOSbench.onosStop( node.ip_address )
- main.ONOSbench.onosStart( node.ip_address )
- onosIsupResult = onosIsupResult and started
- if onosIsupResult == main.TRUE:
- break
- utilities.assert_equals( expect=main.TRUE, actual=onosIsupResult,
- onpass="ONOS startup successful",
- onfail="ONOS startup failed" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].startOnosCli,
- name="startOnosCli-" + str( i ),
- args=[nodes[i].ip_address] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- cliResults = cliResults and t.result
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli startup successful",
- onfail="ONOS cli startup failed" )
-
- if main.params[ 'tcpdump' ].lower() == "true":
- main.step( "Start Packet Capture MN" )
- main.Mininet2.startTcpdump(
- str( main.params[ 'MNtcpdump' ][ 'folder' ] ) + str( main.TEST )
- + "-MN.pcap",
- intf=main.params[ 'MNtcpdump' ][ 'intf' ],
- port=main.params[ 'MNtcpdump' ][ 'port' ] )
-
- main.step( "App Ids check" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- if cliResults == main.FALSE:
- main.log.error( "Failed to start ONOS, stopping test" )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- """
- Assign devices to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning devices to controllers" )
- main.caseExplaination = "Assign switches to ONOS using 'ovs-vsctl' " +\
- "and check that an ONOS node becomes the " +\
- "master of the device."
- main.step( "Assign switches to controllers" )
-
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- swList = []
- for i in range( 1, 29 ):
- swList.append( "s" + str( i ) )
- main.Mininet1.assignSwController( sw=swList, ip=ipList )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except Exception:
- main.log.info( repr( response ) )
- for node in nodes:
- if re.search( "tcp:" + node.ip_address, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.error( "Error, node " + node.ip_address + " is " +
- "not in the list of controllers s" +
- str( i ) + " is connecting to." )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- def CASE21( self, main ):
- """
- Assign mastership to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning Controller roles for switches" )
- main.caseExplaination = "Check that ONOS is connected to each " +\
- "device. Then manually assign" +\
- " mastership to specific ONOS nodes using" +\
- " 'device-role'"
- main.step( "Assign mastership of switches to specific controllers" )
- # Manually assign mastership to the controller we want
- roleCall = main.TRUE
-
- ipList = [ ]
- deviceList = []
- try:
- for i in range( 1, 29 ): # switches 1 through 28
- # set up correct variables:
- if i == 1:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "1000" ).get( 'id' )
- elif i == 2:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "2000" ).get( 'id' )
- elif i == 3:
- ip = nodes[ 1 ].ip_address # ONOS2
- deviceId = main.ONOScli1.getDevice( "3000" ).get( 'id' )
- elif i == 4:
- ip = nodes[ 3 ].ip_address # ONOS4
- deviceId = main.ONOScli1.getDevice( "3004" ).get( 'id' )
- elif i == 5:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "5000" ).get( 'id' )
- elif i == 6:
- ip = nodes[ 2 ].ip_address # ONOS3
- deviceId = main.ONOScli1.getDevice( "6000" ).get( 'id' )
- elif i == 7:
- ip = nodes[ 5 ].ip_address # ONOS6
- deviceId = main.ONOScli1.getDevice( "6007" ).get( 'id' )
- elif i >= 8 and i <= 17:
- ip = nodes[ 4 ].ip_address # ONOS5
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i >= 18 and i <= 27:
- ip = nodes[ 6 ].ip_address # ONOS7
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i == 28:
- ip = nodes[ 0 ].ip_address # ONOS1
- deviceId = main.ONOScli1.getDevice( "2800" ).get( 'id' )
- else:
- main.log.error( "You didn't write an else statement for " +
- "switch s" + str( i ) )
- roleCall = main.FALSE
- # Assign switch
- assert deviceId, "No device id for s" + str( i ) + " in ONOS"
- # TODO: make this controller dynamic
- roleCall = roleCall and main.ONOScli1.deviceRole( deviceId,
- ip )
- ipList.append( ip )
- deviceList.append( deviceId )
- except ( AttributeError, AssertionError ):
- main.log.exception( "Something is wrong with ONOS device view" )
- main.log.info( main.ONOScli1.devices() )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCall,
- onpass="Re-assigned switch mastership to designated controller",
- onfail="Something wrong with deviceRole calls" )
-
- main.step( "Check mastership was correctly assigned" )
- roleCheck = main.TRUE
- # NOTE: This is due to the fact that device mastership change is not
- # atomic and is actually a multi step process
- time.sleep( 5 )
- for i in range( len( ipList ) ):
- ip = ipList[i]
- deviceId = deviceList[i]
- # Check assignment
- master = main.ONOScli1.getRole( deviceId ).get( 'master' )
- if ip in master:
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
- main.log.error( "Error, controller " + ip + " is not" +
- " master " + "of device " +
- str( deviceId ) + ". Master is " +
- repr( master ) + "." )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCheck,
- onpass="Switches were successfully reassigned to designated " +
- "controller",
- onfail="Switches were not successfully reassigned" )
-
- def CASE3( self, main ):
- """
- Assign intents
- """
- import time
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Adding host Intents" )
- main.caseExplaination = "Discover hosts by using pingall then " +\
- "assign predetermined host-to-host intents." +\
- " After installation, check that the intent" +\
- " is distributed to all nodes and the state" +\
- " is INSTALLED"
-
- # install onos-app-fwd
- main.step( "Install reactive forwarding app" )
- installResults = CLIs[0].activateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=installResults,
- onpass="Install fwd successful",
- onfail="Install fwd failed" )
-
- main.step( "Check app ids" )
- appCheck = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck = appCheck and t.result
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Discovering Hosts( Via pingall for now )" )
- # FIXME: Once we have a host discovery mechanism, use that instead
- # REACTIVE FWD test
- pingResult = main.FALSE
- for i in range(2): # Retry if pingall fails first time
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- if i == 0:
- utilities.assert_equals(
- expect=main.TRUE,
- actual=pingResult,
- onpass="Reactive Pingall test passed",
- onfail="Reactive Pingall failed, " +
- "one or more ping pairs failed" )
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" %
- ( time2 - time1 ) )
- # timeout for fwd flows
- time.sleep( 11 )
- # uninstall onos-app-fwd
- main.step( "Uninstall reactive forwarding app" )
- uninstallResult = CLIs[0].deactivateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=uninstallResult,
- onpass="Uninstall fwd successful",
- onfail="Uninstall fwd failed" )
- '''
- main.Mininet1.handle.sendline( "py [ h.cmd( \"arping -c 1 10.1.1.1 \" ) for h in net.hosts ] ")
- import time
- time.sleep(60)
- '''
-
- main.step( "Check app ids" )
- threads = []
- appCheck2 = main.TRUE
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- appCheck2 = appCheck2 and t.result
- if appCheck2 != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck2,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Add host intents via cli" )
- intentIds = []
- # TODO: move the host numbers to params
- # Maybe look at all the paths we ping?
- intentAddResult = True
- hostResult = main.TRUE
- for i in range( 8, 18 ):
- main.log.info( "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: getHost can return None
- host1Dict = main.ONOScli1.getHost( host1 )
- host2Dict = main.ONOScli1.getHost( host2 )
- host1Id = None
- host2Id = None
- if host1Dict and host2Dict:
- host1Id = host1Dict.get( 'id', None )
- host2Id = host2Dict.get( 'id', None )
- if host1Id and host2Id:
- nodeNum = ( i % 7 )
- tmpId = CLIs[ nodeNum ].addHostIntent( host1Id, host2Id )
- if tmpId:
- main.log.info( "Added intent with id: " + tmpId )
- intentIds.append( tmpId )
- else:
- main.log.error( "addHostIntent returned: " +
- repr( tmpId ) )
- else:
- main.log.error( "Error, getHost() failed for h" + str( i ) +
- " and/or h" + str( i + 10 ) )
- hosts = CLIs[ 0 ].hosts()
- main.log.warn( "Hosts output: " )
- try:
- main.log.warn( json.dumps( json.loads( hosts ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( hosts ) )
- hostResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE, actual=hostResult,
- onpass="Found a host id for each host",
- onfail="Error looking up host ids" )
-
- intentStart = time.time()
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- for intent in intentIds:
- if intent in onosIds:
- pass # intent submitted is in onos
- else:
- intentAddResult = False
- if intentAddResult:
- intentStop = time.time()
- else:
- intentStop = None
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- installedCheck = True
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- missingIntents = False
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- missingIntents = True
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- intentAddResult = bool( intentAddResult and not missingIntents and
- installedCheck )
- if not intentAddResult:
- main.log.error( "Error in pushing host intents to ONOS" )
-
- main.step( "Intent Anti-Entropy dispersion" )
- for i in range(100):
- correct = True
- main.log.info( "Submitted intents: " + str( sorted( intentIds ) ) )
- for cli in CLIs:
- onosIds = []
- ids = cli.getAllIntentsId()
- onosIds.append( ids )
- main.log.debug( "Intents in " + cli.name + ": " +
- str( sorted( onosIds ) ) )
- if sorted( ids ) != sorted( intentIds ):
- main.log.warn( "Set of intent IDs doesn't match" )
- correct = False
- break
- else:
- intents = json.loads( cli.intents() )
- for intent in intents:
- if intent[ 'state' ] != "INSTALLED":
- main.log.warn( "Intent " + intent[ 'id' ] +
- " is " + intent[ 'state' ] )
- correct = False
- break
- if correct:
- break
- else:
- time.sleep(1)
- if not intentStop:
- intentStop = time.time()
- global gossipTime
- gossipTime = intentStop - intentStart
- main.log.info( "It took about " + str( gossipTime ) +
- " seconds for all intents to appear in each node" )
- # FIXME: make this time configurable/calculate based off of number of
- # nodes and gossip rounds
- utilities.assert_greater_equals(
- expect=40, actual=gossipTime,
- onpass="ECM anti-entropy for intents worked within " +
- "expected time",
- onfail="Intent ECM anti-entropy took too long" )
- if gossipTime <= 40:
- intentAddResult = True
-
- if not intentAddResult or "key" in pendingMap:
- import time
- installedCheck = True
- main.log.info( "Sleeping 60 seconds to see if intents are found" )
- time.sleep( 60 )
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- # Iter through intents of a node
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- def CASE4( self, main ):
- """
- Ping across added host intents
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Verify connectivity by sendind traffic across Intents" )
- main.caseExplaination = "Ping across added host intents to check " +\
- "functionality and check the state of " +\
- "the intent"
- main.step( "Ping across added host intents" )
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- main.step( "Check Intent state" )
- installedCheck = False
- loopCount = 0
- while not installedCheck and loopCount < 40:
- installedCheck = True
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- # Print states
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- if not installedCheck:
- time.sleep( 1 )
- loopCount += 1
- utilities.assert_equals( expect=True, actual=installedCheck,
- onpass="Intents are all INSTALLED",
- onfail="Intents are not all in " +
- "INSTALLED state" )
-
- main.step( "Check leadership of topics" )
- leaders = main.ONOScli1.leaders()
- topicCheck = main.TRUE
- try:
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- # TODO: Look at Devices as topics now that it uses this system
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- # FIXME: topics.append( "org.onosproject.election" )
- # Print leaders output
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- topicCheck = main.FALSE
- else:
- main.log.error( "leaders() returned None" )
- topicCheck = main.FALSE
- except ( ValueError, TypeError ):
- topicCheck = main.FALSE
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # TODO: Check for a leader of these topics
- # Check all nodes
- if topicCheck:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- utilities.assert_equals( expect=main.TRUE, actual=topicCheck,
- onpass="intent Partitions is in leaders",
- onfail="Some topics were lost " )
- # Print partitions
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- # Print Pending Map
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- if not installedCheck:
- main.log.info( "Waiting 60 seconds to see if the state of " +
- "intents change" )
- time.sleep( 60 )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- if missing:
- for node in CLIs:
- response = node.leaders( jsonFormat=False)
- main.log.warn( str( node.name ) + " leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
- # Print flowrules
- main.log.debug( CLIs[0].flows( jsonFormat=False ) )
- main.step( "Wait a minute then ping again" )
- # the wait is above
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- def CASE5( self, main ):
- """
- Reading state of ONOS
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Setting up and gathering data for current state" )
- # The general idea for this test case is to pull the state of
- # ( intents,flows, topology,... ) from each ONOS node
- # We can then compare them with each other and also with past states
-
- main.step( "Check that each switch has a master" )
- global mastershipState
- mastershipState = '[]'
-
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Get the Mastership of each switch from each controller" )
- ONOSMastership = []
- mastershipCheck = main.FALSE
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( ONOSMastership[ i ] ) )
- elif rolesResults and consistentMastership:
- mastershipCheck = main.TRUE
- mastershipState = ONOSMastership[ 0 ]
-
- main.step( "Get the intents from each controller" )
- global intentState
- intentState = []
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
- main.log.error( "Intents not consistent" )
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
-
- if intentsResults:
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " Id"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- keys = []
- try:
- # Get the set of all intent keys
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- # For each intent key, print the state on each node
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id', "Error" ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End of intent state table
- except ValueError as e:
- main.log.exception( e )
- main.log.debug( "nodeStr was: " + repr( nodeStr ) )
-
- if intentsResults and not consistentIntents:
- # print the json objects
- n = len(ONOSIntents)
- main.log.debug( "ONOS" + str( n ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ -1 ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- for i in range( numControllers ):
- if ONOSIntents[ i ] != ONOSIntents[ -1 ]:
- main.log.debug( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[i] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- else:
- main.log.debug( nodes[ i ].name + " intents match ONOS" +
- str( n ) + " intents" )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
- intentState = ONOSIntents[ 0 ]
-
- main.step( "Get the flows from each controller" )
- global flowState
- flowState = []
- ONOSFlows = []
- ONOSFlowsJson = []
- flowCheck = main.FALSE
- consistentFlows = True
- flowsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].flows,
- name="flows-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- # NOTE: Flows command can take some time to run
- time.sleep(30)
- for t in threads:
- t.join()
- result = t.result
- ONOSFlows.append( result )
-
- for i in range( numControllers ):
- num = str( i + 1 )
- if not ONOSFlows[ i ] or "Error" in ONOSFlows[ i ]:
- main.log.error( "Error in getting ONOS" + num + " flows" )
- main.log.warn( "ONOS" + num + " flows response: " +
- repr( ONOSFlows[ i ] ) )
- flowsResults = False
- ONOSFlowsJson.append( None )
- else:
- try:
- ONOSFlowsJson.append( json.loads( ONOSFlows[ i ] ) )
- except ( ValueError, TypeError ):
- # FIXME: change this to log.error?
- main.log.exception( "Error in parsing ONOS" + num +
- " response as json." )
- main.log.error( repr( ONOSFlows[ i ] ) )
- ONOSFlowsJson.append( None )
- flowsResults = False
- utilities.assert_equals(
- expect=True,
- actual=flowsResults,
- onpass="No error in reading flows output",
- onfail="Error in reading flows from ONOS" )
-
- main.step( "Check for consistency in Flows from each controller" )
- tmp = [ len( i ) == len( ONOSFlowsJson[ 0 ] ) for i in ONOSFlowsJson ]
- if all( tmp ):
- main.log.info( "Flow count is consistent across all ONOS nodes" )
- else:
- consistentFlows = False
- utilities.assert_equals(
- expect=True,
- actual=consistentFlows,
- onpass="The flow count is consistent across all ONOS nodes",
- onfail="ONOS nodes have different flow counts" )
-
- if flowsResults and not consistentFlows:
- for i in range( numControllers ):
- try:
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- json.dumps( json.loads( ONOSFlows[i] ), sort_keys=True,
- indent=4, separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " flows: " +
- repr( ONOSFlows[ i ] ) )
- elif flowsResults and consistentFlows:
- flowCheck = main.TRUE
- flowState = ONOSFlows[ 0 ]
-
- main.step( "Get the OF Table entries" )
- global flows
- flows = []
- for i in range( 1, 29 ):
- flows.append( main.Mininet2.getFlowTable( 1.3, "s" + str( i ) ) )
- if flowCheck == main.FALSE:
- for table in flows:
- main.log.warn( table )
- # TODO: Compare switch flow tables with ONOS flow tables
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Collecting topology information from ONOS" )
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- # FIXME: better handling of this, print which node
- # Maybe use thread name?
- main.log.exception( "Error parsing json output of hosts" )
- # FIXME: should this be an empty json object instead?
- hosts.append( None )
-
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Host view is consistent across ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Each host has an IP address" )
- ipResult = main.TRUE
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if not host.get( 'ipAddresses', [ ] ):
- main.log.error( "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=ipResult,
- onpass="The ips of the hosts aren't empty",
- onfail="The ip of at least one host is missing" )
-
- # Strongly connected clusters of devices
- main.step( "Cluster view is consistent across ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
- # there should always only be one cluster
- main.step( "Cluster view correct across ONOS nodes" )
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[ 0 ] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
-
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- main.step( "Hosts are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Hosts are correct",
- onfail="Hosts are incorrect" )
-
- def CASE6( self, main ):
- """
- The Failure case. Since this is the Sanity test, we do nothing.
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Wait 60 seconds instead of inducing a failure" )
- time.sleep( 60 )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=main.TRUE,
- onpass="Sleeping 60 seconds",
- onfail="Something is terribly wrong with my math" )
-
- def CASE7( self, main ):
- """
- Check state after ONOS failure
- """
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- main.case( "Running ONOS Constant State Tests" )
-
- main.step( "Check that each switch has a master" )
- # Assert that each device has a master
- rolesNotNull = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].rolesNotNull,
- name="rolesNotNull-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- rolesNotNull = rolesNotNull and t.result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Read device roles from ONOS" )
- ONOSMastership = []
- mastershipCheck = main.FALSE
- consistentMastership = True
- rolesResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].roles,
- name="roles-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSMastership.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSMastership[i] or "Error" in ONOSMastership[i]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " roles" )
- main.log.warn(
- "ONOS" + str( i + 1 ) + " mastership response: " +
- repr( ONOSMastership[i] ) )
- rolesResults = False
- utilities.assert_equals(
- expect=True,
- actual=rolesResults,
- onpass="No error in reading roles output",
- onfail="Error in reading roles from ONOS" )
-
- main.step( "Check for consistency in roles from each controller" )
- if all([ i == ONOSMastership[ 0 ] for i in ONOSMastership ] ):
- main.log.info(
- "Switch roles are consistent across all ONOS nodes" )
- else:
- consistentMastership = False
- utilities.assert_equals(
- expect=True,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- if rolesResults and not consistentMastership:
- for i in range( numControllers ):
- main.log.warn(
- "ONOS" + str( i + 1 ) + " roles: ",
- json.dumps(
- json.loads( ONOSMastership[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- elif rolesResults and not consistentMastership:
- mastershipCheck = main.TRUE
-
- description2 = "Compare switch roles from before failure"
- main.step( description2 )
- try:
- currentJson = json.loads( ONOSMastership[0] )
- oldJson = json.loads( mastershipState )
- except ( ValueError, TypeError ):
- main.log.exception( "Something is wrong with parsing " +
- "ONOSMastership[0] or mastershipState" )
- main.log.error( "ONOSMastership[0]: " + repr( ONOSMastership[0] ) )
- main.log.error( "mastershipState" + repr( mastershipState ) )
- main.cleanup()
- main.exit()
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- switchDPID = str(
- main.Mininet1.getSwitchDPID( switch="s" + str( i ) ) )
- current = [ switch[ 'master' ] for switch in currentJson
- if switchDPID in switch[ 'id' ] ]
- old = [ switch[ 'master' ] for switch in oldJson
- if switchDPID in switch[ 'id' ] ]
- if current == old:
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.warn( "Mastership of switch %s changed" % switchDPID )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Mastership of Switches was not changed",
- onfail="Mastership of some switches changed" )
- mastershipCheck = mastershipCheck and consistentMastership
-
- main.step( "Get the intents and compare across all nodes" )
- ONOSIntents = []
- intentCheck = main.FALSE
- consistentIntents = True
- intentsResults = True
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].intents,
- name="intents-" + str( i ),
- args=[],
- kwargs={ 'jsonFormat': True } )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ONOSIntents.append( t.result )
-
- for i in range( numControllers ):
- if not ONOSIntents[ i ] or "Error" in ONOSIntents[ i ]:
- main.log.error( "Error in getting ONOS" + str( i + 1 ) +
- " intents" )
- main.log.warn( "ONOS" + str( i + 1 ) + " intents response: " +
- repr( ONOSIntents[ i ] ) )
- intentsResults = False
- utilities.assert_equals(
- expect=True,
- actual=intentsResults,
- onpass="No error in reading intents output",
- onfail="Error in reading intents from ONOS" )
-
- main.step( "Check for consistency in Intents from each controller" )
- if all([ sorted( i ) == sorted( ONOSIntents[ 0 ] ) for i in ONOSIntents ] ):
- main.log.info( "Intents are consistent across all ONOS " +
- "nodes" )
- else:
- consistentIntents = False
-
- # Try to make it easy to figure out what is happening
- #
- # Intent ONOS1 ONOS2 ...
- # 0x01 INSTALLED INSTALLING
- # ... ... ...
- # ... ... ...
- title = " ID"
- for n in range( numControllers ):
- title += " " * 10 + "ONOS" + str( n + 1 )
- main.log.warn( title )
- # get all intent keys in the cluster
- keys = []
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- keys.append( intent.get( 'id' ) )
- keys = set( keys )
- for key in keys:
- row = "%-13s" % key
- for nodeStr in ONOSIntents:
- node = json.loads( nodeStr )
- for intent in node:
- if intent.get( 'id' ) == key:
- row += "%-15s" % intent.get( 'state' )
- main.log.warn( row )
- # End table view
-
- utilities.assert_equals(
- expect=True,
- actual=consistentIntents,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
- intentStates = []
- for node in ONOSIntents: # Iter through ONOS nodes
- nodeStates = []
- # Iter through intents of a node
- try:
- for intent in json.loads( node ):
- nodeStates.append( intent[ 'state' ] )
- except ( ValueError, TypeError ):
- main.log.exception( "Error in parsing intents" )
- main.log.error( repr( node ) )
- intentStates.append( nodeStates )
- out = [ (i, nodeStates.count( i ) ) for i in set( nodeStates ) ]
- main.log.info( dict( out ) )
-
- if intentsResults and not consistentIntents:
- for i in range( numControllers ):
- main.log.warn( "ONOS" + str( i + 1 ) + " intents: " )
- main.log.warn( json.dumps(
- json.loads( ONOSIntents[ i ] ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- elif intentsResults and consistentIntents:
- intentCheck = main.TRUE
-
- # NOTE: Store has no durability, so intents are lost across system
- # restarts
- main.step( "Compare current intents with intents before the failure" )
- # NOTE: this requires case 5 to pass for intentState to be set.
- # maybe we should stop the test if that fails?
- sameIntents = main.FALSE
- if intentState and intentState == ONOSIntents[ 0 ]:
- sameIntents = main.TRUE
- main.log.info( "Intents are consistent with before failure" )
- # TODO: possibly the states have changed? we may need to figure out
- # what the acceptable states are
- elif len( intentState ) == len( ONOSIntents[ 0 ] ):
- sameIntents = main.TRUE
- try:
- before = json.loads( intentState )
- after = json.loads( ONOSIntents[ 0 ] )
- for intent in before:
- if intent not in after:
- sameIntents = main.FALSE
- main.log.debug( "Intent is not currently in ONOS " +
- "(at least in the same form):" )
- main.log.debug( json.dumps( intent ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- if sameIntents == main.FALSE:
- try:
- main.log.debug( "ONOS intents before: " )
- main.log.debug( json.dumps( json.loads( intentState ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- main.log.debug( "Current ONOS intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ 0 ] ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameIntents,
- onpass="Intents are consistent with before failure",
- onfail="The Intents changed during failure" )
- intentCheck = intentCheck and sameIntents
-
- main.step( "Get the OF Table entries and compare to before " +
- "component failure" )
- FlowTables = main.TRUE
- flows2 = []
- for i in range( 28 ):
- main.log.info( "Checking flow table on s" + str( i + 1 ) )
- tmpFlows = main.Mininet2.getFlowTable( 1.3, "s" + str( i + 1 ) )
- flows2.append( tmpFlows )
- tempResult = main.Mininet2.flowComp(
- flow1=flows[ i ],
- flow2=tmpFlows )
- FlowTables = FlowTables and tempResult
- if FlowTables == main.FALSE:
- main.log.info( "Differences in flow table for switch: s" +
- str( i + 1 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=FlowTables,
- onpass="No changes were found in the flow tables",
- onfail="Changes were found in the flow tables" )
-
- main.step( "Check the continuous pings to ensure that no packets " +
- "were dropped during component failure" )
- main.Mininet2.pingKill( main.params[ 'TESTONUSER' ],
- main.params[ 'TESTONIP' ] )
- LossInPings = main.FALSE
- # NOTE: checkForLoss returns main.FALSE with 0% packet loss
- for i in range( 8, 18 ):
- main.log.info(
- "Checking for a loss in pings along flow from s" +
- str( i ) )
- LossInPings = main.Mininet2.checkForLoss(
- "/tmp/ping.h" +
- str( i ) ) or LossInPings
- if LossInPings == main.TRUE:
- main.log.info( "Loss in ping detected" )
- elif LossInPings == main.ERROR:
- main.log.info( "There are multiple mininet process running" )
- elif LossInPings == main.FALSE:
- main.log.info( "No Loss in the pings" )
- main.log.info( "No loss of dataplane connectivity" )
- utilities.assert_equals(
- expect=main.FALSE,
- actual=LossInPings,
- onpass="No Loss of connectivity",
- onfail="Loss of dataplane connectivity detected" )
-
- main.step( "Leadership Election is still functional" )
- # Test of LeadershipElection
- # NOTE: this only works for the sanity test. In case of failures,
- # leader will likely change
- leader = nodes[ 0 ].ip_address
- leaderResult = main.TRUE
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- # verify leader is ONOS1
- if leaderN == leader:
- # all is well
- # NOTE: In failure scenario, this could be a new node, maybe
- # check != ONOS1
- pass
- elif leaderN == main.FALSE:
- # error in response
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, check the" +
- " error logs" )
- leaderResult = main.FALSE
- elif leader != leaderN:
- leaderResult = main.FALSE
- main.log.error( cli.name + " sees " + str( leaderN ) +
- " as the leader of the election app. " +
- "Leader should be " + str( leader ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- def CASE8( self, main ):
- """
- Compare topo
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case( "Compare ONOS Topology view to Mininet topology" )
- main.caseExplaination = "Compare topology objects between Mininet" +\
- " and ONOS"
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- hostAttachmentResults = True
- topoResult = main.FALSE
- elapsed = 0
- count = 0
- main.step( "Collecting topology information from ONOS" )
- startTime = time.time()
- # Give time for Gossip to work
- while topoResult == main.FALSE and elapsed < 60:
- count += 1
- cliStart = time.time()
- devices = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].devices,
- name="devices-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- hosts = []
- ipResult = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].hosts,
- name="hosts-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- try:
- hosts.append( json.loads( t.result ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing hosts results" )
- main.log.error( repr( t.result ) )
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host is None or host.get( 'ipAddresses', [] ) == []:
- main.log.error(
- "DEBUG:Error with host ipAddresses on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- ports = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].ports,
- name="ports-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- links = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].links,
- name="links-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- clusters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].clusters,
- name="clusters-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
-
- elapsed = time.time() - startTime
- cliTime = time.time() - cliStart
- print "Elapsed time: " + str( elapsed )
- print "CLI time: " + str( cliTime )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
- # CHECKING HOST ATTACHMENT POINTS
- hostAttachment = True
- zeroHosts = False
- # FIXME: topo-HA/obelisk specific mappings:
- # key is mac and value is dpid
- mappings = {}
- for i in range( 1, 29 ): # hosts 1 through 28
- # set up correct variables:
- macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
- if i == 1:
- deviceId = "1000".zfill(16)
- elif i == 2:
- deviceId = "2000".zfill(16)
- elif i == 3:
- deviceId = "3000".zfill(16)
- elif i == 4:
- deviceId = "3004".zfill(16)
- elif i == 5:
- deviceId = "5000".zfill(16)
- elif i == 6:
- deviceId = "6000".zfill(16)
- elif i == 7:
- deviceId = "6007".zfill(16)
- elif i >= 8 and i <= 17:
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i >= 18 and i <= 27:
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i == 28:
- deviceId = "2800".zfill(16)
- mappings[ macId ] = deviceId
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- if hosts[ controller ] == []:
- main.log.warn( "There are no hosts discovered" )
- zeroHosts = True
- else:
- for host in hosts[ controller ]:
- mac = None
- location = None
- device = None
- port = None
- try:
- mac = host.get( 'mac' )
- assert mac, "mac field could not be found for this host object"
-
- location = host.get( 'location' )
- assert location, "location field could not be found for this host object"
-
- # Trim the protocol identifier off deviceId
- device = str( location.get( 'elementId' ) ).split(':')[1]
- assert device, "elementId field could not be found for this host location object"
-
- port = location.get( 'port' )
- assert port, "port field could not be found for this host location object"
-
- # Now check if this matches where they should be
- if mac and device and port:
- if str( port ) != "1":
- main.log.error( "The attachment port is incorrect for " +
- "host " + str( mac ) +
- ". Expected: 1 Actual: " + str( port) )
- hostAttachment = False
- if device != mappings[ str( mac ) ]:
- main.log.error( "The attachment device is incorrect for " +
- "host " + str( mac ) +
- ". Expected: " + mappings[ str( mac ) ] +
- " Actual: " + device )
- hostAttachment = False
- else:
- hostAttachment = False
- except AssertionError:
- main.log.exception( "Json object not as expected" )
- main.log.error( repr( host ) )
- hostAttachment = False
- else:
- main.log.error( "No hosts json output or \"Error\"" +
- " in output. hosts = " +
- repr( hosts[ controller ] ) )
- if zeroHosts is False:
- hostAttachment = True
-
- # END CHECKING HOST ATTACHMENT POINTS
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
- hostAttachmentResults = hostAttachmentResults and\
- hostAttachment
- topoResult = ( devicesResults and linksResults
- and hostsResults and ipResult and
- hostAttachmentResults )
-
- # Compare json objects for hosts and dataplane clusters
-
- # hosts
- main.step( "Hosts view is consistent across all ONOS nodes" )
- consistentHostsResult = main.TRUE
- for controller in range( len( hosts ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in hosts[ controller ]:
- if hosts[ controller ] == hosts[ 0 ]:
- continue
- else: # hosts not consistent
- main.log.error( "hosts from ONOS" + controllerStr +
- " is inconsistent with ONOS1" )
- main.log.warn( repr( hosts[ controller ] ) )
- consistentHostsResult = main.FALSE
-
- else:
- main.log.error( "Error in getting ONOS hosts from ONOS" +
- controllerStr )
- consistentHostsResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " hosts response: " +
- repr( hosts[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentHostsResult,
- onpass="Hosts view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of hosts" )
-
- main.step( "Hosts information is correct" )
- hostsResults = hostsResults and ipResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Host information is correct",
- onfail="Host information is incorrect" )
-
- main.step( "Host attachment points to the network" )
- utilities.assert_equals(
- expect=True,
- actual=hostAttachmentResults,
- onpass="Hosts are correctly attached to the network",
- onfail="ONOS did not correctly attach hosts to the network" )
-
- # Strongly connected clusters of devices
- main.step( "Clusters view is consistent across all ONOS nodes" )
- consistentClustersResult = main.TRUE
- for controller in range( len( clusters ) ):
- controllerStr = str( controller + 1 )
- if "Error" not in clusters[ controller ]:
- if clusters[ controller ] == clusters[ 0 ]:
- continue
- else: # clusters not consistent
- main.log.error( "clusters from ONOS" +
- controllerStr +
- " is inconsistent with ONOS1" )
- consistentClustersResult = main.FALSE
-
- else:
- main.log.error( "Error in getting dataplane clusters " +
- "from ONOS" + controllerStr )
- consistentClustersResult = main.FALSE
- main.log.warn( "ONOS" + controllerStr +
- " clusters response: " +
- repr( clusters[ controller ] ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentClustersResult,
- onpass="Clusters view is consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of clusters" )
-
- main.step( "There is only one SCC" )
- # there should always only be one cluster
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[0] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- topoResult = ( devicesResults and linksResults
- and hostsResults and consistentHostsResult
- and consistentClustersResult and clusterResults
- and ipResult and hostAttachmentResults )
-
- topoResult = topoResult and int( count <= 2 )
- note = "note it takes about " + str( int( cliTime ) ) + \
- " seconds for the test to make all the cli calls to fetch " +\
- "the topology from each ONOS instance"
- main.log.info(
- "Very crass estimate for topology discovery/convergence( " +
- str( note ) + " ): " + str( elapsed ) + " seconds, " +
- str( count ) + " tries" )
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- main.step( "Hosts are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Hosts are correct",
- onfail="Hosts are incorrect" )
-
- # FIXME: move this to an ONOS state case
- main.step( "Checking ONOS nodes" )
- nodesOutput = []
- nodeResults = main.TRUE
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].nodes,
- name="nodes-" + str( i ),
- args=[ ] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- nodesOutput.append( t.result )
- ips = [ node.ip_address for node in nodes ]
- for i in nodesOutput:
- try:
- current = json.loads( i )
- for node in current:
- currentResult = main.FALSE
- if node['ip'] in ips: # node in nodes() output is in cell
- if node['state'] == 'ACTIVE':
- currentResult = main.TRUE
- else:
- main.log.error( "Error in ONOS node availability" )
- main.log.error(
- json.dumps( current,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- break
- nodeResults = nodeResults and currentResult
- except ( ValueError, TypeError ):
- main.log.error( "Error parsing nodes output" )
- main.log.warn( repr( i ) )
- utilities.assert_equals( expect=main.TRUE, actual=nodeResults,
- onpass="Nodes check successful",
- onfail="Nodes check NOT successful" )
-
- def CASE9( self, main ):
- """
- Link s3-s28 down
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Turn off a link to ensure that Link Discovery " +\
- "is working properly"
- main.case( description )
-
- main.step( "Kill Link between s3 and s28" )
- LinkDown = main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link down to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkDown,
- onpass="Link down successful",
- onfail="Failed to bring link down" )
- # TODO do some sort of check here
-
- def CASE10( self, main ):
- """
- Link s3-s28 up
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Restore a link to ensure that Link Discovery is " + \
- "working properly"
- main.case( description )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link up to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkUp,
- onpass="Link up successful",
- onfail="Failed to bring link up" )
- # TODO do some sort of check here
-
- def CASE11( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.case( description )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
-
- # TODO: Make this switch parameterizable
- main.step( "Kill " + switch )
- main.log.info( "Deleting " + switch )
- main.Mininet1.delSwitch( switch )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ] is False:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Kill switch successful",
- onfail="Failed to kill switch?" )
-
- def CASE12( self, main ):
- """
- Switch Up
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
- links = main.params[ 'kill' ][ 'links' ].split()
- description = "Adding a switch to ensure it is discovered correctly"
- main.case( description )
-
- main.step( "Add back " + switch )
- main.Mininet1.addSwitch( switch, dpid=switchDPID )
- for peer in links:
- main.Mininet1.addLink( switch, peer )
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- main.Mininet1.assignSwController( sw=switch, ip=ipList )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch up to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ]:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="add switch successful",
- onfail="Failed to add switch?" )
-
- def CASE13( self, main ):
- """
- Clean up
- """
- import os
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # printing colors to terminal
- colors = { 'cyan': '\033[96m', 'purple': '\033[95m',
- 'blue': '\033[94m', 'green': '\033[92m',
- 'yellow': '\033[93m', 'red': '\033[91m', 'end': '\033[0m' }
- main.case( "Test Cleanup" )
- main.step( "Killing tcpdumps" )
- main.Mininet2.stopTcpdump()
-
- main.step( "Copying MN pcap and ONOS log files to test station" )
- testname = main.TEST
- teststationUser = main.params[ 'TESTONUSER' ]
- teststationIP = main.params[ 'TESTONIP' ]
- # NOTE: MN Pcap file is being saved to ~/packet_captures
- # scp this file as MN and TestON aren't necessarily the same vm
- # FIXME: scp
- # mn files
- # TODO: Load these from params
- # NOTE: must end in /
- logFolder = "/opt/onos/log/"
- logFiles = [ "karaf.log", "karaf.log.1" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
-
- # std*.log's
- # NOTE: must end in /
- logFolder = "/opt/onos/var/"
- logFiles = [ "stderr.log", "stdout.log" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- for node in nodes:
- main.ONOSbench.handle.sendline( "scp sdn@" + node.ip_address +
- ":" + logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" +
- dstDir + str( testname ) +
- "-" + node.name + "-" + f )
- main.ONOSbench.handle.expect( "\$" )
- # sleep so scp can finish
- time.sleep( 10 )
-
- main.step( "Stopping Mininet" )
- mnResult = main.Mininet1.stopNet()
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet stopped",
- onfail="MN cleanup NOT successful" )
-
- main.step( "Checking ONOS Logs for errors" )
- for node in nodes:
- print colors[ 'purple' ] + "Checking logs for errors on " + \
- node.name + ":" + colors[ 'end' ]
- print main.ONOSbench.checkLogs( node.ip_address )
-
- main.step( "Packing and rotating pcap archives" )
- os.system( "~/TestON/dependencies/rotate.sh " + str( testname ) )
-
- try:
- timerLog = open( main.logdir + "/Timers.csv", 'w')
- # Overwrite with empty line and close
- labels = "Gossip Intents"
- data = str( gossipTime )
- timerLog.write( labels + "\n" + data )
- timerLog.close()
- except NameError, e:
- main.log.exception(e)
-
- def CASE14( self, main ):
- """
- start election app on all onos nodes
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- main.case("Start Leadership Election app")
- main.step( "Install leadership election app" )
- appResult = main.ONOScli1.activateApp( "org.onosproject.election" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=appResult,
- onpass="Election app installed",
- onfail="Something went wrong with installing Leadership election" )
-
- main.step( "Run for election on each node" )
- leaderResult = main.TRUE
- leaders = []
- for cli in CLIs:
- cli.electionTestRun()
- for cli in CLIs:
- leader = cli.electionTestLeader()
- if leader is None or leader == main.FALSE:
- main.log.error( cli.name + ": Leader for the election app " +
- "should be an ONOS node, instead got '" +
- str( leader ) + "'" )
- leaderResult = main.FALSE
- leaders.append( leader )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Successfully ran for leadership",
- onfail="Failed to run for leadership" )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- def CASE15( self, main ):
- """
- Check that Leadership Election is still functional
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- leaderResult = main.TRUE
- description = "Check that Leadership Election is still functional"
- main.case( description )
-
- main.step( "Check that each node shows the same leader" )
- sameLeader = main.TRUE
- leaders = []
- for cli in CLIs:
- leader = cli.electionTestLeader()
- leaders.append( leader )
- if len( set( leaders ) ) != 1:
- sameLeader = main.FALSE
- main.log.error( "Results of electionTestLeader is order of CLIs:" +
- str( leaders ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameLeader,
- onpass="Leadership is consistent for the election topic",
- onfail="Nodes have different leaders" )
-
- main.step( "Find current leader and withdraw" )
- leader = main.ONOScli1.electionTestLeader()
- # do some sanity checking on leader before using it
- withdrawResult = main.FALSE
- if leader is None or leader == main.FALSE:
- main.log.error(
- "Leader for the election app should be an ONOS node," +
- "instead got '" + str( leader ) + "'" )
- leaderResult = main.FALSE
- oldLeader = None
- for i in range( len( CLIs ) ):
- if leader == nodes[ i ].ip_address:
- oldLeader = CLIs[ i ]
- break
- else: # FOR/ELSE statement
- main.log.error( "Leader election, could not find current leader" )
- if oldLeader:
- withdrawResult = oldLeader.electionTestWithdraw()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=withdrawResult,
- onpass="Node was withdrawn from election",
- onfail="Node was not withdrawn from election" )
-
- main.step( "Make sure new leader is elected" )
- # FIXME: use threads
- leaderList = []
- for cli in CLIs:
- leaderN = cli.electionTestLeader()
- leaderList.append( leaderN )
- if leaderN == leader:
- main.log.error( cli.name + " still sees " + str( leader ) +
- " as leader after they withdrew" )
- leaderResult = main.FALSE
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, " +
- "check the error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- # node may not have recieved the event yet
- time.sleep(7)
- leaderN = cli.electionTestLeader()
- leaderList.pop()
- leaderList.append( leaderN )
- consistentLeader = main.FALSE
- if len( set( leaderList ) ) == 1:
- main.log.info( "Each Election-app sees '" +
- str( leaderList[ 0 ] ) +
- "' as the leader" )
- consistentLeader = main.TRUE
- else:
- main.log.error(
- "Inconsistent responses for leader of Election-app:" )
- for n in range( len( leaderList ) ):
- main.log.error( "ONOS" + str( n + 1 ) + " response: " +
- str( leaderList[ n ] ) )
- leaderResult = leaderResult and consistentLeader
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- main.step( "Run for election on old leader( just so everyone " +
- "is in the hat )" )
- if oldLeader:
- runResult = oldLeader.electionTestRun()
- else:
- runResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=runResult,
- onpass="App re-ran for election",
- onfail="App failed to run for election" )
-
- main.step( "Leader did not change when old leader re-ran" )
- afterRun = main.ONOScli1.electionTestLeader()
- # verify leader didn't just change
- if afterRun == leaderList[ 0 ]:
- afterResult = main.TRUE
- else:
- afterResult = main.FALSE
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=afterResult,
- onpass="Old leader successfully re-ran for election",
- onfail="Something went wrong with Leadership election after " +
- "the old leader re-ran for election" )
-
- def CASE16( self, main ):
- """
- Install Distributed Primitives app
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # Variables for the distributed primitives tests
- global pCounterName
- global iCounterName
- global pCounterValue
- global iCounterValue
- global onosSet
- global onosSetName
- pCounterName = "TestON-Partitions"
- iCounterName = "TestON-inMemory"
- pCounterValue = 0
- iCounterValue = 0
- onosSet = set([])
- onosSetName = "TestON-set"
-
- description = "Install Primitives app"
- main.case( description )
- main.step( "Install Primitives app" )
- appName = "org.onosproject.distributedprimitives"
- appResults = CLIs[0].activateApp( appName )
- utilities.assert_equals( expect=main.TRUE,
- actual=appResults,
- onpass="Primitives app activated",
- onfail="Primitives app not activated" )
- time.sleep( 5 ) # To allow all nodes to activate
-
- def CASE17( self, main ):
- """
- Check for basic functionality with distributed primitives
- """
- import json
- # Make sure variables are defined/set
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert pCounterName, "pCounterName not defined"
- assert iCounterName, "iCounterName not defined"
- assert onosSetName, "onosSetName not defined"
- # NOTE: assert fails if value is 0/None/Empty/False
- try:
- pCounterValue
- except NameError:
- main.log.error( "pCounterValue not defined, setting to 0" )
- pCounterValue = 0
- try:
- iCounterValue
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
- try:
- onosSet
- except NameError:
- main.log.error( "onosSet not defined, setting to empty Set" )
- onosSet = set([])
- # Variables for the distributed primitives tests. These are local only
- addValue = "a"
- addAllValue = "a b c d e f"
- retainValue = "c d e f"
-
- description = "Check for basic functionality with distributed " +\
- "primitives"
- main.case( description )
- main.caseExplaination = "Test the methods of the distributed primitives (counters and sets) throught the cli"
- # DISTRIBUTED ATOMIC COUNTERS
- main.step( "Increment and get a default counter on each node" )
- pCounters = []
- threads = []
- addedPValues = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="counterIncrement-" + str( i ),
- args=[ pCounterName ] )
- pCounterValue += 1
- addedPValues.append( pCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- pCounters.append( t.result )
- # Check that counter incremented numController times
- pCounterResults = True
- for i in addedPValues:
- tmpResult = i in pCounters
- pCounterResults = pCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in partitioned "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=pCounterResults,
- onpass="Default counter incremented",
- onfail="Error incrementing default" +
- " counter" )
-
- main.step( "Increment and get an in memory counter on each node" )
- iCounters = []
- addedIValues = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="icounterIncrement-" + str( i ),
- args=[ iCounterName ],
- kwargs={ "inMemory": True } )
- iCounterValue += 1
- addedIValues.append( iCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- iCounters.append( t.result )
- # Check that counter incremented numController times
- iCounterResults = True
- for i in addedIValues:
- tmpResult = i in iCounters
- iCounterResults = iCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in the in-memory "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=iCounterResults,
- onpass="In memory counter incremented",
- onfail="Error incrementing in memory" +
- " counter" )
-
- main.step( "Check counters are consistant across nodes" )
- onosCounters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counters,
- name="counters-" + str( i ) )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- onosCounters.append( t.result )
- tmp = [ i == onosCounters[ 0 ] for i in onosCounters ]
- if all( tmp ):
- main.log.info( "Counters are consistent across all nodes" )
- consistentCounterResults = main.TRUE
- else:
- main.log.error( "Counters are not consistent across all nodes" )
- consistentCounterResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=consistentCounterResults,
- onpass="ONOS counters are consistent " +
- "across nodes",
- onfail="ONOS Counters are inconsistent " +
- "across nodes" )
-
- main.step( "Counters we added have the correct values" )
- correctResults = main.TRUE
- for i in range( numControllers ):
- current = json.loads( onosCounters[i] )
- pValue = None
- iValue = None
- try:
- for database in current:
- partitioned = database.get( 'partitionedDatabaseCounters' )
- if partitioned:
- for value in partitioned:
- if value.get( 'name' ) == pCounterName:
- pValue = value.get( 'value' )
- break
- inMemory = database.get( 'inMemoryDatabaseCounters' )
- if inMemory:
- for value in inMemory:
- if value.get( 'name' ) == iCounterName:
- iValue = value.get( 'value' )
- break
- except AttributeError, e:
- main.log.error( "ONOS" + str( i + 1 ) + " counters result " +
- "is not as expected" )
- correctResults = main.FALSE
- if pValue == pCounterValue:
- main.log.info( "Partitioned counter value is correct" )
- else:
- main.log.error( "Partitioned counter value is incorrect," +
- " expected value: " + str( pCounterValue )
- + " current value: " + str( pValue ) )
- correctResults = main.FALSE
- if iValue == iCounterValue:
- main.log.info( "In memory counter value is correct" )
- else:
- main.log.error( "In memory counter value is incorrect, " +
- "expected value: " + str( iCounterValue ) +
- " current value: " + str( iValue ) )
- correctResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=correctResults,
- onpass="Added counters are correct",
- onfail="Added counters are incorrect" )
- # DISTRIBUTED SETS
- main.step( "Distributed Set get" )
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
-
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=getResults,
- onpass="Set elements are correct",
- onfail="Set elements are incorrect" )
-
- main.step( "Distributed Set size" )
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
-
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- utilities.assert_equals( expect=main.TRUE,
- actual=sizeResults,
- onpass="Set sizes are correct",
- onfail="Set sizes are incorrect" )
-
- main.step( "Distributed Set add()" )
- onosSet.add( addValue )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAdd-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addResults = main.FALSE
- else:
- # unexpected result
- addResults = main.FALSE
- if addResults != main.TRUE:
- main.log.error( "Error executing set add" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addResults = addResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addResults,
- onpass="Set add correct",
- onfail="Set add was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set contains()" )
- containsResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContains-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsResponses.append( t.result )
-
- containsResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsResults,
- onpass="Set contains is functional",
- onfail="Set contains failed" )
-
- main.step( "Distributed Set containsAll()" )
- containsAllResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContainsAll-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addAllValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsAllResponses.append( t.result )
-
- containsAllResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsAllResults,
- onpass="Set containsAll is functional",
- onfail="Set containsAll failed" )
-
- main.step( "Distributed Set remove()" )
- onosSet.remove( addValue )
- removeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemove-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeResults = main.TRUE
- for i in range( numControllers ):
- if removeResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeResponses[ i ] == main.ERROR:
- # Error in execution
- removeResults = main.FALSE
- else:
- # unexpected result
- removeResults = main.FALSE
- if removeResults != main.TRUE:
- main.log.error( "Error executing set remove" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeResults = removeResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeResults,
- onpass="Set remove correct",
- onfail="Set remove was incorrect" )
-
- main.step( "Distributed Set removeAll()" )
- onosSet.difference_update( addAllValue.split() )
- removeAllResponses = []
- threads = []
- try:
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemoveAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeAllResponses.append( t.result )
- except Exception, e:
- main.log.exception(e)
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeAllResults = main.TRUE
- for i in range( numControllers ):
- if removeAllResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeAllResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeAllResponses[ i ] == main.ERROR:
- # Error in execution
- removeAllResults = main.FALSE
- else:
- # unexpected result
- removeAllResults = main.FALSE
- if removeAllResults != main.TRUE:
- main.log.error( "Error executing set removeAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeAllResults = removeAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeAllResults,
- onpass="Set removeAll correct",
- onfail="Set removeAll was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set clear()" )
- onosSet.clear()
- clearResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestClear-" + str( i ),
- args=[ onosSetName, " "], # Values doesn't matter
- kwargs={ "clear": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- clearResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- clearResults = main.TRUE
- for i in range( numControllers ):
- if clearResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif clearResponses[ i ] == main.FALSE:
- # Nothing set, probably fine
- pass
- elif clearResponses[ i ] == main.ERROR:
- # Error in execution
- clearResults = main.FALSE
- else:
- # unexpected result
- clearResults = main.FALSE
- if clearResults != main.TRUE:
- main.log.error( "Error executing set clear" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- clearResults = clearResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=clearResults,
- onpass="Set clear correct",
- onfail="Set clear was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set retain()" )
- onosSet.intersection_update( retainValue.split() )
- retainResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRetain-" + str( i ),
- args=[ onosSetName, retainValue ],
- kwargs={ "retain": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- retainResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- retainResults = main.TRUE
- for i in range( numControllers ):
- if retainResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif retainResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif retainResponses[ i ] == main.ERROR:
- # Error in execution
- retainResults = main.FALSE
- else:
- # unexpected result
- retainResults = main.FALSE
- if retainResults != main.TRUE:
- main.log.error( "Error executing set retain" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " +
- str( size ) + " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- retainResults = retainResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=retainResults,
- onpass="Set retain correct",
- onfail="Set retain was incorrect" )
-
diff --git a/TestON/tests/HATestSanity/HATestSanity.topo b/TestON/tests/HATestSanity/HATestSanity.topo
deleted file mode 100644
index 0855d4e..0000000
--- a/TestON/tests/HATestSanity/HATestSanity.topo
+++ /dev/null
@@ -1,170 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
-
- <ONOScli4>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli4>
-
-
- <ONOScli5>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli5>
-
-
- <ONOScli6>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli6>
-
-
- <ONOScli7>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli7>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.30.12</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.30.13</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.128.30.14</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.128.30.15</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.128.30.16</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.128.30.17</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> none </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/HATestSanity/__init__.py b/TestON/tests/HATestSanity/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/HATestSanity/__init__.py
+++ /dev/null
diff --git a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.params b/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.params
deleted file mode 100644
index 108ab88..0000000
--- a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.params
+++ /dev/null
@@ -1,88 +0,0 @@
-<PARAMS>
- #CASE1: Compile ONOS and push it to the test machines
- #CASE2: Assign mastership to controllers
- #CASE3: Assign intents
- #CASE4: Ping across added host intents
- #CASE5: Reading state of ONOS
- #CASE6: The Failure case. Since this is the Sanity test, we do nothing.
- #CASE7: Check state after control plane failure
- #CASE8: Compare topo
- #CASE9: Link s3-s28 down
- #CASE10: Link s3-s28 up
- #CASE11: Switch down
- #CASE12: Switch up
- #CASE13: Clean up
- #CASE14: start election app on all onos nodes
- #CASE15: Check that Leadership Election is still functional
- #1,2,8,3,4,5,14,[6],8,3,7,4,15,9,8,4,10,8,4,11,8,4,12,8,4,13
- #extra hosts test 1,2,8,11,8,12,8
- <testcases>1,2,8,3,4,5,14,15,16,17,[6],8,3,7,4,15,17,9,8,4,10,8,4,11,8,4,12,8,4,13</testcases>
- <ENV>
- <cellName>HA</cellName>
- </ENV>
- <Git>False</Git>
- <branch> master </branch>
- <num_controllers> 1 </num_controllers>
- <tcpdump> False </tcpdump>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
-
- <ip2>10.128.30.12</ip2>
- <port2>6633</port2>
-
- <ip3>10.128.30.13</ip3>
- <port3>6633</port3>
-
- <ip4>10.128.30.14</ip4>
- <port4>6633</port4>
-
- <ip5>10.128.30.15</ip5>
- <port5>6633</port5>
-
- <ip6>10.128.30.16</ip6>
- <port6>6633</port6>
-
- <ip7>10.128.30.17</ip7>
- <port7>6633</port7>
- </CTRL>
- <TESTONUSER>admin</TESTONUSER>
- <TESTONIP>10.128.30.9</TESTONIP>
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
- <timers>
- <LinkDiscovery>.2</LinkDiscovery>
- <SwitchDiscovery>.2</SwitchDiscovery>
- </timers>
- <kill>
- <switch> s5 </switch>
- <dpid> 0000000000005000 </dpid>
- <links> h5 s2 s1 s6 </links>
- </kill>
- <MNtcpdump>
- <intf>eth0</intf>
- <port> </port>
- <folder>~/packet_captures/</folder>
- </MNtcpdump>
-</PARAMS>
diff --git a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.py b/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.py
deleted file mode 100644
index 4dcf0dd..0000000
--- a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.py
+++ /dev/null
@@ -1,3054 +0,0 @@
-"""
-Description: This test is to determine if a single
- instance ONOS 'cluster' can handle a restart
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machines
-CASE2: Assign devices to controllers
-CASE21: Assign mastership to controllers
-CASE3: Assign intents
-CASE4: Ping across added host intents
-CASE5: Reading state of ONOS
-CASE6: The Failure case.
-CASE7: Check state after control plane failure
-CASE8: Compare topo
-CASE9: Link s3-s28 down
-CASE10: Link s3-s28 up
-CASE11: Switch down
-CASE12: Switch up
-CASE13: Clean up
-CASE14: start election app on all onos nodes
-CASE15: Check that Leadership Election is still functional
-CASE16: Install Distributed Primitives app
-CASE17: Check for basic functionality with distributed primitives
-"""
-
-
-class HATestSingleInstanceRestart:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- cell <name>
- onos-verify-cell
- NOTE: temporary - onos-remove-raft-logs
- onos-uninstall
- start mininet
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- start cli sessions
- start tcpdump
- """
- main.log.info( "ONOS Single node cluster restart " +
- "HA test - initialization" )
- main.case( "Setting up test environment" )
- main.caseExplaination = "Setup the test environment including " +\
- "installing ONOS, starting Mininet and ONOS" +\
- "cli sessions."
- # TODO: save all the timers and output them for plotting
-
- # load some variables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- gitBranch = main.params[ 'branch' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # set global variables
- global ONOS1Ip
- global ONOS1Port
- global ONOS2Port
- global ONOS3Port
- global ONOS4Port
- global ONOS5Port
- global ONOS6Port
- global ONOS7Port
- global numControllers
- numControllers = int( main.params[ 'num_controllers' ] )
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- ONOS4Port = main.params[ 'CTRL' ][ 'port4' ]
- ONOS5Port = main.params[ 'CTRL' ][ 'port5' ]
- ONOS6Port = main.params[ 'CTRL' ][ 'port6' ]
- ONOS7Port = main.params[ 'CTRL' ][ 'port7' ]
-
- global CLIs
- CLIs = []
- global nodes
- nodes = []
- for i in range( 1, numControllers + 1 ):
- CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- nodes.append( getattr( main, 'ONOS' + str( i ) ) )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- # FIXME:this is short term fix
- main.log.info( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.log.info( "Uninstalling ONOS" )
- for node in nodes:
- main.ONOSbench.onosUninstall( node.ip_address )
-
- # Make sure ONOS is DEAD
- main.log.info( "Killing any ONOS processes" )
- killResults = main.TRUE
- for node in nodes:
- killed = main.ONOSbench.onosKill( node.ip_address )
- killResults = killResults and killed
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Starting Mininet" )
- mnResult = main.Mininet1.startNet( )
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet Started",
- onfail="Error starting Mininet" )
-
- main.step( "Git checkout and pull " + gitBranch )
- if PULLCODE:
- main.ONOSbench.gitCheckout( gitBranch )
- gitPullResult = main.ONOSbench.gitPull()
- # values of 1 or 3 are good
- utilities.assert_lesser( expect=0, actual=gitPullResult,
- onpass="Git pull successful",
- onfail="Git pull failed" )
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Using mvn clean install" )
- cleanInstallResult = main.TRUE
- if PULLCODE and gitPullResult == main.TRUE:
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- utilities.assert_equals( expect=main.TRUE,
- actual=cleanInstallResult,
- onpass="MCI successful",
- onfail="MCI failed" )
- # GRAPHS
- # NOTE: important params here:
- # job = name of Jenkins job
- # Plot Name = Plot-HA, only can be used if multiple plots
- # index = The number of the graph under plot name
- job = "HASingleInstanceRestart"
- plotName = "Plot-HA"
- graphs = '<ac:structured-macro ac:name="html">\n'
- graphs += '<ac:plain-text-body><![CDATA[\n'
- graphs += '<iframe src="https://onos-jenkins.onlab.us/job/' + job +\
- '/plot/' + plotName + '/getPlot?index=0' +\
- '&width=500&height=300"' +\
- 'noborder="0" width="500" height="300" scrolling="yes" ' +\
- 'seamless="seamless"></iframe>\n'
- graphs += ']]></ac:plain-text-body>\n'
- graphs += '</ac:structured-macro>\n'
- main.log.wiki(graphs)
-
- cellResult = main.ONOSbench.setCell( "SingleHA" )
- verifyResult = main.ONOSbench.verifyCell()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- utilities.assert_equals( expect=main.TRUE, actual=packageResult,
- onpass="ONOS package successful",
- onfail="ONOS package failed" )
-
- main.step( "Installing ONOS package" )
- onosInstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS1Ip )
- utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult,
- onpass="ONOS install successful",
- onfail="ONOS install failed" )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if onos1Isup:
- break
- utilities.assert_equals( expect=main.TRUE, actual=onos1Isup,
- onpass="ONOS startup successful",
- onfail="ONOS startup failed" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.ONOScli1.startOnosCli( ONOS1Ip )
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli startup successful",
- onfail="ONOS cli startup failed" )
-
- if main.params[ 'tcpdump' ].lower() == "true":
- main.step( "Start Packet Capture MN" )
- main.Mininet2.startTcpdump(
- str( main.params[ 'MNtcpdump' ][ 'folder' ] ) + str( main.TEST )
- + "-MN.pcap",
- intf=main.params[ 'MNtcpdump' ][ 'intf' ],
- port=main.params[ 'MNtcpdump' ][ 'port' ] )
-
- main.step( "App Ids check" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- if cliResults == main.FALSE:
- main.log.error( "Failed to start ONOS, stopping test" )
- main.cleanup()
- main.exit()
-
- def CASE2( self, main ):
- """
- Assign devices to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning devices to controllers" )
- main.caseExplaination = "Assign switches to ONOS using 'ovs-vsctl' " +\
- "and check that an ONOS node becomes the " +\
- "master of the device."
- main.step( "Assign switches to controllers" )
-
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- swList = []
- for i in range( 1, 29 ):
- swList.append( "s" + str( i ) )
- main.Mininet1.assignSwController( sw=swList, ip=ipList )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except Exception:
- main.log.info( repr( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- mastershipCheck = main.FALSE
- if mastershipCheck == main.TRUE:
- main.log.info( "Switch mastership assigned correctly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- def CASE21( self, main ):
- """
- Assign mastership to controllers
- """
- import re
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- main.case( "Assigning Controller roles for switches" )
- main.caseExplaination = "Check that ONOS is connected to each " +\
- "device. Then manually assign" +\
- " mastership to specific ONOS nodes using" +\
- " 'device-role'"
- main.step( "Assign mastership of switches to specific controllers" )
- roleCall = main.TRUE
- roleCheck = main.TRUE
- try:
- for i in range( 1, 29 ): # switches 1 through 28
- ip = nodes[ 0 ].ip_address # ONOS1
- # set up correct variables:
- if i == 1:
- deviceId = main.ONOScli1.getDevice( "1000" ).get( 'id' )
- elif i == 2:
- deviceId = main.ONOScli1.getDevice( "2000" ).get( 'id' )
- elif i == 3:
- deviceId = main.ONOScli1.getDevice( "3000" ).get( 'id' )
- elif i == 4:
- deviceId = main.ONOScli1.getDevice( "3004" ).get( 'id' )
- elif i == 5:
- deviceId = main.ONOScli1.getDevice( "5000" ).get( 'id' )
- elif i == 6:
- deviceId = main.ONOScli1.getDevice( "6000" ).get( 'id' )
- elif i == 7:
- deviceId = main.ONOScli1.getDevice( "6007" ).get( 'id' )
- elif i >= 8 and i <= 17:
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i >= 18 and i <= 27:
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = main.ONOScli1.getDevice( dpid ).get( 'id' )
- elif i == 28:
- deviceId = main.ONOScli1.getDevice( "2800" ).get( 'id' )
- else:
- main.log.error( "You didn't write an else statement for " +
- "switch s" + str( i ) )
- # Assign switch
- assert deviceId, "No device id for s" + str( i ) + " in ONOS"
- # TODO: make this controller dynamic
- roleCall = roleCall and main.ONOScli1.deviceRole( deviceId,
- ip )
- # Check assignment
- master = main.ONOScli1.getRole( deviceId ).get( 'master' )
- if ip in master:
- roleCheck = roleCheck and main.TRUE
- else:
- roleCheck = roleCheck and main.FALSE
- main.log.error( "Error, controller " + ip + " is not" +
- " master " + "of device " +
- str( deviceId ) + ". Master is " +
- repr( master ) + "." )
- except ( AttributeError, AssertionError ):
- main.log.exception( "Something is wrong with ONOS device view" )
- main.log.info( main.ONOScli1.devices() )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCall,
- onpass="Re-assigned switch mastership to designated controller",
- onfail="Something wrong with deviceRole calls" )
-
- main.step( "Check mastership was correctly assigned" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=roleCheck,
- onpass="Switches were successfully reassigned to designated " +
- "controller",
- onfail="Switches were not successfully reassigned" )
-
- def CASE3( self, main ):
- """
- Assign intents
- """
- import time
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- # NOTE: we must reinstall intents until we have a persistant intent
- # datastore!
- main.case( "Adding host Intents" )
- main.caseExplaination = "Discover hosts by using pingall then " +\
- "assign predetermined host-to-host intents." +\
- " After installation, check that the intent" +\
- " is distributed to all nodes and the state" +\
- " is INSTALLED"
-
- # install onos-app-fwd
- main.step( "Install reactive forwarding app" )
- installResults = CLIs[0].activateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=installResults,
- onpass="Install fwd successful",
- onfail="Install fwd failed" )
-
- main.step( "Check app ids" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Discovering Hosts( Via pingall for now )" )
- # FIXME: Once we have a host discovery mechanism, use that instead
- # REACTIVE FWD test
- pingResult = main.FALSE
- for i in range(2): # Retry if pingall fails first time
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- if i == 0:
- utilities.assert_equals(
- expect=main.TRUE,
- actual=pingResult,
- onpass="Reactive Pingall test passed",
- onfail="Reactive Pingall failed, " +
- "one or more ping pairs failed" )
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" %
- ( time2 - time1 ) )
- # timeout for fwd flows
- time.sleep( 11 )
- # uninstall onos-app-fwd
- main.step( "Uninstall reactive forwarding app" )
- uninstallResult = CLIs[0].deactivateApp( "org.onosproject.fwd" )
- utilities.assert_equals( expect=main.TRUE, actual=uninstallResult,
- onpass="Uninstall fwd successful",
- onfail="Uninstall fwd failed" )
-
- main.step( "Check app ids" )
- appCheck2 = main.ONOScli1.appToIDCheck()
- if appCheck2 != main.TRUE:
- main.log.warn( CLIs[0].apps() )
- main.log.warn( CLIs[0].appIDs() )
- utilities.assert_equals( expect=main.TRUE, actual=appCheck2,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
-
- main.step( "Add host intents via cli" )
- intentIds = []
- # TODO: move the host numbers to params
- # Maybe look at all the paths we ping?
- intentAddResult = True
- hostResult = main.TRUE
- for i in range( 8, 18 ):
- main.log.info( "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: getHost can return None
- host1Dict = main.ONOScli1.getHost( host1 )
- host2Dict = main.ONOScli1.getHost( host2 )
- host1Id = None
- host2Id = None
- if host1Dict and host2Dict:
- host1Id = host1Dict.get( 'id', None )
- host2Id = host2Dict.get( 'id', None )
- if host1Id and host2Id:
- tmpId = main.ONOScli1.addHostIntent( host1Id, host2Id )
- if tmpId:
- main.log.info( "Added intent with id: " + tmpId )
- intentIds.append( tmpId )
- else:
- main.log.error( "addHostIntent returned: " +
- repr( tmpId ) )
- else:
- main.log.error( "Error, getHost() failed for h" + str( i ) +
- " and/or h" + str( i + 10 ) )
- hosts = main.ONOScli1.hosts()
- main.log.warn( "Hosts output: " )
- try:
- main.log.warn( json.dumps( json.loads( hosts ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( hosts ) )
- hostResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE, actual=hostResult,
- onpass="Found a host id for each host",
- onfail="Error looking up host ids" )
-
- intentStart = time.time()
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- for intent in intentIds:
- if intent in onosIds:
- pass # intent submitted is in onos
- else:
- intentAddResult = False
- if intentAddResult:
- intentStop = time.time()
- else:
- intentStop = None
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- installedCheck = True
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- missingIntents = False
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- missingIntents = True
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- response = main.ONOScli1.leaders( jsonFormat=False)
- main.log.warn( "ONOS1 leaders output: \n" +
- str( response ) )
-
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- intentAddResult = bool( intentAddResult and not missingIntents and
- installedCheck )
- if not intentAddResult:
- main.log.error( "Error in pushing host intents to ONOS" )
-
- main.step( "Intent Anti-Entropy dispersion" )
- for i in range(100):
- correct = True
- main.log.info( "Submitted intents: " + str( sorted( intentIds ) ) )
- for cli in CLIs:
- onosIds = []
- ids = cli.getAllIntentsId()
- onosIds.append( ids )
- main.log.debug( "Intents in " + cli.name + ": " +
- str( sorted( onosIds ) ) )
- if sorted( ids ) != sorted( intentIds ):
- main.log.warn( "Set of intent IDs doesn't match" )
- correct = False
- break
- else:
- intents = json.loads( cli.intents() )
- for intent in intents:
- if intent[ 'state' ] != "INSTALLED":
- main.log.warn( "Intent " + intent[ 'id' ] +
- " is " + intent[ 'state' ] )
- correct = False
- break
- if correct:
- break
- else:
- time.sleep(1)
- if not intentStop:
- intentStop = time.time()
- global gossipTime
- gossipTime = intentStop - intentStart
- main.log.info( "It took about " + str( gossipTime ) +
- " seconds for all intents to appear in each node" )
- # FIXME: make this time configurable/calculate based off of number of
- # nodes and gossip rounds
- utilities.assert_greater_equals(
- expect=40, actual=gossipTime,
- onpass="ECM anti-entropy for intents worked within " +
- "expected time",
- onfail="Intent ECM anti-entropy took too long" )
- if gossipTime <= 40:
- intentAddResult = True
-
- if not intentAddResult or "key" in pendingMap:
- import time
- installedCheck = True
- main.log.info( "Sleeping 60 seconds to see if intents are found" )
- time.sleep( 60 )
- onosIds = main.ONOScli1.getAllIntentsId()
- main.log.info( "Submitted intents: " + str( intentIds ) )
- main.log.info( "Intents in ONOS: " + str( onosIds ) )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- try:
- for intent in json.loads( intents ):
- # Iter through intents of a node
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents" )
- # add submitted intents not in the store
- tmplist = [ i for i, s in intentStates ]
- for i in intentIds:
- if i not in tmplist:
- intentStates.append( ( i, " - " ) )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # Check all nodes
- if missing:
- response = main.ONOScli1.leaders( jsonFormat=False)
- main.log.warn( "ONOS1 leaders output: \n" +
- str( response ) )
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- def CASE4( self, main ):
- """
- Ping across added host intents
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- main.case( "Verify connectivity by sendind traffic across Intents" )
- main.caseExplaination = "Ping across added host intents to check " +\
- "functionality and check the state of " +\
- "the intent"
- main.step( "Ping across added host intents" )
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- main.step( "Check Intent state" )
- installedCheck = True
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- # Print states
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- utilities.assert_equals( expect=True, actual=installedCheck,
- onpass="Intents are all INSTALLED",
- onfail="Intents are not all in " +
- "INSTALLED state" )
-
- main.step( "Check leadership of topics" )
- leaders = main.ONOScli1.leaders()
- topicCheck = main.TRUE
- try:
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- # TODO: Look at Devices as topics now that it uses this system
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- # FIXME: topics.append( "org.onosproject.election" )
- # Print leaders output
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- topicCheck = main.FALSE
- else:
- main.log.error( "leaders() returned None" )
- topicCheck = main.FALSE
- except ( ValueError, TypeError ):
- topicCheck = main.FALSE
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- # TODO: Check for a leader of these topics
- utilities.assert_equals( expect=main.TRUE, actual=topicCheck,
- onpass="intent Partitions is in leaders",
- onfail="Some topics were lost " )
- # Print partitions
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- # Print Pending Map
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
-
- if not installedCheck:
- main.log.info( "Waiting 60 seconds to see if the state of " +
- "intents change" )
- time.sleep( 60 )
- # Print the intent states
- intents = main.ONOScli1.intents()
- intentStates = []
- main.log.info( "%-6s%-15s%-15s" % ( 'Count', 'ID', 'State' ) )
- count = 0
- # Iter through intents of a node
- try:
- for intent in json.loads( intents ):
- state = intent.get( 'state', None )
- if "INSTALLED" not in state:
- installedCheck = False
- intentId = intent.get( 'id', None )
- intentStates.append( ( intentId, state ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing intents." )
- intentStates.sort()
- for i, s in intentStates:
- count += 1
- main.log.info( "%-6s%-15s%-15s" %
- ( str( count ), str( i ), str( s ) ) )
- leaders = main.ONOScli1.leaders()
- try:
- missing = False
- if leaders:
- parsedLeaders = json.loads( leaders )
- main.log.warn( json.dumps( parsedLeaders,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # check for all intent partitions
- # check for election
- topics = []
- for i in range( 14 ):
- topics.append( "intent-partition-" + str( i ) )
- # FIXME: this should only be after we start the app
- topics.append( "org.onosproject.election" )
- main.log.debug( topics )
- ONOStopics = [ j['topic'] for j in parsedLeaders ]
- for topic in topics:
- if topic not in ONOStopics:
- main.log.error( "Error: " + topic +
- " not in leaders" )
- missing = True
- else:
- main.log.error( "leaders() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing leaders" )
- main.log.error( repr( leaders ) )
- if missing:
- response = main.ONOScli1.leaders( jsonFormat=False)
- main.log.warn( "ONOS1 leaders output: \n" +
- str( response ) )
- partitions = main.ONOScli1.partitions()
- try:
- if partitions :
- parsedPartitions = json.loads( partitions )
- main.log.warn( json.dumps( parsedPartitions,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check for a leader in all paritions
- # TODO check for consistency among nodes
- else:
- main.log.error( "partitions() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing partitions" )
- main.log.error( repr( partitions ) )
- pendingMap = main.ONOScli1.pendingMap()
- try:
- if pendingMap :
- parsedPending = json.loads( pendingMap )
- main.log.warn( json.dumps( parsedPending,
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- # TODO check something here?
- else:
- main.log.error( "pendingMap() returned None" )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing pending map" )
- main.log.error( repr( pendingMap ) )
- # Print flowrules
- main.log.debug( CLIs[0].flows( jsonFormat=False ) )
- main.step( "Wait a minute then ping again" )
- # the wait is above
- PingResult = main.TRUE
- for i in range( 8, 18 ):
- ping = main.Mininet1.pingHost( src="h" + str( i ),
- target="h" + str( i + 10 ) )
- PingResult = PingResult and ping
- if ping == main.FALSE:
- main.log.warn( "Ping failed between h" + str( i ) +
- " and h" + str( i + 10 ) )
- elif ping == main.TRUE:
- main.log.info( "Ping test passed!" )
- # Don't set PingResult or you'd override failures
- if PingResult == main.FALSE:
- main.log.error(
- "Intents have not been installed correctly, pings failed." )
- # TODO: pretty print
- main.log.warn( "ONOS1 intents: " )
- try:
- tmpIntents = main.ONOScli1.intents()
- main.log.warn( json.dumps( json.loads( tmpIntents ),
- sort_keys=True,
- indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.warn( repr( tmpIntents ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=PingResult,
- onpass="Intents have been installed correctly and pings work",
- onfail="Intents have not been installed correctly, pings failed." )
-
- def CASE5( self, main ):
- """
- Reading state of ONOS
- """
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
-
- main.case( "Setting up and gathering data for current state" )
- # The general idea for this test case is to pull the state of
- # ( intents,flows, topology,... ) from each ONOS node
- # We can then compare them with each other and also with past states
-
- main.step( "Check that each switch has a master" )
- global mastershipState
- mastershipState = '[]'
-
- # Assert that each device has a master
- rolesNotNull = main.ONOScli1.rolesNotNull()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Get the Mastership of each switch" )
- ONOS1Mastership = main.ONOScli1.roles()
- # TODO: Make this a meaningful check
- if "Error" in ONOS1Mastership or not ONOS1Mastership:
- main.log.error( "Error in getting ONOS roles" )
- main.log.warn(
- "ONOS1 mastership response: " +
- repr( ONOS1Mastership ) )
- consistentMastership = main.FALSE
- else:
- mastershipState = ONOS1Mastership
- consistentMastership = main.TRUE
-
- main.step( "Get the intents from each controller" )
- global intentState
- intentState = []
- ONOS1Intents = main.ONOScli1.intents( jsonFormat=True )
- intentCheck = main.FALSE
- if "Error" in ONOS1Intents or not ONOS1Intents:
- main.log.error( "Error in getting ONOS intents" )
- main.log.warn( "ONOS1 intents response: " + repr( ONOS1Intents ) )
- else:
- intentCheck = main.TRUE
-
- main.step( "Get the flows from each controller" )
- global flowState
- flowState = []
- flowCheck = main.FALSE
- ONOS1Flows = main.ONOScli1.flows( jsonFormat=True )
- if "Error" in ONOS1Flows or not ONOS1Flows:
- main.log.error( "Error in getting ONOS flows" )
- main.log.warn( "ONOS1 flows repsponse: " + ONOS1Flows )
- else:
- # TODO: Do a better check, maybe compare flows on switches?
- flowState = ONOS1Flows
- flowCheck = main.TRUE
-
- main.step( "Get the OF Table entries" )
- global flows
- flows = []
- for i in range( 1, 29 ):
- flows.append( main.Mininet2.getFlowTable( 1.3, "s" + str( i ) ) )
- if flowCheck == main.FALSE:
- for table in flows:
- main.log.warn( table )
- # TODO: Compare switch flow tables with ONOS flow tables
-
- main.step( "Collecting topology information from ONOS" )
- devices = []
- devices.append( main.ONOScli1.devices() )
- hosts = []
- hosts.append( json.loads( main.ONOScli1.hosts() ) )
- ports = []
- ports.append( main.ONOScli1.ports() )
- links = []
- links.append( main.ONOScli1.links() )
- clusters = []
- clusters.append( main.ONOScli1.clusters() )
-
- main.step( "Each host has an IP address" )
- ipResult = main.TRUE
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host is None or host.get( 'ipAddresses', [] ) == []:
- main.log.error(
- "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=ipResult,
- onpass="The ips of the hosts aren't empty",
- onfail="The ip of at least one host is missing" )
-
- # there should always only be one cluster
- main.step( "There is only one dataplane cluster" )
- try:
- numClusters = len( json.loads( clusters[ 0 ] ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Error parsing clusters[0]: " +
- repr( clusters[ 0 ] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
-
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
-
- main.step( "Device information is correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=devicesResults,
- onpass="Device information is correct",
- onfail="Device information is incorrect" )
-
- main.step( "Links are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linksResults,
- onpass="Link are correct",
- onfail="Links are incorrect" )
-
- main.step( "Hosts are correct" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=hostsResults,
- onpass="Hosts are correct",
- onfail="Hosts are incorrect" )
-
- def CASE6( self, main ):
- """
- The Failure case.
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
-
- # Reset non-persistent variables
- try:
- iCounterValue = 0
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
-
- main.case( "Restart ONOS node" )
- main.caseExplaination = "Killing ONOS process and restart cli " +\
- "sessions once onos is up."
- main.step( "Killing ONOS processes" )
- killResult = main.ONOSbench.onosKill( ONOS1Ip )
- start = time.time()
- utilities.assert_equals( expect=main.TRUE, actual=killResult,
- onpass="ONOS Killed",
- onfail="Error killing ONOS" )
-
- main.step( "Checking if ONOS is up yet" )
- count = 0
- while count < 10:
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if onos1Isup == main.TRUE:
- elapsed = time.time() - start
- break
- else:
- count = count + 1
- utilities.assert_equals( expect=main.TRUE, actual=onos1Isup,
- onpass="ONOS is back up",
- onfail="ONOS failed to start" )
-
- main.log.step( "Starting ONOS CLI sessions" )
- cliResults = main.ONOScli1.startOnosCli( ONOS1Ip )
- utilities.assert_equals( expect=main.TRUE, actual=cliResults,
- onpass="ONOS cli startup successful",
- onfail="ONOS cli startup failed" )
-
- if elapsed:
- main.log.info( "ESTIMATE: ONOS took %s seconds to restart" %
- str( elapsed ) )
- main.restartTime = elapsed
- else:
- main.restartTime = -1
- time.sleep( 5 )
- # rerun on election apps
- main.ONOScli1.electionTestRun()
-
- def CASE7( self, main ):
- """
- Check state after ONOS failure
- """
- import json
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- main.case( "Running ONOS Constant State Tests" )
- main.step( "Check that each switch has a master" )
- # Assert that each device has a master
- rolesNotNull = main.ONOScli1.rolesNotNull()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=rolesNotNull,
- onpass="Each device has a master",
- onfail="Some devices don't have a master assigned" )
-
- main.step( "Check if switch roles are consistent across all nodes" )
- ONOS1Mastership = main.ONOScli1.roles()
- # FIXME: Refactor this whole case for single instance
- if "Error" in ONOS1Mastership or not ONOS1Mastership:
- main.log.error( "Error in getting ONOS mastership" )
- main.log.warn( "ONOS1 mastership response: " +
- repr( ONOS1Mastership ) )
- consistentMastership = main.FALSE
- else:
- consistentMastership = main.TRUE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=consistentMastership,
- onpass="Switch roles are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of switch roles" )
-
- description2 = "Compare switch roles from before failure"
- main.step( description2 )
-
- currentJson = json.loads( ONOS1Mastership )
- oldJson = json.loads( mastershipState )
- mastershipCheck = main.TRUE
- for i in range( 1, 29 ):
- switchDPID = str(
- main.Mininet1.getSwitchDPID( switch="s" + str( i ) ) )
-
- current = [ switch[ 'master' ] for switch in currentJson
- if switchDPID in switch[ 'id' ] ]
- old = [ switch[ 'master' ] for switch in oldJson
- if switchDPID in switch[ 'id' ] ]
- if current == old:
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- main.log.warn( "Mastership of switch %s changed" % switchDPID )
- mastershipCheck = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Mastership of Switches was not changed",
- onfail="Mastership of some switches changed" )
- mastershipCheck = mastershipCheck and consistentMastership
-
- main.step( "Get the intents and compare across all nodes" )
- ONOS1Intents = main.ONOScli1.intents( jsonFormat=True )
- intentCheck = main.FALSE
- if "Error" in ONOS1Intents or not ONOS1Intents:
- main.log.error( "Error in getting ONOS intents" )
- main.log.warn( "ONOS1 intents response: " + repr( ONOS1Intents ) )
- else:
- intentCheck = main.TRUE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=intentCheck,
- onpass="Intents are consistent across all ONOS nodes",
- onfail="ONOS nodes have different views of intents" )
- # Print the intent states
- intents = []
- intents.append( ONOS1Intents )
- intentStates = []
- for node in intents: # Iter through ONOS nodes
- nodeStates = []
- # Iter through intents of a node
- for intent in json.loads( node ):
- nodeStates.append( intent[ 'state' ] )
- intentStates.append( nodeStates )
- out = [ (i, nodeStates.count( i ) ) for i in set( nodeStates ) ]
- main.log.info( dict( out ) )
-
- # NOTE: Store has no durability, so intents are lost across system
- # restarts
- """
- main.step( "Compare current intents with intents before the failure" )
- # NOTE: this requires case 5 to pass for intentState to be set.
- # maybe we should stop the test if that fails?
- sameIntents = main.FALSE
- if intentState and intentState == ONOSIntents[ 0 ]:
- sameIntents = main.TRUE
- main.log.info( "Intents are consistent with before failure" )
- # TODO: possibly the states have changed? we may need to figure out
- # what the acceptable states are
- elif len( intentState ) == len( ONOSIntents[ 0 ] ):
- sameIntents = main.TRUE
- try:
- before = json.loads( intentState )
- after = json.loads( ONOSIntents[ 0 ] )
- for intent in before:
- if intent not in after:
- sameIntents = main.FALSE
- main.log.debug( "Intent is not currently in ONOS " +
- "(at least in the same form):" )
- main.log.debug( json.dumps( intent ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- if sameIntents == main.FALSE:
- try:
- main.log.debug( "ONOS intents before: " )
- main.log.debug( json.dumps( json.loads( intentState ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- main.log.debug( "Current ONOS intents: " )
- main.log.debug( json.dumps( json.loads( ONOSIntents[ 0 ] ),
- sort_keys=True, indent=4,
- separators=( ',', ': ' ) ) )
- except ( ValueError, TypeError ):
- main.log.exception( "Exception printing intents" )
- main.log.debug( repr( ONOSIntents[0] ) )
- main.log.debug( repr( intentState ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=sameIntents,
- onpass="Intents are consistent with before failure",
- onfail="The Intents changed during failure" )
- intentCheck = intentCheck and sameIntents
- """
- main.step( "Get the OF Table entries and compare to before " +
- "component failure" )
- FlowTables = main.TRUE
- flows2 = []
- for i in range( 28 ):
- main.log.info( "Checking flow table on s" + str( i + 1 ) )
- tmpFlows = main.Mininet2.getFlowTable( 1.3, "s" + str( i + 1 ) )
- flows2.append( tmpFlows )
- tempResult = main.Mininet2.flowComp(
- flow1=flows[ i ],
- flow2=tmpFlows )
- FlowTables = FlowTables and tempResult
- if FlowTables == main.FALSE:
- main.log.info( "Differences in flow table for switch: s" +
- str( i + 1 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=FlowTables,
- onpass="No changes were found in the flow tables",
- onfail="Changes were found in the flow tables" )
-
- main.step( "Leadership Election is still functional" )
- # Test of LeadershipElection
-
- leader = ONOS1Ip
- leaderResult = main.TRUE
- for controller in range( 1, numControllers + 1 ):
- # loop through ONOScli handlers
- node = getattr( main, ( 'ONOScli' + str( controller ) ) )
- leaderN = node.electionTestLeader()
- # verify leader is ONOS1
- # NOTE even though we restarted ONOS, it is the only one so onos 1
- # must be leader
- if leaderN == leader:
- # all is well
- pass
- elif leaderN == main.FALSE:
- # error in response
- main.log.error( "Something is wrong with " +
- "electionTestLeader function, check the" +
- " error logs" )
- leaderResult = main.FALSE
- elif leader != leaderN:
- leaderResult = main.FALSE
- main.log.error( "ONOS" + str( controller ) + " sees " +
- str( leaderN ) +
- " as the leader of the election app. " +
- "Leader should be " + str( leader ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- def CASE8( self, main ):
- """
- Compare topo
- """
- import json
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
-
- main.case( "Compare ONOS Topology view to Mininet topology" )
- main.caseExplaination = "Compare topology objects between Mininet" +\
- " and ONOS"
-
- main.step( "Comparing ONOS topology to MN" )
- devicesResults = main.TRUE
- linksResults = main.TRUE
- hostsResults = main.TRUE
- hostAttachmentResults = True
- topoResult = main.FALSE
- elapsed = 0
- count = 0
- main.step( "Collecting topology information from ONOS" )
- startTime = time.time()
- # Give time for Gossip to work
- while topoResult == main.FALSE and elapsed < 60:
- count += 1
- cliStart = time.time()
- devices = []
- devices.append( main.ONOScli1.devices() )
- hosts = []
- hosts.append( json.loads( main.ONOScli1.hosts() ) )
- ipResult = main.TRUE
- for controller in range( 0, len( hosts ) ):
- controllerStr = str( controller + 1 )
- for host in hosts[ controller ]:
- if host is None or host.get( 'ipAddresses', [] ) == []:
- main.log.error(
- "DEBUG:Error with host ips on controller" +
- controllerStr + ": " + str( host ) )
- ipResult = main.FALSE
- ports = []
- ports.append( main.ONOScli1.ports() )
- links = []
- links.append( main.ONOScli1.links() )
- clusters = []
- clusters.append( main.ONOScli1.clusters() )
-
- elapsed = time.time() - startTime
- cliTime = time.time() - cliStart
- print "CLI time: " + str( cliTime )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
- for controller in range( numControllers ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
-
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- hosts[ controller ] )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
- # CHECKING HOST ATTACHMENT POINTS
- hostAttachment = True
- zeroHosts = False
- # FIXME: topo-HA/obelisk specific mappings:
- # key is mac and value is dpid
- mappings = {}
- for i in range( 1, 29 ): # hosts 1 through 28
- # set up correct variables:
- macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
- if i == 1:
- deviceId = "1000".zfill(16)
- elif i == 2:
- deviceId = "2000".zfill(16)
- elif i == 3:
- deviceId = "3000".zfill(16)
- elif i == 4:
- deviceId = "3004".zfill(16)
- elif i == 5:
- deviceId = "5000".zfill(16)
- elif i == 6:
- deviceId = "6000".zfill(16)
- elif i == 7:
- deviceId = "6007".zfill(16)
- elif i >= 8 and i <= 17:
- dpid = '3' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i >= 18 and i <= 27:
- dpid = '6' + str( i ).zfill( 3 )
- deviceId = dpid.zfill(16)
- elif i == 28:
- deviceId = "2800".zfill(16)
- mappings[ macId ] = deviceId
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- if hosts[ controller ] == []:
- main.log.warn( "There are no hosts discovered" )
- zeroHosts = True
- else:
- for host in hosts[ controller ]:
- mac = None
- location = None
- device = None
- port = None
- try:
- mac = host.get( 'mac' )
- assert mac, "mac field could not be found for this host object"
-
- location = host.get( 'location' )
- assert location, "location field could not be found for this host object"
-
- # Trim the protocol identifier off deviceId
- device = str( location.get( 'elementId' ) ).split(':')[1]
- assert device, "elementId field could not be found for this host location object"
-
- port = location.get( 'port' )
- assert port, "port field could not be found for this host location object"
-
- # Now check if this matches where they should be
- if mac and device and port:
- if str( port ) != "1":
- main.log.error( "The attachment port is incorrect for " +
- "host " + str( mac ) +
- ". Expected: 1 Actual: " + str( port) )
- hostAttachment = False
- if device != mappings[ str( mac ) ]:
- main.log.error( "The attachment device is incorrect for " +
- "host " + str( mac ) +
- ". Expected: " + mappings[ str( mac ) ] +
- " Actual: " + device )
- hostAttachment = False
- else:
- hostAttachment = False
- except AssertionError:
- main.log.exception( "Json object not as expected" )
- main.log.error( repr( host ) )
- hostAttachment = False
- else:
- main.log.error( "No hosts json output or \"Error\"" +
- " in output. hosts = " +
- repr( hosts[ controller ] ) )
- if zeroHosts is False:
- hostAttachment = True
-
-
- devicesResults = devicesResults and currentDevicesResult
- linksResults = linksResults and currentLinksResult
- hostsResults = hostsResults and currentHostsResult
- hostAttachmentResults = hostAttachmentResults and\
- hostAttachment
-
- # "consistent" results don't make sense for single instance
- # there should always only be one cluster
- numClusters = len( json.loads( clusters[ 0 ] ) )
- clusterResults = main.FALSE
- if numClusters == 1:
- clusterResults = main.TRUE
- utilities.assert_equals(
- expect=1,
- actual=numClusters,
- onpass="ONOS shows 1 SCC",
- onfail="ONOS shows " + str( numClusters ) + " SCCs" )
-
- topoResult = ( devicesResults and linksResults
- and hostsResults and ipResult and clusterResults and
- hostAttachmentResults )
-
- topoResult = topoResult and int( count <= 2 )
- note = "note it takes about " + str( int( cliTime ) ) + \
- " seconds for the test to make all the cli calls to fetch " +\
- "the topology from each ONOS instance"
- main.log.info(
- "Very crass estimate for topology discovery/convergence( " +
- str( note ) + " ): " + str( elapsed ) + " seconds, " +
- str( count ) + " tries" )
- utilities.assert_equals( expect=main.TRUE, actual=topoResult,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- def CASE9( self, main ):
- """
- Link s3-s28 down
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Turn off a link to ensure that Link Discovery " +\
- "is working properly"
- main.case( description )
-
- main.step( "Kill Link between s3 and s28" )
- LinkDown = main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link down to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkDown,
- onpass="Link down successful",
- onfail="Failed to bring link down" )
- # TODO do some sort of check here
-
- def CASE10( self, main ):
- """
- Link s3-s28 up
- """
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- # NOTE: You should probably run a topology check after this
-
- linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- description = "Restore a link to ensure that Link Discovery is " + \
- "working properly"
- main.case( description )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- main.log.info( "Waiting " + str( linkSleep ) +
- " seconds for link up to be discovered" )
- time.sleep( linkSleep )
- utilities.assert_equals( expect=main.TRUE, actual=LinkUp,
- onpass="Link up successful",
- onfail="Failed to bring link up" )
- # TODO do some sort of check here
-
- def CASE11( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.case( description )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
-
- # TODO: Make this switch parameterizable
- main.step( "Kill " + switch )
- main.log.info( "Deleting " + switch )
- main.Mininet1.delSwitch( switch )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ] is False:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Kill switch successful",
- onfail="Failed to kill switch?" )
-
- def CASE12( self, main ):
- """
- Switch Up
- """
- # NOTE: You should probably run a topology check after this
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert ONOS1Port, "ONOS1Port not defined"
- assert ONOS2Port, "ONOS2Port not defined"
- assert ONOS3Port, "ONOS3Port not defined"
- assert ONOS4Port, "ONOS4Port not defined"
- assert ONOS5Port, "ONOS5Port not defined"
- assert ONOS6Port, "ONOS6Port not defined"
- assert ONOS7Port, "ONOS7Port not defined"
-
- switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
- switch = main.params[ 'kill' ][ 'switch' ]
- switchDPID = main.params[ 'kill' ][ 'dpid' ]
- links = main.params[ 'kill' ][ 'links' ].split()
- description = "Adding a switch to ensure it is discovered correctly"
- main.case( description )
-
- main.step( "Add back " + switch )
- main.Mininet1.addSwitch( switch, dpid=switchDPID )
- for peer in links:
- main.Mininet1.addLink( switch, peer )
- ipList = []
- for i in range( numControllers ):
- ipList.append( nodes[ i ].ip_address )
- main.Mininet1.assignSwController( sw=switch, ip=ipList )
- main.log.info( "Waiting " + str( switchSleep ) +
- " seconds for switch up to be discovered" )
- time.sleep( switchSleep )
- device = main.ONOScli1.getDevice( dpid=switchDPID )
- # Peek at the deleted switch
- main.log.warn( str( device ) )
- result = main.FALSE
- if device and device[ 'available' ]:
- result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="add switch successful",
- onfail="Failed to add switch?" )
-
- def CASE13( self, main ):
- """
- Clean up
- """
- import os
- import time
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- # printing colors to terminal
- colors = { 'cyan': '\033[96m', 'purple': '\033[95m',
- 'blue': '\033[94m', 'green': '\033[92m',
- 'yellow': '\033[93m', 'red': '\033[91m', 'end': '\033[0m' }
- main.case( "Test Cleanup" )
- main.step( "Killing tcpdumps" )
- main.Mininet2.stopTcpdump()
-
- main.step( "Copying MN pcap and ONOS log files to test station" )
- testname = main.TEST
- teststationUser = main.params[ 'TESTONUSER' ]
- teststationIP = main.params[ 'TESTONIP' ]
- # NOTE: MN Pcap file is being saved to ~/packet_captures
- # scp this file as MN and TestON aren't necessarily the same vm
- # FIXME: scp
- # mn files
- # TODO: Load these from params
- # NOTE: must end in /
- logFolder = "/opt/onos/log/"
- logFiles = [ "karaf.log", "karaf.log.1" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- main.ONOSbench.handle.sendline( "scp sdn@" + ONOS1Ip + ":" +
- logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" + dstDir +
- str( testname ) + "-ONOS1-" + f )
- main.ONOSbench.handle.expect( "\$" )
-
- # std*.log's
- # NOTE: must end in /
- logFolder = "/opt/onos/var/"
- logFiles = [ "stderr.log", "stdout.log" ]
- # NOTE: must end in /
- dstDir = "~/packet_captures/"
- for f in logFiles:
- main.ONOSbench.handle.sendline( "scp sdn@" + ONOS1Ip + ":" +
- logFolder + f + " " +
- teststationUser + "@" +
- teststationIP + ":" + dstDir +
- str( testname ) + "-ONOS1-" + f )
- main.ONOSbench.handle.expect( "\$" )
- # sleep so scp can finish
- time.sleep( 10 )
-
- main.step( "Stopping Mininet" )
- mnResult = main.Mininet1.stopNet()
- utilities.assert_equals( expect=main.TRUE, actual=mnResult,
- onpass="Mininet stopped",
- onfail="MN cleanup NOT successful" )
-
- main.step( "Checking ONOS Logs for errors" )
- print colors[ 'purple' ] + "Checking logs for errors on ONOS1:" + \
- colors[ 'end' ]
- print main.ONOSbench.checkLogs( ONOS1Ip, restart=True )
-
- main.step( "Packing and rotating pcap archives" )
- os.system( "~/TestON/dependencies/rotate.sh " + str( testname ) )
-
- try:
- timerLog = open( main.logdir + "/Timers.csv", 'w')
- # Overwrite with empty line and close
- labels = "Gossip Intents, Restart"
- data = str( gossipTime ) + ", " + str( main.restartTime )
- timerLog.write( labels + "\n" + data )
- timerLog.close()
- except NameError, e:
- main.log.exception(e)
-
- def CASE14( self, main ):
- """
- start election app on all onos nodes
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
-
- main.case("Start Leadership Election app")
- main.step( "Install leadership election app" )
- appResult = main.ONOScli1.activateApp( "org.onosproject.election" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=appResult,
- onpass="Election app installed",
- onfail="Something went wrong with installing Leadership election" )
-
- main.step( "Run for election on each node" )
- leaderResult = main.ONOScli1.electionTestRun()
- # check for leader
- leader = main.ONOScli1.electionTestLeader()
- # verify leader is ONOS1
- if leader == ONOS1Ip:
- # all is well
- pass
- elif leader is None:
- # No leader elected
- main.log.error( "No leader was elected" )
- leaderResult = main.FALSE
- elif leader == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.error( "Something is wrong with electionTestLeader" +
- " function, check the error logs" )
- leaderResult = main.FALSE
- else:
- # error in response
- main.log.error(
- "Unexpected response from electionTestLeader function:'" +
- str( leader ) +
- "'" )
- leaderResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Successfully ran for leadership",
- onfail="Failed to run for leadership" )
-
- def CASE15( self, main ):
- """
- Check that Leadership Election is still functional
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- leaderResult = main.TRUE
- description = "Check that Leadership Election is still functional"
- main.case( description )
- main.step( "Find current leader and withdraw" )
- leader = main.ONOScli1.electionTestLeader()
- # do some sanity checking on leader before using it
- withdrawResult = main.FALSE
- if leader == ONOS1Ip:
- oldLeader = getattr( main, "ONOScli1" )
- elif leader is None or leader == main.FALSE:
- main.log.error(
- "Leader for the election app should be an ONOS node," +
- "instead got '" + str( leader ) + "'" )
- leaderResult = main.FALSE
- oldLeader = None
- else:
- main.log.error( "Leader election --- why am I HERE?!?")
- leaderResult = main.FALSE
- oldLeader = None
- if oldLeader:
- withdrawResult = oldLeader.electionTestWithdraw()
- utilities.assert_equals(
- expect=main.TRUE,
- actual=withdrawResult,
- onpass="Node was withdrawn from election",
- onfail="Node was not withdrawn from election" )
-
- main.step( "Make sure new leader is elected" )
- leaderN = main.ONOScli1.electionTestLeader()
- if leaderN == leader:
- main.log.error( "ONOS still sees " + str( leaderN ) +
- " as leader after they withdrew" )
- leaderResult = main.FALSE
- elif leaderN == main.FALSE:
- # error in response
- # TODO: add check for "Command not found:" in the driver, this
- # means the app isn't loaded
- main.log.error( "Something is wrong with electionTestLeader " +
- "function, check the error logs" )
- leaderResult = main.FALSE
- elif leaderN is None:
- main.log.info(
- "There is no leader after the app withdrew from election" )
- leaderResult = main.TRUE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=leaderResult,
- onpass="Leadership election passed",
- onfail="Something went wrong with Leadership election" )
-
- main.step( "Run for election on old leader( just so everyone " +
- "is in the hat )" )
- if oldLeader:
- runResult = oldLeader.electionTestRun()
- else:
- runResult = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=runResult,
- onpass="App re-ran for election",
- onfail="App failed to run for election" )
-
- main.step( "Node became leader when it ran for election" )
- afterRun = main.ONOScli1.electionTestLeader()
- # verify leader is ONOS1
- if afterRun == ONOS1Ip:
- afterResult = main.TRUE
- else:
- afterResult = main.FALSE
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=afterResult,
- onpass="Old leader successfully re-ran for election",
- onfail="Something went wrong with Leadership election after " +
- "the old leader re-ran for election" )
-
- def CASE16( self, main ):
- """
- Install Distributed Primitives app
- """
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
-
- # Variables for the distributed primitives tests
- global pCounterName
- global iCounterName
- global pCounterValue
- global iCounterValue
- global onosSet
- global onosSetName
- pCounterName = "TestON-Partitions"
- iCounterName = "TestON-inMemory"
- pCounterValue = 0
- iCounterValue = 0
- onosSet = set([])
- onosSetName = "TestON-set"
-
- description = "Install Primitives app"
- main.case( description )
- main.step( "Install Primitives app" )
- appName = "org.onosproject.distributedprimitives"
- appResults = CLIs[0].activateApp( appName )
- utilities.assert_equals( expect=main.TRUE,
- actual=appResults,
- onpass="Primitives app activated",
- onfail="Primitives app not activated" )
-
- def CASE17( self, main ):
- """
- Check for basic functionality with distributed primitives
- """
- import json
- # Make sure variables are defined/set
- assert numControllers, "numControllers not defined"
- assert main, "main not defined"
- assert utilities.assert_equals, "utilities.assert_equals not defined"
- assert CLIs, "CLIs not defined"
- assert nodes, "nodes not defined"
- assert pCounterName, "pCounterName not defined"
- assert iCounterName, "iCounterName not defined"
- assert onosSetName, "onosSetName not defined"
- # NOTE: assert fails if value is 0/None/Empty/False
- try:
- pCounterValue
- except NameError:
- main.log.error( "pCounterValue not defined, setting to 0" )
- pCounterValue = 0
- try:
- iCounterValue
- except NameError:
- main.log.error( "iCounterValue not defined, setting to 0" )
- iCounterValue = 0
- try:
- onosSet
- except NameError:
- main.log.error( "onosSet not defined, setting to empty Set" )
- onosSet = set([])
- # Variables for the distributed primitives tests. These are local only
- addValue = "a"
- addAllValue = "a b c d e f"
- retainValue = "c d e f"
-
- description = "Check for basic functionality with distributed " +\
- "primitives"
- main.case( description )
- main.caseExplaination = "Test the methods of the distributed primitives (counters and sets) throught the cli"
- # DISTRIBUTED ATOMIC COUNTERS
- main.step( "Increment and get a default counter on each node" )
- pCounters = []
- threads = []
- addedPValues = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="counterIncrement-" + str( i ),
- args=[ pCounterName ] )
- pCounterValue += 1
- addedPValues.append( pCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- pCounters.append( t.result )
- # Check that counter incremented numController times
- pCounterResults = True
- for i in addedPValues:
- tmpResult = i in pCounters
- pCounterResults = pCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in partitioned "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=pCounterResults,
- onpass="Default counter incremented",
- onfail="Error incrementing default" +
- " counter" )
-
- main.step( "Increment and get an in memory counter on each node" )
- iCounters = []
- addedIValues = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counterTestIncrement,
- name="icounterIncrement-" + str( i ),
- args=[ iCounterName ],
- kwargs={ "inMemory": True } )
- iCounterValue += 1
- addedIValues.append( iCounterValue )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- iCounters.append( t.result )
- # Check that counter incremented numController times
- iCounterResults = True
- for i in addedIValues:
- tmpResult = i in iCounters
- iCounterResults = iCounterResults and tmpResult
- if not tmpResult:
- main.log.error( str( i ) + " is not in the in-memory "
- "counter incremented results" )
- utilities.assert_equals( expect=True,
- actual=iCounterResults,
- onpass="In memory counter incremented",
- onfail="Error incrementing in memory" +
- " counter" )
-
- main.step( "Check counters are consistant across nodes" )
- onosCounters = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].counters,
- name="counters-" + str( i ) )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- onosCounters.append( t.result )
- tmp = [ i == onosCounters[ 0 ] for i in onosCounters ]
- if all( tmp ):
- main.log.info( "Counters are consistent across all nodes" )
- consistentCounterResults = main.TRUE
- else:
- main.log.error( "Counters are not consistent across all nodes" )
- consistentCounterResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=consistentCounterResults,
- onpass="ONOS counters are consistent " +
- "across nodes",
- onfail="ONOS Counters are inconsistent " +
- "across nodes" )
-
- main.step( "Counters we added have the correct values" )
- correctResults = main.TRUE
- for i in range( numControllers ):
- current = json.loads( onosCounters[i] )
- pValue = None
- iValue = None
- try:
- for database in current:
- partitioned = database.get( 'partitionedDatabaseCounters' )
- if partitioned:
- for value in partitioned:
- if value.get( 'name' ) == pCounterName:
- pValue = value.get( 'value' )
- break
- inMemory = database.get( 'inMemoryDatabaseCounters' )
- if inMemory:
- for value in inMemory:
- if value.get( 'name' ) == iCounterName:
- iValue = value.get( 'value' )
- break
- except AttributeError, e:
- main.log.error( "ONOS" + str( i + 1 ) + " counters result " +
- "is not as expected" )
- correctResults = main.FALSE
- if pValue == pCounterValue:
- main.log.info( "Partitioned counter value is correct" )
- else:
- main.log.error( "Partitioned counter value is incorrect," +
- " expected value: " + str( pCounterValue )
- + " current value: " + str( pValue ) )
- correctResults = main.FALSE
- if iValue == iCounterValue:
- main.log.info( "In memory counter value is correct" )
- else:
- main.log.error( "In memory counter value is incorrect, " +
- "expected value: " + str( iCounterValue ) +
- " current value: " + str( iValue ) )
- correctResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=correctResults,
- onpass="Added counters are correct",
- onfail="Added counters are incorrect" )
- # DISTRIBUTED SETS
- main.step( "Distributed Set get" )
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
-
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=getResults,
- onpass="Set elements are correct",
- onfail="Set elements are incorrect" )
-
- main.step( "Distributed Set size" )
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
-
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- utilities.assert_equals( expect=main.TRUE,
- actual=sizeResults,
- onpass="Set sizes are correct",
- onfail="Set sizes are incorrect" )
-
- main.step( "Distributed Set add()" )
- onosSet.add( addValue )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAdd-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addResults = main.FALSE
- else:
- # unexpected result
- addResults = main.FALSE
- if addResults != main.TRUE:
- main.log.error( "Error executing set add" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addResults = addResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addResults,
- onpass="Set add correct",
- onfail="Set add was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set contains()" )
- containsResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContains-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsResponses.append( t.result )
-
- containsResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsResults,
- onpass="Set contains is functional",
- onfail="Set contains failed" )
-
- main.step( "Distributed Set containsAll()" )
- containsAllResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setContainsAll-" + str( i ),
- args=[ onosSetName ],
- kwargs={ "values": addAllValue } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- # NOTE: This is the tuple
- containsAllResponses.append( t.result )
-
- containsAllResults = main.TRUE
- for i in range( numControllers ):
- if containsResponses[ i ] == main.ERROR:
- containsResults = main.FALSE
- else:
- containsResults = containsResults and\
- containsResponses[ i ][ 1 ]
- utilities.assert_equals( expect=main.TRUE,
- actual=containsAllResults,
- onpass="Set containsAll is functional",
- onfail="Set containsAll failed" )
-
- main.step( "Distributed Set remove()" )
- onosSet.remove( addValue )
- removeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemove-" + str( i ),
- args=[ onosSetName, addValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeResults = main.TRUE
- for i in range( numControllers ):
- if removeResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeResponses[ i ] == main.ERROR:
- # Error in execution
- removeResults = main.FALSE
- else:
- # unexpected result
- removeResults = main.FALSE
- if removeResults != main.TRUE:
- main.log.error( "Error executing set remove" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeResults = removeResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeResults,
- onpass="Set remove correct",
- onfail="Set remove was incorrect" )
-
- main.step( "Distributed Set removeAll()" )
- onosSet.difference_update( addAllValue.split() )
- removeAllResponses = []
- threads = []
- try:
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRemoveAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- removeAllResponses.append( t.result )
- except Exception, e:
- main.log.exception(e)
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- removeAllResults = main.TRUE
- for i in range( numControllers ):
- if removeAllResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif removeAllResponses[ i ] == main.FALSE:
- # not in set, probably fine
- pass
- elif removeAllResponses[ i ] == main.ERROR:
- # Error in execution
- removeAllResults = main.FALSE
- else:
- # unexpected result
- removeAllResults = main.FALSE
- if removeAllResults != main.TRUE:
- main.log.error( "Error executing set removeAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- removeAllResults = removeAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=removeAllResults,
- onpass="Set removeAll correct",
- onfail="Set removeAll was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set clear()" )
- onosSet.clear()
- clearResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestClear-" + str( i ),
- args=[ onosSetName, " "], # Values doesn't matter
- kwargs={ "clear": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- clearResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- clearResults = main.TRUE
- for i in range( numControllers ):
- if clearResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif clearResponses[ i ] == main.FALSE:
- # Nothing set, probably fine
- pass
- elif clearResponses[ i ] == main.ERROR:
- # Error in execution
- clearResults = main.FALSE
- else:
- # unexpected result
- clearResults = main.FALSE
- if clearResults != main.TRUE:
- main.log.error( "Error executing set clear" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- clearResults = clearResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=clearResults,
- onpass="Set clear correct",
- onfail="Set clear was incorrect" )
-
- main.step( "Distributed Set addAll()" )
- onosSet.update( addAllValue.split() )
- addResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestAdd,
- name="setTestAddAll-" + str( i ),
- args=[ onosSetName, addAllValue ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- addResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- addAllResults = main.TRUE
- for i in range( numControllers ):
- if addResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif addResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif addResponses[ i ] == main.ERROR:
- # Error in execution
- addAllResults = main.FALSE
- else:
- # unexpected result
- addAllResults = main.FALSE
- if addAllResults != main.TRUE:
- main.log.error( "Error executing set addAll" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " + str( size ) +
- " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- addAllResults = addAllResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=addAllResults,
- onpass="Set addAll correct",
- onfail="Set addAll was incorrect" )
-
- main.step( "Distributed Set retain()" )
- onosSet.intersection_update( retainValue.split() )
- retainResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestRemove,
- name="setTestRetain-" + str( i ),
- args=[ onosSetName, retainValue ],
- kwargs={ "retain": True } )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- retainResponses.append( t.result )
-
- # main.TRUE = successfully changed the set
- # main.FALSE = action resulted in no change in set
- # main.ERROR - Some error in executing the function
- retainResults = main.TRUE
- for i in range( numControllers ):
- if retainResponses[ i ] == main.TRUE:
- # All is well
- pass
- elif retainResponses[ i ] == main.FALSE:
- # Already in set, probably fine
- pass
- elif retainResponses[ i ] == main.ERROR:
- # Error in execution
- retainResults = main.FALSE
- else:
- # unexpected result
- retainResults = main.FALSE
- if retainResults != main.TRUE:
- main.log.error( "Error executing set retain" )
-
- # Check if set is still correct
- size = len( onosSet )
- getResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestGet,
- name="setTestGet-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- getResponses.append( t.result )
- getResults = main.TRUE
- for i in range( numControllers ):
- if isinstance( getResponses[ i ], list):
- current = set( getResponses[ i ] )
- if len( current ) == len( getResponses[ i ] ):
- # no repeats
- if onosSet != current:
- main.log.error( "ONOS" + str( i + 1 ) +
- " has incorrect view" +
- " of set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- main.log.debug( "Expected: " + str( onosSet ) )
- main.log.debug( "Actual: " + str( current ) )
- getResults = main.FALSE
- else:
- # error, set is not a set
- main.log.error( "ONOS" + str( i + 1 ) +
- " has repeat elements in" +
- " set " + onosSetName + ":\n" +
- str( getResponses[ i ] ) )
- getResults = main.FALSE
- elif getResponses[ i ] == main.ERROR:
- getResults = main.FALSE
- sizeResponses = []
- threads = []
- for i in range( numControllers ):
- t = main.Thread( target=CLIs[i].setTestSize,
- name="setTestSize-" + str( i ),
- args=[ onosSetName ] )
- threads.append( t )
- t.start()
- for t in threads:
- t.join()
- sizeResponses.append( t.result )
- sizeResults = main.TRUE
- for i in range( numControllers ):
- if size != sizeResponses[ i ]:
- sizeResults = main.FALSE
- main.log.error( "ONOS" + str( i + 1 ) +
- " expected a size of " +
- str( size ) + " for set " + onosSetName +
- " but got " + str( sizeResponses[ i ] ) )
- retainResults = retainResults and getResults and sizeResults
- utilities.assert_equals( expect=main.TRUE,
- actual=retainResults,
- onpass="Set retain correct",
- onfail="Set retain was incorrect" )
-
diff --git a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.topo b/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.topo
deleted file mode 100644
index 9305025..0000000
--- a/TestON/tests/HATestSingleInstanceRestart/HATestSingleInstanceRestart.topo
+++ /dev/null
@@ -1,169 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
-
- <ONOScli4>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli4>
-
-
- <ONOScli5>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli5>
-
-
- <ONOScli6>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli6>
-
-
- <ONOScli7>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli7>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.30.12</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.30.13</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.128.30.14</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.128.30.15</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.128.30.16</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.128.30.17</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> none </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/HATestSingleInstanceRestart/__init__.py b/TestON/tests/HATestSingleInstanceRestart/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/HATestSingleInstanceRestart/__init__.py
+++ /dev/null
diff --git a/TestON/tests/IntentEventTP/__init__.py b/TestON/tests/IntentEventTP/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IntentEventTP/__init__.py
+++ /dev/null
diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params
deleted file mode 100644
index 8aad63b..0000000
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.params
+++ /dev/null
@@ -1,66 +0,0 @@
-<PARAMS>
-
- <testcases>1,2,1,2,1,2,1,2</testcases>
-
- <SCALE>1,3,5,7</SCALE>
- <availableNodes>7</availableNodes>
-
- <ENV>
- <cellName>IntentInstallWithdrawCell</cellName>
- <cellApps>drivers,null</cellApps>
- </ENV>
-
- <TEST>
- <skipCleanInstall>yes</skipCleanInstall>
- <switchCount>7</switchCount>
- <warmUp>10</warmUp>
- <sampleSize>20</sampleSize>
- <wait></wait>
- <intents>1,100,1000</intents> #list format, will be split on ','
- <debug>True</debug> #"True" for true
- </TEST>
-
- <GIT>
- <autopull>off</autopull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <USER>admin</USER>
-
- <ip1>OC1</ip1>
- <port1>6633</port1>
-
- <ip2>OC2</ip2>
- <port2>6633</port2>
-
- <ip3>OC3</ip3>
- <port3>6633</port3>
-
- <ip4>OC4</ip4>
- <port4>6633</port4>
-
- <ip5>OC5</ip5>
- <port5>6633</port5>
-
- <ip6>OC6</ip6>
- <port6>6633</port6>
-
- <ip7>OC7</ip7>
- <port7>6633</port7>
-
- </CTRL>
-
- <MN>
- <ip1>OCN</ip1>
- </MN>
-
- <BENCH>
- <user>admin</user>
- <ip1>OCN</ip1>
- </BENCH>
-
- <JSON>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py
deleted file mode 100644
index e96307d..0000000
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.py
+++ /dev/null
@@ -1,293 +0,0 @@
-# ScaleOutTemplate
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os.path
-
-
-class IntentInstallWithdrawLat:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
-
- import time
- global init
- try:
- if type(init) is not bool:
- init = False
- except NameError:
- init = False
-
- #Load values from params file
- checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
- gitPull = main.params[ 'GIT' ][ 'autopull' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- Apps = main.params[ 'ENV' ][ 'cellApps' ]
- BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
- BENCHUser = main.params[ 'BENCH' ][ 'user' ]
- MN1Ip = main.params[ 'MN' ][ 'ip1' ]
- maxNodes = int(main.params[ 'availableNodes' ])
- skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- switchCount = main.params[ 'TEST' ][ 'switchCount' ]
-
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- if init == False:
- init = True
- global clusterCount #number of nodes running
- global ONOSIp #list of ONOS IP addresses
- global scale
- global commit
-
- clusterCount = 0
- ONOSIp = [ 0 ]
- scale = (main.params[ 'SCALE' ]).split(",")
- clusterCount = int(scale[0])
-
- #Populate ONOSIp with ips from params
- ONOSIp = [0]
- ONOSIp.extend(main.ONOSbench.getOnosIps())
-
- #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
- if skipMvn != "yes":
- mvnResult = main.ONOSbench.cleanInstall()
-
- #git
- main.step( "Git checkout and pull " + checkoutBranch )
- if gitPull == 'on':
- checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
- pullResult = main.ONOSbench.gitPull()
-
- else:
- checkoutResult = main.TRUE
- pullResult = main.TRUE
- main.log.info( "Skipped git checkout and pull" )
-
- commit = main.ONOSbench.getVersion()
- commit = (commit.split(" "))[1]
-
- resultsDB = open("IntentInstallWithdrawLatDB", "w+")
- resultsDB.close()
-
- # -- END OF INIT SECTION --#
-
- clusterCount = int(scale[0])
- scale.remove(scale[0])
-
- MN1Ip = ONOSIps[len(ONOSIp)-1]
- BENCHIp = ONOSIps[len(ONOSIp)-2]
-
- #kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating enviornment setup")
- for node in range(1, maxNodes + 1):
- main.ONOSbench.onosDie(ONOSIp[node])
-
- #Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
- for i in range(1, maxNodes + 1):
- main.log.info(" Uninstalling ONOS " + str(i) )
- main.ONOSbench.onosUninstall( ONOSIp[i] )
-
- #construct the cell file
- main.log.info("Creating cell file")
- cellIp = []
- for node in range (1, clusterCount + 1):
- cellIp.append(ONOSIp[node])
-
- main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
-
- main.step( "Set Cell" )
- main.ONOSbench.setCell(cellName)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "verify cells" )
- verifyCellResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
- for node in range(1, clusterCount + 1):
- main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
- main.ONOSbench.onosInstall( ONOSIp[node])
-
- for node in range(1, clusterCount + 1):
- for i in range( 2 ):
- isup = main.ONOSbench.isup( ONOSIp[node] )
- if isup:
- main.log.info("ONOS " + str(node) + " is up\n")
- break
- if not isup:
- main.log.report( "ONOS " + str(node) + " didn't start!" )
-
- main.ONOS1cli.startOnosCli( ONOSIp[1] )
- main.log.info("Startup sequence complete")
-
- time.sleep(30)
-
- for i in range(5):
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg setorg.onosproject.provider.nil.NullProviders enabled true" """)
- main.ONOSbench.handle.expect(":~")
- print main.ONOSbench.handle.before
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount """ + str(switchCount) + """ " """)
- main.ONOSbench.handle.expect(":~")
- print main.ONOSbench.handle.before
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders topoShape linear" """)
- main.ONOSbench.handle.expect(":~")
- print main.ONOSbench.handle.before
- main.ONOSbench.handle.sendline("""onos $OC1 "null-simulation start" """)
- main.ONOSbench.handle.expect(":~")
- print main.ONOSbench.handle.before
- main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
- main.ONOSbench.handle.expect(":~")
- print main.ONOSbench.handle.before
-
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- check = main.ONOSbench.handle.before
- main.log.info(check)
- if "SSC(s)=1," in check:
- break
-
-
-
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
- def CASE2( self, main ):
-
- import time
- import numpy
-
- testStatus = "pass"
- sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
- warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
- intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
- switchCount = int(main.params[ 'TEST' ][ 'switchCount' ])
- debug = main.params[ 'TEST' ][ 'switchCount' ]
- for i in range(0,len(intentsList)):
- intentsList[i] = int(intentsList[i])
-
- ######################
- debug = True
- ######################
-
- linkCount = 0
- for i in range(0,10):
- main.ONOSbench.handle.sendline("onos $OC1 links|wc -l")
- main.ONOSbench.handle.expect(":~")
- linkCount = main.ONOSbench.handle.before
- if debug: main.log.info("Link Count check: " + linkCount)
- if str((switchCount*2)-2) in linkCount:
- break
- time.sleep(2)
-
- links = "--"
- for i in range(8):
- if debug: main.log.info("top of loop")
- main.ONOSbench.handle.sendline("onos $OC1 links")
- main.ONOSbench.handle.expect(":~")
- links = main.ONOSbench.handle.before
- if "=null:" in links:
- break
- if debug: main.log.info(str(links))
- if i > 3:
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"], "d")
- if i == 7:
- main.log.error("link data missing")
- time.sleep(3)
-
- links = links.splitlines()
- templinks = links
-
- tempDevices = []
- for line in links:
- temp = line.split(" ")
- temp[0].replace("src=","")
- temp[0] = (temp[0].split("/"))[0]
- tempDevices.append(temp[0])
-
- tempDevices.sort()
- devices = []
- for i in tempDevices:
- if "src=null" in i:
- devices.append(i.replace("src=", ""))
- if debug: main.log.info(str(devices))
-
- ingress = devices[0]
- egress = devices.pop()
- if debug: main.log.info(ingress)
- if debug: main.log.info(egress)
-
- for intentSize in intentsList:
- cmd = "onos $OC1 push-test-intents "
- cmd += ingress + "/6 "
- cmd += egress + "/5 "
- cmd += str(intentSize) + " 1"
- installed = []
- withdrawn = []
-
- for run in range(0, (warmUp + sampleSize)):
- if run > warmUp:
- time.sleep(5)
-
- myRawResult = "--"
- while "ms" not in myRawResult:
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
- myRawResult = main.ONOSbench.handle.before
- if debug: main.log.info(myRawResult)
-
- if debug: main.log.info(myRawResult)
-
- if run >= warmUp:
- myRawResult = myRawResult.splitlines()
- for line in myRawResult:
- if "install" in line:
- installed.append(int(line.split(" ")[5]))
-
- for line in myRawResult:
- if "withdraw" in line:
- withdrawn.append(int(line.split(" ")[5]))
-
- for line in myRawResult:
- if "Failure:" in line:
- main.log.error("INTENT TEST FAILURE, ABORTING TESTCASE")
- testStatus = "fail"
- if testStatus == "fail":
- break
-
- print("installed: " + str(installed))
- print("withraw: " + str(withdrawn) + "\n")
- if withdrawn[len(withdrawn) -1] > 1000 or installed[len(installed) -1] > 1000:
- main.log.info("ABNORMAL VALUE, CHECKING LOG")
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
-
- if testStatus == "fail":
- break
- main.log.report("----------------------------------------------------")
- main.log.report("Scale: " + str(clusterCount) + "\tIntent batch size: " + str(intentSize))
- main.log.report("Data samples: " + str(sampleSize) + "\tWarm up tests: " + str(warmUp))
- main.log.report("Installed average: " + str(numpy.mean(installed)))
- main.log.report("Installed standard deviation: " + str(numpy.std(installed)))
- main.log.report("Withdraw average: " + str(numpy.mean(withdrawn)))
- main.log.report("Withdraw standard deviation: " + str(numpy.std(withdrawn)))
- main.log.report(" ")
-
- resultString = "'" + commit + "',"
- resultString += str(clusterCount) + ","
- resultString += str(intentSize) + ","
- resultString += str(numpy.mean(installed)) + ","
- resultString += str(numpy.std(installed)) + ","
- resultString += str(numpy.mean(withdrawn)) + ","
- resultString += str(numpy.std(withdrawn)) + "\n"
- resultsDB = open("IntentInstallWithdrawLatDB", "a")
- resultsDB.write(resultString)
- resultsDB.close()
-
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
- time.sleep(20)
diff --git a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo b/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo
deleted file mode 100644
index d82f3fd..0000000
--- a/TestON/tests/IntentInstallWithdrawLat/IntentInstallWithdrawLat.topo
+++ /dev/null
@@ -1,144 +0,0 @@
-<TOPOLOGY>
-
- <COMPONENT>
-
- <ONOSbench>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS><home>~/onos</home></COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>OC1</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>OC2</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>OC3</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>OC4</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
-
- <ONOS5>
- <host>OC5</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>OC6</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>OC7</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- </COMPONENT>
-
-</TOPOLOGY>
-
diff --git a/TestON/tests/IntentInstallWithdrawLat/__init__.py b/TestON/tests/IntentInstallWithdrawLat/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IntentInstallWithdrawLat/__init__.py
+++ /dev/null
diff --git a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params
deleted file mode 100644
index f01f017..0000000
--- a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.params
+++ /dev/null
@@ -1,67 +0,0 @@
-<PARAMS>
- <testcases>1,2,4,2,4,2,4,2</testcases>
-
- <ENV>
- <cellName>intent_perf_test</cellName>
- </ENV>
-
- <GIT>
- #autoPull 'on' or 'off'
- <autoPull>off</autoPull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <user>sdn</user>
- <ip1>10.254.1.201</ip1>
- <port1>6633</port1>
- <ip2>10.254.1.202</ip2>
- <port2>6633</port2>
- <ip3>10.254.1.203</ip3>
- <port3>6633</port3>
- <ip4>10.254.1.204</ip4>
- <ip5>10.254.1.205</ip5>
- <ip6>10.254.1.206</ip6>
- <ip7>10.254.1.207</ip7>
- </CTRL>
-
- <TSHARK>
- <ofpPortStatus>OF 1.3 146</ofpPortStatus>
- </TSHARK>
-
- <MN>
- <ip1>10.254.1.200</ip1>
- <ip2>10.254.1.200</ip2>
- </MN>
-
- <BENCH>
- <ip>10.254.1.200</ip>
- </BENCH>
-
- <TEST>
- #Number of times to iterate each case
- <numIter>8</numIter>
- <numIgnore>2</numIgnore>
- <numSwitch>8</numSwitch>
- <batchThresholdMin>0</batchThresholdMin>
- <batchThresholdMax>1000</batchThresholdMax>
- <batchIntentSize>1</batchIntentSize>
- <numMult>1</numMult>
- #Interface to bring down for intent reroute case
- <intfs>s3-eth2</intfs>
- <cellStr>webconsole,onos-core,onos-api,onos-app-metrics,onos-app-gui,onos-cli,onos-openflow</cellStr>
- </TEST>
-
- <DB>
- <intentFilePath>
- /home/admin/ONLabTest/TestON/tests/IntentPerfNextBM/intentLatencyResultDb.log
- </intentFilePath>
- </DB>
-
- <JSON>
- <submittedTime>intentSubmittedTimestamp</submittedTime>
- <installedTime>intentInstalledTimestamp</installedTime>
- <wdRequestTime>intentWithdrawRequestedTimestamp</wdRequestTime>
- <withdrawnTime>intentWithdrawnTimestamp</withdrawnTime>
- </JSON>
-</PARAMS>
diff --git a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py
deleted file mode 100644
index 7ddc70f..0000000
--- a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.py
+++ /dev/null
@@ -1,746 +0,0 @@
-# 2015.03.12 10:28:21 PDT
-#Embedded file name: ../tests/IntentPerfNextBM/IntentPerfNextBM.py
-
-
-class IntentPerfNextBM:
-
- def __init__(self):
- self.default = ''
-
- def CASE1(self, main):
- """
- ONOS startup sequence
- """
- global clusterCount
- global timeToPost
- global runNum
- import time
-
- clusterCount = 1
- timeToPost = time.strftime('%Y-%m-%d %H:%M:%S')
- runNum = time.strftime('%d%H%M%S')
- cellName = main.params['ENV']['cellName']
- gitPull = main.params['GIT']['autoPull']
- checkoutBranch = main.params['GIT']['checkout']
- intentFilePath = main.params['DB']['intentFilePath']
- cellStr = main.params[ 'TEST' ][ 'cellStr' ]
- ONOSIp = []
-
- for i in range(1, 8):
- ONOSIp.append(main.params['CTRL']['ip' + str(i)])
- main.ONOSbench.onosUninstall(nodeIp=ONOSIp[i - 1])
-
- MN1Ip = main.params['MN']['ip1']
- BENCHIp = main.params['BENCH']['ip']
- main.case('Setting up test environment')
- main.step('Clearing previous DB log file')
- fIntentLog = open(intentFilePath, 'w')
- fIntentLog.write('')
- fIntentLog.close()
- main.step('Starting mininet topology')
- main.Mininet1.startNet()
- main.step('Creating cell file')
- cellFileResult = main.ONOSbench.createCellFile(
- BENCHIp, cellName, MN1Ip, cellStr, ONOSIp[0])
- main.step('Applying cell file to environment')
- cellApplyResult = main.ONOSbench.setCell(cellName)
- verifyCellResult = main.ONOSbench.verifyCell()
- main.step('Removing raft logs')
- main.ONOSbench.onosRemoveRaftLogs()
- main.step('Git checkout and pull ' + checkoutBranch)
-
- if gitPull == 'on':
- checkoutResult = main.ONOSbench.gitCheckout(checkoutBranch)
- pullResult = main.ONOSbench.gitPull()
- main.step('Using onos-build to compile ONOS')
- buildResult = main.ONOSbench.onosBuild()
- else:
- checkoutResult = main.TRUE
- pullResult = main.TRUE
- buildResult = main.TRUE
- main.log.info('Git pull skipped by configuration')
-
- main.log.report('Commit information - ')
- main.ONOSbench.getVersion(report=True)
- main.step('Creating ONOS package')
- packageResult = main.ONOSbench.onosPackage()
- main.step('Installing ONOS package')
- install1Result = main.ONOSbench.onosInstall(node=ONOSIp[0])
- main.step('Set cell for ONOScli env')
- main.ONOS1cli.setCell(cellName)
- time.sleep(5)
- main.step('Start onos cli')
- cli1 = main.ONOS1cli.startOnosCli(ONOSIp[0])
- utilities.assert_equals(expect=main.TRUE,
- actual=cellFileResult and cellApplyResult and\
- verifyCellResult and checkoutResult and\
- pullResult and buildResult and install1Result,
- onpass='ONOS started successfully',
- onfail='Failed to start ONOS')
-
- def CASE2(self, main):
- """
- Batch intent install
-
- Supports scale-out scenarios and increasing
- number of intents within each iteration
- """
- import time
- import json
- import requests
- import os
- import numpy
- ONOS1Ip = main.params['CTRL']['ip1']
- ONOS2Ip = main.params['CTRL']['ip2']
- ONOS3Ip = main.params['CTRL']['ip3']
- ONOS4Ip = main.params['CTRL']['ip4']
- ONOS5Ip = main.params['CTRL']['ip5']
- ONOS6Ip = main.params['CTRL']['ip6']
- ONOS7Ip = main.params['CTRL']['ip7']
- assertion = main.TRUE
- ONOSIpList = []
-
- for i in range(1, 8):
- ONOSIpList.append(main.params['CTRL']['ip' + str(i)])
-
- ONOSUser = main.params['CTRL']['user']
- defaultSwPort = main.params['CTRL']['port1']
- batchIntentSize = int(main.params['TEST']['batchIntentSize'])
- batchThreshMin = int(main.params['TEST']['batchThresholdMin'])
- batchThreshMax = int(main.params['TEST']['batchThresholdMax'])
- numIter = main.params['TEST']['numIter']
- numIgnore = int(main.params['TEST']['numIgnore'])
- numSwitch = int(main.params['TEST']['numSwitch'])
- nThread = main.params['TEST']['numMult']
- intentFilePath = main.params['DB']['intentFilePath']
-
- if clusterCount == 1:
- for i in range(1, numSwitch + 1):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS1Ip, port=defaultSwPort)
- if clusterCount == 3:
- for i in range(1, 3):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS1Ip, port=defaultSwPort)
- for i in range(3, 6):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS2Ip, port=defaultSwPort)
- for i in range(6, 9):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS3Ip, port=defaultSwPort)
- if clusterCount == 5:
- main.Mininet1.assignSwController(sw='s1',
- ip=ONOS1Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s2',
- ip=ONOS2Ip, port=defaultSwPort)
- for i in range(3, 6):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS3Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s6',
- ip=ONOS4Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s7',
- ip=ONOS5Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s8',
- ip=ONOS5Ip, port=defaultSwPort)
- if clusterCount == 7:
- for i in range(1, 9):
- if i < 8:
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOSIpList[i - 1], port=defaultSwPort)
- elif i >= 8:
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOSIpList[6], port=defaultSwPort)
-
- time.sleep(20)
-
- deviceIdList = []
- batchInstallLat = []
- batchWithdrawLat = []
-
- main.log.report('Batch intent installation test of ' +
- str(batchIntentSize) + ' intent(s)')
- main.log.info('Getting list of available devices')
-
- jsonStr = main.ONOS1cli.devices()
- jsonObj = json.loads(jsonStr)
- for device in jsonObj:
- deviceIdList.append(device['id'])
-
- if not jsonObj:
- main.log.warn( "Devices not found, check topology" )
-
- sleepTime = 10
- baseDir = '/tmp/'
- for batch in range(0, 5):
- maxInstallLat = []
- maxWithdrawLat = []
- maxSingleInstallLat = []
- maxSingleWithdrawLat = []
- for i in range(0, int(numIter)):
- main.log.info('Pushing ' + str(
- int(batchIntentSize) * int(nThread)) +
- ' intents. Iteration ' + str(i))
- saveDir = baseDir + 'batch_intent_1.txt'
- main.ONOSbench.pushTestIntentsShell(deviceIdList[0] +
- '/2', deviceIdList[7] + '/2', batchIntentSize,
- saveDir, ONOSIpList[0], numMult=nThread)
- time.sleep(sleepTime)
- intent = ''
- counter = 300
- while len(intent) > 0 and counter > 0:
- main.ONOS1cli.handle.sendline('intents | wc -l')
- main.ONOS1cli.handle.expect('intents | wc -l')
- main.ONOS1cli.handle.expect('onos>')
- intentTemp = main.ONOS1cli.handle.before()
- intent = main.ONOS1cli.intents()
- intent = json.loads(intent)
- counter = counter - 1
- time.sleep(1)
-
- time.sleep(5)
- saveDir = baseDir + 'batch_intent_1.txt'
- with open(saveDir) as fOnos:
- lineCount = 0
- for line in fOnos:
- line_temp = ''
- main.log.info('Line read: ' + str(line))
- line_temp = line[1:]
- line_temp = line_temp.split(': ')
- if ' ' in str(line_temp):
- result = line_temp[1].split(' ')[0]
- else:
- main.log.warn('Empty line read')
- result = 0
- if lineCount == 0:
- if 'Failure' in str(line):
- main.log.warn('Intent installation failed')
- result = 'NA'
- else:
- main.log.info('Install result: ' + result)
- batchInstallLat.append(int(result))
- installResult = result
- elif lineCount == 1:
- if 'Failure' in str(line):
- main.log.warn('Intent withdraw failed')
- result = 'NA'
- else:
- main.log.info('Withdraw result: ' + result)
- batchWithdrawLat.append(int(result))
- withdrawResult = result
- else:
- main.log.warn('Invalid results')
- installResult = 'NA'
- withdrawResult = 'NA'
- lineCount += 1
-
- main.log.info('Batch install latency with' +
- str(batchIntentSize) + 'intents: ' +
- str(installResult) + ' ms')
- main.log.info('Batch withdraw latency with' +
- str(batchIntentSize) + 'intents: ' +
- str(withdrawResult) + ' ms')
- main.log.info('Single intent install latency with' +
- str(batchIntentSize) + 'intents: ' +
- str(float(installResult) / int(batchIntentSize))+' ms')
- main.log.info('Single intent withdraw latency with' +
- str(batchIntentSize) + 'intents: ' +
- str(float(withdrawResult)/ int(batchIntentSize))+' ms')
- if len(batchInstallLat) > 0 and int(i) > numIgnore:
- maxInstallLat.append(max(batchInstallLat))
- maxSingleInstallLat.append(
- max(batchInstallLat) / int(batchIntentSize))
- elif len(batchInstallLat) == 0:
- sleepTime += 30
- if len(batchWithdrawLat) > 0 and int(i) > numIgnore:
- maxWithdrawLat.append(max(batchWithdrawLat))
- maxSingleWithdrawLat.append(
- max(batchWithdrawLat) / int(batchIntentSize))
- batchInstallLat = []
- batchWithdrawLat = []
- time.sleep(5)
-
- if maxInstallLat:
- avgInstallLat = str(round(
- numpy.average(maxInstallLat), 2))
- stdInstallLat = str(round(
- numpy.std(maxInstallLat), 2))
- avgSingleInstallLat = str(round(
- numpy.average(maxSingleInstallLat), 3))
- stdSingleInstallLat = str(round(
- numpy.std(maxSingleInstallLat), 3))
- else:
- avgInstallLat = 'NA'
- stdInstallLat = 'NA'
- main.log.report('Batch installation failed')
- assertion = main.FALSE
- if maxWithdrawLat:
- avgWithdrawLat = str(round(
- numpy.average(maxWithdrawLat), 2))
- stdWithdrawLat = str(round(
- numpy.std(maxWithdrawLat), 2))
- avgSingleWithdrawLat = str(round(
- numpy.average(maxSingleWithdrawLat), 3))
- stdSingleWithdrawLat = str(round(
- numpy.std(maxSingleWithdrawLat), 3))
- else:
- avgWithdrawLat = 'NA'
- stdWithdrawLat = 'NA'
- main.log.report('Batch withdraw failed')
- assertion = main.FALSE
-
- main.log.report('Avg of batch installation latency ' +
- 'of size ' + str(batchIntentSize) + ': ' +
- str(avgInstallLat) + ' ms')
- main.log.report('Std Deviation of batch installation latency ' +
- ': ' + str(round(numpy.std(maxInstallLat), 2)) + ' ms')
- main.log.report('Avg of batch withdraw latency ' +
- 'of size ' + str(batchIntentSize) + ': ' +
- str(avgWithdrawLat) + ' ms')
- main.log.report('Std Deviation of batch withdraw latency ' +
- ': ' + str(round(numpy.std(maxWithdrawLat), 2)) + ' ms')
-
- main.log.report('Avg of batch withdraw latency ' + 'of size ' +
- str(batchIntentSize) + ': ' + str(avgWithdrawLat) + ' ms')
- main.log.report('Std Deviation of batch withdraw latency ' +
- ': ' + str(stdWithdrawLat) + ' ms')
- main.log.report('Avg of single withdraw latency ' + 'of size ' +
- str(batchIntentSize) + ': ' +
- str(avgSingleWithdrawLat) + ' ms')
- main.log.report('Std Deviation of single withdraw latency ' +
- ': ' + str(stdSingleWithdrawLat) + ' ms')
-
- dbCmd = "INSERT INTO intents_latency_tests VALUES('" +\
- timeToPost + "','intents_latency_results'," +\
- runNum + ',' + str(clusterCount) + ',' +\
- str(batchIntentSize) + ',' + str(avgInstallLat) +\
- ',' + str(stdInstallLat) + ',' + str(avgWithdrawLat) +\
- ',' + str(stdWithdrawLat) + ');'
-
- fResult = open(intentFilePath, 'a')
- if dbCmd:
- fResult.write(dbCmd + '\n')
- fResult.close()
- if batch == 0:
- batchIntentSize = 10
- elif batch == 1:
- batchIntentSize = 100
- elif batch == 2:
- batchIntentSize = 1000
- elif batch == 3:
- batchIntentSize = 1500
- if batch < 4:
- main.log.report('Increasing batch intent size to ' +
- str(batchIntentSize))
-
- utilities.assert_equals(expect=main.TRUE, actual=assertion,
- onpass='Batch intent install/withdraw test successful',
- onfail='Batch intent install/withdraw test failed')
-
- def CASE3(self, main):
- """
- Batch intent reroute latency
- """
- import time
- import json
- import requests
- import os
- import numpy
-
- ONOS1Ip = main.params['CTRL']['ip1']
- ONOS2Ip = main.params['CTRL']['ip2']
- ONOS3Ip = main.params['CTRL']['ip3']
- ONOS4Ip = main.params['CTRL']['ip4']
- ONOS5Ip = main.params['CTRL']['ip5']
- ONOS6Ip = main.params['CTRL']['ip6']
- ONOS7Ip = main.params['CTRL']['ip7']
-
- ONOSIpList = []
- for i in range(1, 8):
- ONOSIpList.append(main.params['CTRL']['ip' + str(i)])
-
- ONOSUser = main.params['CTRL']['user']
- defaultSwPort = main.params['CTRL']['port1']
- batchIntentSize = main.params['TEST']['batchIntentSize']
- thresholdMin = int(main.params['TEST']['batchThresholdMin'])
- thresholdMax = int(main.params['TEST']['batchThresholdMax'])
-
- intfs = main.params['TEST']['intfs']
- installTime = main.params['JSON']['installedTime']
- numIter = main.params['TEST']['numIter']
- numIgnore = int(main.params['TEST']['numIgnore'])
- numSwitch = int(main.params['TEST']['numSwitch'])
- nThread = main.params['TEST']['numMult']
-
- tsharkPortStatus = main.params[ 'TSHARK' ][ 'ofpPortStatus' ]
- tsharkPortDown = '/tmp/tshark_port_down_reroute.txt'
-
- if clusterCount == 1:
- for i in range(1, numSwitch + 1):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS1Ip, port=defaultSwPort)
- if clusterCount == 3:
- for i in range(1, 3):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS1Ip, port=defaultSwPort)
- for i in range(3, 6):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS2Ip, port=defaultSwPort)
- for i in range(6, 9):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS3Ip, port=defaultSwPort)
- if clusterCount == 5:
- main.Mininet1.assignSwController(sw='s1',
- ip=ONOS1Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s2',
- ip=ONOS2Ip, port=defaultSwPort)
- for i in range(3, 6):
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOS3Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s6',
- ip=ONOS4Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s7',
- ip=ONOS5Ip, port=defaultSwPort)
- main.Mininet1.assignSwController(sw='s8',
- ip=ONOS5Ip, port=defaultSwPort)
- if clusterCount == 7:
- for i in range(1, 9):
- if i < 8:
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOSIpList[i - 1], port=defaultSwPort)
- elif i >= 8:
- main.Mininet1.assignSwController(sw="s" + str(i),
- ip=ONOSIpList[6], port=defaultSwPort)
-
- main.log.report('Batch intent reroute test ')
-
- batchIntentRerouteAvgSystem = numpy.zeros((
- clusterCount, int(numIter)))
- batchIntentRerouteStdSystem = numpy.zeros((
- clusterCount, int(numIter)))
- batchIntentRerouteAvgPort = numpy.zeros((
- clusterCount, int(numIter)))
- batchIntentRerouteStdSystem = numpy.zeros((
- clusterCount, int(numIter)))
-
- time.sleep(10)
-
- main.log.info('Getting list of available devices')
-
- deviceIdList = []
- jsonStr = main.ONOS1cli.devices()
- jsonObj = json.loads(jsonStr)
- for device in jsonObj:
- deviceIdList.append(device['id'])
- if not jsonObj:
- main.log.warn('No devices have been discovered')
- assertion = main.FALSE
-
- sleepTime = 10
-
- baseDir = '/tmp/'
- for batch in range(0, 5):
- maxRerouteLatSystem = []
- maxRerouteLatPort = []
- for i in range(0, int(numIter)):
- rerouteLatSystem = []
- rerouteLatPort = []
- main.log.info('Pushing ' + str(
- int(batchIntentSize) * int(nThread)) +
- ' intents. Iteration ' + str(i))
- main.ONOSbench.pushTestIntentsShell(
- deviceIdList[0] + '/2', deviceIdList[7] +
- '/2', batchIntentSize, '/tmp/batch_install.txt',
- ONOSIpList[0], numMult='1', report=False,
- options='-i')
-
- time.sleep(10)
-
- main.ONOS1.tsharkGrep(tsharkPortStatus, tsharkPortDown)
- main.log.info('Disabling interface ' + intfs)
- main.Mininet1.handle.sendline(
- 'sh ifconfig ' + intfs + ' down')
- t0System = time.time() * 1000
-
- time.sleep(3)
-
- main.ONOS1.tsharkStop()
-
- time.sleep(2)
-
- os.system('scp ' + ONOSUser + '@' + ONOSIpList[0] +
- ':' + tsharkPortDown + ' /tmp/')
- time.sleep(5)
-
- fPortDown = open(tsharkPortDown, 'r')
- fLine = fPortDown.readline()
- objDown = fLine.split(' ')
- if len(fLine) > 0:
- timestampBeginPtDown = int(float(objDown[1]) * 1000)
- if timestampBeginPtDown < 1400000000000:
- timestampBeginPtDown = int(float(objDown[2]) * 1000)
- main.log.info('Port down begin timestamp: ' +
- str(timestampBeginPtDown))
- else:
- main.log.info('Tshark output file returned unexpected' +
- ' results: ' + str(fLine))
- fPortDown.close()
-
- intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics()
- intentsJsonObj1 = json.loads(intentsJsonStr1)
- intentInstall1 = intentsJsonObj1[installTime]['value']
- intentRerouteLat1 = int(intentInstall1) - int(t0System)
- intentRerouteLatPort1 =\
- int(intentInstall1) - int(timestampBeginPtDown)
-
- if intentRerouteLat1 > thresholdMin and \
- intentRerouteLat1 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat1)
- main.log.info('ONOS1 Intent Reroute Lat ' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' +
- str(intentRerouteLat1) + ' ms')
- if intentRerouteLatPort1 > thresholdMin and\
- intentRerouteLatPort1 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort1)
-
- main.log.info('ONOS1 Intent Reroute Lat ' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' +
- str(intentRerouteLatPort1) + ' ms')
-
- if clusterCount == 3:
- intentsJsonStr2 = main.ONOS2cli.intentsEventsMetrics()
- intentsJsonStr3 = main.ONOS3cli.intentsEventsMetrics()
- intentsJsonObj2 = json.loads(intentsJsonStr2)
- intentsJsonObj3 = json.loads(intentsJsonStr3)
- intentInstall2 = intentsJsonObj2[installTime]['value']
- intentInstall3 = intentsJsonObj3[installTime]['value']
- intentRerouteLat2 = int(intentInstall2) - int(t0System)
- intentRerouteLat3 = int(intentInstall3) - int(t0System)
- intentRerouteLatPort2 = int(intentInstall2) - int(timestampBeginPtDown)
- intentRerouteLatPort3 = int(intentInstall3) - int(timestampBeginPtDown)
-
- if intentRerouteLat2 > thresholdMin and\
- intentRerouteLat2 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat2)
- main.log.info('ONOS2 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' + str(intentRerouteLat2) + ' ms')
- if intentRerouteLat3 > thresholdMin and\
- intentRerouteLat3 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat3)
- main.log.info('ONOS3 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' + str(intentRerouteLat3) +
- ' ms')
- if intentRerouteLatPort2 > thresholdMin and\
- intentRerouteLatPort2 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort2)
- main.log.info('ONOS2 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort2) + ' ms')
- if intentRerouteLatPort3 > thresholdMin and\
- intentRerouteLatPort3 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort3)
- main.log.info('ONOS3 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort2) + ' ms')
-
- if clusterCount == 5:
- intentsJsonStr4 = main.ONOS4cli.intentsEventsMetrics()
- intentsJsonStr5 = main.ONOS5cli.intentsEventsMetrics()
- intentsJsonObj4 = json.loads(intentsJsonStr4)
- intentsJsonObj5 = json.loads(intentsJsonStr5)
- intentInstall4 = intentsJsonObj4[installTime]['value']
- intentInstall5 = intentsJsonObj5[installTime]['value']
- intentRerouteLat4 = int(intentInstall4) - int(t0System)
- intentRerouteLat5 = int(intentInstall5) - int(t0System)
- intentRerouteLatPort4 =\
- int(intentInstall4) - int(timestampBeginPtDown)
- intentRerouteLatPort5 =\
- int(intentInstall5) - int(timestampBeginPtDown)
- if intentRerouteLat4 > thresholdMin and\
- intentRerouteLat4 < thresholdMax and \
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat4)
- main.log.info('ONOS4 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' + str(intentRerouteLat4) +
- ' ms')
- if intentRerouteLat5 > thresholdMin and\
- intentRerouteLat5 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat5)
- main.log.info('ONOS5 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' +
- str(intentRerouteLat5) + ' ms')
- if intentRerouteLatPort4 > thresholdMin and\
- intentRerouteLatPort4 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort4)
- main.log.info('ONOS4 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort4) + ' ms')
- if intentRerouteLatPort5 > thresholdMin and\
- intentRerouteLatPort5 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort5)
- main.log.info('ONOS5 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort5) + ' ms')
-
- if clusterCount == 7:
- intentsJsonStr6 = main.ONOS6cli.intentsEventsMetrics()
- intentsJsonStr7 = main.ONOS7cli.intentsEventsMetrics()
- intentsJsonObj6 = json.loads(intentsJsonStr6)
- intentsJsonObj7 = json.loads(intentsJsonStr7)
- intentInstall6 = intentsJsonObj6[installTime]['value']
- intentInstall7 = intentsJsonObj7[installTime]['value']
- intentRerouteLat6 = int(intentInstall6) - int(t0System)
- intentRerouteLat7 = int(intentInstall7) - int(t0System)
- intentRerouteLatPort4 =\
- int(intentInstall4) - int(timestampBeginPtDown)
- intentRerouteLatPort5 =\
- int(intentInstall5) - int(timestampBeginPtDown)
- if intentRerouteLat6 > thresholdMin and\
- intentRerouteLat6 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat6)
- main.log.info('ONOS6 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' +
- str(intentRerouteLat6) + ' ms')
- if intentRerouteLat7 > thresholdMin and\
- intentRerouteLat7 < thresholdMax and\
- i > numIgnore:
- rerouteLatSystem.append(intentRerouteLat7)
- main.log.info('ONOS7 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' system-to-install: ' +
- str(intentRerouteLat7) + ' ms')
- if intentRerouteLatPort6 > thresholdMin and\
- intentRerouteLatPort6 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort6)
- main.log.info('ONOS6 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort6) + ' ms')
- if intentRerouteLatPort7 > thresholdMin and\
- intentRerouteLatPort7 < thresholdMax and\
- i > numIgnore:
- rerouteLatPort.append(intentRerouteLatPort7)
- main.log.info('ONOS7 Intent Reroute Lat' +
- ' size: ' + str(batchIntentSize) +
- ' port-to-install: ' +
- str(intentRerouteLatPort7) + ' ms')
-
- time.sleep(5)
-
- main.log.info('System: ' + str(rerouteLatSystem))
- main.log.info('Port: ' + str(rerouteLatPort))
- if rerouteLatSystem:
- maxRerouteLatSystem = max(rerouteLatSystem)
- main.log.info('Max system: ' + str(maxRerouteLatSystem))
- if rerouteLatPort:
- maxRerouteLatPort = max(rerouteLatPort)
- main.log.info('Max port: ' + str(maxRerouteLatPort))
-
- # Bring port back up for next iteration
- main.Mininet1.handle.sendline('sh ifconfig ' + intfs + ' up')
- time.sleep(5)
-
- # Use 'withdraw' option to withdraw batch intents
- main.ONOSbench.pushTestIntentsShell(
- deviceIdList[0] + '/2', deviceIdList[7] + '/2',
- batchIntentSize, '/tmp/batch_install.txt',
- ONOSIpList[0], numMult='1', report=False, options='-w')
- main.log.info('Intents removed and port back up')
-
- # NOTE: End iteration loop
- if batch == 1:
- batchIntentSize = 10
- elif batch == 2:
- batchIntentSize = 100
- elif batch == 3:
- batchIntentSize = 500
- elif batch == 4:
- batchIntentSize = 1000
- main.log.info('Batch intent size increased to ' + str(batchIntentSize))
-
- def CASE4(self, main):
- """
- Increase number of nodes and initiate CLI
- """
- global clusterCount
- import time
- import json
-
- clusterCount += 2
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- features = main.params[ 'TEST' ][ 'cellStr' ]
- benchIp = main.params[ 'BENCH' ][ 'ip' ]
- mininetIp = main.params[ 'MN' ][ 'ip1' ]
-
- main.log.report('Increasing cluster size to ' + str(clusterCount))
-
- ONOSIp = []
- for i in range( 1, 8 ):
- ONOSIp.append( main.params[ 'CTRL' ][ 'ip'+str(i) ] )
-
- main.step( "Cleaning environment" )
- for i in range( 0, 7 ):
- main.ONOSbench.onosDie( ONOSIp[i] )
- main.log.info( "Uninstalling ONOS "+str(i+1) )
- main.ONOSbench.onosUninstall( ONOSIp[i] )
-
- main.step( "Creating new cell file" )
- cellIp = []
- for node in range( 1, clusterCount + 1 ):
- cellIp.append( ONOSIp[node] )
- main.ONOSbench.createCellFile( benchIp, cellName,
- mininetIp, str(features), *cellIp )
-
- main.step( "Setting cell definition" )
- main.ONOSbench.setCell( cellName )
-
- main.step( "Packaging cell definition" )
- main.ONOSbench.onosPackage()
-
- for node in range( 1, clusterCount + 1 ):
- main.ONOSbench.onosInstall( node = ONOSIp[node] )
-
- time.sleep( 20 )
-
- for node in range( 1, clusterCount + 1 ):
- for i in range( 2 ):
- isup = main.ONOSbench.isup( ONOSIp[node] )
- if isup:
- main.log.info( "ONOS "+str(node) + " is up\n")
- assertion = main.TRUE
- break
- if not isup:
- main.log.info( "ONOS" + str(node) + " did not start")
-
- for node in range( 1, clusterCount + 1 ):
- exec "a = main.ONOS%scli.startOnosCli" %str(node)
- a( ONOSIp[node] )
-
- time.sleep(30)
-
- utilities.assert_equals(expect=main.TRUE, actual=assertion,
- onpass='Scale out to ' + str(clusterCount) + ' nodes successful',
- onfail='Scale out to ' + str(clusterCount) + ' nodes failed')
-
diff --git a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.topo b/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.topo
deleted file mode 100644
index 197acfa..0000000
--- a/TestON/tests/IntentPerfNextBM/IntentPerfNextBM.topo
+++ /dev/null
@@ -1,109 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>10.254.1.201</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <Mininet1>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS>
- <arg1> --custom topo-intent-8sw.py </arg1>
- <arg2> --arp --mac --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/IntentRerouteLat/IntentRerouteLat.params b/TestON/tests/IntentRerouteLat/IntentRerouteLat.params
deleted file mode 100644
index 2e43679..0000000
--- a/TestON/tests/IntentRerouteLat/IntentRerouteLat.params
+++ /dev/null
@@ -1,79 +0,0 @@
-<PARAMS>
-
- <testcases>1,2,1,2,1,2,1,2</testcases>
-
- <SCALE>1,3,5,7</SCALE>
- <availableNodes>7</availableNodes>
-
- <ENV>
- <cellName>intentRerouteCell</cellName>
- <cellApps>drivers,null,intentperf,metrics</cellApps>
- </ENV>
-
- <TEST>
- <skipCleanInstall>yes</skipCleanInstall>
- <warmUp>5</warmUp>
- <sampleSize>20</sampleSize>
- <wait></wait>
- <intents>1,100,1000</intents> #list format, will be split on ','
- <debug>True</debug>
-
- <s1>1,1,1,1,1,1,1,1</s1>
- <s3>2,2,1,1,3,3,3,1</s3>
- <s5>2,2,1,1,3,4,5,3</s5>
- <s7>2,3,1,1,5,6,7,4</s7>
-
- </TEST>
-
- <METRICS>
- <Submitted>0</Submitted>
- <Installed>1</Installed>
- <Failed>0</Failed>
- <Withdraw>0</Withdraw>
- <Withdrawn>0</Withdrawn>
- </METRICS>
-
- <GIT>
- <autopull>off</autopull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <USER>admin</USER>
-
- <ip1>OC1</ip1>
- <port1>6633</port1>
-
- <ip2>OC2</ip2>
- <port2>6633</port2>
-
- <ip3>OC3</ip3>
- <port3>6633</port3>
-
- <ip4>OC4</ip4>
- <port4>6633</port4>
-
- <ip5>OC5</ip5>
- <port5>6633</port5>
-
- <ip6>OC6</ip6>
- <port6>6633</port6>
-
- <ip7>OC7</ip7>
- <port7>6633</port7>
-
- </CTRL>
-
- <MN>
- <ip1>OCN</ip1>
- </MN>
-
- <BENCH>
- <user>admin</user>
- <ip1>OCN</ip1>
- </BENCH>
-
- <JSON>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/IntentRerouteLat/IntentRerouteLat.py b/TestON/tests/IntentRerouteLat/IntentRerouteLat.py
deleted file mode 100644
index 9127690..0000000
--- a/TestON/tests/IntentRerouteLat/IntentRerouteLat.py
+++ /dev/null
@@ -1,427 +0,0 @@
-# ScaleOutTemplate
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os.path
-
-
-class IntentRerouteLat:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
-
- import time
- global init
- try:
- if type(init) is not bool:
- init = False
- except NameError:
- init = False
-
- #Load values from params file
- checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
- gitPull = main.params[ 'GIT' ][ 'autopull' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- Apps = main.params[ 'ENV' ][ 'cellApps' ]
- BENCHUser = main.params[ 'BENCH' ][ 'user' ]
- maxNodes = int(main.params[ 'availableNodes' ])
- skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- if init == False:
- init = True
- global clusterCount #number of nodes running
- global ONOSIp #list of ONOS IP addresses
- global scale
- global commit
-
- clusterCount = 0
- ONOSIp = [ 0 ]
- scale = (main.params[ 'SCALE' ]).split(",")
- clusterCount = int(scale[0])
-
- #Populate ONOSIp with ips from params
- ONOSIp = [0]
- ONOSIp.extend(main.ONOSbench.getOnosIps())
-
- print("-----------------" + str(ONOSIp))
- #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
- if skipMvn != "yes":
- mvnResult = main.ONOSbench.cleanInstall()
-
- #git
- main.step( "Git checkout and pull " + checkoutBranch )
- if gitPull == 'on':
- checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
- pullResult = main.ONOSbench.gitPull()
-
- else:
- checkoutResult = main.TRUE
- pullResult = main.TRUE
- main.log.info( "Skipped git checkout and pull" )
-
- commit = main.ONOSbench.getVersion()
- commit = (commit.split(" "))[1]
-
- resultsDB = open("IntentRerouteLatDB", "w+")
- resultsDB.close()
-
- # -- END OF INIT SECTION --#
-
- clusterCount = int(scale[0])
- scale.remove(scale[0])
-
- MN1Ip = ONOSIp[len(ONOSIp)-1]
- BENCHIp = ONOSIp[len(ONOSIp)-2]
-
- #kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating enviornment setup")
- for node in range(1, maxNodes + 1):
- main.ONOSbench.onosDie(ONOSIp[node])
-
- #Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
- for i in range(1, maxNodes + 1):
- main.log.info(" Uninstalling ONOS " + str(i) )
- main.ONOSbench.onosUninstall( ONOSIp[i] )
-
- #construct the cell file
- main.log.info("Creating cell file")
- cellIp = []
- for node in range (1, clusterCount + 1):
- cellIp.append(ONOSIp[node])
-
- print "Cell ip" + str(cellIp)
- print cellName
- print MN1Ip
- print Apps
-
-
- main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
-
- main.step( "Set Cell" )
- main.ONOSbench.setCell(cellName)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "verify cells" )
- verifyCellResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Initializing " + str( clusterCount ) + " node cluster." )
- for node in range(1, clusterCount + 1):
- main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
- main.ONOSbench.onosInstall( ONOSIp[node])
-
- for node in range(1, clusterCount + 1):
- for i in range( 2 ):
- isup = main.ONOSbench.isup( ONOSIp[node] )
- if isup:
- main.log.info("ONOS " + str(node) + " is up\n")
- break
- if not isup:
- main.log.report( "ONOS " + str(node) + " didn't start!" )
- main.log.info("Startup sequence complete")
-
- deviceMastership = (main.params[ 'TEST' ][ "s" + str(clusterCount) ]).split(",")
- print("Device mastership list: " + str(deviceMastership))
-
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount 8 " """)
- main.ONOSbench.handle.expect(":~")
- print repr(main.ONOSbench.handle.before)
- time.sleep(3)
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders topoShape reroute" """)
- main.ONOSbench.handle.expect(":~")
- print repr(main.ONOSbench.handle.before)
- time.sleep(3)
-
- time.sleep(10)
-
- once = True
- for attempt in range(0,10):
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- x = main.ONOSbench.handle.before
- main.log.info("Initial setup. ONOS summary response: \n" + x + "\n")
-
- if "devices=8" in x and "links=16," in x:
- break
- else:
- if once == False:
- main.log.error("Null provider start failed, retrying..")
- once = False
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled false" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(3)
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(8)
-
- index = 1
- for node in deviceMastership:
- for attempt in range(0,10):
- cmd = ( "onos $OC" + node + """ "device-role null:000000000000000""" + str(index) + " " + ONOSIp[int(node)] + """ master" """)
- main.log.info("assigning mastership of device " + str(index) + " to node " + node + ": \n " + cmd + "\n")
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
- time.sleep(4)
-
- cmd = ( "onos $OC" + node + " roles|grep 00000" + str(index))
- main.log.info(cmd)
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
- check = main.ONOSbench.handle.before
- main.log.info("CHECK:\n" + check)
- if ("master=" + ONOSIp[int(node)]) in check:
- break
- index += 1
-
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
- def CASE2( self, main ):
-
- import time
- import numpy
- import datetime
- #from scipy import stats
-
- ts = time.time()
- date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
-
- sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
- warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
- intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
- debug = main.params[ 'TEST' ][ 'debug' ]
- for i in range(0,len(intentsList)):
- intentsList[i] = int(intentsList[i])
-
- timestampMetrics = []
- if main.params['METRICS']['Submitted'] == "1":
- timestampMetrics.append("Submitted")
- if main.params['METRICS']['Installed'] == "1":
- timestampMetrics.append("Installed")
- if main.params['METRICS']['Failed'] == "1":
- timestampMetrics.append("Failed")
- if main.params['METRICS']['Withdraw'] == "1":
- timestampMetrics.append("Withdraw")
- if main.params['METRICS']['Withdrawn'] == "1":
- timestampMetrics.append("Withdrawn")
- if debug: main.log.info(timestampMetrics)
-
- if debug == "True":
- debug = True
- else:
- debug = False
-
- ingress = "null:0000000000000001"
- egress = "null:0000000000000007"
-
- for intents in intentsList:
- main.log.report("Intent Batch size: " + str(intents) + "\n ")
- myResult = [["latency", "lastNode"] for x in range(sampleSize)]
-
- for run in range(0, (warmUp + sampleSize)):
- if run > warmUp:
- main.log.info("Starting test iteration " + str(run-warmUp))
-
- cmd = """onos $OC1 "push-test-intents -i """
- cmd += ingress + "/0 "
- cmd += egress + "/0 "
- cmd += str(intents) +""" 1" """
- if debug: main.log.info(cmd)
-
- withdrawCmd = cmd.replace("intents -i", "intents -w ")
-
- #push-test-intents
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
- myRawResult = main.ONOSbench.handle.before
-
- for i in range(0, 40):
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- linkCheck = main.ONOSbench.handle.before
- if ("links=16,") in linkCheck and ("flows=" + str(intents*7) + ","):
- break
- if i == 39:
- main.log.error("Flow/link count incorrect, data invalid."+ linkCheck)
-
-
- #collect timestamp from link cut
- cmd = """onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 down" """
- if debug: main.log.info("COMMAND: " + str(cmd))
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
-
- cmd = "onos-ssh $OC1 cat /opt/onos/log/karaf.log | grep TopologyManager| tail -1"
- for i in range(0,10):
- main.ONOSbench.handle.sendline(cmd)
- time.sleep(2)
- main.ONOSbench.handle.expect(":~")
- raw = main.ONOSbench.handle.before
- #if "NullLinkProvider" in raw and "links=14" in raw:
- if "links=14" in raw:
- break
- if i >= 9:
- main.log.error("Expected output not being recieved... continuing")
- main.log.info(raw)
- break
- time.sleep(2)
-
- temp = raw.splitlines()
- for line in temp:
- if str(date) in line:
- temp = line
- break
-
- cutTimestamp = (temp.split(" "))[0] + " " + (temp.split(" "))[1]
- if debug: main.log.info("Cut timestamp: " + cutTimestamp)
-
- #validate link count and flow count
- for i in range(0, 40):
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- linkCheck = main.ONOSbench.handle.before
- #if "links=" + str(7*intents)+ "," in linkCheck and ("flows=" + str(7*intents) + ",") in linkCheck:
- if "links=14," in linkCheck and ("flows=" + str(8*intents) + ",") in linkCheck:
- break
- if i == 39:
- main.log.error("Link or flow count incorrect, data invalid." + linkCheck)
-
- time.sleep(5) #trying to avoid negative values
-
- #intents events metrics installed timestamp
- IEMtimestamps = [0]*(clusterCount + 1)
- installedTemp = [0]*(clusterCount + 1)
- for node in range(1, clusterCount +1):
- cmd = "onos $OC" + str(node) + """ "intents-events-metrics"|grep Timestamp """
- raw = ""
- while "epoch)" not in raw:
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
- raw = main.ONOSbench.handle.before
-
- print(raw)
-
- intentsTimestamps = {}
- rawTimestamps = raw.splitlines()
- for line in rawTimestamps:
- if "Timestamp" in line and "grep" not in line:
- metricKey = (line.split(" "))[1]
- metricTimestamp = (line.split(" ")[len(line.split(" ")) -1]).replace("epoch)=","")
- metricTimestamp = float(metricTimestamp)
- metricTimestamp = numpy.divide(metricTimestamp, 1000)
- if debug: main.log.info(repr(metricTimestamp))
- intentsTimestamps[metricKey] = metricTimestamp
- if metricKey == "Installed":
- installedTemp[node] = metricTimestamp
-
- main.log.info("Node: " + str(node) + " Timestamps: " + str(intentsTimestamps))
- IEMtimestamps[node] = intentsTimestamps
-
- myMax = max(installedTemp)
- indexOfMax = installedTemp.index(myMax)
-
- #number crunch
- for metric in timestampMetrics: #this is where we sould add support for computing other timestamp metrics
- if metric == "Installed":
- if run >= warmUp:
- main.log.report("link cut timestamp: " + cutTimestamp)
- #readableInstalledTimestamp = str(intentsTimestamps["Installed"])
- readableInstalledTimestamp = str(myMax)
-
- #main.log.report("Intent Installed timestamp: " + str(intentsTimestamps["Installed"]))
- main.log.report("Intent Installed timestamp: " + str(myMax))
-
- cutEpoch = time.mktime(time.strptime(cutTimestamp, "%Y-%m-%d %H:%M:%S,%f"))
- if debug: main.log.info("cutEpoch=" + str(cutEpoch))
- #rerouteLatency = float(intentsTimestamps["Installed"] - cutEpoch)
- rerouteLatency = float(myMax - cutEpoch)
-
- rerouteLatency = numpy.divide(rerouteLatency, 1000)
- main.log.report("Reroute latency:" + str(rerouteLatency) + " (seconds)\n ")
- myResult[run-warmUp][0] = rerouteLatency
- myResult[run-warmUp][1] = indexOfMax
- if debug: main.log.info("Latency: " + str(myResult[run-warmUp][0]))
- if debug: main.log.info("last node: " + str(myResult[run-warmUp][1]))
-
- cmd = """ onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 up" """
- if debug: main.log.info(cmd)
- main.ONOSbench.handle.sendline(cmd)
- main.ONOSbench.handle.expect(":~")
-
-
-
- #wait for intent withdraw
- main.ONOSbench.handle.sendline(withdrawCmd)
- main.log.info(withdrawCmd)
- main.ONOSbench.handle.expect(":~")
- if debug: main.log.info(main.ONOSbench.handle.before)
- main.ONOSbench.handle.sendline("onos $OC1 intents|grep WITHDRAWN|wc -l")
- main.ONOSbench.handle.expect(":~")
- intentWithdrawCheck = main.ONOSbench.handle.before
- if (str(intents)) in intentWithdrawCheck:
- main.log.info("intents withdrawn")
- if debug: main.log.info(intentWithdrawCheck)
-
- # wait for links to be reestablished
- for i in range(0, 10):
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- linkCheck = main.ONOSbench.handle.before
- if "links=16," in linkCheck:
- break
- time.sleep(1)
- if i == 9:
- main.log.info("Links Failed to reconnect, next iteration of data invalid." + linkCheck)
-
- if run < warmUp:
- main.log.info("Warm up run " + str(run+1) + " completed")
-
- if debug: main.log.info(myResult)
- latTemp = []
- nodeTemp = []
- for i in myResult:
- latTemp.append(i[0])
- nodeTemp.append(i[1])
-
- mode = {}
- for i in nodeTemp:
- if i in mode:
- mode[i] += 1
- else:
- mode[i] = 1
-
- for i in mode.keys():
- if mode[i] == max(mode.values()):
- nodeMode = i
-
- average = numpy.average(latTemp)
- stdDev = numpy.std(latTemp)
-
- average = numpy.multiply(average, 1000)
- stdDev = numpy.multiply(stdDev, 1000)
-
- main.log.report("Scale: " + str(clusterCount) + " \tIntent batch: " + str(intents))
- main.log.report("Latency average:................" + str(average))
- main.log.report("Latency standard deviation:....." + str(stdDev))
- main.log.report("Mode of last node to respond:..." + str(nodeMode))
- main.log.report("________________________________________________________")
-
- resultsDB = open("IntentRerouteLatDB", "a")
- resultsDB.write("'" + commit + "',")
- resultsDB.write(str(clusterCount) + ",")
- resultsDB.write(str(intents) + ",")
- resultsDB.write(str(average) + ",")
- resultsDB.write(str(stdDev) + "\n")
- resultsDB.close()
-
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
diff --git a/TestON/tests/IntentRerouteLat/IntentRerouteLat.topo b/TestON/tests/IntentRerouteLat/IntentRerouteLat.topo
deleted file mode 100644
index d82f3fd..0000000
--- a/TestON/tests/IntentRerouteLat/IntentRerouteLat.topo
+++ /dev/null
@@ -1,144 +0,0 @@
-<TOPOLOGY>
-
- <COMPONENT>
-
- <ONOSbench>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS><home>~/onos</home></COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>OC1</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>OC2</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>OC3</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>OC4</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
-
- <ONOS5>
- <host>OC5</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>OC6</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>OC7</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- </COMPONENT>
-
-</TOPOLOGY>
-
diff --git a/TestON/tests/IntentRerouteLat/__init__.py b/TestON/tests/IntentRerouteLat/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IntentRerouteLat/__init__.py
+++ /dev/null
diff --git a/TestON/tests/IpOptical/IpOptical.params b/TestON/tests/IpOptical/IpOptical.params
deleted file mode 100755
index 62e44a8..0000000
--- a/TestON/tests/IpOptical/IpOptical.params
+++ /dev/null
@@ -1,41 +0,0 @@
-<PARAMS>
- #20,21,22,25,10,23,24
- <testcases>20,21,22,10,25,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>driver_test</cellName>
- </ENV>
-
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>15</SwitchDiscovery>
- </timers>
-</PARAMS>
diff --git a/TestON/tests/IpOptical/IpOptical.py b/TestON/tests/IpOptical/IpOptical.py
deleted file mode 100644
index c4a4eb6..0000000
--- a/TestON/tests/IpOptical/IpOptical.py
+++ /dev/null
@@ -1,630 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-# import sys
-# import os
-# import re
-import json
-
-time.sleep( 1 )
-
-class IpOptical:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- import time
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-log
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Git checkout and get version" )
- #main.ONOSbench.gitCheckout( "master" )
- gitPullResult = main.ONOSbench.gitPull()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- main.ONOSbench.getVersion( report=True )
-
- if gitPullResult == 100:
- main.step( "Using mvn clean & install" )
- main.ONOSbench.cleanInstall()
- elif gitPullResult == 0:
- main.log.report(
- "Git Pull Failed, look into logs for detailed reason" )
- main.cleanup()
- main.exit()
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Uninstalling ONOS package" )
- ONOSip1 = main.params[ 'CTRL' ][ 'ip1' ]
- onosUninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOSip1)
- if onosUninstallResult:
- main.log.report( "Uninstalling ONOS package successful" )
- else:
- main.log.report( "Uninstalled ONOS package unsucessful" )
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.ONOSbench.onosInstall( node = ONOSip1 )
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.ONOSbench.onosStart( ONOS1Ip )
-
- main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
- main.step( "Starting Mininet CLI..." )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
-
- main.step( "Disconnecting mininet and restarting ONOS" )
- step1Result = main.TRUE
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
- step1Result = mininetDisconnect
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Mininet disconnect successfully",
- onfail="Mininet failed to disconnect")
- """
- main.step( "Removing raft logs before a clean installation of ONOS" )
- step2Result = main.TRUE
- removeRaftLogsResult = main.ONOSbench.onosRemoveRaftLogs()
- step2Result = removeRaftLogsResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Raft logs removed successfully",
- onfail="Failed to remove raft logs")
- """
- main.step( "Applying cell variable to environment" )
- step3Result = main.TRUE
- setCellResult = main.ONOSbench.setCell( cellName )
- verifyCellResult = main.ONOSbench.verifyCell()
- step3Result = setCellResult and verifyCellResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Cell applied successfully",
- onfail="Failed to apply cell")
-
- main.step( "Uninstalling ONOS package" )
- step4Result = main.TRUE
- ONOSip1 = main.params[ 'CTRL' ][ 'ip1' ]
- onosUninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOSip1)
- step4Result = onosUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully uninstalled ONOS",
- onfail="Failed to uninstall ONOS")
-
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- step5Result = main.TRUE
- onosInstallResult = main.ONOSbench.onosInstall( node = ONOSip1 )
- step5Result = onosInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully installed ONOS",
- onfail="Failed to install ONOS")
-
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- main.step( "Starting ONOS service" )
- step6Result = main.TRUE
- startResult = main.ONOSbench.onosStart( ONOS1Ip )
- step6Result = startResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step6Result,
- onpass="Successfully started ONOS",
- onfail="Failed to start ONOS")
-
- main.step( "Starting ONOS cli" )
- step7Result = main.TRUE
- cliResult = main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
- step7Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step7Result,
- onpass="Successfully started ONOS cli",
- onfail="Failed to start ONOS cli")
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- import time
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
-
- main.step( "Activate optical app" )
- step1Result = main.TRUE
- activateOpticalResult = main.ONOS2.activateApp( "org.onosproject.optical" )
- step1Result = activateOpticalResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully activated optical app",
- onfail="Failed to activate optical app")
-
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- main.step( "Starting mininet and LINC-OE" )
- step2Result = main.TRUE
- time.sleep( 10 )
- opticalMnScript = main.LincOE2.runOpticalMnScript(ctrllerIP = main.params[ 'CTRL' ][ 'ip1' ])
- step2Result = opticalMnScript
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Started the topology successfully ",
- onfail="Failed to start the topology")
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
-
- main.step( "Starts new ONOS cli" )
- step1Result = main.TRUE
- cliResult = main.ONOS3.startOnosCli( ONOSIp=main.params[ 'CTRL' ]\
- [ 'ip1' ] )
- step1Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully starts a new cli",
- onfail="Failed to start new cli" )
-
- main.step( "Compare topology" )
- step2Result = main.TRUE
- devicesResult = main.ONOS3.devices( jsonFormat=False )
- print "devices_result :\n", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- # sleeps for sometime so the state of the switches will be active
- time.sleep( 30 )
- print "_________________________________"
- linksResult = main.ONOS3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
- step2Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully loaded packet optical topology",
- onfail="Failed to load packet optical topology" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Install point intents between 2 packet layer device and " +
- "ping the hosts" )
-
- main.step( "Adding point intents" )
- checkFlowResult = main.TRUE
- step1Result = main.TRUE
- main.pIntentsId = []
- pIntent1 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- time.sleep( 10 )
- pIntent2 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- main.pIntentsId.append( pIntent1 )
- main.pIntentsId.append( pIntent2 )
- time.sleep( 10 )
- main.log.info( "Checking intents state")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- time.sleep( 10 )
- main.log.info( "Checking flows state")
- checkFlowResult = main.ONOS3.checkFlowsState()
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 10 )
- main.log.info( "Checking intents state one more time")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- step1Result = checkStateResult and checkFlowResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully added point intents",
- onfail="Failed to add point intents")
-
- print main.ONOS3.intents()
-
- main.step( "Ping h1 and h5" )
- step2Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step2Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
-
- main.step( "Attach to the Linc-OE session" )
- step1Result = main.TRUE
- attachConsole = main.LincOE1.attachLincOESession()
- step1Result = attachConsole
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully attached Linc-OE session",
- onfail="Failed to attached Linc-OE session")
-
- main.step( "Bring a port down and verify the link state" )
- step2Result = main.TRUE
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- links = main.ONOS3.links()
- main.log.info( "links = " + links )
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
- time.sleep( 10 )
- #checkFlowsState = main.ONOS3.checkFlowsState()
- step2Result = linksStateResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfuly brought down a link",
- onfail="Failed to bring down a link")
-
- main.step( "Verify Rerouting by a ping test" )
- step3Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step3Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- main.step( "Bring the downed port up and verify the link state" )
- step4Result = main.TRUE
- main.LincOE1.portUp( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- time.sleep( 30 )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 0:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- step4Result = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully brought the port up",
- onfail="Failed to bring the port up")
- """
- main.step( "Removing host intents" )
- step5Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step5Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
- """
- def CASE10( self ):
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- main.step( "Uninstalling reactive forwarding app" )
- step1Result = main.TRUE
- # Unistall onos-app-fwd app to disable reactive forwarding
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOS2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
- step1Result = appUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully deactivate reactive forwarding app",
- onfail="Failed to deactivate reactive forwarding app")
- # After reactive forwarding is disabled, the reactive flows on
- # switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
- flows = main.ONOS2.flows()
- main.log.info( flows )
-
- def CASE25( self ):
- """
- Add host intents between 2 packet layer host
- """
- import time
- import json
- main.log.report( "Adding host intents between 2 optical layer host" )
- main.case( "Test add host intents between optical layer host" )
-
- main.step( "Discover host using arping" )
- step1Result = main.TRUE
- main.hostMACs = []
- main.hostId = []
- #Listing host MAC addresses
- for i in range( 1 , 7 ):
- main.hostMACs.append( "00:00:00:00:00:" +
- str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
- for macs in main.hostMACs:
- main.hostId.append( macs + "/-1" )
- host1 = main.hostId[ 0 ]
- host2 = main.hostId[ 1 ]
- # Use arping to discover the hosts
- main.LincOE2.arping( host = "h1" )
- main.LincOE2.arping( host = "h2" )
- time.sleep( 5 )
- hostsDict = main.ONOS3.hosts()
- if not len( hostsDict ):
- step1Result = main.FALSE
- # Adding host intent
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Hosts discovered",
- onfail="Failed to discover hosts")
-
- main.step( "Adding host intents to h1 and h2" )
- step2Result = main.TRUE
- intentsId = []
- intent1 = main.ONOS3.addHostIntent( hostIdOne = host1,
- hostIdTwo = host2 )
- intentsId.append( intent1 )
- """
- intent2 = main.ONOS3.addHostIntent( hostIdOne = host2,
- hostIdTwo = host1 )
- intentsId.append( intent2 )
- """
- # Checking intents state before pinging
- main.log.info( "Checking intents state" )
- time.sleep( 15 )
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- #check intent state again if intents are not in installed state
- print main.ONOS3.intents()
- if not intentResult:
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- step2Result = intentResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step2Result,
- onpass="All intents are in INSTALLED state ",
- onfail="Some of the intents are not in " +
- "INSTALLED state " )
-
- # pinging h1 to h2 and then ping h2 to h1
- main.step( "Pinging h1 and h2" )
- step3Result = main.TRUE
- pingResult = main.TRUE
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h2" )
- pingResult = pingResult and main.LincOE2.pingHostOptical( src="h2",
- target="h1" )
- step3Result = pingResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step3Result,
- onpass="Pinged successfully between h1 and h2",
- onfail="Pinged failed between h1 and h2" )
- # Removed all added host intents
- main.step( "Removing host intents" )
- step4Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- #main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step4Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
diff --git a/TestON/tests/IpOptical/IpOptical.topo b/TestON/tests/IpOptical/IpOptical.topo
deleted file mode 100755
index 9cef3f7..0000000
--- a/TestON/tests/IpOptical/IpOptical.topo
+++ /dev/null
@@ -1,92 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/IpOptical/__init__.py b/TestON/tests/IpOptical/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IpOptical/__init__.py
+++ /dev/null
diff --git a/TestON/tests/IpOpticalMulti/IpOpticalMulti.params b/TestON/tests/IpOpticalMulti/IpOpticalMulti.params
deleted file mode 100755
index c17bf21..0000000
--- a/TestON/tests/IpOpticalMulti/IpOpticalMulti.params
+++ /dev/null
@@ -1,64 +0,0 @@
-<PARAMS>
-
- <testcases>20,21,22,10,25,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>multi_test</cellName>
- </ENV>
-
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <ip2>10.128.20.12</ip2>
- <ip3>10.128.20.13</ip3>
- <port1>6633</port1>
- <port2>6633</port2>
- <port3>6633</port3>
- </CTRL>
-
- <SDNIP>
- <ethType>IPV4</ethType>
- <tcpProto>6</tcpProto>
- <icmpProto>1</icmpProto>
- <srcPort>5001</srcPort>
- <dstPort>5001</dstPort>
- </SDNIP>
-
- <MULTIPOINT_INTENT>
- <device1>of:0000000000003008/1 </device1>
- <device2>of:0000000000003009/1 </device2>
- <device3>of:0000000000003010/1 </device3>
- <mac1>00:00:00:00:00:0A </mac1>
- <mac2>00:00:00:00:00:08 </mac2>
- <ip1>10.0.3.0/24 </ip1>
- <ip2>10.0.1.0/24 </ip2>
- </MULTIPOINT_INTENT>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>31</SwitchDiscovery>
- </timers>
-
-</PARAMS>
diff --git a/TestON/tests/IpOpticalMulti/IpOpticalMulti.py b/TestON/tests/IpOpticalMulti/IpOpticalMulti.py
deleted file mode 100644
index ff09766..0000000
--- a/TestON/tests/IpOpticalMulti/IpOpticalMulti.py
+++ /dev/null
@@ -1,703 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import sys
-import os
-import re
-import time
-import json
-
-time.sleep( 1 )
-
-class IpOpticalMulti:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-logs
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult1 = main.ONOSbench.setCell( cellName )
- # cellResult2 = main.ONOScli1.setCell( cellName )
- # cellResult3 = main.ONOScli2.setCell( cellName )
- # cellResult4 = main.ONOScli3.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- cellResult = cellResult1
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- removeLogResult = main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Git checkout, pull and get version" )
- #main.ONOSbench.gitCheckout( "master" )
- gitPullResult = main.ONOSbench.gitPull()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- versionResult = main.ONOSbench.getVersion( report=True )
-
- if gitPullResult == 100:
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.ONOSbench.cleanInstall()
- # cleanInstallResult = main.TRUE
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- # main.step( "Creating a cell" )
- # cellCreateResult = main.ONOSbench.createCellFile( **************
- # )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- print startcli1
- print startcli2
- print startcli3
-
- case1Result = ( packageResult and
- cellResult and verifyResult and onosInstallResult and
- onosIsup and startResult )
- utilities.assertEquals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
-
- main.step( "Disconnecting mininet and restarting ONOS" )
- step1Result = main.TRUE
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
- step1Result = mininetDisconnect
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Mininet disconnect successfully",
- onfail="Mininet failed to disconnect")
- """
- main.step( "Removing raft logs before a clean installation of ONOS" )
- step2Result = main.TRUE
- removeRaftLogsResult = main.ONOSbench.onosRemoveRaftLogs()
- step2Result = removeRaftLogsResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Raft logs removed successfully",
- onfail="Failed to remove raft logs")
- """
- main.step( "Applying cell variable to environment" )
- step3Result = main.TRUE
- setCellResult = main.ONOSbench.setCell( cellName )
- verifyCellResult = main.ONOSbench.verifyCell()
- step3Result = setCellResult and verifyCellResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Cell applied successfully",
- onfail="Failed to apply cell")
-
- main.step( "Uninstalling ONOS package" )
- step4Result = main.TRUE
- onos1UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS1Ip)
- onos2UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS2Ip)
- onos3UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS3Ip)
- onosUninstallResult = onos1UninstallResult and onos2UninstallResult \
- and onos3UninstallResult
- step4Result = onosUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully uninstalled ONOS",
- onfail="Failed to uninstall ONOS")
-
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- step5Result = main.TRUE
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsUp = onos1Isup and onos2Isup and onos3Isup
- if onosIsUp == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
- step5Result = onosInstallResult and onosIsUp
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully installed ONOS",
- onfail="Failed to install ONOS")
-
- main.step( "Starting ONOS service" )
- step6Result = main.TRUE
- startResult = main.ONOSbench.onosStart( ONOS1Ip )
- step6Result = startResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step6Result,
- onpass="Successfully started ONOS",
- onfail="Failed to start ONOS")
-
- main.step( "Starting ONOS cli" )
- step7Result = main.TRUE
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- startResult = startcli1 and startcli2 and startcli3
- step7Result = startResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step7Result,
- onpass="Successfully started ONOS cli",
- onfail="Failed to start ONOS cli")
-
- case20Result = step1Result and step3Result and\
- step4Result and step5Result and step6Result and\
- step7Result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case20Result,
- onpass= "Exiting functionality mininet topology and reinstalling" +
- " ONOS successful",
- onfail= "Exiting functionality mininet topology and reinstalling" +
- " ONOS failed" )
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- import time
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
-
- main.step( "Activate optical app" )
- step1Result = main.TRUE
- activateOpticalResult = main.ONOScli2.activateApp( "org.onosproject.optical" )
- step1Result = activateOpticalResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully activated optical app",
- onfail="Failed to activate optical app")
-
- appCheck = main.ONOScli2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli2.apps() )
- main.log.warn( main.ONOScli2.appIDs() )
-
- main.step( "Starting mininet and LINC-OE" )
- step2Result = main.TRUE
- time.sleep( 10 )
- opticalMnScript = main.LincOE2.runOpticalMnScript(ctrllerIP = main.params[ 'CTRL' ][ 'ip1' ])
- step2Result = opticalMnScript
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Started the topology successfully ",
- onfail="Failed to start the topology")
-
- case21Result = step1Result and step2Result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case21Result,
- onpass="Packet optical topology spawned successsfully",
- onfail="Packet optical topology spawning failed" )
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
-
- main.step( "Starts new ONOS cli" )
- step1Result = main.TRUE
- cliResult = main.ONOScli1.startOnosCli( ONOSIp=main.params[ 'CTRL' ]\
- [ 'ip1' ] )
- step1Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully starts a new cli",
- onfail="Failed to start new cli" )
-
- main.step( "Compare topology" )
- step2Result = main.TRUE
- devicesResult = main.ONOScli1.devices( jsonFormat=False )
- print "devices_result :\n", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- # sleeps for sometime so the state of the switches will be active
- time.sleep( 30 )
- print "_________________________________"
- linksResult = main.ONOScli1.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
- step2Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully loaded packet optical topology",
- onfail="Failed to load packet optical topology" )
-
- case22Result = step1Result and step2Result
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case22Result,
- onpass="Packet optical topology discovery successful",
- onfail="Packet optical topology discovery failed" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Install point intents between 2 packet layer device and " +
- "ping the hosts" )
-
- main.step( "Adding point intents" )
- step1Result = main.TRUE
- intentsId = []
- pIntent1 = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- pIntent2 = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- intentsId.append( pIntent1 )
- intentsId.append( pIntent2 )
- main.log.info( "Checking intents state")
- checkStateResult = main.ONOScli1.checkIntentState( intentsId = intentsId )
- time.sleep( 30 )
- main.log.info( "Checking flows state")
- checkFlowResult = main.ONOScli1.checkFlowsState()
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 30 )
- main.log.info( "Checking intents state one more time")
- checkStateResult = main.ONOScli1.checkIntentState( intentsId = intentsId )
- step1Result = checkStateResult and checkFlowResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully added point intents",
- onfail="Failed to add point intents")
-
- main.step( "Ping h1 and h5" )
- step2Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step2Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- case23Result = step1Result and step2Result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case23Result,
- onpass="Point intents are installed properly",
- onfail="Failed to install point intents" )
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
-
- main.step( "Attach to the Linc-OE session" )
- step1Result = main.TRUE
- attachConsole = main.LincOE1.attachLincOESession()
- step1Result = attachConsole
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully attached Linc-OE session",
- onfail="Failed to attached Linc-OE session")
-
- main.step( "Bring a port down and verify the link state" )
- step2Result = main.TRUE
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOScli1.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- links = main.ONOScli1.links()
- main.log.info( "links = " + links )
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
- time.sleep( 10 )
- checkFlowsState = main.ONOScli1.checkFlowsState()
- step2Result = linksStateResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfuly brought down a link",
- onfail="Failed to bring down a link")
-
- main.step( "Verify Rerouting by a ping test" )
- step3Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step3Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- main.step( "Bring the downed port up and verify the link state" )
- step4Result = main.TRUE
- main.LincOE1.portUp( swId="9", ptId="20" )
- linksNonjson = main.ONOScli1.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 0:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- step4Result = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully brought the port up",
- onfail="Failed to bring the port up")
-
- case24Result = step1Result and step2Result and step3Result \
- and step4Result
- utilities.assert_equals( expect=main.TRUE,
- actual=case24Result,
- onpass="Packet optical rerouting successful",
- onfail="Packet optical rerouting failed" )
-
- def CASE10( self ):
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- main.step( "Uninstalling reactive forwarding app" )
- step1Result = main.TRUE
- # Unistall onos-app-fwd app to disable reactive forwarding
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOScli2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli2.apps() )
- main.log.warn( main.ONOScli2.appIDs() )
- step1Result = appUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully deactivate reactive forwarding app",
- onfail="Failed to deactivate reactive forwarding app")
- # After reactive forwarding is disabled, the reactive flows on
- # switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
- flows = main.ONOScli2.flows()
- main.log.info( flows )
-
- case10Result = step1Result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case10Result,
- onpass="Reactive forwarding app uninstallation successful",
- onfail="Reactive forwarding app uninstallation failed" )
-
- def CASE25( self ):
- """
- Add host intents between 2 packet layer host
- """
- import time
- import json
- main.log.report( "Adding host intents between 2 optical layer host" )
- main.case( "Test add host intents between optical layer host" )
-
- main.step( "Discover host using arping" )
- step1Result = main.TRUE
- main.hostMACs = []
- main.hostId = []
- #Listing host MAC addresses
- for i in range( 1 , 7 ):
- main.hostMACs.append( "00:00:00:00:00:" +
- str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
- for macs in main.hostMACs:
- main.hostId.append( macs + "/-1" )
- host1 = main.hostId[ 0 ]
- host2 = main.hostId[ 1 ]
- # Use arping to discover the hosts
- main.LincOE2.arping( host = "h1" )
- main.LincOE2.arping( host = "h2" )
- time.sleep( 5 )
- hostsDict = main.ONOScli1.hosts()
- if not len( hostsDict ):
- step1Result = main.FALSE
- # Adding host intent
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Hosts discovered",
- onfail="Failed to discover hosts")
-
- main.step( "Adding host intents to h1 and h2" )
- step2Result = main.TRUE
- intentsId = []
- intent1 = main.ONOScli1.addHostIntent( hostIdOne = host1,
- hostIdTwo = host2 )
- intentsId.append( intent1 )
- time.sleep( 5 )
- intent2 = main.ONOScli1.addHostIntent( hostIdOne = host2,
- hostIdTwo = host1 )
- intentsId.append( intent2 )
- # Checking intents state before pinging
- main.log.info( "Checking intents state" )
- time.sleep( 30 )
- intentResult = main.ONOScli1.checkIntentState( intentsId = intentsId )
- #check intent state again if intents are not in installed state
- if not intentResult:
- intentResult = main.ONOScli1.checkIntentState( intentsId = intentsId )
- step2Result = intentResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step2Result,
- onpass="All intents are in INSTALLED state ",
- onfail="Some of the intents are not in " +
- "INSTALLED state " )
-
- # pinging h1 to h2 and then ping h2 to h1
- main.step( "Pinging h1 and h2" )
- step3Result = main.TRUE
- pingResult = main.TRUE
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h2" )
- pingResult = pingResult and main.LincOE2.pingHostOptical( src="h2",
- target="h1" )
- step3Result = pingResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step3Result,
- onpass="Pinged successfully between h1 and h2",
- onfail="Pinged failed between h1 and h2" )
- # Removed all added host intents
- main.step( "Removing host intents" )
- step4Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOScli1.intents() )
- main.ONOScli1.removeIntent( intentId=intent1, purge=True )
- main.ONOScli1.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOScli1.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOScli1.intents() )
- if len( json.loads( main.ONOScli1.intents() ) ):
- removeResult = main.FALSE
- step4Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
- case25Result = step1Result and step2Result and step3Result and \
- step4Result
- utilities.assert_equals( expect=main.TRUE,
- actual=case25Result,
- onpass="Add host intent successful",
- onfail="Add host intent failed" )
diff --git a/TestON/tests/IpOpticalMulti/IpOpticalMulti.topo b/TestON/tests/IpOpticalMulti/IpOpticalMulti.topo
deleted file mode 100755
index 4b1ab12..0000000
--- a/TestON/tests/IpOpticalMulti/IpOpticalMulti.topo
+++ /dev/null
@@ -1,118 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/IpOpticalMulti/IpOpticalMultiOld.py b/TestON/tests/IpOpticalMulti/IpOpticalMultiOld.py
deleted file mode 100644
index d00410f..0000000
--- a/TestON/tests/IpOpticalMulti/IpOpticalMultiOld.py
+++ /dev/null
@@ -1,572 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import sys
-import os
-import re
-import time
-import json
-
-time.sleep( 1 )
-
-class IpOpticalMulti:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-logs
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult1 = main.ONOSbench.setCell( cellName )
- # cellResult2 = main.ONOScli1.setCell( cellName )
- # cellResult3 = main.ONOScli2.setCell( cellName )
- # cellResult4 = main.ONOScli3.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- cellResult = cellResult1
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- removeLogResult = main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Git checkout, pull and get version" )
- #main.ONOSbench.gitCheckout( "master" )
- gitPullResult = main.ONOSbench.gitPull()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- versionResult = main.ONOSbench.getVersion( report=True )
-
- if gitPullResult == 1:
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.ONOSbench.cleanInstall()
- # cleanInstallResult = main.TRUE
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- # main.step( "Creating a cell" )
- # cellCreateResult = main.ONOSbench.createCellFile( **************
- # )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- print startcli1
- print startcli2
- print startcli3
-
- case1Result = ( packageResult and
- cellResult and verifyResult and onosInstallResult and
- onosIsup and startResult )
- utilities.assertEquals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE10( self ):
- import time
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- # Unistall onos-app-fwd app to disable reactive forwarding
- appInstallResult = main.ONOScli1.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- main.log.info( "onos-app-fwd uninstalled" )
-
- # After reactive forwarding is disabled,
- # the reactive flows on switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
-
- hosts = main.ONOScli1.hosts()
- main.log.info( hosts )
- case10Result = appInstallResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case10Result,
- onpass="Reactive forwarding app uninstallation successful",
- onfail="Reactive forwarding app uninstallation failed" )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
- main.step( "Disconnecting mininet and restarting ONOS" )
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- startResult = startcli1 and startcli2 and startcli3
- if startResult == main.TRUE:
- main.log.report( "ONOS cli starts properly" )
- case20Result = mininetDisconnect and cellResult and verifyResult \
- and onosInstallResult and onosIsup and startResult
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case20Result,
- onpass= "Exiting functionality mininet topology and reinstalling" +
- " ONOS successful",
- onfail= "Exiting functionality mininet topology and reinstalling" +
- " ONOS failed" )
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1 <Ctrls>
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
- main.step( "Starting LINC-OE and other components" )
- main.log.info( "Activate optical app" )
- appInstallResult = main.ONOScli1.activateApp( "org.onosproject.optical" )
- appCheck = main.ONOScli1.appToIDCheck()
- appCheck = appCheck and main.ONOScli2.appToIDCheck()
- appCheck = appCheck and main.ONOScli3.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( "Checking ONOS application unsuccesful" )
-
- ctrllerIP = []
- ctrllerIP.append( main.params[ 'CTRL' ][ 'ip1' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip2' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip3' ] )
- opticalMnScript = main.LincOE2.runOpticalMnScript( ctrllerIP = ctrllerIP )
- case21Result = opticalMnScript and appInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case21Result,
- onpass="Packet optical topology spawned successsfully",
- onfail="Packet optical topology spawning failed" )
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=42.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
- main.step( "Topology comparision" )
- devicesResult = main.ONOScli3.devices( jsonFormat=False )
-
- print "devices_result = ", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
-
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- print "_________________________________"
-
- linksResult = main.ONOScli3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 42:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
-
- case22Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case22Result,
- onpass="Packet optical topology discovery successful",
- onfail="Packet optical topology discovery failed" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Topology comparision" )
- main.step( "Adding point intents" )
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- time.sleep( 30 )
- flowHandle = main.ONOScli1.flows()
- main.log.info( "flows :" + flowHandle )
-
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 60 )
- intentHandle = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents :" + intentHandle )
-
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report(
- "Point intents for packet optical have not ben installed" +
- " correctly. Cleaning up" )
- if PingResult == main.TRUE:
- main.log.report(
- "Point Intents for packet optical have been " +
- "installed correctly" )
-
- case23Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case23Result,
- onpass= "Point intents addition for packet optical and" +
- "Pingall Test successful",
- onfail= "Point intents addition for packet optical and" +
- "Pingall Test NOT successful" )
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
- main.step( "Attach to the Linc-OE session" )
- attachConsole = main.LincOE1.attachLincOESession()
- print "attachConsole = ", attachConsole
-
- main.step( "Bring a port down and verify the link state" )
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOScli3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
-
- linkInactiveCount = linksNonjson.count("state=INACTIVE")
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
-
- links = main.ONOScli3.links()
- main.log.info( "links = " + links )
-
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
-
- print "links_state_result = ", linksStateResult
- time.sleep( 10 )
- flowHandle = main.ONOScli3.flows()
- main.log.info( "flows :" + flowHandle )
-
- main.step( "Verify Rerouting by a ping test" )
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.TRUE:
- main.log.report( "Ping test successful " )
- if PingResult == main.FALSE:
- main.log.report( "Ping test failed" )
-
- case24Result = PingResult and linksStateResult
- utilities.assert_equals( expect=main.TRUE, actual=case24Result,
- onpass="Packet optical rerouting successful",
- onfail="Packet optical rerouting failed" )
-
- def CASE25( self ):
- """
- Add host intents between 2 packet layer host
- """
- import time
- import json
- main.log.report( "Adding host intents between 2 packet layer host" )
- main.hostMACs = []
- main.hostId = []
- #Listing host MAC addresses
- for i in range( 1 , 7 ):
- main.hostMACs.append( "00:00:00:00:00:" +
- str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
- for macs in main.hostMACs:
- main.hostId.append( macs + "/-1" )
-
- host1 = main.hostId[ 0 ]
- host2 = main.hostId[ 1 ]
- intentsId = []
- # Use arping to discover the hosts
- main.LincOE2.arping( host = "h1" )
- main.LincOE2.arping( host = "h2" )
- # Adding host intent
- main.log.step( "Adding host intents to h1 and h2" )
- intent1 = main.ONOScli1.addHostIntent( hostIdOne = host1,
- hostIdTwo = host2 )
- intentsId.append( intent1 )
- time.sleep( 5 )
- intent2 = main.ONOScli1.addHostIntent( hostIdOne = host2,
- hostIdTwo = host1 )
- intentsId.append( intent2 )
- # Checking intents state before pinging
- main.log.step( "Checking intents state" )
- time.sleep( 10 )
- intentResult = main.ONOScli1.checkIntentState( intentsId = intentsId )
- utilities.assert_equals( expect=main.TRUE, actual=intentResult,
- onpass="All intents are in INSTALLED state ",
- onfail="Some of the intents are not in " +
- "INSTALLED state " )
-
- # pinging h1 to h2 and then ping h2 to h1
- main.log.step( "Pinging h1 and h2" )
- pingResult = main.TRUE
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h2" )
- pingResult = pingResult and main.LincOE2.pingHostOptical( src="h2",
- target="h1" )
-
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="Pinged successfully between h1 and h2",
- onfail="Pinged failed between h1 and h2" )
-
- case25Result = pingResult
- utilities.assert_equals( expect=main.TRUE, actual=case25Result,
- onpass="Add host intent successful",
- onfail="Add host intent failed" )
diff --git a/TestON/tests/IpOpticalMulti/__init__.py b/TestON/tests/IpOpticalMulti/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/IpOpticalMulti/__init__.py
+++ /dev/null
diff --git a/TestON/tests/MultiProd/MultiProd.params b/TestON/tests/MultiProd/MultiProd.params
deleted file mode 100755
index 3767ab9..0000000
--- a/TestON/tests/MultiProd/MultiProd.params
+++ /dev/null
@@ -1,68 +0,0 @@
-<PARAMS>
-
- <testcases>1,4,10,5,6,7,8,6,8,9,8,31,32,8,33,8,20,21,22,10,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>multi_test</cellName>
- </ENV>
-
- <GIT>
- <pull>False</pull>
- </GIT>
-
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <ip2>10.128.20.12</ip2>
- <ip3>10.128.20.13</ip3>
- <port1>6633</port1>
- <port2>6633</port2>
- <port3>6633</port3>
- </CTRL>
-
- <SDNIP>
- <ethType>IPV4</ethType>
- <tcpProto>6</tcpProto>
- <icmpProto>1</icmpProto>
- <srcPort>5001</srcPort>
- <dstPort>5001</dstPort>
- </SDNIP>
-
- <MULTIPOINT_INTENT>
- <device1>of:0000000000003008/1 </device1>
- <device2>of:0000000000003009/1 </device2>
- <device3>of:0000000000003010/1 </device3>
- <mac1>00:00:00:00:00:0A </mac1>
- <mac2>00:00:00:00:00:08 </mac2>
- <ip1>10.0.3.0/24 </ip1>
- <ip2>10.0.1.0/24 </ip2>
- </MULTIPOINT_INTENT>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>31</SwitchDiscovery>
- </timers>
-
-</PARAMS>
diff --git a/TestON/tests/MultiProd/MultiProd.py b/TestON/tests/MultiProd/MultiProd.py
deleted file mode 100644
index 682b6f1..0000000
--- a/TestON/tests/MultiProd/MultiProd.py
+++ /dev/null
@@ -1,1997 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import sys
-import os
-import re
-import time
-import json
-
-time.sleep( 1 )
-
-class MultiProd:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-logs
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- gitPull = main.params[ 'GIT' ][ 'pull' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult1 = main.ONOSbench.setCell( cellName )
- # cellResult2 = main.ONOScli1.setCell( cellName )
- # cellResult3 = main.ONOScli2.setCell( cellName )
- # cellResult4 = main.ONOScli3.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- cellResult = cellResult1
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- removeLogResult = main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Git checkout and get version" )
- main.ONOSbench.gitCheckout( "master" )
- if gitPull == 'True':
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == 1:
- main.step( "Using mvn clean & install" )
- main.ONOSbench.cleanInstall()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- elif gitPullResult == 0:
- main.log.report(
- "Git Pull Failed, look into logs for detailed reason" )
- main.cleanup()
- main.exit()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- else:
- main.log.info( "Skipping git pull" )
- main.ONOSbench.getVersion( report=True )
- packageResult = main.TRUE
-
- # main.step( "Creating a cell" )
- # cellCreateResult = main.ONOSbench.createCellFile( **************
- # )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- print startcli1
- print startcli2
- print startcli3
-
- # Starting the mininet using the old way
- main.step( "Starting Mininet ..." )
- netIsUp = main.Mininet1.startNet()
- if netIsUp:
- main.log.info("Mininet CLI is up")
-
- case1Result = ( packageResult and
- cellResult and verifyResult and onosInstallResult and
- onosIsup and startResult )
- utilities.assertEquals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE11( self, main ):
- """
- Cleanup sequence:
- onos-service <nodeIp> stop
- onos-uninstall
-
- TODO: Define rest of cleanup
-
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.case( "Cleaning up test environment" )
-
- main.step( "Testing ONOS kill function" )
- killResult1 = main.ONOSbench.onosKill( ONOS1Ip )
- killResult2 = main.ONOSbench.onosKill( ONOS2Ip )
- killResult3 = main.ONOSbench.onosKill( ONOS3Ip )
-
- main.step( "Stopping ONOS service" )
- stopResult1 = main.ONOSbench.onosStop( ONOS1Ip )
- stopResult2 = main.ONOSbench.onosStop( ONOS2Ip )
- stopResult3 = main.ONOSbench.onosStop( ONOS3Ip )
-
- main.step( "Uninstalling ONOS service" )
- uninstallResult = main.ONOSbench.onosUninstall()
-
- def CASE3( self, main ):
- """
- Test 'onos' command and its functionality in driver
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.case( "Testing 'onos' command" )
-
- main.step( "Sending command 'onos -w <onos-ip> system:name'" )
- cmdstr1 = "system:name"
- cmdResult1 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult1 )
- cmdResult2 = main.ONOSbench.onosCli( ONOS2Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult2 )
- cmdResult3 = main.ONOSbench.onosCli( ONOS3Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult3 )
-
- main.step( "Sending command 'onos -w <onos-ip> onos:topology'" )
- cmdstr2 = "onos:topology"
- cmdResult4 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult4 )
- cmdResult5 = main.ONOSbench.onosCli( ONOS2Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult5 )
- cmdResult6 = main.ONOSbench.onosCli( ONOS6Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult6 )
-
- def CASE4( self, main ):
- import re
- import time
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.log.report(
- "This testcase is testing the assignment of all the switches" +
- " to all controllers and discovering the hosts in reactive mode" )
- main.log.report( "__________________________________" )
- main.case( "Pingall Test(No intents are added)" )
- main.step( "Assigning switches to controllers" )
- for i in range( 1, 29 ): # 1 to ( num of switches +1 )
- main.Mininet1.assignSwController(
- sw=str( i ),
- count=3,
- ip1=ONOS1Ip,
- port1=ONOS1Port,
- ip2=ONOS2Ip,
- port2=ONOS2Port,
- ip3=ONOS3Ip,
- port3=ONOS3Port )
-
- switchMastership = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- switchMastership = switchMastership and main.TRUE
- else:
- switchMastership = main.FALSE
-
- if switchMastership == main.TRUE:
- main.log.report( "Controller assignment successfull" )
- else:
- main.log.report( "Controller assignment failed" )
- appInstallResult = main.TRUE
- main.log.info( "Activating reactive forwarding app" )
- appInstallResult = main.ONOScli1.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- time.sleep( 30 )
- # REACTIVE FWD test
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- case4Result = switchMastership and pingResult
- if pingResult == main.TRUE:
- main.log.report(
- "Pingall Test in reactive mode to" +
- " discover the hosts successful" )
- else:
- main.log.report(
- "Pingall Test in reactive mode to discover the hosts failed" )
-
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case4Result,
- onpass="Controller assignment and Pingall Test successful",
- onfail="Controller assignment and Pingall Test NOT successful" )
-
- def CASE5( self, main ):
- import json
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.log.report(
- "This testcase is testing if all ONOS nodes are in topology" +
- " sync with mininet and its peer ONOS nodes" )
- main.log.report( "__________________________________" )
- main.case(
- "Testing Mininet topology with the" +
- " topology of multi instances ONOS" )
- main.step( "Collecting topology information from ONOS" )
- devices1 = main.ONOScli1.devices()
- devices2 = main.ONOScli2.devices()
- devices3 = main.ONOScli3.devices()
- # print "devices1 = ", devices1
- # print "devices2 = ", devices2
- # print "devices3 = ", devices3
- hosts1 = main.ONOScli1.hosts()
- hosts2 = main.ONOScli2.hosts()
- hosts3 = main.ONOScli3.hosts()
- # print "hosts1 = ", hosts1
- # print "hosts2 = ", hosts2
- # print "hosts3 = ", hosts3
- ports1 = main.ONOScli1.ports()
- ports2 = main.ONOScli2.ports()
- ports3 = main.ONOScli3.ports()
- # print "ports1 = ", ports1
- # print "ports2 = ", ports2
- # print "ports3 = ", ports3
- links1 = main.ONOScli1.links()
- links2 = main.ONOScli2.links()
- links3 = main.ONOScli3.links()
- # print "links1 = ", links1
- # print "links2 = ", links2
- # print "links3 = ", links3
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- print "**************"
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- TopologyCheck = main.TRUE
- main.step( "Compare ONOS Topology to MN Topology" )
-
- switchesResults1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- print "switches_Result1 = ", switchesResults1
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults1,
- onpass="ONOS1 Switches view is correct",
- onfail="ONOS1 Switches view is incorrect" )
-
- switchesResults2 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices2 ), json.loads( ports2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults2,
- onpass="ONOS2 Switches view is correct",
- onfail="ONOS2 Switches view is incorrect" )
-
- switchesResults3 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices3 ), json.loads( ports3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults3,
- onpass="ONOS3 Switches view is correct",
- onfail="ONOS3 Switches view is incorrect" )
-
- linksResults1 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults1,
- onpass="ONOS1 Links view is correct",
- onfail="ONOS1 Links view is incorrect" )
-
- linksResults2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults2,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- linksResults3 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults3,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- topoResult = switchesResults1 and switchesResults2 and\
- switchesResults3 and linksResults1 and linksResults2 and\
- linksResults3
-
- if topoResult == main.TRUE:
- main.log.report(
- "Topology Check Test with mininet" +
- "and ONOS instances successful" )
- else:
- main.log.report(
- "Topology Check Test with mininet and ONOS instances failed" )
-
- utilities.assertEquals( expect=main.TRUE, actual=topoResult,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- def CASE10( self ):
- import time
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- # Unistall onos-app-fwd app to disable reactive forwarding
- appInstallResult = main.ONOScli1.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- main.log.info( "onos-app-fwd uninstalled" )
-
- # After reactive forwarding is disabled,
- # the reactive flows on switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
-
- hosts = main.ONOScli1.hosts()
- main.log.info( hosts )
- case10Result = appInstallResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case10Result,
- onpass="Reactive forwarding app uninstallation successful",
- onfail="Reactive forwarding app uninstallation failed" )
-
- def CASE6( self ):
- main.log.report(
- "This testcase is testing the addition of" +
- " host intents and then doing pingall" )
- main.log.report( "__________________________________" )
- main.case( "Obtaining hostsfor adding host intents" )
- main.step( "Get hosts" )
- hosts = main.ONOScli1.hosts()
- main.log.info( hosts )
-
- main.step( "Get all devices id" )
- devicesIdList = main.ONOScli1.getAllDevicesId()
- main.log.info( devicesIdList )
-
- # ONOS displays the hosts in hex format
- # unlike mininet which does in decimal format
- # So take care while adding intents
-
- """
- main.step( "Add host intents for mn hosts(h8-h18,h9-h19,h10-h20,
- h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:08/-1",
- "00:00:00:00:00:12/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:09/-1",
- "00:00:00:00:00:13/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0A/-1",
- "00:00:00:00:00:14/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0B/-1",
- "00:00:00:00:00:15/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0C/-1",
- "00:00:00:00:00:16/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0D/-1",
- "00:00:00:00:00:17/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0E/-1",
- "00:00:00:00:00:18/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0F/-1",
- "00:00:00:00:00:19/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:10/-1",
- "00:00:00:00:00:1A/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:11/-1",
- "00:00:00:00:00:1B/-1" )
- """
- intentsId = []
- for i in range( 8, 18 ):
- main.log.info(
- "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: get host can return None
- # TODO: handle this
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- tmpResult = main.ONOScli1.addHostIntent( host1Id, host2Id )
- intentsId.append( tmpResult )
-
- checkIntent1 = main.ONOScli1.checkIntentState( intentsId )
- checkIntent2 = main.ONOScli2.checkIntentState( intentsId )
- checkIntent3 = main.ONOScli3.checkIntentState( intentsId )
-
- flowHandle = main.ONOScli1.flows()
-
- main.log.info( "flows:" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Host intents have not ben installed correctly. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Host intents have been installed correctly" )
-
- checkIntent1 = main.ONOScli1.checkIntentState( intentsId )
- checkIntent2 = main.ONOScli2.checkIntentState( intentsId )
- checkIntent3 = main.ONOScli3.checkIntentState( intentsId )
-
- case6Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case6Result,
- onpass="Host intent addition and Pingall Test successful",
- onfail="Host intent addition and Pingall Test NOT successful" )
-
- def CASE7( self, main ):
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- linkSleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report(
- "This testscase is killing a link to" +
- " ensure that link discovery is consistent" )
- main.log.report( "__________________________________" )
- main.case(
- "Killing a link to Ensure that Link" +
- " Discovery is Working Properly" )
- main.step( "Start continuous pings" )
-
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Determine the current number of switches and links" )
- topologyOutput = main.ONOScli1.topology()
- topologyResult = main.ONOSbench.getTopology( topologyOutput )
- activeSwitches = topologyResult[ 'devices' ]
- links = topologyResult[ 'links' ]
- main.log.info(
- "Currently there are %s switches and %s links" %
- ( str( activeSwitches ), str( links ) ) )
-
- main.step( "Kill Link between s3 and s28" )
- main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOScli2.topology()
- LinkDown = main.ONOSbench.checkStatus(
- topologyOutput, activeSwitches, str(
- int( links ) - 2 ) )
- if LinkDown == main.TRUE:
- main.log.report( "Link Down discovered properly" )
- utilities.assertEquals(
- expect=main.TRUE,
- actual=LinkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOScli2.topology()
- LinkUp = main.ONOSbench.checkStatus(
- topologyOutput,
- activeSwitches,
- str( links ) )
- if LinkUp == main.TRUE:
- main.log.report( "Link up discovered properly" )
- utilities.assertEquals(
- expect=main.TRUE,
- actual=LinkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- main.step( "Compare ONOS Topology to MN Topology" )
- main.case(
- "Testing Mininet topology with the" +
- " topology of multi instances ONOS" )
- main.step( "Collecting topology information from ONOS" )
- devices1 = main.ONOScli1.devices()
- devices2 = main.ONOScli2.devices()
- devices3 = main.ONOScli3.devices()
- print "devices1 = ", devices1
- print "devices2 = ", devices2
- print "devices3 = ", devices3
- hosts1 = main.ONOScli1.hosts()
- hosts2 = main.ONOScli2.hosts()
- hosts3 = main.ONOScli3.hosts()
- # print "hosts1 = ", hosts1
- # print "hosts2 = ", hosts2
- # print "hosts3 = ", hosts3
- ports1 = main.ONOScli1.ports()
- ports2 = main.ONOScli2.ports()
- ports3 = main.ONOScli3.ports()
- # print "ports1 = ", ports1
- # print "ports2 = ", ports2
- # print "ports3 = ", ports3
- links1 = main.ONOScli1.links()
- links2 = main.ONOScli2.links()
- links3 = main.ONOScli3.links()
- # print "links1 = ", links1
- # print "links2 = ", links2
- # print "links3 = ", links3
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- print "**************"
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Compare ONOS Topology to MN Topology" )
-
- switchesResults1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- print "switches_Result1 = ", switchesResults1
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults1,
- onpass="ONOS1 Switches view is correct",
- onfail="ONOS1 Switches view is incorrect" )
-
- switchesResults2 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices2 ), json.loads( ports2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults2,
- onpass="ONOS2 Switches view is correct",
- onfail="ONOS2 Switches view is incorrect" )
-
- switchesResults3 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices3 ), json.loads( ports3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults3,
- onpass="ONOS3 Switches view is correct",
- onfail="ONOS3 Switches view is incorrect" )
-
- linksResults1 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults1,
- onpass="ONOS1 Links view is correct",
- onfail="ONOS1 Links view is incorrect" )
-
- linksResults2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links2 ) )
-
- utilities.assertEquals( expect=main.TRUE, actual=linksResults2,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- linksResults3 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links3 ) )
-
- utilities.assertEquals( expect=main.TRUE, actual=linksResults3,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- topoResult = switchesResults1 and switchesResults2\
- and switchesResults3 and linksResults1 and\
- linksResults2 and linksResults3
-
- utilities.assertEquals(
- expect=main.TRUE,
- actual=topoResult and LinkUp and LinkDown,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- def CASE8( self ):
- """
- Intent removal
- """
- main.log.report(
- "This testcase removes any previously added intents" )
- main.log.report( "__________________________________" )
- main.log.info( "Removing any previously installed intents" )
- main.case( "Removing intents" )
- main.step( "Obtain the intent id's" )
- intentResult = main.ONOScli1.intents( jsonFormat=False )
-
- intentLinewise = intentResult.split( "\n" )
- intentList = []
- for line in intentLinewise:
- if line.startswith( "id=" ):
- intentList.append( line )
-
- intentids = []
- for line in intentList:
- intentids.append( line.split( "," )[ 0 ].split( "=" )[ 1 ] )
- for id in intentids:
- main.log.info( "id = " + id )
-
- main.step(
- "Iterate through the intentids list and remove each intent" )
- for id in intentids:
- main.ONOScli1.removeIntent( intentId=id ,purge=True )
-
- remainingIntent = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Remaining intents " + remainingIntent )
-
- case8Result = main.TRUE
- intentResult = main.TRUE
- if remainingIntent:
- main.log.error( "There are still remaining intent" )
- intentResult = main.FALSE
- i = 8
-
- PingResult = main.TRUE
- """
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.TRUE:
- i = 19
- PingResult = main.TRUE
- elif ping == main.FALSE:
- i += 1
- PingResult = main.FALSE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- # Note: If the ping result failed, that means the intents have been
- # withdrawn correctly.
- if PingResult == main.TRUE:
- main.log.report( "Host intents have not been withdrawn correctly" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.FALSE:
- main.log.report( "Host intents have been withdrawn correctly" )
- """
- case8Result = intentResult
-
- if case8Result == main.TRUE:
- main.log.report( "Intent removal successful" )
- else:
- main.log.report( "Intent removal failed" )
-
- utilities.assertEquals( expect=main.TRUE, actual=case8Result,
- onpass="Intent removal test successful",
- onfail="Intent removal test failed" )
-
- def CASE9( self ):
- """
- This test case adds point intents. Make sure you run test case 8
- which is host intent removal before executing this test case.
- Else the host intent's flows will persist on switches and the pings
- would work even if there is some issue with the point intent's flows
- """
- main.log.report(
- "This testcase adds point intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.log.info( "Adding point intents" )
- main.case(
- "Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20," +
- "h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)" )
- main.step(
- "Add point-to-point intents for mininet hosts" +
- " h8 and h18 or ONOS hosts h8 and h12" )
- macsDict = {}
- for i in range( 1,29 ):
- macsDict[ 'h' + str( i ) ]= main.Mininet1.getMacAddress( host='h'+ str( i ) )
- print macsDict
- # main.step(var1)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- ingressDevice="of:0000000000003008/1",
- egressDevice="of:0000000000006018/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h8' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- ingressDevice="of:0000000000006018/1",
- egressDevice="of:0000000000003008/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h18' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var2 = "Add point intents for mn hosts h9&h19 or ONOS hosts h9&h13"
- main.step(var2)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003009/1",
- "of:0000000000006019/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h9' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006019/1",
- "of:0000000000003009/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h19' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var3 = "Add point intents for MN hosts h10&h20 or ONOS hosts hA&h14"
- main.step(var3)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003010/1",
- "of:0000000000006020/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h10' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006020/1",
- "of:0000000000003010/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h20' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var4 = "Add point intents for mininet hosts h11 and h21 or" +\
- " ONOS hosts hB and h15"
- main.case(var4)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003011/1",
- "of:0000000000006021/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h11' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006021/1",
- "of:0000000000003011/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h21' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var5 = "Add point intents for mininet hosts h12 and h22 " +\
- "ONOS hosts hC and h16"
- main.case(var5)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003012/1",
- "of:0000000000006022/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h12' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006022/1",
- "of:0000000000003012/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h22' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var6 = "Add point intents for mininet hosts h13 and h23 or" +\
- " ONOS hosts hD and h17"
- main.case(var6)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003013/1",
- "of:0000000000006023/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h13' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006023/1",
- "of:0000000000003013/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h23' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var7 = "Add point intents for mininet hosts h14 and h24 or" +\
- " ONOS hosts hE and h18"
- main.case(var7)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003014/1",
- "of:0000000000006024/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h14' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006024/1",
- "of:0000000000003014/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h24' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var8 = "Add point intents for mininet hosts h15 and h25 or" +\
- " ONOS hosts hF and h19"
- main.case(var8)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003015/1",
- "of:0000000000006025/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h15' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006025/1",
- "of:0000000000003015/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h25' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var9 = "Add intents for mininet hosts h16 and h26 or" +\
- " ONOS hosts h10 and h1A"
- main.case(var9)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003016/1",
- "of:0000000000006026/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h16' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006026/1",
- "of:0000000000003016/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h26' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var10 = "Add point intents for mininet hosts h17 and h27 or" +\
- " ONOS hosts h11 and h1B"
- main.case(var10)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003017/1",
- "of:0000000000006027/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h17' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006027/1",
- "of:0000000000003017/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h27' ))
-
- print(
- "_______________________________________________________" +
- "________________________________" )
-
- flowHandle = main.ONOScli1.flows()
- print "flowHandle = ", flowHandle
- main.log.info( "flows :" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping all test after Point intents" +
- " addition failed. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Point intents addition successful" )
-
- case8Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case8Result,
- onpass="Ping all test after Point intents addition successful",
- onfail="Ping all test after Point intents addition failed" )
-
- def CASE31( self ):
- """
- This test case adds point intent related to
- SDN-IP matching on ICMP ( ethertype=IPV4, ipProto=1 )
- """
- import json
-
- main.log.report(
- "This test case adds point intent " +
- "related to SDN-IP matching on ICMP" )
- main.case(
- "Adding bidirectional point intent related" +
- " to SDN-IP matching on ICMP" )
- main.step( "Adding bidirectional point intent" )
- # add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- # --ethType=IPV4 --ipProto=1 of:0000000000003008/1
- # of:0000000000006018/1
-
- hostsJson = json.loads( main.ONOScli1.hosts() )
- for i in range( 8, 11 ):
- main.log.info(
- "Adding point intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- for host in hostsJson:
- if host[ 'id' ] == host1Id:
- ip1 = host[ 'ipAddresses' ][ 0 ]
- ip1 = str( ip1 + "/32" )
- device1 = host[ 'location' ][ 'elementId' ]
- device1 = str( device1 + "/1" )
- elif host[ 'id' ] == host2Id:
- ip2 = str( host[ 'ipAddresses' ][ 0 ] ) + "/32"
- device2 = host[ 'location' ][ 'elementId' ]
- device2 = str( device2 + "/1" )
-
- pIntentResult1 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'icmpProto' ], )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
-
- pIntentResult2 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'icmpProto' ] )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
- if ( pIntentResult1 and pIntentResult2 ) :
- # getIntentResult = main.ONOScli1.intents()
- # main.log.info( getIntentResult )
- main.log.info(
- "Point intent related to SDN-IP matching" +
- " on ICMP install successful" )
-
- time.sleep( 15 )
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents = " + getIntentResult )
- getFlowsResult = main.ONOScli1.flows()
- main.log.info( "flows = " + getFlowsResult )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 11:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 3:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping test after Point intents related to" +
- " SDN-IP matching on ICMP failed." )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Point intents related to" +
- " SDN-IP matching on ICMP successful" )
-
- case31Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case31Result,
- onpass="Point intent related to SDN-IP " +
- "matching on ICMP and ping test successful",
- onfail="Point intent related to SDN-IP" +
- " matching on ICMP and ping test failed" )
-
- def CASE32( self ):
- """
- This test case adds point intent related to SDN-IP matching on TCP
- ( ethertype=IPV4, ipProto=6, DefaultPort for iperf=5001 )
- Note: Although BGP port is 179, we are using 5001 because iperf
- is used for verifying and iperf's default port is 5001
- """
- import json
-
- main.log.report(
- "This test case adds point intent" +
- " related to SDN-IP matching on TCP" )
- main.case(
- "Adding bidirectional point intent related" +
- " to SDN-IP matching on TCP" )
- main.step( "Adding bidirectional point intent" )
- """
- add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- --ethType=IPV4 --ipProto=6 --tcpDst=5001 of:0000000000003008/1
- of:0000000000006018/1
-
- add-point-intent --ipSrc=10.0.0.18/32 --ipDst=10.0.0.8/32
- --ethType=IPV4 --ipProto=6 --tcpDst=5001 of:0000000000006018/1
- of:0000000000003008/1
-
- add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- --ethType=IPV4 --ipProto=6 --tcpSrc=5001 of:0000000000003008/1
- of:0000000000006018/1
-
- add-point-intent --ipSrc=10.0.0.18/32 --ipDst=10.0.0.8/32
- --ethType=IPV4 --ipProto=6 --tcpSrc=5001 of:0000000000006018/1
- of:0000000000003008/1
-
- """
- hostsJson = json.loads( main.ONOScli1.hosts() )
- for i in range( 8, 9 ):
- main.log.info(
- "Adding point intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- for host in hostsJson:
- if host[ 'id' ] == host1Id:
- ip1 = host[ 'ipAddresses' ][ 0 ]
- ip1 = str( ip1 + "/32" )
- device1 = host[ 'location' ][ 'elementId' ]
- device1 = str( device1 + "/1" )
- elif host[ 'id' ] == host2Id:
- ip2 = str( host[ 'ipAddresses' ][ 0 ] ) + "/32"
- device2 = host[ 'location' ][ 'elementId' ]
- device2 = str( device2 + "/1" )
-
- pIntentResult1 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpDst=main.params[ 'SDNIP' ][ 'dstPort' ] )
- pIntentResult2 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpDst=main.params[ 'SDNIP' ][ 'dstPort' ] )
-
- pIntentResult3 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpSrc=main.params[ 'SDNIP' ][ 'srcPort' ] )
- pIntentResult4 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpSrc=main.params[ 'SDNIP' ][ 'srcPort' ] )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
- pIntentResult = main.TRUE
- if getIntentResult:
- main.log.report(
- "Point intent related to SDN-IP matching" +
- " on TCP install successful" )
- else:
- main.log.report(
- "Point intent related to SDN-IP matching" +
- " on TCP install failed" )
- pIntentResult = main.FALSE
-
- iperfResult = main.Mininet1.iperf( 'h8', 'h18' )
- if iperfResult == main.TRUE:
- main.log.report( "iperf test successful" )
- else:
- main.log.report( "iperf test failed" )
-
- case32Result = pIntentResult and iperfResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case32Result,
- onpass="Ping all test after Point intents addition related " +
- "to SDN-IP on TCP match successful",
- onfail="Ping all test after Point intents addition related " +
- "to SDN-IP on TCP match failed" )
-
- def CASE33( self ):
- """
- This test case adds multipoint to singlepoint intent related to
- SDN-IP matching on destination ip and the action is to rewrite
- the mac address
- Here the mac address to be rewritten is the mac address of the
- egress device
- """
- import json
- import time
-
- main.log.report(
- "This test case adds multipoint to singlepoint intent related to" +
- " SDN-IP matching on destination ip and " +
- "rewrite mac address action" )
- main.case(
- "Adding multipoint to singlepoint intent related to SDN-IP" +
- " matching on destination ip" )
- main.step( "Adding bidirectional multipoint to singlepoint intent" )
- """
- add-multi-to-single-intent --ipDst=10.0.3.0/24
- --setEthDst=00:00:00:00:00:12 of:0000000000003008/1 0000000000003009/1
- of:0000000000006018/1
-
- add-multi-to-single-intent --ipDst=10.0.1.0/24
- --setEthDst=00:00:00:00:00:08 of:0000000000006018/1 0000000000003009/1
- of:0000000000003008/1
- """
- main.case(
- "Installing multipoint to single point " +
- "intent with rewrite mac address" )
- main.step( "Uninstalling proxy arp app" )
- # deactivating proxyarp app
- appInstallResult = main.ONOScli1.deactivateApp( "org.onosproject.proxyarp" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- time.sleep( 30 )
- main.log.info( "onos-app-proxyarp deactivated" )
-
- main.step( "Changing ipaddress of hosts h8,h9 and h18" )
- main.Mininet1.changeIP(
- host='h8',
- intf='h8-eth0',
- newIP='10.0.1.1',
- newNetmask='255.255.255.0' )
- main.Mininet1.changeIP(
- host='h9',
- intf='h9-eth0',
- newIP='10.0.2.1',
- newNetmask='255.255.255.0' )
- main.Mininet1.changeIP(
- host='h10',
- intf='h10-eth0',
- newIP='10.0.3.1',
- newNetmask='255.255.255.0' )
-
- main.step( "Changing default gateway of hosts h8,h9 and h18" )
- main.Mininet1.changeDefaultGateway( host='h8', newGW='10.0.1.254' )
- main.Mininet1.changeDefaultGateway( host='h9', newGW='10.0.2.254' )
- main.Mininet1.changeDefaultGateway( host='h10', newGW='10.0.3.254' )
-
- main.step(
- "Assigning random mac address to the default gateways " +
- "since proxyarp app is uninstalled" )
- main.Mininet1.addStaticMACAddress(
- host='h8',
- GW='10.0.1.254',
- macaddr='00:00:00:00:11:11' )
- main.Mininet1.addStaticMACAddress(
- host='h9',
- GW='10.0.2.254',
- macaddr='00:00:00:00:22:22' )
- main.Mininet1.addStaticMACAddress(
- host='h10',
- GW='10.0.3.254',
- macaddr='00:00:00:00:33:33' )
-
- main.step( "Verify static gateway and MAC address assignment" )
- main.Mininet1.verifyStaticGWandMAC( host='h8' )
- main.Mininet1.verifyStaticGWandMAC( host='h9' )
- main.Mininet1.verifyStaticGWandMAC( host='h10' )
-
- ingressDevice1=main.params[ 'MULTIPOINT_INTENT' ][ 'device1' ]
- ingressDevice2=main.params[ 'MULTIPOINT_INTENT' ][ 'device2' ]
- ingressDeviceList = []
- ingressDeviceList.append( ingressDevice1 )
- ingressDeviceList.append( ingressDevice2 )
-
- main.step( "Adding multipoint to singlepoint intent" )
- pIntentResult1 = main.ONOScli1.addMultipointToSinglepointIntent(
- ingressDeviceList,
- egressDevice=main.params[ 'MULTIPOINT_INTENT' ][ 'device3' ],
- ipDst=main.params[ 'MULTIPOINT_INTENT' ][ 'ip1' ],
- setEthDst=main.params[ 'MULTIPOINT_INTENT' ][ 'mac1' ] )
-
- ingressDevice1=main.params[ 'MULTIPOINT_INTENT' ][ 'device3' ]
- ingressDevice2=main.params[ 'MULTIPOINT_INTENT' ][ 'device2' ]
- ingressDeviceList = [ingressDevice1, ingressDevice2]
-
- pIntentResult2 = main.ONOScli1.addMultipointToSinglepointIntent(
- ingressDeviceList,
- egressDevice=main.params[ 'MULTIPOINT_INTENT' ][ 'device1' ],
- ipDst=main.params[ 'MULTIPOINT_INTENT' ][ 'ip2' ],
- setEthDst=main.params[ 'MULTIPOINT_INTENT' ][ 'mac2' ] )
-
- pIntentResult = pIntentResult1 and pIntentResult2
- if pIntentResult == main.FALSE:
- main.log.info(
- "Multi point to single point intent " +
- "installation failed" )
- else:
- pIntentResult = main.TRUE
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents = " + getIntentResult )
-
- time.sleep( 10 )
- getFlowsResult = main.ONOScli1.flows( jsonFormat=False )
- main.log.info( "flows = " + getFlowsResult )
-
- count = 1
- i = 8
- PingResult = main.TRUE
-
- main.log.info( "\n\nh" + str( i ) + " is Pinging h" + str( i + 2 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 2 ) )
- if ping == main.FALSE and count < 3:
- count += 1
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 2 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 2 ) +
- " passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report( "Ping test failed." )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Ping all successful" )
-
- if pIntentResult == main.TRUE:
- main.log.info(
- "Multi point intent with rewrite mac " +
- "address installation and ping successful" )
-
- case33Result = pIntentResult and PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case33Result,
- onpass="Ping all test after multipoint to single point" +
- " intent addition with rewrite mac address successful",
- onfail="Ping all test after multipoint to single point intent" +
- " addition with rewrite mac address failed" )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
- main.step( "Disconnecting mininet and restarting ONOS" )
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- time.sleep( 5 )
- main.step( "Uninstalling ONOS package" )
- onos1UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS1Ip)
- onos2UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS2Ip)
- onos3UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS3Ip)
- onosUninstallResult = onos1UninstallResult and onos2UninstallResult \
- and onos3UninstallResult
- time.sleep( 15 )
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- time.sleep( 10 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- time.sleep( 10 )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- startResult = startcli1 and startcli2 and startcli3
- if startResult == main.TRUE:
- main.log.report( "ONOS cli starts properly" )
- case20Result = mininetDisconnect and cellResult and verifyResult \
- and onosInstallResult and onosIsup and startResult
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case20Result,
- onpass= "Exiting functionality mininet topology and reinstalling" +
- " ONOS successful",
- onfail= "Exiting functionality mininet topology and reinstalling" +
- " ONOS failed" )
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1 <Ctrls>
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
- main.step( "Starting LINC-OE and other components" )
- main.log.info( "Activate optical app" )
- appInstallResult = main.ONOScli1.activateApp( "org.onosproject.optical" )
- appCheck = main.ONOScli1.appToIDCheck()
- appCheck = appCheck and main.ONOScli2.appToIDCheck()
- appCheck = appCheck and main.ONOScli3.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( "Checking ONOS application unsuccesful" )
-
- ctrllerIP = []
- ctrllerIP.append( main.params[ 'CTRL' ][ 'ip1' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip2' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip3' ] )
- opticalMnScript = main.LincOE2.runOpticalMnScript( ctrllerIP = ctrllerIP )
- case21Result = opticalMnScript and appInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case21Result,
- onpass="Packet optical topology spawned successsfully",
- onfail="Packet optical topology spawning failed" )
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
- main.step( "Topology comparision" )
- devicesResult = main.ONOScli3.devices( jsonFormat=False )
- time.sleep( 15 )
- print "devices_result = ", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
-
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- print "_________________________________"
-
- linksResult = main.ONOScli3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
-
- case22Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case22Result,
- onpass="Packet optical topology discovery successful",
- onfail="Packet optical topology discovery failed" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Topology comparision" )
- main.step( "Adding point intents" )
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- time.sleep( 30 )
- #flowHandle = main.ONOScli1.flows()
- #main.log.info( "flows :" + flowHandle )
-
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 60 )
- intentHandle = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents :" + intentHandle )
-
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report(
- "Point intents for packet optical have not ben installed" +
- " correctly. Cleaning up" )
- if PingResult == main.TRUE:
- main.log.report(
- "Point Intents for packet optical have been " +
- "installed correctly" )
-
- case23Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case23Result,
- onpass= "Point intents addition for packet optical and" +
- "Pingall Test successful",
- onfail= "Point intents addition for packet optical and" +
- "Pingall Test NOT successful" )
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
- main.step( "Attach to the Linc-OE session" )
- attachConsole = main.LincOE1.attachLincOESession()
- print "attachConsole = ", attachConsole
-
- main.step( "Bring a port down and verify the link state" )
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOScli3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
-
- linkInactiveCount = linksNonjson.count("state=INACTIVE")
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
-
- links = main.ONOScli3.links()
- main.log.info( "links = " + links )
-
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
-
- print "links_state_result = ", linksStateResult
- time.sleep( 10 )
- #flowHandle = main.ONOScli3.flows()
- #main.log.info( "flows :" + flowHandle )
-
- main.step( "Verify Rerouting by a ping test" )
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.TRUE:
- main.log.report( "Ping test successful " )
- if PingResult == main.FALSE:
- main.log.report( "Ping test failed" )
-
- case24Result = PingResult and linksStateResult
- utilities.assert_equals( expect=main.TRUE, actual=case24Result,
- onpass="Packet optical rerouting successful",
- onfail="Packet optical rerouting failed" )
diff --git a/TestON/tests/MultiProd/MultiProd.topo b/TestON/tests/MultiProd/MultiProd.topo
deleted file mode 100755
index 040ec67..0000000
--- a/TestON/tests/MultiProd/MultiProd.topo
+++ /dev/null
@@ -1,118 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/MultiProd/__init__.py b/TestON/tests/MultiProd/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/MultiProd/__init__.py
+++ /dev/null
diff --git a/TestON/tests/MultiProd13/MultiProd13.params b/TestON/tests/MultiProd13/MultiProd13.params
deleted file mode 100755
index 3767ab9..0000000
--- a/TestON/tests/MultiProd13/MultiProd13.params
+++ /dev/null
@@ -1,68 +0,0 @@
-<PARAMS>
-
- <testcases>1,4,10,5,6,7,8,6,8,9,8,31,32,8,33,8,20,21,22,10,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>multi_test</cellName>
- </ENV>
-
- <GIT>
- <pull>False</pull>
- </GIT>
-
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <ip2>10.128.20.12</ip2>
- <ip3>10.128.20.13</ip3>
- <port1>6633</port1>
- <port2>6633</port2>
- <port3>6633</port3>
- </CTRL>
-
- <SDNIP>
- <ethType>IPV4</ethType>
- <tcpProto>6</tcpProto>
- <icmpProto>1</icmpProto>
- <srcPort>5001</srcPort>
- <dstPort>5001</dstPort>
- </SDNIP>
-
- <MULTIPOINT_INTENT>
- <device1>of:0000000000003008/1 </device1>
- <device2>of:0000000000003009/1 </device2>
- <device3>of:0000000000003010/1 </device3>
- <mac1>00:00:00:00:00:0A </mac1>
- <mac2>00:00:00:00:00:08 </mac2>
- <ip1>10.0.3.0/24 </ip1>
- <ip2>10.0.1.0/24 </ip2>
- </MULTIPOINT_INTENT>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>31</SwitchDiscovery>
- </timers>
-
-</PARAMS>
diff --git a/TestON/tests/MultiProd13/MultiProd13.py b/TestON/tests/MultiProd13/MultiProd13.py
deleted file mode 100644
index a458dec..0000000
--- a/TestON/tests/MultiProd13/MultiProd13.py
+++ /dev/null
@@ -1,1993 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-import sys
-import os
-import re
-import time
-import json
-
-time.sleep( 1 )
-
-class MultiProd13:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-logs
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
- gitPull = main.params[ 'GIT' ][ 'pull' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult1 = main.ONOSbench.setCell( cellName )
- # cellResult2 = main.ONOScli1.setCell( cellName )
- # cellResult3 = main.ONOScli2.setCell( cellName )
- # cellResult4 = main.ONOScli3.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- cellResult = cellResult1
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- removeLogResult = main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Git checkout and get version" )
- main.ONOSbench.gitCheckout( "master" )
- if gitPull == 'True':
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == 1:
- main.step( "Using mvn clean & install" )
- main.ONOSbench.cleanInstall()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- elif gitPullResult == 0:
- main.log.report(
- "Git Pull Failed, look into logs for detailed reason" )
- main.cleanup()
- main.exit()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- else:
- main.log.info( "Skipping git pull" )
- main.ONOSbench.getVersion( report=True )
- packageResult = main.TRUE
-
- # main.step( "Creating a cell" )
- # cellCreateResult = main.ONOSbench.createCellFile( **************
- # )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- print startcli1
- print startcli2
- print startcli3
-
- # Starting the mininet using the old way
- main.step( "Starting Mininet ..." )
- netIsUp = main.Mininet1.startNet()
- if netIsUp:
- main.log.info("Mininet CLI is up")
-
- case1Result = ( packageResult and
- cellResult and verifyResult and onosInstallResult and
- onosIsup and startResult )
- utilities.assertEquals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE11( self, main ):
- """
- Cleanup sequence:
- onos-service <nodeIp> stop
- onos-uninstall
-
- TODO: Define rest of cleanup
-
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.case( "Cleaning up test environment" )
-
- main.step( "Testing ONOS kill function" )
- killResult1 = main.ONOSbench.onosKill( ONOS1Ip )
- killResult2 = main.ONOSbench.onosKill( ONOS2Ip )
- killResult3 = main.ONOSbench.onosKill( ONOS3Ip )
-
- main.step( "Stopping ONOS service" )
- stopResult1 = main.ONOSbench.onosStop( ONOS1Ip )
- stopResult2 = main.ONOSbench.onosStop( ONOS2Ip )
- stopResult3 = main.ONOSbench.onosStop( ONOS3Ip )
-
- main.step( "Uninstalling ONOS service" )
- uninstallResult = main.ONOSbench.onosUninstall()
-
- def CASE3( self, main ):
- """
- Test 'onos' command and its functionality in driver
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.case( "Testing 'onos' command" )
-
- main.step( "Sending command 'onos -w <onos-ip> system:name'" )
- cmdstr1 = "system:name"
- cmdResult1 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult1 )
- cmdResult2 = main.ONOSbench.onosCli( ONOS2Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult2 )
- cmdResult3 = main.ONOSbench.onosCli( ONOS3Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult3 )
-
- main.step( "Sending command 'onos -w <onos-ip> onos:topology'" )
- cmdstr2 = "onos:topology"
- cmdResult4 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult4 )
- cmdResult5 = main.ONOSbench.onosCli( ONOS2Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult5 )
- cmdResult6 = main.ONOSbench.onosCli( ONOS6Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult6 )
-
- def CASE4( self, main ):
- import re
- import time
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.log.report(
- "This testcase is testing the assignment of all the switches" +
- " to all controllers and discovering the hosts in reactive mode" )
- main.log.report( "__________________________________" )
- main.case( "Pingall Test(No intents are added)" )
- main.step( "Assigning switches to controllers" )
- for i in range( 1, 29 ): # 1 to ( num of switches +1 )
- main.Mininet1.assignSwController(
- sw=str( i ),
- count=3,
- ip1=ONOS1Ip,
- port1=ONOS1Port,
- ip2=ONOS2Ip,
- port2=ONOS2Port,
- ip3=ONOS3Ip,
- port3=ONOS3Port )
-
- switchMastership = main.TRUE
- for i in range( 1, 29 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- switchMastership = switchMastership and main.TRUE
- else:
- switchMastership = main.FALSE
-
- if switchMastership == main.TRUE:
- main.log.report( "Controller assignment successfull" )
- else:
- main.log.report( "Controller assignment failed" )
- appInstallResult = main.TRUE
- main.log.info( "Activating reactive forwarding app" )
- appInstallResult = main.ONOScli1.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- time.sleep( 30 )
- # REACTIVE FWD test
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- case4Result = switchMastership and pingResult
- if pingResult == main.TRUE:
- main.log.report(
- "Pingall Test in reactive mode to" +
- " discover the hosts successful" )
- else:
- main.log.report(
- "Pingall Test in reactive mode to discover the hosts failed" )
-
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case4Result,
- onpass="Controller assignment and Pingall Test successful",
- onfail="Controller assignment and Pingall Test NOT successful" )
-
- def CASE5( self, main ):
- import json
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
-
- main.log.report(
- "This testcase is testing if all ONOS nodes are in topology" +
- " sync with mininet and its peer ONOS nodes" )
- main.log.report( "__________________________________" )
- main.case(
- "Testing Mininet topology with the" +
- " topology of multi instances ONOS" )
- main.step( "Collecting topology information from ONOS" )
- devices1 = main.ONOScli1.devices()
- devices2 = main.ONOScli2.devices()
- devices3 = main.ONOScli3.devices()
- # print "devices1 = ", devices1
- # print "devices2 = ", devices2
- # print "devices3 = ", devices3
- hosts1 = main.ONOScli1.hosts()
- hosts2 = main.ONOScli2.hosts()
- hosts3 = main.ONOScli3.hosts()
- # print "hosts1 = ", hosts1
- # print "hosts2 = ", hosts2
- # print "hosts3 = ", hosts3
- ports1 = main.ONOScli1.ports()
- ports2 = main.ONOScli2.ports()
- ports3 = main.ONOScli3.ports()
- # print "ports1 = ", ports1
- # print "ports2 = ", ports2
- # print "ports3 = ", ports3
- links1 = main.ONOScli1.links()
- links2 = main.ONOScli2.links()
- links3 = main.ONOScli3.links()
- # print "links1 = ", links1
- # print "links2 = ", links2
- # print "links3 = ", links3
-
- print "**************"
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Compare ONOS Topology to MN Topology" )
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- switchesResults1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- print "switches_Result1 = ", switchesResults1
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults1,
- onpass="ONOS1 Switches view is correct",
- onfail="ONOS1 Switches view is incorrect" )
-
- switchesResults2 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices2 ), json.loads( ports2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults2,
- onpass="ONOS2 Switches view is correct",
- onfail="ONOS2 Switches view is incorrect" )
-
- switchesResults3 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices3 ), json.loads( ports3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults3,
- onpass="ONOS3 Switches view is correct",
- onfail="ONOS3 Switches view is incorrect" )
-
- linksResults1 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults1,
- onpass="ONOS1 Links view is correct",
- onfail="ONOS1 Links view is incorrect" )
-
- linksResults2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults2,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- linksResults3 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults3,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- topoResult = switchesResults1 and switchesResults2 and\
- switchesResults3 and linksResults1 and linksResults2 and\
- linksResults3
-
- if topoResult == main.TRUE:
- main.log.report(
- "Topology Check Test with mininet" +
- "and ONOS instances successful" )
- else:
- main.log.report(
- "Topology Check Test with mininet and ONOS instances failed" )
-
- utilities.assertEquals( expect=main.TRUE, actual=topoResult,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- def CASE10( self ):
- import time
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- # Unistall onos-app-fwd app to disable reactive forwarding
- appInstallResult = main.ONOScli1.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- main.log.info( "onos-app-fwd uninstalled" )
-
- # After reactive forwarding is disabled,
- # the reactive flows on switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
-
- hosts = main.ONOScli1.hosts()
- main.log.info( hosts )
- case10Result = appInstallResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case10Result,
- onpass="Reactive forwarding app uninstallation successful",
- onfail="Reactive forwarding app uninstallation failed" )
-
- def CASE6( self ):
- main.log.report(
- "This testcase is testing the addition of" +
- " host intents and then doing pingall" )
- main.log.report( "__________________________________" )
- main.case( "Obtaining hostsfor adding host intents" )
- main.step( "Get hosts" )
- hosts = main.ONOScli1.hosts()
- main.log.info( hosts )
-
- main.step( "Get all devices id" )
- devicesIdList = main.ONOScli1.getAllDevicesId()
- main.log.info( devicesIdList )
-
- # ONOS displays the hosts in hex format
- # unlike mininet which does in decimal format
- # So take care while adding intents
-
- """
- main.step( "Add host intents for mn hosts(h8-h18,h9-h19,h10-h20,
- h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:08/-1",
- "00:00:00:00:00:12/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:09/-1",
- "00:00:00:00:00:13/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0A/-1",
- "00:00:00:00:00:14/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0B/-1",
- "00:00:00:00:00:15/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0C/-1",
- "00:00:00:00:00:16/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0D/-1",
- "00:00:00:00:00:17/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0E/-1",
- "00:00:00:00:00:18/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:0F/-1",
- "00:00:00:00:00:19/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:10/-1",
- "00:00:00:00:00:1A/-1" )
- hthIntentResult = main.ONOScli1.addHostIntent( "00:00:00:00:00:11/-1",
- "00:00:00:00:00:1B/-1" )
- """
- intentsId = []
- for i in range( 8, 18 ):
- main.log.info(
- "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: get host can return None
- # TODO: handle this
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- tmpResult = main.ONOScli1.addHostIntent( host1Id, host2Id )
- intentsId.append( tmpResult )
-
- checkIntent1 = main.ONOScli1.checkIntentState( intentsId )
- checkIntent2 = main.ONOScli2.checkIntentState( intentsId )
- checkIntent3 = main.ONOScli3.checkIntentState( intentsId )
-
- flowHandle = main.ONOScli1.flows()
-
- main.log.info( "flows:" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Host intents have not ben installed correctly. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Host intents have been installed correctly" )
-
- checkIntent1 = main.ONOScli1.checkIntentState( intentsId )
- checkIntent2 = main.ONOScli2.checkIntentState( intentsId )
- checkIntent3 = main.ONOScli3.checkIntentState( intentsId )
-
- case6Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case6Result,
- onpass="Host intent addition and Pingall Test successful",
- onfail="Host intent addition and Pingall Test NOT successful" )
-
- def CASE7( self, main ):
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- linkSleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report(
- "This testscase is killing a link to" +
- " ensure that link discovery is consistent" )
- main.log.report( "__________________________________" )
- main.case(
- "Killing a link to Ensure that Link" +
- " Discovery is Working Properly" )
- main.step( "Start continuous pings" )
-
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Determine the current number of switches and links" )
- topologyOutput = main.ONOScli1.topology()
- topologyResult = main.ONOSbench.getTopology( topologyOutput )
- activeSwitches = topologyResult[ 'devices' ]
- links = topologyResult[ 'links' ]
- main.log.info(
- "Currently there are %s switches and %s links" %
- ( str( activeSwitches ), str( links ) ) )
-
- main.step( "Kill Link between s3 and s28" )
- main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOScli2.topology()
- LinkDown = main.ONOSbench.checkStatus(
- topologyOutput, activeSwitches, str(
- int( links ) - 2 ) )
- if LinkDown == main.TRUE:
- main.log.report( "Link Down discovered properly" )
- utilities.assertEquals(
- expect=main.TRUE,
- actual=LinkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOScli2.topology()
- LinkUp = main.ONOSbench.checkStatus(
- topologyOutput,
- activeSwitches,
- str( links ) )
- if LinkUp == main.TRUE:
- main.log.report( "Link up discovered properly" )
- utilities.assertEquals(
- expect=main.TRUE,
- actual=LinkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- main.step( "Compare ONOS Topology to MN Topology" )
- main.case(
- "Testing Mininet topology with the" +
- " topology of multi instances ONOS" )
- main.step( "Collecting topology information from ONOS" )
- devices1 = main.ONOScli1.devices()
- devices2 = main.ONOScli2.devices()
- devices3 = main.ONOScli3.devices()
- print "devices1 = ", devices1
- print "devices2 = ", devices2
- print "devices3 = ", devices3
- hosts1 = main.ONOScli1.hosts()
- hosts2 = main.ONOScli2.hosts()
- hosts3 = main.ONOScli3.hosts()
- # print "hosts1 = ", hosts1
- # print "hosts2 = ", hosts2
- # print "hosts3 = ", hosts3
- ports1 = main.ONOScli1.ports()
- ports2 = main.ONOScli2.ports()
- ports3 = main.ONOScli3.ports()
- # print "ports1 = ", ports1
- # print "ports2 = ", ports2
- # print "ports3 = ", ports3
- links1 = main.ONOScli1.links()
- links2 = main.ONOScli2.links()
- links3 = main.ONOScli3.links()
- # print "links1 = ", links1
- # print "links2 = ", links2
- # print "links3 = ", links3
-
- print "**************"
-
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- main.step( "Compare ONOS Topology to MN Topology" )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- switchesResults1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- print "switches_Result1 = ", switchesResults1
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults1,
- onpass="ONOS1 Switches view is correct",
- onfail="ONOS1 Switches view is incorrect" )
-
- switchesResults2 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults2,
- onpass="ONOS2 Switches view is correct",
- onfail="ONOS2 Switches view is incorrect" )
-
- switchesResults3 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devices1 ), json.loads( ports1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=switchesResults3,
- onpass="ONOS3 Switches view is correct",
- onfail="ONOS3 Switches view is incorrect" )
-
- linksResults1 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links1 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults1,
- onpass="ONOS1 Links view is correct",
- onfail="ONOS1 Links view is incorrect" )
-
- linksResults2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links2 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults2,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- linksResults3 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( links3 ) )
- utilities.assertEquals( expect=main.TRUE, actual=linksResults3,
- onpass="ONOS2 Links view is correct",
- onfail="ONOS2 Links view is incorrect" )
-
- topoResult = switchesResults1 and switchesResults2\
- and switchesResults3 and linksResults1 and\
- linksResults2 and linksResults3
-
- utilities.assertEquals(
- expect=main.TRUE,
- actual=topoResult and LinkUp and LinkDown,
- onpass="Topology Check Test successful",
- onfail="Topology Check Test NOT successful" )
-
- def CASE8( self ):
- """
- Intent removal
- """
- main.log.report(
- "This testcase removes any previously added intents" )
- main.log.report( "__________________________________" )
- main.log.info( "Removing any previously installed intents" )
- main.case( "Removing intents" )
- main.step( "Obtain the intent id's" )
- intentResult = main.ONOScli1.intents( jsonFormat=False )
-
- intentLinewise = intentResult.split( "\n" )
- intentList = []
- for line in intentLinewise:
- if line.startswith( "id=" ):
- intentList.append( line )
-
- intentids = []
- for line in intentList:
- intentids.append( line.split( "," )[ 0 ].split( "=" )[ 1 ] )
- for id in intentids:
- main.log.info( "id = " + id )
-
- main.step(
- "Iterate through the intentids list and remove each intent" )
- for id in intentids:
- main.ONOScli1.removeIntent( intentId=id ,purge=True )
-
- remainingIntent = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Remaining intents " + remainingIntent )
-
- case8Result = main.TRUE
- intentResult = main.TRUE
- if remainingIntent:
- main.log.error( "There are still remaining intent" )
- intentResult = main.FALSE
- i = 8
-
- PingResult = main.TRUE
- """
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.TRUE:
- i = 19
- PingResult = main.TRUE
- elif ping == main.FALSE:
- i += 1
- PingResult = main.FALSE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- # Note: If the ping result failed, that means the intents have been
- # withdrawn correctly.
- if PingResult == main.TRUE:
- main.log.report( "Host intents have not been withdrawn correctly" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.FALSE:
- main.log.report( "Host intents have been withdrawn correctly" )
- """
- case8Result = intentResult
-
- if case8Result == main.TRUE:
- main.log.report( "Intent removal successful" )
- else:
- main.log.report( "Intent removal failed" )
-
- utilities.assertEquals( expect=main.TRUE, actual=case8Result,
- onpass="Intent removal test successful",
- onfail="Intent removal test failed" )
-
- def CASE9( self ):
- """
- This test case adds point intents. Make sure you run test case 8
- which is host intent removal before executing this test case.
- Else the host intent's flows will persist on switches and the pings
- would work even if there is some issue with the point intent's flows
- """
- main.log.report(
- "This testcase adds point intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.log.info( "Adding point intents" )
- main.case(
- "Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20," +
- "h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)" )
- main.step(
- "Add point-to-point intents for mininet hosts" +
- " h8 and h18 or ONOS hosts h8 and h12" )
- macsDict = {}
- for i in range( 1,29 ):
- macsDict[ 'h' + str( i ) ]= main.Mininet1.getMacAddress( host='h'+ str( i ) )
- print macsDict
- # main.step(var1)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- ingressDevice="of:0000000000003008/1",
- egressDevice="of:0000000000006018/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h8' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- ingressDevice="of:0000000000006018/1",
- egressDevice="of:0000000000003008/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h18' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var2 = "Add point intents for mn hosts h9&h19 or ONOS hosts h9&h13"
- main.step(var2)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003009/1",
- "of:0000000000006019/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h9' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006019/1",
- "of:0000000000003009/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h19' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var3 = "Add point intents for MN hosts h10&h20 or ONOS hosts hA&h14"
- main.step(var3)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003010/1",
- "of:0000000000006020/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h10' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006020/1",
- "of:0000000000003010/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h20' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var4 = "Add point intents for mininet hosts h11 and h21 or" +\
- " ONOS hosts hB and h15"
- main.case(var4)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003011/1",
- "of:0000000000006021/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h11' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006021/1",
- "of:0000000000003011/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h21' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var5 = "Add point intents for mininet hosts h12 and h22 " +\
- "ONOS hosts hC and h16"
- main.case(var5)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003012/1",
- "of:0000000000006022/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h12' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006022/1",
- "of:0000000000003012/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h22' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var6 = "Add point intents for mininet hosts h13 and h23 or" +\
- " ONOS hosts hD and h17"
- main.case(var6)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003013/1",
- "of:0000000000006023/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h13' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006023/1",
- "of:0000000000003013/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h23' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var7 = "Add point intents for mininet hosts h14 and h24 or" +\
- " ONOS hosts hE and h18"
- main.case(var7)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003014/1",
- "of:0000000000006024/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h14' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006024/1",
- "of:0000000000003014/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h24' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var8 = "Add point intents for mininet hosts h15 and h25 or" +\
- " ONOS hosts hF and h19"
- main.case(var8)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003015/1",
- "of:0000000000006025/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h15' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006025/1",
- "of:0000000000003015/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h25' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var9 = "Add intents for mininet hosts h16 and h26 or" +\
- " ONOS hosts h10 and h1A"
- main.case(var9)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003016/1",
- "of:0000000000006026/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h16' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006026/1",
- "of:0000000000003016/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h26' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var10 = "Add point intents for mininet hosts h17 and h27 or" +\
- " ONOS hosts h11 and h1B"
- main.case(var10)
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000003017/1",
- "of:0000000000006027/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h17' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOScli1.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000000000006027/1",
- "of:0000000000003017/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h27' ))
-
- print(
- "_______________________________________________________" +
- "________________________________" )
-
- flowHandle = main.ONOScli1.flows()
- print "flowHandle = ", flowHandle
- main.log.info( "flows :" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping all test after Point intents" +
- " addition failed. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Point intents addition successful" )
-
- case8Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case8Result,
- onpass="Ping all test after Point intents addition successful",
- onfail="Ping all test after Point intents addition failed" )
-
- def CASE31( self ):
- """
- This test case adds point intent related to
- SDN-IP matching on ICMP ( ethertype=IPV4, ipProto=1 )
- """
- import json
-
- main.log.report(
- "This test case adds point intent " +
- "related to SDN-IP matching on ICMP" )
- main.case(
- "Adding bidirectional point intent related" +
- " to SDN-IP matching on ICMP" )
- main.step( "Adding bidirectional point intent" )
- # add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- # --ethType=IPV4 --ipProto=1 of:0000000000003008/1
- # of:0000000000006018/1
-
- hostsJson = json.loads( main.ONOScli1.hosts() )
- for i in range( 8, 11 ):
- main.log.info(
- "Adding point intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- for host in hostsJson:
- if host[ 'id' ] == host1Id:
- ip1 = host[ 'ipAddresses' ][ 0 ]
- ip1 = str( ip1 + "/32" )
- device1 = host[ 'location' ][ 'elementId' ]
- device1 = str( device1 + "/1" )
- elif host[ 'id' ] == host2Id:
- ip2 = str( host[ 'ipAddresses' ][ 0 ] ) + "/32"
- device2 = host[ 'location' ][ 'elementId' ]
- device2 = str( device2 + "/1" )
-
- pIntentResult1 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'icmpProto' ], )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
-
- pIntentResult2 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'icmpProto' ] )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
- if ( pIntentResult1 and pIntentResult2 ) :
- # getIntentResult = main.ONOScli1.intents()
- # main.log.info( getIntentResult )
- main.log.info(
- "Point intent related to SDN-IP matching" +
- " on ICMP install successful" )
-
- time.sleep( 15 )
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents = " + getIntentResult )
- getFlowsResult = main.ONOScli1.flows()
- main.log.info( "flows = " + getFlowsResult )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 11:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 3:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping test after Point intents related to" +
- " SDN-IP matching on ICMP failed." )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Point intents related to" +
- " SDN-IP matching on ICMP successful" )
-
- case31Result = PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case31Result,
- onpass="Point intent related to SDN-IP " +
- "matching on ICMP and ping test successful",
- onfail="Point intent related to SDN-IP" +
- " matching on ICMP and ping test failed" )
-
- def CASE32( self ):
- """
- This test case adds point intent related to SDN-IP matching on TCP
- ( ethertype=IPV4, ipProto=6, DefaultPort for iperf=5001 )
- Note: Although BGP port is 179, we are using 5001 because iperf
- is used for verifying and iperf's default port is 5001
- """
- import json
-
- main.log.report(
- "This test case adds point intent" +
- " related to SDN-IP matching on TCP" )
- main.case(
- "Adding bidirectional point intent related" +
- " to SDN-IP matching on TCP" )
- main.step( "Adding bidirectional point intent" )
- """
- add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- --ethType=IPV4 --ipProto=6 --tcpDst=5001 of:0000000000003008/1
- of:0000000000006018/1
-
- add-point-intent --ipSrc=10.0.0.18/32 --ipDst=10.0.0.8/32
- --ethType=IPV4 --ipProto=6 --tcpDst=5001 of:0000000000006018/1
- of:0000000000003008/1
-
- add-point-intent --ipSrc=10.0.0.8/32 --ipDst=10.0.0.18/32
- --ethType=IPV4 --ipProto=6 --tcpSrc=5001 of:0000000000003008/1
- of:0000000000006018/1
-
- add-point-intent --ipSrc=10.0.0.18/32 --ipDst=10.0.0.8/32
- --ethType=IPV4 --ipProto=6 --tcpSrc=5001 of:0000000000006018/1
- of:0000000000003008/1
-
- """
- hostsJson = json.loads( main.ONOScli1.hosts() )
- for i in range( 8, 9 ):
- main.log.info(
- "Adding point intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- host1Id = main.ONOScli1.getHost( host1 )[ 'id' ]
- host2Id = main.ONOScli1.getHost( host2 )[ 'id' ]
- for host in hostsJson:
- if host[ 'id' ] == host1Id:
- ip1 = host[ 'ipAddresses' ][ 0 ]
- ip1 = str( ip1 + "/32" )
- device1 = host[ 'location' ][ 'elementId' ]
- device1 = str( device1 + "/1" )
- elif host[ 'id' ] == host2Id:
- ip2 = str( host[ 'ipAddresses' ][ 0 ] ) + "/32"
- device2 = host[ 'location' ][ 'elementId' ]
- device2 = str( device2 + "/1" )
-
- pIntentResult1 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpDst=main.params[ 'SDNIP' ][ 'dstPort' ] )
- pIntentResult2 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpDst=main.params[ 'SDNIP' ][ 'dstPort' ] )
-
- pIntentResult3 = main.ONOScli1.addPointIntent(
- ingressDevice=device1,
- egressDevice=device2,
- ipSrc=ip1,
- ipDst=ip2,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpSrc=main.params[ 'SDNIP' ][ 'srcPort' ] )
- pIntentResult4 = main.ONOScli1.addPointIntent(
- ingressDevice=device2,
- egressDevice=device1,
- ipSrc=ip2,
- ipDst=ip1,
- ethType=main.params[ 'SDNIP' ][ 'ethType' ],
- ipProto=main.params[ 'SDNIP' ][ 'tcpProto' ],
- tcpSrc=main.params[ 'SDNIP' ][ 'srcPort' ] )
-
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( getIntentResult )
- pIntentResult = main.TRUE
- if getIntentResult:
- main.log.report(
- "Point intent related to SDN-IP matching" +
- " on TCP install successful" )
- else:
- main.log.report(
- "Point intent related to SDN-IP matching" +
- " on TCP install failed" )
- pIntentResult = main.FALSE
-
- iperfResult = main.Mininet1.iperf( 'h8', 'h18' )
- if iperfResult == main.TRUE:
- main.log.report( "iperf test successful" )
- else:
- main.log.report( "iperf test failed" )
-
- case32Result = pIntentResult and iperfResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case32Result,
- onpass="Ping all test after Point intents addition related " +
- "to SDN-IP on TCP match successful",
- onfail="Ping all test after Point intents addition related " +
- "to SDN-IP on TCP match failed" )
-
- def CASE33( self ):
- """
- This test case adds multipoint to singlepoint intent related to
- SDN-IP matching on destination ip and the action is to rewrite
- the mac address
- Here the mac address to be rewritten is the mac address of the
- egress device
- """
- import json
- import time
-
- main.log.report(
- "This test case adds multipoint to singlepoint intent related to" +
- " SDN-IP matching on destination ip and " +
- "rewrite mac address action" )
- main.case(
- "Adding multipoint to singlepoint intent related to SDN-IP" +
- " matching on destination ip" )
- main.step( "Adding bidirectional multipoint to singlepoint intent" )
- """
- add-multi-to-single-intent --ipDst=10.0.3.0/24
- --setEthDst=00:00:00:00:00:12 of:0000000000003008/1 0000000000003009/1
- of:0000000000006018/1
-
- add-multi-to-single-intent --ipDst=10.0.1.0/24
- --setEthDst=00:00:00:00:00:08 of:0000000000006018/1 0000000000003009/1
- of:0000000000003008/1
- """
- main.case(
- "Installing multipoint to single point " +
- "intent with rewrite mac address" )
- main.step( "Uninstalling proxy arp app" )
- # deactivating proxyarp app
- appInstallResult = main.ONOScli1.deactivateApp( "org.onosproject.proxyarp" )
- appCheck = main.ONOScli1.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOScli1.apps() )
- main.log.warn( main.ONOScli1.appIDs() )
- time.sleep( 30 )
- main.log.info( "onos-app-proxyarp deactivated" )
-
- main.step( "Changing ipaddress of hosts h8,h9 and h18" )
- main.Mininet1.changeIP(
- host='h8',
- intf='h8-eth0',
- newIP='10.0.1.1',
- newNetmask='255.255.255.0' )
- main.Mininet1.changeIP(
- host='h9',
- intf='h9-eth0',
- newIP='10.0.2.1',
- newNetmask='255.255.255.0' )
- main.Mininet1.changeIP(
- host='h10',
- intf='h10-eth0',
- newIP='10.0.3.1',
- newNetmask='255.255.255.0' )
-
- main.step( "Changing default gateway of hosts h8,h9 and h18" )
- main.Mininet1.changeDefaultGateway( host='h8', newGW='10.0.1.254' )
- main.Mininet1.changeDefaultGateway( host='h9', newGW='10.0.2.254' )
- main.Mininet1.changeDefaultGateway( host='h10', newGW='10.0.3.254' )
-
- main.step(
- "Assigning random mac address to the default gateways " +
- "since proxyarp app is uninstalled" )
- main.Mininet1.addStaticMACAddress(
- host='h8',
- GW='10.0.1.254',
- macaddr='00:00:00:00:11:11' )
- main.Mininet1.addStaticMACAddress(
- host='h9',
- GW='10.0.2.254',
- macaddr='00:00:00:00:22:22' )
- main.Mininet1.addStaticMACAddress(
- host='h10',
- GW='10.0.3.254',
- macaddr='00:00:00:00:33:33' )
-
- main.step( "Verify static gateway and MAC address assignment" )
- main.Mininet1.verifyStaticGWandMAC( host='h8' )
- main.Mininet1.verifyStaticGWandMAC( host='h9' )
- main.Mininet1.verifyStaticGWandMAC( host='h10' )
-
- ingressDevice1=main.params[ 'MULTIPOINT_INTENT' ][ 'device1' ]
- ingressDevice2=main.params[ 'MULTIPOINT_INTENT' ][ 'device2' ]
- ingressDeviceList = []
- ingressDeviceList.append( ingressDevice1 )
- ingressDeviceList.append( ingressDevice2 )
-
- main.step( "Adding multipoint to singlepoint intent" )
- pIntentResult1 = main.ONOScli1.addMultipointToSinglepointIntent(
- ingressDeviceList,
- egressDevice=main.params[ 'MULTIPOINT_INTENT' ][ 'device3' ],
- ipDst=main.params[ 'MULTIPOINT_INTENT' ][ 'ip1' ],
- setEthDst=main.params[ 'MULTIPOINT_INTENT' ][ 'mac1' ] )
-
- ingressDevice1=main.params[ 'MULTIPOINT_INTENT' ][ 'device3' ]
- ingressDevice2=main.params[ 'MULTIPOINT_INTENT' ][ 'device2' ]
- ingressDeviceList = [ingressDevice1, ingressDevice2]
-
- pIntentResult2 = main.ONOScli1.addMultipointToSinglepointIntent(
- ingressDeviceList,
- egressDevice=main.params[ 'MULTIPOINT_INTENT' ][ 'device1' ],
- ipDst=main.params[ 'MULTIPOINT_INTENT' ][ 'ip2' ],
- setEthDst=main.params[ 'MULTIPOINT_INTENT' ][ 'mac2' ] )
-
- pIntentResult = pIntentResult1 and pIntentResult2
- if pIntentResult == main.FALSE:
- main.log.info(
- "Multi point to single point intent " +
- "installation failed" )
- else:
- pIntentResult = main.TRUE
- getIntentResult = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents = " + getIntentResult )
-
- time.sleep( 10 )
- getFlowsResult = main.ONOScli1.flows( jsonFormat=False )
- main.log.info( "flows = " + getFlowsResult )
-
- count = 1
- i = 8
- PingResult = main.TRUE
-
- main.log.info( "\n\nh" + str( i ) + " is Pinging h" + str( i + 2 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 2 ) )
- if ping == main.FALSE and count < 3:
- count += 1
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 2 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 2 ) +
- " passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report( "Ping test failed." )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Ping all successful" )
-
- if pIntentResult == main.TRUE:
- main.log.info(
- "Multi point intent with rewrite mac " +
- "address installation and ping successful" )
-
- case33Result = pIntentResult and PingResult
- utilities.assertEquals(
- expect=main.TRUE,
- actual=case33Result,
- onpass="Ping all test after multipoint to single point" +
- " intent addition with rewrite mac address successful",
- onfail="Ping all test after multipoint to single point intent" +
- " addition with rewrite mac address failed" )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS2Ip = main.params[ 'CTRL' ][ 'ip2' ]
- ONOS3Ip = main.params[ 'CTRL' ][ 'ip3' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- ONOS2Port = main.params[ 'CTRL' ][ 'port2' ]
- ONOS3Port = main.params[ 'CTRL' ][ 'port3' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
- main.step( "Disconnecting mininet and restarting ONOS" )
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
-
- main.step( "Removing raft logs before a clen installation of ONOS" )
- main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- time.sleep( 5 )
- main.step( "Uninstalling ONOS package" )
- onos1UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS1Ip)
- onos2UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS2Ip)
- onos3UninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOS3Ip)
- onosUninstallResult = onos1UninstallResult and onos2UninstallResult \
- and onos3UninstallResult
- time.sleep( 15 )
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS1Ip )
- onos2InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS2Ip )
- onos3InstallResult = main.ONOSbench.onosInstall(
- options="-f",
- node=ONOS3Ip )
- onosInstallResult = onos1InstallResult and onos2InstallResult and\
- onos3InstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- time.sleep( 10 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- onos2Isup = main.ONOSbench.isup( ONOS2Ip )
- onos3Isup = main.ONOSbench.isup( ONOS3Ip )
- onosIsup = onos1Isup and onos2Isup and onos3Isup
- if onosIsup == main.TRUE:
- main.log.report( "ONOS instances are up and ready" )
- else:
- main.log.report( "ONOS instances may not be up" )
-
- main.step( "Starting ONOS service" )
- time.sleep( 10 )
- startResult = main.TRUE
- # startResult = main.ONOSbench.onosStart( ONOS1Ip )
- startcli1 = main.ONOScli1.startOnosCli( ONOSIp=ONOS1Ip )
- startcli2 = main.ONOScli2.startOnosCli( ONOSIp=ONOS2Ip )
- startcli3 = main.ONOScli3.startOnosCli( ONOSIp=ONOS3Ip )
- startResult = startcli1 and startcli2 and startcli3
- if startResult == main.TRUE:
- main.log.report( "ONOS cli starts properly" )
- case20Result = mininetDisconnect and cellResult and verifyResult \
- and onosInstallResult and onosIsup and startResult
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case20Result,
- onpass= "Exiting functionality mininet topology and reinstalling" +
- " ONOS successful",
- onfail= "Exiting functionality mininet topology and reinstalling" +
- " ONOS failed" )
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1 <Ctrls>
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
- main.step( "Starting LINC-OE and other components" )
- main.log.info( "Activate optical app" )
- appInstallResult = main.ONOScli1.activateApp( "org.onosproject.optical" )
- appCheck = main.ONOScli1.appToIDCheck()
- appCheck = appCheck and main.ONOScli2.appToIDCheck()
- appCheck = appCheck and main.ONOScli3.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( "Checking ONOS application unsuccesful" )
-
- ctrllerIP = []
- ctrllerIP.append( main.params[ 'CTRL' ][ 'ip1' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip2' ] )
- #ctrllerIP.append( main.params[ 'CTRL' ][ 'ip3' ] )
- opticalMnScript = main.LincOE2.runOpticalMnScript( ctrllerIP = ctrllerIP )
- case21Result = opticalMnScript and appInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case21Result,
- onpass="Packet optical topology spawned successsfully",
- onfail="Packet optical topology spawning failed" )
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
- main.step( "Topology comparision" )
- devicesResult = main.ONOScli3.devices( jsonFormat=False )
- time.sleep( 15 )
- print "devices_result = ", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
-
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- print "_________________________________"
-
- linksResult = main.ONOScli3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
-
- case22Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case22Result,
- onpass="Packet optical topology discovery successful",
- onfail="Packet optical topology discovery failed" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Topology comparision" )
- main.step( "Adding point intents" )
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- ptpIntentResult = main.ONOScli1.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- if ptpIntentResult == main.TRUE:
- main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "Point to point intent install successful" )
-
- time.sleep( 30 )
- #flowHandle = main.ONOScli1.flows()
- #main.log.info( "flows :" + flowHandle )
-
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 60 )
- intentHandle = main.ONOScli1.intents( jsonFormat=False )
- main.log.info( "intents :" + intentHandle )
-
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report(
- "Point intents for packet optical have not ben installed" +
- " correctly. Cleaning up" )
- if PingResult == main.TRUE:
- main.log.report(
- "Point Intents for packet optical have been " +
- "installed correctly" )
-
- case23Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case23Result,
- onpass= "Point intents addition for packet optical and" +
- "Pingall Test successful",
- onfail= "Point intents addition for packet optical and" +
- "Pingall Test NOT successful" )
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
- main.step( "Attach to the Linc-OE session" )
- attachConsole = main.LincOE1.attachLincOESession()
- print "attachConsole = ", attachConsole
-
- main.step( "Bring a port down and verify the link state" )
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOScli3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
-
- linkInactiveCount = linksNonjson.count("state=INACTIVE")
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
-
- links = main.ONOScli3.links()
- main.log.info( "links = " + links )
-
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
-
- print "links_state_result = ", linksStateResult
- time.sleep( 10 )
- #flowHandle = main.ONOScli3.flows()
- #main.log.info( "flows :" + flowHandle )
-
- main.step( "Verify Rerouting by a ping test" )
- PingResult = main.TRUE
- count = 1
- main.log.info( "\n\nh1 is Pinging h5" )
- ping = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- # ping = main.LincOE2.pinghost()
- if ping == main.FALSE and count < 5:
- count += 1
- PingResult = main.FALSE
- main.log.info(
- "Ping between h1 and h5 failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.info( "All ping attempts between h1 and h5 have failed" )
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h1 and h5 passed!" )
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.TRUE:
- main.log.report( "Ping test successful " )
- if PingResult == main.FALSE:
- main.log.report( "Ping test failed" )
-
- case24Result = PingResult and linksStateResult
- utilities.assert_equals( expect=main.TRUE, actual=case24Result,
- onpass="Packet optical rerouting successful",
- onfail="Packet optical rerouting failed" )
diff --git a/TestON/tests/MultiProd13/MultiProd13.topo b/TestON/tests/MultiProd13/MultiProd13.topo
deleted file mode 100755
index 4b1ab12..0000000
--- a/TestON/tests/MultiProd13/MultiProd13.topo
+++ /dev/null
@@ -1,118 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/MultiProd13/__init__.py b/TestON/tests/MultiProd13/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/MultiProd13/__init__.py
+++ /dev/null
diff --git a/TestON/tests/OnosCHO/OnosCHO.params b/TestON/tests/OnosCHO/OnosCHO.params
deleted file mode 100644
index 6240fdb..0000000
--- a/TestON/tests/OnosCHO/OnosCHO.params
+++ /dev/null
@@ -1,88 +0,0 @@
-<PARAMS>
- # 1,20,3,[40,5,60,70,80,10,90,71,81,10,93,10]*50,21,3,[41,5,61,72,82,10,91,73,83,10,94,10]*50,22,3,[42,5,62,10,92,10,95,10,98,10]*50
- # 1. Starts ONOS cluster with 5 nodes
- # 20. Starts Att Topology
- # 21. Starts Chordal Topology
- # 22. Starts Spine-Leaf Topology
- # 3. Checks the consistency of ONOS and Mininet's topologies
- # 4X. Reactive forwarding | host discovery
- # 5. ONOS Topology verification
- # 6X. host intents
- # 7X. Bring random links down( Unique for each topology)
- # 8X. Bring random links back up
- # 9X Point,Multi-single,Single-Multi Intents
-
- <testcases>1,20,3,[40,5,60,70,80,10,90,71,81,10]*50,21,3,[41,5,61,72,82,10,91,73,83,10]*50,22,3,[42,5,62,74,84,10,92,10]*50</testcases>
- <ENV>
- <cellName>choTest3</cellName>
- </ENV>
- <GIT>
- #autoPull 'on' or 'off'
- <autoPull>on</autoPull>
- <branch>master</branch>
- </GIT>
- <TOPO1>
- <topo>~/mininet/custom/topoAtt.py</topo>
- <numSwitches>25</numSwitches>
- <numHosts>25</numHosts>
- <numLinks>114</numLinks>
- <numPaths>1</numPaths>
- </TOPO1>
- <TOPO2>
- <topo>~/mininet/custom/topoChordal.py</topo>
- <numSwitches>25</numSwitches>
- <numHosts>25</numHosts>
- <numLinks>600</numLinks>
- <numPaths>1</numPaths>
- </TOPO2>
- <TOPO3>
- <topo>~/mininet/custom/topoSpine.py</topo>
- <numSwitches>78</numSwitches>
- <numHosts>68</numHosts>
- <numLinks>284</numLinks>
- <numPaths>1</numPaths>
- </TOPO3>
- <CTRL>
- <numCtrl>3</numCtrl>
- <ip1>10.128.40.41</ip1>
- <port1>6633</port1>
- <ip2>10.128.40.42</ip2>
- <port2>6633</port2>
- <ip3>10.128.40.43</ip3>
- <port3>6633</port3>
- </CTRL>
- <HOSTS>
- <startMAC>00:00:00:00:00:01</startMAC>
- <endMAC>00:00:00:00:00:19</endMAC>
- </HOSTS>
- <ATTCORELINKS>
- <toggleLinks>1</toggleLinks>
-
- <linkS3a>s3</linkS3a>
- <linkS3b>s1,s4,s7,s10,s16,s17,s18,s21,s22</linkS3b>
- #######s1,s4,s7,s10,s16,s17,s18,s21,s22########
-
- <linkS14a>s14</linkS14a>
- <linkS14b>s6,s9,s10,s11,s12,s13,s16,s17,s23</linkS14b>
- ########s6,s9,s10,s11,s12,s13,s16,s17,s18,s23########
-
- <linkS18a>s18</linkS18a>
- <linkS18b>s14,s16,s17,s19,s20,s21,s22,s23</linkS18b>
- #######s3,s14,s16,s17,s19,s20,s21,s22,s23########
- </ATTCORELINKS>
-
- <SPINECORELINKS>
- <linkS9>s9</linkS9>
- <linkS9top>s1,s3,s5,s7</linkS9top>
- <linkS9bot>s11,s12</linkS9bot>
- <linkS10>s10</linkS10>
- <linkS10top>s2,s4,s6,s8</linkS10top>
- <linkS10bot>s13,s14</linkS10bot>
- </SPINECORELINKS>
-
- <timers>
- <LinkDiscovery>10</LinkDiscovery>
- <SwitchDiscovery>10</SwitchDiscovery>
- </timers>
-
-</PARAMS>
diff --git a/TestON/tests/OnosCHO/OnosCHO.py b/TestON/tests/OnosCHO/OnosCHO.py
deleted file mode 100644
index 27aa450..0000000
--- a/TestON/tests/OnosCHO/OnosCHO.py
+++ /dev/null
@@ -1,2451 +0,0 @@
-
-import sys
-import os
-import re
-import time
-import json
-import itertools
-
-
-class OnosCHO:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Startup sequence:
- git pull
- mvn clean install
- onos-package
- cell <name>
- onos-verify-cell
- onos-install -f
- onos-wait-for-start
- """
- import time
-
- global intentState
- main.threadID = 0
- main.pingTimeout = 300
- main.numCtrls = main.params[ 'CTRL' ][ 'numCtrl' ]
- main.ONOS1_ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.ONOS2_ip = main.params[ 'CTRL' ][ 'ip2' ]
- main.ONOS3_ip = main.params[ 'CTRL' ][ 'ip3' ]
- #main.ONOS4_ip = main.params[ 'CTRL' ][ 'ip4' ]
- #main.ONOS5_ip = main.params[ 'CTRL' ][ 'ip5' ]
- main.ONOS1_port = main.params[ 'CTRL' ][ 'port1' ]
- main.ONOS2_port = main.params[ 'CTRL' ][ 'port2' ]
- main.ONOS3_port = main.params[ 'CTRL' ][ 'port3' ]
- #main.ONOS4_port = main.params[ 'CTRL' ][ 'port4' ]
- #main.ONOS5_port = main.params[ 'CTRL' ][ 'port5' ]
- cell_name = main.params[ 'ENV' ][ 'cellName' ]
- git_pull = main.params[ 'GIT' ][ 'autoPull' ]
- git_branch = main.params[ 'GIT' ][ 'branch' ]
- main.newTopo = ""
- main.CLIs = []
- main.nodes = []
- for i in range( 1, int(main.numCtrls) + 1 ):
- main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- main.nodes.append( getattr( main, 'ONOS' + str( i ) ) )
-
- main.case( "Set up test environment" )
- main.log.report( "Set up test environment" )
- main.log.report( "_______________________" )
-
- main.step( "Git checkout and pull " + git_branch )
- if git_pull == 'on':
- checkout_result = main.ONOSbench.gitCheckout( git_branch )
- pull_result = main.ONOSbench.gitPull()
- cp_result = ( checkout_result and pull_result )
- else:
- checkout_result = main.TRUE
- pull_result = main.TRUE
- main.log.info( "Skipped git checkout and pull" )
- cp_result = ( checkout_result and pull_result )
- utilities.assert_equals( expect=main.TRUE, actual=cp_result,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
-
- main.step( "mvn clean & install" )
- if git_pull == 'on':
- mvn_result = main.ONOSbench.cleanInstall()
- utilities.assert_equals( expect=main.TRUE, actual=mvn_result,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- else:
- mvn_result = main.TRUE
- main.log.info("Skipped mvn clean install as git pull is disabled in params file")
-
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Apply Cell environment for ONOS" )
- cell_result = main.ONOSbench.setCell( cell_name )
- utilities.assert_equals( expect=main.TRUE, actual=cell_result,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
-
- main.step( "Create ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- utilities.assert_equals( expect=main.TRUE, actual=packageResult,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
-
- main.step( "Uninstall ONOS package on all Nodes" )
- uninstallResult = main.TRUE
- for i in range( 1, int( main.numCtrls ) + 1 ):
- ONOS_ip = main.params[ 'CTRL' ][ 'ip' + str( i ) ]
- main.log.info( "Uninstalling package on ONOS Node IP: " + ONOS_ip )
- u_result = main.ONOSbench.onosUninstall( ONOS_ip )
- utilities.assert_equals( expect=main.TRUE, actual=u_result,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- uninstallResult = ( uninstallResult and u_result )
-
- #main.step( "Removing copy-cat logs from ONOS nodes" )
- #main.ONOSbench.onosRemoveRaftLogs()
-
- main.step( "Install ONOS package on all Nodes" )
- installResult = main.TRUE
- for i in range( 1, int( main.numCtrls ) + 1 ):
- ONOS_ip = main.params[ 'CTRL' ][ 'ip' + str( i ) ]
- main.log.info( "Intsalling package on ONOS Node IP: " + ONOS_ip )
- i_result = main.ONOSbench.onosInstall( node=ONOS_ip )
- utilities.assert_equals( expect=main.TRUE, actual=i_result,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- installResult = ( installResult and i_result )
-
- main.step( "Verify ONOS nodes UP status" )
- statusResult = main.TRUE
- for i in range( 1, int( main.numCtrls ) + 1 ):
- ONOS_ip = main.params[ 'CTRL' ][ 'ip' + str( i ) ]
- main.log.info( "ONOS Node " + ONOS_ip + " status:" )
- onos_status = main.ONOSbench.onosStatus( node=ONOS_ip )
- utilities.assert_equals( expect=main.TRUE, actual=onos_status,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- statusResult = ( statusResult and onos_status )
-
- main.step( "Start ONOS CLI on all nodes" )
- cliResult = main.TRUE
- karafTimeout = "3600000"
- # need to wait here for sometime. This will be removed once ONOS is
- # stable enough
- time.sleep( 25 )
- main.log.step(" Start ONOS cli using thread ")
- startCliResult = main.TRUE
- pool = []
- time1 = time.time()
- for i in range( int( main.numCtrls) ):
- t = main.Thread( target=main.CLIs[i].startOnosCli,
- threadID=main.threadID,
- name="startOnosCli",
- args=[ main.nodes[i].ip_address, karafTimeout ] )
- pool.append(t)
- t.start()
- main.threadID = main.threadID + 1
- for t in pool:
- t.join()
- startCliResult = startCliResult and t.result
- time2 = time.time()
-
- if not startCliResult:
- main.log.info("ONOS CLI did not start up properly")
- #main.cleanup()
- #main.exit()
- else:
- main.log.info("Successful CLI startup")
- startCliResult = main.TRUE
- case1Result = installResult and uninstallResult and statusResult and startCliResult
- time.sleep(30)
- main.log.info("Time for connecting to CLI: %2f seconds" %(time2-time1))
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="Set up test environment PASS",
- onfail="Set up test environment FAIL" )
-
- def CASE20( self, main ):
- """
- This test script Loads a new Topology (Att) on CHO setup and balances all switches
- """
- import re
- import time
- import copy
-
- main.numMNswitches = int ( main.params[ 'TOPO1' ][ 'numSwitches' ] )
- main.numMNlinks = int ( main.params[ 'TOPO1' ][ 'numLinks' ] )
- main.numMNhosts = int ( main.params[ 'TOPO1' ][ 'numHosts' ] )
- main.pingTimeout = 300
- main.log.report(
- "Load Att topology and Balance all Mininet switches across controllers" )
- main.log.report(
- "________________________________________________________________________" )
- main.case(
- "Assign and Balance all Mininet switches across controllers" )
- main.step( "Stop any previous Mininet network topology" )
- cliResult = main.TRUE
- if main.newTopo == main.params['TOPO3']['topo']:
- stopStatus = main.Mininet1.stopNet( fileName = "topoSpine" )
-
- main.step( "Start Mininet with Att topology" )
- main.newTopo = main.params['TOPO1']['topo']
- startStatus = main.Mininet1.startNet(topoFile = main.newTopo)
- time.sleep(45)
- main.step( "Assign switches to controllers" )
- onosIps = []
- onosPort = []
- onosIps.append( ONOS1_ip )
- onosIps.append( ONOS2_ip )
- onosIps.append( ONOS3_ip )
- onosPort.append( ONOS1_port )
- onosPort.append( ONOS2_port )
- onosPort.append( ONOS3_port )
-
- for i in range( 1, ( main.numMNswitches + 1 ) ): # 1 to ( num of switches +1 )
- main.Mininet1.assignSwController(
- sw="s" + str( i ),
- count=int( main.numCtrls ),
- ip=onosIps,
- port=onosPort )
-
- switch_mastership = main.TRUE
- for i in range( 1, ( main.numMNswitches + 1 ) ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + main.ONOS1_ip, response ):
- switch_mastership = switch_mastership and main.TRUE
- else:
- switch_mastership = main.FALSE
-
- if switch_mastership == main.TRUE:
- main.log.report( "Controller assignment successfull" )
- else:
- main.log.report( "Controller assignment failed" )
-
- """topoFailed = main.FALSE
- checkCount = 0
- while(topoFailed == main.FALSE):
- topology_output = main.ONOScli1.topology()
- topology_result = main.ONOSbench.getTopology( topology_output )
- numOnosDevices = topology_result[ 'deviceCount' ]
- numOnosLinks = topology_result[ 'linkCount' ]
- if ( ( main.numMNswitches == int(numOnosDevices) ) and ( main.numMNlinks >= int(numOnosLinks) ) ):
- main.log.info("Att topology is now ready!")
- break
- else:
- main.log.info("Att topology is not ready yet!")
- checkCount = checkCount + 1
- time.sleep(2)
- if checkCount == 10:
- topoFailed = main.TRUE
- if topoFailed:
- main.log.info("Att topology failed to start correctly")
- """
- time.sleep(45)
- #Don't balance master for now..
- main.step( "Balance devices across controllers" )
- for i in range( int( main.numCtrls ) ):
- balanceResult = main.ONOScli1.balanceMasters()
- # giving some breathing time for ONOS to complete re-balance
- time.sleep( 5 )
- topology_output = main.ONOScli1.topology()
- topology_result = main.ONOSbench.getTopology( topology_output )
- case2Result = ( switch_mastership and startStatus )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case2Result,
- onpass="Starting new Att topology test PASS",
- onfail="Starting new Att topology test FAIL" )
-
- def CASE21( self, main ):
- """
- This test script Loads a new Topology (Chordal) on CHO setup and balances all switches
- """
- import re
- import time
- import copy
-
- main.newTopo = main.params['TOPO2']['topo']
- main.numMNswitches = int ( main.params[ 'TOPO2' ][ 'numSwitches' ] )
- main.numMNlinks = int ( main.params[ 'TOPO2' ][ 'numLinks' ] )
- main.numMNhosts = int ( main.params[ 'TOPO2' ][ 'numHosts' ] )
- main.pingTimeout = 300
- main.log.report(
- "Load Chordal topology and Balance all Mininet switches across controllers" )
- main.log.report(
- "________________________________________________________________________" )
- main.case(
- "Assign and Balance all Mininet switches across controllers" )
- main.step( "Stop any previous Mininet network topology" )
- stopStatus = main.Mininet1.stopNet(fileName = "topoAtt" )
- time.sleep(10)
- main.step( "Start Mininet with Chordal topology" )
- startStatus = main.Mininet1.startNet(topoFile = main.newTopo)
- time.sleep(15)
- main.step( "Assign switches to controllers" )
- onosIps = []
- onosPort = []
- onosIps.append( ONOS1_ip )
- onosIps.append( ONOS2_ip )
- onosIps.append( ONOS3_ip )
- onosPort.append( ONOS1_port )
- onosPort.append( ONOS2_port )
- onosPort.append( ONOS3_port )
-
- for i in range( 1, ( main.numMNswitches + 1 ) ): # 1 to ( num of switches +1 )
- main.Mininet1.assignSwController(
- sw="s" + str( i ),
- count=int( main.numCtrls ),
- ip=onosIps,
- port=onosPort )
-
- switch_mastership = main.TRUE
- for i in range( 1, ( main.numMNswitches + 1 ) ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + main.ONOS1_ip, response ):
- switch_mastership = switch_mastership and main.TRUE
- else:
- switch_mastership = main.FALSE
-
- if switch_mastership == main.TRUE:
- main.log.report( "Controller assignment successfull" )
- else:
- main.log.report( "Controller assignment failed" )
- time.sleep( 5 )
-
- main.step( "Balance devices across controllers" )
- for i in range( int( main.numCtrls ) ):
- balanceResult = main.ONOScli1.balanceMasters()
- # giving some breathing time for ONOS to complete re-balance
- time.sleep( 3 )
-
- case21Result = switch_mastership
- time.sleep(30)
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case21Result,
- onpass="Starting new Chordal topology test PASS",
- onfail="Starting new Chordal topology test FAIL" )
-
- def CASE22( self, main ):
- """
- This test script Loads a new Topology (Spine) on CHO setup and balances all switches
- """
- import re
- import time
- import copy
-
- main.newTopo = main.params['TOPO3']['topo']
- main.numMNswitches = int ( main.params[ 'TOPO3' ][ 'numSwitches' ] )
- main.numMNlinks = int ( main.params[ 'TOPO3' ][ 'numLinks' ] )
- main.numMNhosts = int ( main.params[ 'TOPO3' ][ 'numHosts' ] )
- main.pingTimeout = 600
-
- main.log.report(
- "Load Spine and Leaf topology and Balance all Mininet switches across controllers" )
- main.log.report(
- "________________________________________________________________________" )
- # need to wait here for sometime until ONOS bootup
- main.case(
- "Assign and Balance all Mininet switches across controllers" )
- main.step( "Stop any previous Mininet network topology" )
- stopStatus = main.Mininet1.stopNet(fileName = "topoChordal" )
- main.step( "Start Mininet with Spine topology" )
- startStatus = main.Mininet1.startNet(topoFile = main.newTopo)
- time.sleep(60)
- main.step( "Assign switches to controllers" )
- onosIps = []
- onosPort = []
- onosIps.append( ONOS1_ip )
- onosIps.append( ONOS2_ip )
- onosIps.append( ONOS3_ip )
- onosPort.append( ONOS1_port )
- onosPort.append( ONOS2_port )
- onosPort.append( ONOS3_port )
-
- for i in range( 1, ( main.numMNswitches + 1 ) ): # 1 to ( num of switches +1 )
- main.Mininet1.assignSwController(
- sw="s" + str( i ),
- count=int( main.numCtrls ),
- ip=onosIps,
- port=onosPort )
-
- switch_mastership = main.TRUE
- for i in range( 1, ( main.numMNswitches + 1 ) ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + main.ONOS1_ip, response ):
- switch_mastership = switch_mastership and main.TRUE
- else:
- switch_mastership = main.FALSE
-
- if switch_mastership == main.TRUE:
- main.log.report( "Controller assignment successfull" )
- else:
- main.log.report( "Controller assignment failed" )
- time.sleep( 5 )
-
- main.step( "Balance devices across controllers" )
- for i in range( int( main.numCtrls ) ):
- balanceResult = main.ONOScli1.balanceMasters()
- # giving some breathing time for ONOS to complete re-balance
- time.sleep( 3 )
-
- case22Result = switch_mastership
- time.sleep(60)
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case22Result,
- onpass="Starting new Spine topology test PASS",
- onfail="Starting new Spine topology test FAIL" )
-
- def CASE3( self, main ):
- """
- This Test case will be extended to collect and store more data related
- ONOS state.
- """
- import re
- import copy
- main.deviceDPIDs = []
- main.hostMACs = []
- main.deviceLinks = []
- main.deviceActiveLinksCount = []
- main.devicePortsEnabledCount = []
-
- main.log.report(
- "Collect and Store topology details from ONOS before running any Tests" )
- main.log.report(
- "____________________________________________________________________" )
- main.case( "Collect and Store Topology Details from ONOS" )
- main.step( "Collect and store current number of switches and links" )
- topology_output = main.ONOScli1.topology()
- topology_result = main.ONOSbench.getTopology( topology_output )
- numOnosDevices = topology_result[ 'devices' ]
- numOnosLinks = topology_result[ 'links' ]
- topoResult = main.TRUE
-
- if ( ( main.numMNswitches == int(numOnosDevices) ) and ( main.numMNlinks >= int(numOnosLinks) ) ):
- main.step( "Store Device DPIDs" )
- for i in range( 1, (main.numMNswitches+1) ):
- main.deviceDPIDs.append( "of:00000000000000" + format( i, '02x' ) )
- print "Device DPIDs in Store: \n", str( main.deviceDPIDs )
-
- main.step( "Store Host MACs" )
- for i in range( 1, ( main.numMNhosts + 1 ) ):
- main.hostMACs.append( "00:00:00:00:00:" + format( i, '02x' ) + "/-1" )
- print "Host MACs in Store: \n", str( main.hostMACs )
- main.MACsDict = {}
- print "Creating dictionary of DPID and HostMacs"
- for i in range(len(main.hostMACs)):
- main.MACsDict[main.deviceDPIDs[i]] = main.hostMACs[i].split('/')[0]
- print main.MACsDict
- main.step( "Collect and store all Devices Links" )
- linksResult = main.ONOScli1.links( jsonFormat=False )
- ansi_escape = re.compile( r'\x1b[^m]*m' )
- linksResult = ansi_escape.sub( '', linksResult )
- linksResult = linksResult.replace( " links", "" ).replace( "\r\r", "" )
- linksResult = linksResult.splitlines()
- main.deviceLinks = copy.copy( linksResult )
- print "Device Links Stored: \n", str( main.deviceLinks )
- # this will be asserted to check with the params provided count of
- # links
- print "Length of Links Store", len( main.deviceLinks )
-
- main.step( "Collect and store each Device ports enabled Count" )
- time1 = time.time()
- for i in xrange(1,(main.numMNswitches + 1), int( main.numCtrls ) ):
- pool = []
- for cli in main.CLIs:
- if i >= main.numMNswitches + 1:
- break
- dpid = "of:00000000000000" + format( i,'02x' )
- t = main.Thread(target = cli.getDevicePortsEnabledCount,threadID = main.threadID, name = "getDevicePortsEnabledCount",args = [dpid])
- t.start()
- pool.append(t)
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- portResult = thread.result
- #portCount = re.split( r'\t+', portResult )
- #portCount = portTemp[ 1 ].replace( "\r\r\n\x1b[32m", "" )
- main.devicePortsEnabledCount.append( portResult )
- print "Device Enabled Port Counts Stored: \n", str( main.devicePortsEnabledCount )
- time2 = time.time()
- main.log.info("Time for counting enabled ports of the switches: %2f seconds" %(time2-time1))
-
- main.step( "Collect and store each Device active links Count" )
- time1 = time.time()
-
- for i in xrange( 1,( main.numMNswitches + 1 ), int( main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= main.numMNswitches + 1:
- break
- dpid = "of:00000000000000" + format( i,'02x' )
- t = main.Thread( target = cli.getDeviceLinksActiveCount,
- threadID = main.threadID,
- name = "getDevicePortsEnabledCount",
- args = [dpid])
- t.start()
- pool.append(t)
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- linkCountResult = thread.result
- #linkCount = re.split( r'\t+', linkCountResult )
- #linkCount = linkCountTemp[ 1 ].replace( "\r\r\n\x1b[32m", "" )
- main.deviceActiveLinksCount.append( linkCountResult )
- print "Device Active Links Count Stored: \n", str( main.deviceActiveLinksCount )
- time2 = time.time()
- main.log.info("Time for counting all enabled links of the switches: %2f seconds" %(time2-time1))
-
- else:
- main.log.info("Devices (expected): %s, Links (expected): %s" %
- ( str( main.numMNswitches ), str( main.numMNlinks ) ) )
- main.log.info("Devices (actual): %s, Links (actual): %s" %
- ( numOnosDevices , numOnosLinks ) )
- main.log.info("Topology does not match, exiting CHO test...")
- topoResult = main.FALSE
- # It's better exit here from running the test
- main.cleanup()
- main.exit()
-
- # just returning TRUE for now as this one just collects data
- case3Result = topoResult
- utilities.assert_equals( expect=main.TRUE, actual=case3Result,
- onpass="Saving ONOS topology data test PASS",
- onfail="Saving ONOS topology data test FAIL" )
-
- def CASE40( self, main ):
- """
- Verify Reactive forwarding (Att Topology)
- """
- import re
- import copy
- import time
- main.log.report( "Verify Reactive forwarding (Att Topology)" )
- main.log.report( "______________________________________________" )
- main.case( "Enable Reactive forwarding and Verify ping all" )
- main.step( "Enable Reactive forwarding" )
- installResult = main.TRUE
- # Activate fwd app
- appResults = main.CLIs[0].activateApp( "org.onosproject.fwd" )
- appCheck = main.TRUE
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- time.sleep( 10 )
-
- main.step( "Verify Pingall" )
- ping_result = main.FALSE
- time1 = time.time()
- ping_result = main.Mininet1.pingall( timeout=main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
- else:
- main.log.report( "Pingall Test in Reactive mode failed" )
-
- main.step( "Disable Reactive forwarding" )
-
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
-
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- # Waiting for reative flows to be cleared.
- time.sleep( 30 )
- case40Result = installResult and uninstallResult and ping_result
- utilities.assert_equals( expect=main.TRUE, actual=case40Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
-
- def CASE41( self, main ):
- """
- Verify Reactive forwarding (Chordal Topology)
- """
- import re
- import copy
- import time
- main.log.report( "Verify Reactive forwarding (Chordal Topology)" )
- main.log.report( "______________________________________________" )
- main.case( "Enable Reactive forwarding and Verify ping all" )
- main.step( "Enable Reactive forwarding" )
- installResult = main.TRUE
- # Activate fwd app
- appResults = main.CLIs[0].activateApp( "org.onosproject.fwd" )
-
- appCheck = main.TRUE
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- time.sleep( 10 )
-
- main.step( "Verify Pingall" )
- ping_result = main.FALSE
- time1 = time.time()
- ping_result = main.Mininet1.pingall( timeout=main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
- else:
- main.log.report( "Pingall Test in Reactive mode failed" )
-
- main.step( "Disable Reactive forwarding" )
-
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
-
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- # Waiting for reative flows to be cleared.
- time.sleep( 30 )
- case41Result = installResult and uninstallResult and ping_result
- utilities.assert_equals( expect=main.TRUE, actual=case41Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
-
- def CASE42( self, main ):
- """
- Verify Reactive forwarding (Spine Topology)
- """
- import re
- import copy
- import time
- main.log.report( "Verify Reactive forwarding (Spine Topology)" )
- main.log.report( "______________________________________________" )
- main.case( "Enable Reactive forwarding and Verify ping all" )
- main.step( "Enable Reactive forwarding" )
- installResult = main.TRUE
- # Activate fwd app
- appResults = main.CLIs[0].activateApp( "org.onosproject.fwd" )
-
- appCheck = main.TRUE
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- time.sleep( 10 )
-
- main.step( "Verify Pingall" )
- ping_result = main.FALSE
- time1 = time.time()
- ping_result = main.Mininet1.pingall( timeout=main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
- else:
- main.log.report( "Pingall Test in Reactive mode failed" )
-
- main.step( "Disable Reactive forwarding" )
-
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
-
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- # Waiting for reative flows to be cleared.
- time.sleep( 30 )
- case42Result = installResult and uninstallResult and ping_result
- utilities.assert_equals( expect=main.TRUE, actual=case42Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
-
- def CASE5( self, main ):
- """
- Compare current ONOS topology with reference data
- """
- import re
-
- devicesDPIDTemp = []
- hostMACsTemp = []
- deviceLinksTemp = []
- deviceActiveLinksCountTemp = []
- devicePortsEnabledCountTemp = []
-
- main.log.report(
- "Compare ONOS topology with reference data in Stores" )
- main.log.report( "__________________________________________________" )
- main.case( "Compare ONOS topology with reference data" )
-
- main.step( "Compare current Device ports enabled with reference" )
- time1 = time.time()
- for i in xrange( 1,(main.numMNswitches + 1), int( main.numCtrls ) ):
- pool = []
- for cli in main.CLIs:
- if i >= main.numMNswitches + 1:
- break
- dpid = "of:00000000000000" + format( i,'02x' )
- t = main.Thread(target = cli.getDevicePortsEnabledCount,
- threadID = main.threadID,
- name = "getDevicePortsEnabledCount",
- args = [dpid])
- t.start()
- pool.append(t)
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- portResult = thread.result
- #portTemp = re.split( r'\t+', portResult )
- #portCount = portTemp[ 1 ].replace( "\r\r\n\x1b[32m", "" )
- devicePortsEnabledCountTemp.append( portResult )
-
- time2 = time.time()
- main.log.info("Time for counting enabled ports of the switches: %2f seconds" %(time2-time1))
- main.log.info (
- "Device Enabled ports EXPECTED: %s" %
- str( main.devicePortsEnabledCount ) )
- main.log.info (
- "Device Enabled ports ACTUAL: %s" %
- str( devicePortsEnabledCountTemp ) )
-
- if ( cmp( main.devicePortsEnabledCount,
- devicePortsEnabledCountTemp ) == 0 ):
- stepResult1 = main.TRUE
- else:
- stepResult1 = main.FALSE
-
- main.step( "Compare Device active links with reference" )
- time1 = time.time()
- for i in xrange( 1, ( main.numMNswitches + 1) , int( main.numCtrls ) ):
- pool = []
- for cli in main.CLIs:
- if i >= main.numMNswitches + 1:
- break
- dpid = "of:00000000000000" + format( i,'02x' )
- t = main.Thread(target = cli.getDeviceLinksActiveCount,
- threadID = main.threadID,
- name = "getDeviceLinksActiveCount",
- args = [dpid])
- t.start()
- pool.append(t)
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- linkCountResult = thread.result
- #linkCountTemp = re.split( r'\t+', linkCountResult )
- #linkCount = linkCountTemp[ 1 ].replace( "\r\r\n\x1b[32m", "" )
- deviceActiveLinksCountTemp.append( linkCountResult )
-
- time2 = time.time()
- main.log.info("Time for counting all enabled links of the switches: %2f seconds" %(time2-time1))
- main.log.info (
- "Device Active links EXPECTED: %s" %
- str( main.deviceActiveLinksCount ) )
- main.log.info (
- "Device Active links ACTUAL: %s" % str( deviceActiveLinksCountTemp ) )
- if ( cmp( main.deviceActiveLinksCount, deviceActiveLinksCountTemp ) == 0 ):
- stepResult2 = main.TRUE
- else:
- stepResult2 = main.FALSE
-
- """
- place holder for comparing devices, hosts, paths and intents if required.
- Links and ports data would be incorrect with out devices anyways.
- """
- case5Result = ( stepResult1 and stepResult2 )
- utilities.assert_equals( expect=main.TRUE, actual=case5Result,
- onpass="Compare Topology test PASS",
- onfail="Compare Topology test FAIL" )
-
- def CASE60( self ):
- """
- Install 300 host intents and verify ping all (Att Topology)
- """
- main.log.report( "Add 300 host intents and verify pingall (Att Topology)" )
- main.log.report( "_______________________________________" )
- import itertools
- import time
- main.case( "Install 300 host intents" )
- main.step( "Add host Intents" )
- intentResult = main.TRUE
- hostCombos = list( itertools.combinations( main.hostMACs, 2 ) )
-
- intentIdList = []
- time1 = time.time()
- for i in xrange( 0, len( hostCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( hostCombos ):
- break
- t = main.Thread( target=cli.addHostIntent,
- threadID=main.threadID,
- name="addHostIntent",
- args=[hostCombos[i][0],hostCombos[i][1]])
- pool.append(t)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding host intents: %2f seconds" %(time2-time1))
-
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- print "len of intent ID", str(len(intentIdList))
- print "len of intent state results", str(len(getIntentStateResult))
- print getIntentStateResult
- # Takes awhile for all the onos to get the intents
- time.sleep( 30 )
- """intentState = main.TRUE
- for i in getIntentStateResult:
- if getIntentStateResult.get( 'state' ) != 'INSTALLED':
- """
-
-
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- case60Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case60Result,
- onpass="Install 300 Host Intents and Ping All test PASS",
- onfail="Install 300 Host Intents and Ping All test FAIL" )
-
- def CASE61( self ):
- """
- Install 600 host intents and verify ping all for Chordal Topology
- """
- main.log.report( "Add 600 host intents and verify pingall (Chordal Topo)" )
- main.log.report( "_______________________________________" )
- import itertools
-
- main.case( "Install 600 host intents" )
- main.step( "Add host Intents" )
- intentResult = main.TRUE
- hostCombos = list( itertools.combinations( main.hostMACs, 2 ) )
-
- intentIdList = []
- time1 = time.time()
-
- for i in xrange( 0, len( hostCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( hostCombos ):
- break
- t = main.Thread( target=cli.addHostIntent,
- threadID=main.threadID,
- name="addHostIntent",
- args=[hostCombos[i][0],hostCombos[i][1]])
- pool.append(t)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding host intents: %2f seconds" %(time2-time1))
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- print getIntentStateResult
-
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- case14Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case14Result,
- onpass="Install 300 Host Intents and Ping All test PASS",
- onfail="Install 300 Host Intents and Ping All test FAIL" )
-
- def CASE62( self ):
- """
- Install 2278 host intents and verify ping all for Spine Topology
- """
- main.log.report( "Add 2278 host intents and verify pingall (Spine Topo)" )
- main.log.report( "_______________________________________" )
- import itertools
-
- main.case( "Install 2278 host intents" )
- main.step( "Add host Intents" )
- intentResult = main.TRUE
- hostCombos = list( itertools.combinations( main.hostMACs, 2 ) )
- main.pingTimeout = 300
- intentIdList = []
- time1 = time.time()
- for i in xrange( 0, len( hostCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( hostCombos ):
- break
- t = main.Thread( target=cli.addHostIntent,
- threadID=main.threadID,
- name="addHostIntent",
- args=[hostCombos[i][0],hostCombos[i][1]])
- pool.append(t)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding host intents: %2f seconds" %(time2-time1))
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- print getIntentStateResult
-
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- case15Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case15Result,
- onpass="Install 2278 Host Intents and Ping All test PASS",
- onfail="Install 2278 Host Intents and Ping All test FAIL" )
-
- def CASE70( self, main ):
- """
- Randomly bring some core links down and verify ping all ( Host Intents-Att Topo)
- """
- import random
- main.randomLink1 = []
- main.randomLink2 = []
- main.randomLink3 = []
- link1End1 = main.params[ 'ATTCORELINKS' ][ 'linkS3a' ]
- link1End2 = main.params[ 'ATTCORELINKS' ][ 'linkS3b' ].split( ',' )
- link2End1 = main.params[ 'ATTCORELINKS' ][ 'linkS14a' ]
- link2End2 = main.params[ 'ATTCORELINKS' ][ 'linkS14b' ].split( ',' )
- link3End1 = main.params[ 'ATTCORELINKS' ][ 'linkS18a' ]
- link3End2 = main.params[ 'ATTCORELINKS' ][ 'linkS18b' ].split( ',' )
- switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "Randomly bring some core links down and verify ping all (Host Intents-Att Topo)" )
- main.log.report( "___________________________________________________________________________" )
- main.case( "Host intents - Randomly bring some core links down and verify ping all" )
- main.step( "Verify number of Switch links to toggle on each Core Switch are between 1 - 5" )
- if ( int( switchLinksToToggle ) ==
- 0 or int( switchLinksToToggle ) > 5 ):
- main.log.info( "Please check your PARAMS file. Valid range for number of switch links to toggle is between 1 to 5" )
- #main.cleanup()
- #main.exit()
- else:
- main.log.info( "User provided Core switch links range to toggle is correct, proceeding to run the test" )
-
- main.step( "Cut links on Core devices using user provided range" )
- main.randomLink1 = random.sample( link1End2, int( switchLinksToToggle ) )
- main.randomLink2 = random.sample( link2End2, int( switchLinksToToggle ) )
- main.randomLink3 = random.sample( link3End2, int( switchLinksToToggle ) )
- for i in range( int( switchLinksToToggle ) ):
- main.Mininet1.link(
- END1=link1End1,
- END2=main.randomLink1[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link2End1,
- END2=main.randomLink2[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link3End1,
- END2=main.randomLink3[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkDown = main.ONOSbench.checkStatus(
- topology_output, main.numMNswitches, str(
- int( main.numMNlinks ) - int( switchLinksToToggle ) * 6 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkDown = main.FALSE
- time1 = time.time()
- pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult70 = linkDown and pingResultLinkDown
- utilities.assert_equals( expect=main.TRUE, actual=caseResult70,
- onpass="Random Link cut Test PASS",
- onfail="Random Link cut Test FAIL" )
-
- def CASE80( self, main ):
- """
- Bring the core links up that are down and verify ping all ( Host Intents-Att Topo )
- """
- import random
- link1End1 = main.params[ 'ATTCORELINKS' ][ 'linkS3a' ]
- link2End1 = main.params[ 'ATTCORELINKS' ][ 'linkS14a' ]
- link3End1 = main.params[ 'ATTCORELINKS' ][ 'linkS18a' ]
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
- switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
-
- main.log.report(
- "Bring the core links up that are down and verify ping all (Host Intents-Att Topo" )
- main.log.report(
- "__________________________________________________________________" )
- main.case(
- "Host intents - Bring the core links up that are down and verify ping all" )
- main.step( "Bring randomly cut links on Core devices up" )
- for i in range( int( switchLinksToToggle ) ):
- main.Mininet1.link(
- END1=link1End1,
- END2=main.randomLink1[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link2End1,
- END2=main.randomLink2[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link3End1,
- END2=main.randomLink3[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkUp = main.ONOSbench.checkStatus(
- topology_output,
- main.numMNswitches,
- str( main.numMNlinks ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkUp = main.FALSE
- time1 = time.time()
- pingResultLinkUp = main.Mininet1.pingall( timeout=main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult80 = linkUp and pingResultLinkUp
- utilities.assert_equals( expect=main.TRUE, actual=caseResult80,
- onpass="Link Up Test PASS",
- onfail="Link Up Test FAIL" )
-
- def CASE71( self, main ):
- """
- Randomly bring some core links down and verify ping all ( Point Intents-Att Topo)
- """
- import random
- main.randomLink1 = []
- main.randomLink2 = []
- main.randomLink3 = []
- link1End1 = main.params[ 'ATTCORELINKS' ][ 'linkS3a' ]
- link1End2 = main.params[ 'ATTCORELINKS' ][ 'linkS3b' ].split( ',' )
- link2End1 = main.params[ 'ATTCORELINKS' ][ 'linkS14a' ]
- link2End2 = main.params[ 'ATTCORELINKS' ][ 'linkS14b' ].split( ',' )
- link3End1 = main.params[ 'ATTCORELINKS' ][ 'linkS18a' ]
- link3End2 = main.params[ 'ATTCORELINKS' ][ 'linkS18b' ].split( ',' )
- switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "Randomly bring some core links down and verify ping all (Point Intents-Att Topo)" )
- main.log.report( "___________________________________________________________________________" )
- main.case( "Point intents - Randomly bring some core links down and verify ping all" )
- main.step( "Verify number of Switch links to toggle on each Core Switch are between 1 - 5" )
- if ( int( switchLinksToToggle ) ==
- 0 or int( switchLinksToToggle ) > 5 ):
- main.log.info( "Please check your PARAMS file. Valid range for number of switch links to toggle is between 1 to 5" )
- #main.cleanup()
- #main.exit()
- else:
- main.log.info( "User provided Core switch links range to toggle is correct, proceeding to run the test" )
-
- main.step( "Cut links on Core devices using user provided range" )
- main.randomLink1 = random.sample( link1End2, int( switchLinksToToggle ) )
- main.randomLink2 = random.sample( link2End2, int( switchLinksToToggle ) )
- main.randomLink3 = random.sample( link3End2, int( switchLinksToToggle ) )
- for i in range( int( switchLinksToToggle ) ):
- main.Mininet1.link(
- END1=link1End1,
- END2=main.randomLink1[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link2End1,
- END2=main.randomLink2[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link3End1,
- END2=main.randomLink3[ i ],
- OPTION="down" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkDown = main.ONOSbench.checkStatus(
- topology_output, main.numMNswitches, str(
- int( main.numMNlinks ) - int( switchLinksToToggle ) * 6 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkDown = main.FALSE
- time1 = time.time()
- pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult71 = linkDown and pingResultLinkDown
- utilities.assert_equals( expect=main.TRUE, actual=caseResult71,
- onpass="Random Link cut Test PASS",
- onfail="Random Link cut Test FAIL" )
-
- def CASE81( self, main ):
- """
- Bring the core links up that are down and verify ping all ( Point Intents-Att Topo )
- """
- import random
- link1End1 = main.params[ 'ATTCORELINKS' ][ 'linkS3a' ]
- link2End1 = main.params[ 'ATTCORELINKS' ][ 'linkS14a' ]
- link3End1 = main.params[ 'ATTCORELINKS' ][ 'linkS18a' ]
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
- switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
-
- main.log.report(
- "Bring the core links up that are down and verify ping all ( Point Intents-Att Topo" )
- main.log.report(
- "__________________________________________________________________" )
- main.case(
- "Point intents - Bring the core links up that are down and verify ping all" )
- main.step( "Bring randomly cut links on Core devices up" )
- for i in range( int( switchLinksToToggle ) ):
- main.Mininet1.link(
- END1=link1End1,
- END2=main.randomLink1[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link2End1,
- END2=main.randomLink2[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
- main.Mininet1.link(
- END1=link3End1,
- END2=main.randomLink3[ i ],
- OPTION="up" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkUp = main.ONOSbench.checkStatus(
- topology_output,
- main.numMNswitches,
- str( main.numMNlinks ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkUp = main.FALSE
- time1 = time.time()
- pingResultLinkUp = main.Mininet1.pingall(timeout = main.pingTimeout )
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult81 = linkUp and pingResultLinkUp
- utilities.assert_equals( expect=main.TRUE, actual=caseResult81,
- onpass="Link Up Test PASS",
- onfail="Link Up Test FAIL" )
-
- def CASE72( self, main ):
- """
- Randomly bring some links down and verify ping all ( Host Intents-Chordal Topo)
- """
- import random
- import itertools
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "Randomly bring some core links down and verify ping all (Host Intents-Chordal Topo)" )
- main.log.report( "___________________________________________________________________________" )
- main.case( "Host intents - Randomly bring some core links down and verify ping all" )
- switches = []
- switchesComb = []
- for i in range( main.numMNswitches ):
- switches.append('s%d'%(i+1))
- switchesLinksComb = list(itertools.combinations(switches,2))
- main.randomLinks = random.sample(switchesLinksComb, 5 )
- print main.randomLinks
- main.step( "Cut links on random devices" )
-
- for switch in main.randomLinks:
- main.Mininet1.link(
- END1=switch[0],
- END2=switch[1],
- OPTION="down")
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkDown = main.ONOSbench.checkStatus(
- topology_output, main.numMNswitches, str(
- int( main.numMNlinks ) - 5 * 2 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkDown = main.FALSE
- time1 = time.time()
- pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult71 = pingResultLinkDown
- utilities.assert_equals( expect=main.TRUE, actual=caseResult71,
- onpass="Random Link cut Test PASS",
- onfail="Random Link cut Test FAIL" )
-
- def CASE82( self, main ):
- """
- Bring the core links up that are down and verify ping all ( Host Intents Chordal Topo )
- """
- import random
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report(
- "Bring the core links up that are down and verify ping all (Host Intents-Chordal Topo" )
- main.log.report(
- "__________________________________________________________________" )
- main.case(
- "Host intents - Bring the core links up that are down and verify ping all" )
- main.step( "Bring randomly cut links on devices up" )
-
- for switch in main.randomLinks:
- main.Mininet1.link(
- END1=switch[0],
- END2=switch[1],
- OPTION="up")
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkUp = main.ONOSbench.checkStatus(
- topology_output,
- main.numMNswitches,
- str( main.numMNlinks ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkUp = main.FALSE
- time1 = time.time()
- pingResultLinkUp = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult82 = linkUp and pingResultLinkUp
- utilities.assert_equals( expect=main.TRUE, actual=caseResult82,
- onpass="Link Up Test PASS",
- onfail="Link Up Test FAIL" )
-
- def CASE73( self, main ):
- """
- Randomly bring some links down and verify ping all ( Point Intents-Chordal Topo)
- """
- import random
- import itertools
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "Randomly bring some core links down and verify ping all ( Point Intents-Chordal Topo)" )
- main.log.report( "___________________________________________________________________________" )
- main.case( "Point intents - Randomly bring some core links down and verify ping all" )
- switches = []
- switchesComb = []
- for i in range( main.numMNswitches ):
- switches.append('s%d'%(i+1))
- switchesLinksComb = list(itertools.combinations(switches,2))
- main.randomLinks = random.sample(switchesLinksComb, 5 )
- print main.randomLinks
- main.step( "Cut links on random devices" )
-
- for switch in main.randomLinks:
- main.Mininet1.link(
- END1=switch[0],
- END2=switch[1],
- OPTION="down")
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkDown = main.ONOSbench.checkStatus(
- topology_output, main.numMNswitches, str(
- int( main.numMNlinks ) - 5 * 2 ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkDown = main.FALSE
- time1 = time.time()
- pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult73 = pingResultLinkDown
- utilities.assert_equals( expect=main.TRUE, actual=caseResult73,
- onpass="Random Link cut Test PASS",
- onfail="Random Link cut Test FAIL" )
-
- def CASE83( self, main ):
- """
- Bring the core links up that are down and verify ping all ( Point Intents Chordal Topo )
- """
- import random
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report(
- "Bring the core links up that are down and verify ping all ( Point Intents-Chordal Topo" )
- main.log.report(
- "__________________________________________________________________" )
- main.case(
- "Point intents - Bring the core links up that are down and verify ping all" )
- main.step( "Bring randomly cut links on devices up" )
-
- for switch in main.randomLinks:
- main.Mininet1.link(
- END1=switch[0],
- END2=switch[1],
- OPTION="up")
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkUp = main.ONOSbench.checkStatus(
- topology_output,
- main.numMNswitches,
- str( main.numMNlinks ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkUp = main.FALSE
- time1 = time.time()
- pingResultLinkUp = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult83 = linkUp and pingResultLinkUp
- utilities.assert_equals( expect=main.TRUE, actual=caseResult83,
- onpass="Link Up Test PASS",
- onfail="Link Up Test FAIL" )
-
- def CASE74( self, main ):
- """
- Randomly bring some core links down and verify ping all ( Host Intents-Spine Topo)
- """
- import random
- main.randomLink1 = []
- main.randomLink2 = []
- main.randomLink3 = []
- main.randomLink4 = []
- link1End1 = main.params[ 'SPINECORELINKS' ][ 'linkS9' ]
- link1End2top = main.params[ 'SPINECORELINKS' ][ 'linkS9top' ].split( ',' )
- link1End2bot = main.params[ 'SPINECORELINKS' ][ 'linkS9bot' ].split( ',' )
- link2End1 = main.params[ 'SPINECORELINKS' ][ 'linkS10' ]
- link2End2top = main.params[ 'SPINECORELINKS' ][ 'linkS10top' ].split( ',' )
- link2End2bot = main.params[ 'SPINECORELINKS' ][ 'linkS10bot' ].split( ',' )
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
- main.pingTimeout = 400
-
- main.log.report( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
- main.log.report( "___________________________________________________________________________" )
-
- linkIndex = range(4)
- linkIndexS9 = random.sample(linkIndex,1)[0]
- linkIndex.remove(linkIndexS9)
- linkIndexS10 = random.sample(linkIndex,1)[0]
- main.randomLink1 = link1End2top[linkIndexS9]
- main.randomLink2 = link2End2top[linkIndexS10]
- main.randomLink3 = random.sample(link1End2bot,1)[0]
- main.randomLink4 = random.sample(link2End2bot,1)[0]
- # main.Mininet1.link( END1=link1End1, END2=main.randomLink1, OPTION="down" )
- # main.Mininet1.link( END1=link2End1, END2=main.randomLink2, OPTION="down" )
- main.Mininet1.link( END1=link1End1, END2=main.randomLink3, OPTION="down" )
- time.sleep( link_sleep )
- main.Mininet1.link( END1=link2End1, END2=main.randomLink4, OPTION="down" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkDown = main.ONOSbench.checkStatus(
- topology_output, main.numMNswitches, str(
- int( main.numMNlinks ) - 8 ))
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkDown = main.FALSE
- time1 = time.time()
- pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult74 = linkDown and pingResultLinkDown
- utilities.assert_equals( expect=main.TRUE, actual=caseResult74,
- onpass="Random Link cut Test PASS",
- onfail="Random Link cut Test FAIL" )
-
- def CASE84( self, main ):
- """
- Bring the core links up that are down and verify ping all ( Host Intents-Spine Topo )
- """
- import random
- link1End1 = main.params[ 'SPINECORELINKS' ][ 'linkS9' ]
- link2End1 = main.params[ 'SPINECORELINKS' ][ 'linkS10' ]
- link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
- main.log.report(
- "Bring the core links up that are down and verify ping all (Host Intents-Spine Topo" )
- main.log.report(
- "__________________________________________________________________" )
- main.case(
- "Host intents - Bring the core links up that are down and verify ping all" )
-
- #main.Mininet1.link( END1=link1End1, END2=main.randomLink1, OPTION="up" )
- #main.Mininet1.link( END1=link2End1, END2=main.randomLink2, OPTION="up" )
- main.Mininet1.link( END1=link1End1, END2=main.randomLink3, OPTION="up" )
- time.sleep( link_sleep )
- main.Mininet1.link( END1=link2End1, END2=main.randomLink4, OPTION="up" )
- time.sleep( link_sleep )
-
- topology_output = main.ONOScli2.topology()
- linkUp = main.ONOSbench.checkStatus(
- topology_output,
- main.numMNswitches,
- str( main.numMNlinks ) )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=linkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( link_sleep ) +
- " seconds" )
-
- main.step( "Verify Ping across all hosts" )
- pingResultLinkUp = main.FALSE
- time1 = time.time()
- pingResultLinkUp = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- caseResult84 = linkUp and pingResultLinkUp
- utilities.assert_equals( expect=main.TRUE, actual=caseResult84,
- onpass="Link Up Test PASS",
- onfail="Link Up Test FAIL" )
-
- def CASE90( self ):
- """
- Install 600 point intents and verify ping all (Att Topology)
- """
- main.log.report( "Add 600 point intents and verify pingall (Att Topology)" )
- main.log.report( "_______________________________________" )
- import itertools
- import time
- main.case( "Install 600 point intents" )
- main.step( "Add point Intents" )
- intentResult = main.TRUE
- deviceCombos = list( itertools.permutations( main.deviceDPIDs, 2 ) )
-
- intentIdList = []
- time1 = time.time()
- for i in xrange( 0, len( deviceCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( deviceCombos ):
- break
- t = main.Thread( target=cli.addPointIntent,
- threadID=main.threadID,
- name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4",main.MACsDict.get(deviceCombos[i][0]),main.MACsDict.get(deviceCombos[i][1])])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- print getIntentStateResult
- # Takes awhile for all the onos to get the intents
- time.sleep(60)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING tALL PASS",
- onfail="PING ALL FAIL" )
-
- case90Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case90Result,
- onpass="Install 600 point Intents and Ping All test PASS",
- onfail="Install 600 point Intents and Ping All test FAIL" )
-
- def CASE91( self ):
- """
- Install 600 point intents and verify ping all (Chordal Topology)
- """
- main.log.report( "Add 600 point intents and verify pingall (Chordal Topology)" )
- main.log.report( "_______________________________________" )
- import itertools
- import time
- main.case( "Install 600 point intents" )
- main.step( "Add point Intents" )
- intentResult = main.TRUE
- deviceCombos = list( itertools.permutations( main.deviceDPIDs, 2 ) )
-
- intentIdList = []
- time1 = time.time()
- for i in xrange( 0, len( deviceCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( deviceCombos ):
- break
- t = main.Thread( target=cli.addPointIntent,
- threadID=main.threadID,
- name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4","",main.MACsDict.get(deviceCombos[i][1])])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- print getIntentStateResult
- # Takes awhile for all the onos to get the intents
- time.sleep(30)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- case91Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case91Result,
- onpass="Install 600 point Intents and Ping All test PASS",
- onfail="Install 600 point Intents and Ping All test FAIL" )
-
- def CASE92( self ):
- """
- Install 4556 point intents and verify ping all (Spine Topology)
- """
- main.log.report( "Add 4556 point intents and verify pingall (Spine Topology)" )
- main.log.report( "_______________________________________" )
- import itertools
- import time
- main.case( "Install 4556 point intents" )
- main.step( "Add point Intents" )
- intentResult = main.TRUE
- main.pingTimeout = 600
- for i in range(len(main.hostMACs)):
- main.MACsDict[main.deviceDPIDs[i+10]] = main.hostMACs[i].split('/')[0]
- print main.MACsDict
- deviceCombos = list( itertools.permutations( main.deviceDPIDs[10:], 2 ) )
- intentIdList = []
- time1 = time.time()
- for i in xrange( 0, len( deviceCombos ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( deviceCombos ):
- break
- t = main.Thread( target=cli.addPointIntent,
- threadID=main.threadID,
- name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4","",main.MACsDict.get(deviceCombos[i][1])])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- intentResult = main.TRUE
- intentsJson = main.ONOScli2.intents()
- getIntentStateResult = main.ONOScli1.getIntentState(intentsId = intentIdList,
- intentsJson = intentsJson)
- #print getIntentStateResult
- # Takes awhile for all the onos to get the intents
- time.sleep(60)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="PING ALL PASS",
- onfail="PING ALL FAIL" )
-
- case92Result = ( intentResult and pingResult )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case92Result,
- onpass="Install 4556 point Intents and Ping All test PASS",
- onfail="Install 4556 point Intents and Ping All test FAIL" )
-
- def CASE93( self ):
- """
- Install multi-single point intents and verify Ping all works
- for att topology
- """
- import copy
- import time
- main.log.report( "Install multi-single point intents and verify Ping all" )
- main.log.report( "___________________________________________" )
- main.case( "Install multi-single point intents and Ping all" )
- deviceDPIDsCopy = copy.copy(main.deviceDPIDs)
- portIngressList = ['1']*(len(deviceDPIDsCopy) - 1)
- intentIdList = []
- print "MACsDict", main.MACsDict
- time1 = time.time()
- for i in xrange(0,len(deviceDPIDsCopy),int(main.numCtrls)):
- pool = []
- for cli in main.CLIs:
- egressDevice = deviceDPIDsCopy[i]
- ingressDeviceList = copy.copy(deviceDPIDsCopy)
- ingressDeviceList.remove(egressDevice)
- if i >= len( deviceDPIDsCopy ):
- break
- t = main.Thread( target=cli.addMultipointToSinglepointIntent,
- threadID=main.threadID,
- name="addMultipointToSinglepointIntent",
- args =[ingressDeviceList,egressDevice,portIngressList,'1','IPV4','',main.MACsDict.get(egressDevice)])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- time.sleep(30)
- print "getting all intents ID"
- intentIdTemp = main.ONOScli1.getAllIntentsId()
- print intentIdTemp
- print len(intentIdList)
- print intentIdList
- checkIntentStateResult = main.TRUE
- print "Checking intents state"
- checkIntentStateResult = main.ONOScli1.checkIntentState( intentsId = intentIdList ) and checkIntentStateResult
- checkIntentStateResult = main.ONOScli2.checkIntentState( intentsId = intentIdList ) and checkIntentStateResult
- checkIntentStateResult = main.ONOScli3.checkIntentState( intentsId = intentIdList ) and checkIntentStateResult
- checkIntentStateResult = main.ONOScli4.checkIntentState( intentsId = intentIdList ) and checkIntentStateResult
- checkIntentStateResult = main.ONOScli5.checkIntentState( intentsId = intentIdList ) and checkIntentStateResult
-
- if checkIntentStateResult:
- main.log.info( "All intents are installed correctly " )
-
- print "Checking flows state "
- checkFlowsState = main.ONOScli1.checkFlowsState()
- time.sleep(50)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
- checkFlowsState = main.ONOScli1.checkFlowsState()
- case93Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case93Result,
- onpass="Install 25 multi to single point Intents and Ping All test PASS",
- onfail="Install 25 multi to single point Intents and Ping All test FAIL" )
-
- def CASE94( self ):
- """
- Install multi-single point intents and verify Ping all works
- for Chordal topology
- """
- import copy
- import time
- main.log.report( "Install multi-single point intents and verify Ping all" )
- main.log.report( "___________________________________________" )
- main.case( "Install multi-single point intents and Ping all" )
- deviceDPIDsCopy = copy.copy(main.deviceDPIDs)
- portIngressList = ['1']*(len(deviceDPIDsCopy) - 1)
- intentIdList = []
- print "MACsDict", main.MACsDict
- time1 = time.time()
- for i in xrange(0,len(deviceDPIDsCopy),int(main.numCtrls)):
- pool = []
- for cli in main.CLIs:
- egressDevice = deviceDPIDsCopy[i]
- ingressDeviceList = copy.copy(deviceDPIDsCopy)
- ingressDeviceList.remove(egressDevice)
- if i >= len( deviceDPIDsCopy ):
- break
- t = main.Thread( target=cli.addMultipointToSinglepointIntent,
- threadID=main.threadID,
- name="addMultipointToSinglepointIntent",
- args =[ingressDeviceList,egressDevice,portIngressList,'1','IPV4','',main.MACsDict.get(egressDevice)])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- time.sleep(5)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- case94Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case94Result,
- onpass="Install 25 multi to single point Intents and Ping All test PASS",
- onfail="Install 25 multi to single point Intents and Ping All test FAIL" )
-
- #def CASE95 multi-single point intent for Spine
-
- def CASE96( self ):
- """
- Install single-multi point intents and verify Ping all works
- for att topology
- """
- import copy
- main.log.report( "Install single-multi point intents and verify Ping all" )
- main.log.report( "___________________________________________" )
- main.case( "Install single-multi point intents and Ping all" )
- deviceDPIDsCopy = copy.copy(main.deviceDPIDs)
- portEgressList = ['1']*(len(deviceDPIDsCopy) - 1)
- intentIdList = []
- print "MACsDict", main.MACsDict
- time1 = time.time()
- for i in xrange(0,len(deviceDPIDsCopy),int(main.numCtrls)):
- pool = []
- for cli in main.CLIs:
- ingressDevice = deviceDPIDsCopy[i]
- egressDeviceList = copy.copy(deviceDPIDsCopy)
- egressDeviceList.remove(ingressDevice)
- if i >= len( deviceDPIDsCopy ):
- break
- t = main.Thread( target=cli.addSinglepointToMultipointIntent,
- threadID=main.threadID,
- name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',main.MACsDict.get(ingressDevice)])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- time.sleep(5)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- case96Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case96Result,
- onpass="Install 25 single to multi point Intents and Ping All test PASS",
- onfail="Install 25 single to multi point Intents and Ping All test FAIL" )
-
- def CASE97( self ):
- """
- Install single-multi point intents and verify Ping all works
- for Chordal topology
- """
- import copy
- main.log.report( "Install single-multi point intents and verify Ping all" )
- main.log.report( "___________________________________________" )
- main.case( "Install single-multi point intents and Ping all" )
- deviceDPIDsCopy = copy.copy(main.deviceDPIDs)
- portEgressList = ['1']*(len(deviceDPIDsCopy) - 1)
- intentIdList = []
- print "MACsDict", main.MACsDict
- time1 = time.time()
- for i in xrange(0,len(deviceDPIDsCopy),int(main.numCtrls)):
- pool = []
- for cli in main.CLIs:
- ingressDevice = deviceDPIDsCopy[i]
- egressDeviceList = copy.copy(deviceDPIDsCopy)
- egressDeviceList.remove(ingressDevice)
- if i >= len( deviceDPIDsCopy ):
- break
- t = main.Thread( target=cli.addSinglepointToMultipointIntent,
- threadID=main.threadID,
- name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',main.MACsDict.get(ingressDevice),''])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- time.sleep(5)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- case97Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case97Result,
- onpass="Install 25 single to multi point Intents and Ping All test PASS",
- onfail="Install 25 single to multi point Intents and Ping All test FAIL" )
-
- def CASE98( self ):
- """
- Install single-multi point intents and verify Ping all works
- for Spine topology
- """
- import copy
- main.log.report( "Install single-multi point intents and verify Ping all" )
- main.log.report( "___________________________________________" )
- main.case( "Install single-multi point intents and Ping all" )
- deviceDPIDsCopy = copy.copy( main.deviceDPIDs )
- deviceDPIDsCopy = deviceDPIDsCopy[ 10: ]
- portEgressList = [ '1' ]*(len(deviceDPIDsCopy) - 1)
- intentIdList = []
- MACsDictCopy = {}
- for i in range( len( deviceDPIDsCopy ) ):
- MACsDictCopy[ deviceDPIDsCopy[ i ] ] = main.hostMACs[i].split( '/' )[ 0 ]
-
- print "deviceDPIDsCopy", deviceDPIDsCopy
- print ""
- print "MACsDictCopy", MACsDictCopy
- time1 = time.time()
- for i in xrange(0,len(deviceDPIDsCopy),int(main.numCtrls)):
- pool = []
- for cli in main.CLIs:
- if i >= len( deviceDPIDsCopy ):
- break
- ingressDevice = deviceDPIDsCopy[i]
- egressDeviceList = copy.copy(deviceDPIDsCopy)
- egressDeviceList.remove(ingressDevice)
- t = main.Thread( target=cli.addSinglepointToMultipointIntent,
- threadID=main.threadID,
- name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',MACsDictCopy.get(ingressDevice),''])
- pool.append(t)
- #time.sleep(1)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- time2 = time.time()
- main.log.info("Time for adding point intents: %2f seconds" %(time2-time1))
- time.sleep(5)
- main.step( "Verify Ping across all hosts" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- case98Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case98Result,
- onpass="Install 25 single to multi point Intents and Ping All test PASS",
- onfail="Install 25 single to multi point Intents and Ping All test FAIL" )
-
- def CASE10( self ):
- import time
- """
- Remove all Intents
- """
- main.log.report( "Remove all intents that were installed previously" )
- main.log.report( "______________________________________________" )
- main.log.info( "Remove all intents" )
- main.case( "Removing intents" )
- main.step( "Obtain the intent id's first" )
- intentsList = main.ONOScli1.getAllIntentIds()
- ansi_escape = re.compile( r'\x1b[^m]*m' )
- intentsList = ansi_escape.sub( '', intentsList )
- intentsList = intentsList.replace(
- " onos:intents | grep id=",
- "" ).replace(
- "id=",
- "" ).replace(
- "\r\r",
- "" )
- intentsList = intentsList.splitlines()
- #intentsList = intentsList[ 1: ]
- intentIdList = []
- step1Result = main.TRUE
- moreIntents = main.TRUE
- removeIntentCount = 0
- intentsCount = len(intentsList)
- main.log.info ( "Current number of intents: " + str(intentsCount) )
- if ( len( intentsList ) > 1 ):
- results = main.TRUE
- main.log.info("Removing intent...")
- while moreIntents:
- #This is a work around for a major issue. We cycle through intents removal for up to 5 times.
- if removeIntentCount == 5:
- break
- removeIntentCount = removeIntentCount + 1
- intentsList1 = main.ONOScli1.getAllIntentIds()
- if len( intentsList1 ) == 0:
- break
- ansi_escape = re.compile( r'\x1b[^m]*m' )
- intentsList1 = ansi_escape.sub( '', intentsList1 )
- intentsList1 = intentsList1.replace(
- " onos:intents | grep id=",
- "" ).replace(
- " state=",
- "" ).replace(
- "\r\r",
- "" )
- intentsList1 = intentsList1.splitlines()
- #intentsList1 = intentsList1[ 1: ]
- main.log.info ( "Round %d intents to remove: " %(removeIntentCount) )
- print intentsList1
- intentIdList1 = []
- if ( len( intentsList1 ) > 0 ):
- moreIntents = main.TRUE
- for i in range( len( intentsList1 ) ):
- intentsTemp1 = intentsList1[ i ].split( ',' )
- intentIdList1.append( intentsTemp1[ 0 ].split('=')[1] )
- main.log.info ( "Leftover Intent IDs: " + str(intentIdList1) )
- main.log.info ( "Length of Leftover Intents list: " + str(len(intentIdList1)) )
- time1 = time.time()
- for i in xrange( 0, len( intentIdList1 ), int(main.numCtrls) ):
- pool = []
- for cli in main.CLIs:
- if i >= len( intentIdList1 ):
- break
- t = main.Thread( target=cli.removeIntent,
- threadID=main.threadID,
- name="removeIntent",
- args=[intentIdList1[i],'org.onosproject.cli',False,False])
- pool.append(t)
- t.start()
- i = i + 1
- main.threadID = main.threadID + 1
- for thread in pool:
- thread.join()
- intentIdList.append(thread.result)
- #time.sleep(2)
- time2 = time.time()
- main.log.info("Time for removing host intents: %2f seconds" %(time2-time1))
- time.sleep(10)
- main.log.info("Purging WITHDRAWN Intents")
- purgeResult = main.ONOScli2.purgeIntents()
- else:
- time.sleep(10)
- if len( main.ONOScli1.intents()):
- continue
- break
- time.sleep(10)
- else:
- print "Removed %d intents" %(intentsCount)
- step1Result = main.TRUE
- else:
- print "No Intent IDs found in Intents list: ", intentsList
- step1Result = main.FALSE
-
- print main.ONOScli1.intents()
- caseResult10 = step1Result
- utilities.assert_equals( expect=main.TRUE, actual=caseResult10,
- onpass="Intent removal test successful",
- onfail="Intent removal test failed" )
-
- def CASE12( self, main ):
- """
- Enable onos-app-ifwd, Verify Intent based Reactive forwarding through ping all and Disable it
- """
- import re
- import copy
- import time
-
- Thread = imp.load_source('Thread','/home/admin/ONLabTest/TestON/tests/OnosCHO/Thread.py')
- threadID = 0
-
- main.log.report( "Enable Intent based Reactive forwarding and Verify ping all" )
- main.log.report( "_____________________________________________________" )
- main.case( "Enable Intent based Reactive forwarding and Verify ping all" )
- main.step( "Enable intent based Reactive forwarding" )
- installResult = main.FALSE
- feature = "onos-app-ifwd"
-
- pool = []
- time1 = time.time()
- for cli,feature in main.CLIs:
- t = main.Thread(target=cli,threadID=threadID,
- name="featureInstall",args=[feature])
- pool.append(t)
- t.start()
- threadID = threadID + 1
-
- results = []
- for thread in pool:
- thread.join()
- results.append(thread.result)
- time2 = time.time()
-
- if( all(result == main.TRUE for result in results) == False):
- main.log.info("Did not install onos-app-ifwd feature properly")
- #main.cleanup()
- #main.exit()
- else:
- main.log.info("Successful feature:install onos-app-ifwd")
- installResult = main.TRUE
- main.log.info("Time for feature:install onos-app-ifwd: %2f seconds" %(time2-time1))
-
- main.step( "Verify Pingall" )
- ping_result = main.FALSE
- time1 = time.time()
- ping_result = main.Mininet1.pingall(timeout=600)
- time2 = time.time()
- timeDiff = round( ( time2 - time1 ), 2 )
- main.log.report(
- "Time taken for Ping All: " +
- str( timeDiff ) +
- " seconds" )
-
- if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
- else:
- main.log.report( "Pingall Test in Reactive mode failed" )
-
- main.step( "Disable Intent based Reactive forwarding" )
- uninstallResult = main.FALSE
-
- pool = []
- time1 = time.time()
- for cli,feature in main.CLIs:
- t = main.Thread(target=cli,threadID=threadID,
- name="featureUninstall",args=[feature])
- pool.append(t)
- t.start()
- threadID = threadID + 1
-
- results = []
- for thread in pool:
- thread.join()
- results.append(thread.result)
- time2 = time.time()
-
- if( all(result == main.TRUE for result in results) == False):
- main.log.info("Did not uninstall onos-app-ifwd feature properly")
- uninstallResult = main.FALSE
- #main.cleanup()
- #main.exit()
- else:
- main.log.info("Successful feature:uninstall onos-app-ifwd")
- uninstallResult = main.TRUE
- main.log.info("Time for feature:uninstall onos-app-ifwd: %2f seconds" %(time2-time1))
-
- # Waiting for reative flows to be cleared.
- time.sleep( 10 )
-
- case11Result = installResult and ping_result and uninstallResult
- utilities.assert_equals( expect=main.TRUE, actual=case11Result,
- onpass="Intent based Reactive forwarding Pingall test PASS",
- onfail="Intent based Reactive forwarding Pingall test FAIL" )
-
- def CASE99(self):
- import time
- # WORK AROUND FOR ONOS-581. STOP ONOS BEFORE ASSIGNING CONTROLLERS AT MININET & START ONCE DONE
- main.step( "Stop ONOS on all Nodes" )
- stopResult = main.TRUE
- for i in range( 1, int( main.numCtrls ) + 1 ):
- ONOS_ip = main.params[ 'CTRL' ][ 'ip' + str( i ) ]
- main.log.info( "Stopping ONOS Node IP: " + ONOS_ip )
- sresult = main.ONOSbench.onosStop( ONOS_ip )
- utilities.assert_equals( expect=main.TRUE, actual=sresult,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- stopResult = ( stopResult and sresult )
-
- main.step( "Start ONOS on all Nodes" )
- startResult = main.TRUE
- for i in range( 1, int( main.numCtrls ) + 1 ):
- ONOS_ip = main.params[ 'CTRL' ][ 'ip' + str( i ) ]
- main.log.info( "Starting ONOS Node IP: " + ONOS_ip )
- sresult = main.ONOSbench.onosStart( ONOS_ip )
- utilities.assert_equals( expect=main.TRUE, actual=sresult,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
- startResult = ( startResult and sresult )
-
- main.step( "Start ONOS CLI on all nodes" )
- cliResult = main.TRUE
- time.sleep( 30 )
- main.log.step(" Start ONOS cli using thread ")
- pool = []
- time1 = time.time()
- for i in range( int( main.numCtrls ) ):
- t = main.Thread(target=main.CLIs[i].startOnosCli,
- threadID=main.threadID,
- name="startOnosCli",
- args=[main.nodes[i].ip_address])
- pool.append(t)
- t.start()
- main.threadID = main.threadID + 1
- for t in pool:
- t.join()
- cliResult = cliResult and t.result
- time2 = time.time()
-
- if not cliResult:
- main.log.info("ONOS CLI did not start up properly")
- #main.cleanup()
- #main.exit()
- else:
- main.log.info("Successful CLI startup")
- main.log.info("Time for connecting to CLI: %2f seconds" %(time2-time1))
-
- case99Result = ( startResult and cliResult )
- time.sleep(30)
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case99Result,
- onpass="Starting new Chordal topology test PASS",
- onfail="Starting new Chordal topology test FAIL" )
-
-
-
-
-
diff --git a/TestON/tests/OnosCHO/OnosCHO.topo b/TestON/tests/OnosCHO/OnosCHO.topo
deleted file mode 100644
index 8205d2f..0000000
--- a/TestON/tests/OnosCHO/OnosCHO.topo
+++ /dev/null
@@ -1,99 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.40.40</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS>
- <home>~/ONOS</home>
- </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.40.40</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOScli2>
- <host>10.128.40.40</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>10.128.40.40</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli3>
-
- <ONOS1>
- <host>10.128.40.41</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.40.42</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.40.43</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <Mininet1>
- <host>10.128.40.50</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/att-mpls-topo.py </arg1>
- <arg2> --topo att </arg2>
- <arg3> --link tc --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.40.50</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/att-mpls-topo.py </arg1>
- <arg2> --topo att </arg2>
- <arg3> --link tc --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/OnosCHO/__init__.py b/TestON/tests/OnosCHO/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/OnosCHO/__init__.py
+++ /dev/null
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.params b/TestON/tests/PeeringRouterTest/PeeringRouterTest.params
deleted file mode 100755
index 0c4af63..0000000
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.params
+++ /dev/null
@@ -1,26 +0,0 @@
-<PARAMS>
-
- <testcases>5,7,8,9,31,32</testcases>
-
- #Environment variables
- <ENV>
- <cellName>sdnip_single_instance</cellName>
- <home>/home/admin/ONLabTest/TestON/tests/PeeringRouterTest</home>
- </ENV>
-
- <CTRL>
- <ip1>127.0.0.1</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <GIT>
- <autoPull>off</autoPull>
- <checkout>master</checkout>
- </GIT>
-
- <JSON>
- <prefix>prefix</prefix>
- <nextHop>nextHop</nextHop>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py b/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
deleted file mode 100755
index fec9365..0000000
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
+++ /dev/null
@@ -1,2537 +0,0 @@
-# from cupshelpers.config import prefix
-
-# Testing the basic functionality of SDN-IP
-
-class PeeringRouterTest:
-
- def __init__( self ):
- self.default = ''
-
-
- def CASE6 ( self, main):
-
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/mininet"
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterMininetVlan.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
-
- #============================= Ping Test ========================
- main.log.info("Start ping test")
-
- for m in range( 3, 6 ):
- for n in range( 1, 11 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- pingTestResults = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
-
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
-
- def CASE4( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 30 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllFail( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
-
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.Mininet.stopNet()
- time.sleep(10)
-
- def CASE5( self, main ):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterMininetVlan.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 30 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep(20)
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- time.sleep(10)
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 4, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.TRUE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
-
-
- time.sleep(20);
-
- main.ONOScli.logout()
- main.log.info("ONOS cli logout")
- time.sleep(20);
- main.ONOSbench.onosStop(ONOS1Ip);
- main.log.info("onos stop")
- time.sleep(20);
- main.Mininet.stopNet()
- main.log.info("mininet stop")
- time.sleep(20)
-
-
- def CASE7( self, main ):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterMininetVlan.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 3500 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 3500 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 3500 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- time.sleep(20)
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- time.sleep(20)
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep(60)
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep(20)
-
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(10)
-
- main.ONOScli.logout()
- main.log.info("ONOS cli logout")
- time.sleep(20);
- main.ONOSbench.onosStop(ONOS1Ip);
- main.log.info("onos stop")
- time.sleep(20);
- main.Mininet.stopNet()
- main.log.info("mininet stop")
- time.sleep(20)
-
- # Route flap test (Add a route and detele it very fast 20 times) in VLAN configuration
- def CASE8( self, main ):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterMininetVlan.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 1 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 1 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add and delete a route to Quagga on host3 20 times" )
- for i in range(0, 20):
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
- main.log.info("Add a route %s times", i)
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.log.info("Delete the route")
- time.sleep(0.1)
-
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
- main.log.info("Add the route finally and wait for 10 sec")
-
- #============================= Ping Test ========================
- for j in range(0, 30):
- r = main.Mininet.pingHost(SRC="as6host", TARGET="3.0.0.1")
-
- utilities.assert_equals(expect=main.TRUE,actual=r,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #time.sleep(20)
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add and delete a route to Quagga on host3 20 times" )
- for i in range(0, 20):
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
- main.log.info("Add a route %s times", i)
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.log.info("Delete the route")
- time.sleep(0.1)
-
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = []
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
-
- for j in range(0, 5):
- r = main.Mininet.pingHost(SRC="as6host", TARGET="3.0.0.1")
-
- utilities.assert_equals(expect=main.FALSE,actual=r,
- onpass="disconnectivity check PASS",
- onfail="disconnectivity check FAIL")
-
- main.ONOScli.logout()
- main.log.info("ONOS cli logout")
- time.sleep(20);
- main.ONOSbench.onosStop(ONOS1Ip);
- main.log.info("onos stop")
- time.sleep(20);
- main.Mininet.stopNet()
- main.log.info("mininet stop")
- time.sleep(20)
-
- # Route flap test (change the next-hop very fast 20 times) in VLAN configuration
- def CASE9( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/routeconvergence/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterConvergenceVlanMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- result = main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- #if result is not main.TRUE:
- # main.log.report("Mininet is not started...Aborting")
- # main.Mininet.stopNet()
- # main.cleanup()
- # main.exit()
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
-
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- utilities.assert_equals(expect=main.TRUE,actual=verifyResult,onpass="Verify cell pass!",onfail="Verify cell failed...")
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
- if onos1InstallResult is not main.TRUE:
- main.log.report("ONOS is not installed...Aborting")
- main.Mininet.stopNet()
- main.cleanup()
- main.exit()
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if onos1Isup is not main.TRUE:
- main.log.report("ONOS1 didn't start!...Aborting" )
- main.Mininet.stopNet()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.cleanup()
- main.exit()
-
- main.step( "Start ONOS-cli" )
-
- result = main.ONOScli.startOnosCli( ONOS1Ip )
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="ONOS CLI is up!",onfail="ONOS CLI is not up...")
- if result is not main.TRUE:
- main.log.report("ONOS1 didn't start!...Aborting" )
- main.Mininet.stopNet()
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.cleanup()
- main.exit()
-
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 30 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============= Flap the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session and enable it 20 times very fast between QuaggaCliHost4 and 192.168.30.101:" )
- for i in range(0, 20):
- main.log.info("Disable it %s times", i)
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513")
- main.log.info("Enable it again")
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- time.sleep(0.1)
- main.log.info("Disable it finally")
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513")
-
- main.log.info( "Sleeping for 30 seconds for network to converge" )
- time.sleep(30)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-1" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-1:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============= Flap the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session and enable it 20 times very fast between QuaggaCliHost4 and 192.168.30.101:" )
- for i in range(0, 20):
- main.log.info("Disable it %s times", i)
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513")
- main.log.info("Enable it again")
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- time.sleep(0.1)
-
- main.log.info( "Sleeping for 30 seconds for network to converge" )
- time.sleep(30)
-
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-2" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-2:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- main.ONOScli.logout()
- main.log.info("ONOS cli logout")
- time.sleep(20);
- main.ONOSbench.onosStop(ONOS1Ip);
- main.log.info("onos stop")
- time.sleep(20);
- main.Mininet.stopNet()
- main.log.info("mininet stop")
- time.sleep(20)
-
- # Route convergence and connectivity test
- def CASE21( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/routeconvergence/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterConvergenceMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
-
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing gbprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 30 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-1" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-1:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-2" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-2:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllFail( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
-
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.Mininet.stopNet()
- time.sleep(10)
-
- # Route convergence and connectivity test with Route Server
- def CASE22( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/routeserver/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/routeserver/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/routeserver/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/routeserver/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouteServerMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
-
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing gbprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 60 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-1" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-1:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-2" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-2:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllFail( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
-
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.Mininet.stopNet()
- time.sleep(10)
-
- # Route convergence and connectivity test in VLAN configuration
- def CASE31( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/routeconvergence/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterConvergenceVlanMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- result = main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- #if result is not main.TRUE:
- # main.log.report("Mininet is not started...Aborting")
- # main.Mininet.stopNet()
- # main.cleanup()
- # main.exit()
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
-
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- utilities.assert_equals(expect=main.TRUE,actual=verifyResult,onpass="Verify cell pass!",onfail="Verify cell failed...")
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
- if onos1InstallResult is not main.TRUE:
- main.log.report("ONOS is not installed...Aborting")
- main.Mininet.stopNet()
- main.cleanup()
- main.exit()
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if onos1Isup is not main.TRUE:
- main.log.report("ONOS1 didn't start!...Aborting" )
- main.Mininet.stopNet()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.cleanup()
- main.exit()
-
- main.step( "Start ONOS-cli" )
-
- result = main.ONOScli.startOnosCli( ONOS1Ip )
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="ONOS CLI is up!",onfail="ONOS CLI is not up...")
- if result is not main.TRUE:
- main.log.report("ONOS1 didn't start!...Aborting" )
- main.Mininet.stopNet()
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.cleanup()
- main.exit()
-
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing bgprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 30 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
-
- #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-1" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-1:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
-
- #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-2" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-2:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
- main.log.info("Ping test result")
- if pingTestResults:
- main.log.info("Test succeeded")
- else:
- main.log.info("Test failed")
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 4, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.TRUE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
-
- time.sleep(20);
-
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.Mininet.stopNet()
- time.sleep(10)
-
- # Route convergence and connectivity test with Route Server in VLAN tagged network
- def CASE32( self, main):
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
- TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/vlan/routeserver/mininet"
- SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/vlan/routeserver/sdnip.json"
- main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
-
- # Copy the json files to config dir
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/routeserver/addresses.json ~/onos/tools/package/config/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/vlan/routeserver/sdnip.json ~/onos/tools/package/config/")
-
- # Launch mininet topology for this case
- MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouteServerVlanMininet.py"
- main.step( "Launch mininet" )
- main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
- main.step("waiting 20 secs for all switches and quagga instances to comeup")
- time.sleep(20)
- main.step( "Test whether Mininet is started" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
-
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- # Copy the cfg files to config dir
- main.log.info("Copying two cfg files to onos etc folder")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing gbprouter feature" )
- main.ONOScli.featureInstall( "onos-app-bgprouter" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 60 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
-
- #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-1" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-1:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
-
- #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
- main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
- main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
- main.log.info( "Sleeping for 150 seconds for network to converge" )
- time.sleep(150)
- # get routes inside SDN-IP
- main.log.info( "Getting Routes from ONOS CLI" )
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- newAllRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
-
- # Expected routes with changed next hop
- newAllRoutesExpected = []
- for prefix in prefixesHost3:
- newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- for prefix in prefixesHost4:
- newAllRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- for prefix in prefixesHost5:
- newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
- main.step( "Check routes installed after convergence-2" )
- main.log.info( "Routes expected:" )
- main.log.info( newAllRoutesStrExpected )
- main.log.info( "Routes got from ONOS CLI after convergence-2:" )
- main.log.info( newAllRoutesStrActual )
- utilities.assertEquals(
- expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
- onpass="***Routes in SDN-IP are correct after convergence!***",
- onfail="***Routes in SDN-IP are wrong after convergence!***" )
- if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after convergence are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after convergence are wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- sources = ["as2host", "as3host", "as6host"]
- targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
- for source in sources:
- for target in targets:
- r = main.Mininet.pingHost(SRC=source, TARGET=target)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Router connectivity check PASS",
- onfail="Router connectivity check FAIL")
-
- pingTestResults = main.TRUE
- for m in range( 3, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.FALSE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="Default connectivity check PASS",
- onfail="Default connectivity check FAIL")
-
- time.sleep(20)
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- #============================= Ping Test ========================
- pingTestResults = main.TRUE
- for m in range( 4, 6 ):
- for n in range( 1, 10 ):
- hostIp = str( m ) + ".0." + str( n ) + ".1"
- r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
- if r == main.TRUE:
- pingTestResults = main.FALSE
-
- utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
- onpass="disconnect check PASS",
- onfail="disconnect check FAIL")
- time.sleep(20)
-
- main.ONOScli.logout()
- main.ONOSbench.onosStop(ONOS1Ip);
- main.Mininet.stopNet()
- time.sleep(10)
-
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo b/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo
deleted file mode 100755
index a1e2c45..0000000
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo
+++ /dev/null
@@ -1,82 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <Mininet>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </Mininet>
-
- <ONOSbench>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOSbench>
-
- <ONOScli>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password></password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOScli>
-
- <ONOS1>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOS1>
-
- <QuaggaCliHost3>
- <host>1.168.30.2</host>
- <user>admin</user>
- <password></password>
- <type>QuaggaCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost3>
- <QuaggaCliHost4>
- <host>1.168.30.3</host>
- <user>admin</user>
- <password></password>
- <type>QuaggaCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost4>
- <QuaggaCliHost5>
- <host>1.168.30.5</host>
- <user>admin</user>
- <password></password>
- <type>QuaggaCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost5>
- <QuaggaCliHost>
- <host>1.168.30.100</host>
- <user>admin</user>
- <password></password>
- <type>QuaggaCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost>
-
-
- </COMPONENT>
-</TOPOLOGY>
-
diff --git a/TestON/tests/PeeringRouterTest/README.md b/TestON/tests/PeeringRouterTest/README.md
deleted file mode 100644
index 002a0f1..0000000
--- a/TestON/tests/PeeringRouterTest/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-1) Install TestON framework from https://github.com/srikanthvavila/ONLabTest (Follow README instructions. Until forked repo is mrged back, use URL https://github.com/srikanthvavila/ONLabTest for cloning this repo. You can ignore Linc-OE and STS installation steps as we may not need them for now)
-
-2) Peering router testcases are under ~/TestON/tests/PeeringRouterTest folder:
-a) CASE4 - Basic Route advertisement and connectivity in untagged network
-b) CASE5 - Basic Route advertisement and connectivity in tagged network
-c) CASE7 - Scale test with 25k routes
-d) CASE8 - Flap a route 20 times with 100 msec interval
-e) CASE9 - Flap a next-hop 20 times with 100 msec interval
-f) CASE21 - Route convergence due to bgp peering session flapping in untagged network
-g) CASE22 - Basic Route advertisement and connectivity in untagged network with Route server
-h) CASE31 - Route convergence due to bgp peering session flapping in tagged network
-i) CASE32 - Basic Route advertisement and connectivity in tagged network with Route server
-
-3) Before running the testcases, ensure quagga is installed on the machine:
-a) "sudo apt-get install quagga"
-b) "Create a folder for /usr/local/var/run/quagga"
-c) "chmod 777" to quagga folder
-
-4) Test environment assumes the TestON, ONOS and Mininet all are running in the same VM. These testcases are not verified with the components running in separate VMs.
-
-5) Before running testcases, edit the following files and make necessary changes:
-a) ~/TestON/tests/PeeringRouterTest/PeeringRouterTest.params --> Edit "cellname", "test home folder" and "controller IP" fields
-b) ~/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo --> Edit "host", "user", "password", "home" fields under "ONOSbench", "ONOSCli" and "ONOS1". Similalry edit "user" field under "QuaggaCliHost<>" (You can use the same user name as your mininet VM)
-d) ~/TestON/drivers/common/cli/onosclidriver.py --> Change the line "self.handle.expect( "ONOS_CELL=" + str( cellname ) )" to "self.handle.expect( "ONOS_CELL" )"
-
-6) Ensure the ONOS cell file has the following lines populated:
-OCI=127.0.0.1
-OC1=127.0.0.1
-OC2=127.0.0.1
-OCN=127.0.0.1
-ONOS_FEATURES=webconsole,onos-api,onos-core-trivial,onos-cli,onos-openflow,onos-gui,onos-rest,onos-app-config,onos-app-proxyarp
-ONOS_USER=<user>
-ONOS_GROUP=<user>
-ONOS_NIC=127.0.0.*
-
-7) Ensure KARAF_ROOT is set to "/opt/onos/apache-karaf-3.0.2"
-
-8) Ensure JAVA_HOME is unset before sourcing ~/onos/tools/dev/bash_profile
-
-9) Ensure "onos-package" operation is done before executing the test cases
-
-10) Update the testcases to be run in ~/TestON/tests/PeeringRouterTest/PeeringRouterTest.params and execute "./cly.py run PeeringRouterTest" from ~/TestON/bin folder.
diff --git a/TestON/tests/PeeringRouterTest/__init__.py b/TestON/tests/PeeringRouterTest/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/PeeringRouterTest/__init__.py
+++ /dev/null
diff --git a/TestON/tests/PeeringRouterTest/addresses.json b/TestON/tests/PeeringRouterTest/addresses.json
deleted file mode 100644
index 8831f8d..0000000
--- a/TestON/tests/PeeringRouterTest/addresses.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "1",
- "ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "2",
- "ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "3",
- "ips" : ["192.168.30.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "4",
- "ips" : ["192.168.60.101/24"],
- "mac" : "00:00:00:00:00:01"
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/mininet/PeeringRouterMininet.py b/TestON/tests/PeeringRouterTest/mininet/PeeringRouterMininet.py
deleted file mode 100755
index 6991916..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/PeeringRouterMininet.py
+++ /dev/null
@@ -1,337 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #sw3 = self.addSwitch('sw3', dpid='00000000000000a3')
- #sw4 = self.addSwitch('sw4', dpid='00000000000000a4')
- #sw5 = self.addSwitch('sw5', dpid='00000000000000a5')
- #sw6 = self.addSwitch('sw6', dpid='00000000000000a6')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3' )
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4' )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- host5 = self.addHost( 'host5' )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.40.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-# sw2.cmd('ovs-vsctl set-controller sw2 tcp:127.0.0.1:6633')
-# sw3.cmd('ovs-vsctl set-controller sw3 tcp:127.0.0.1:6633')
-# sw4.cmd('ovs-vsctl set-controller sw4 tcp:127.0.0.1:6633')
-# sw5.cmd('ovs-vsctl set-controller sw5 tcp:127.0.0.1:6633')
-# sw6.cmd('ovs-vsctl set-controller sw6 tcp:127.0.0.1:6633')
-
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- host1.defaultIntf().setIP('192.168.10.101/24')
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- host3.setIP('192.168.10.1', 24, 'host3-eth0')
- #host3.cmd('sudo ip addr add 172.16.20.1/24 dev host3-eth0')
- host3.setIP('192.168.20.1', 24, 'host3-eth1')
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1')
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setIP('192.168.30.1', 24, 'host4-eth0')
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth2')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- #as6rs, host5 = net.get('as6rs', 'host5')
- host5 = net.get('host5')
- #as6rs.setIP('192.168.60.1', 24, 'as6rs-eth0')
- #as6rs.setMAC('00:00:00:00:06:01', 'as6rs-eth0')
- host5.setIP('192.168.60.2', 24, 'host5-eth0')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('1.168.30.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth2')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga-as6-rs.conf b/TestON/tests/PeeringRouterTest/mininet/quagga-as6-rs.conf
deleted file mode 100644
index 1eac0dd..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga-as6-rs.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64520
- bgp router-id 192.168.60.1
- neighbor 192.168.60.101 remote-as 64513
- neighbor 192.168.60.101 route-server-client
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 route-server-client
-! network 172.16.60.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/mininet/quagga-as6.conf
deleted file mode 100644
index 434f983..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.101 remote-as 64513
-! neighbor 192.168.60.1 remote-as 64520
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index d334c2a..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 ebgp-multihop
- neighbor 192.168.60.2 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga-sdn.conf b/TestON/tests/PeeringRouterTest/mininet/quagga-sdn.conf
deleted file mode 100644
index 77392a6..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga-sdn.conf
+++ /dev/null
@@ -1,349 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.1 remote-as 64520
- neighbor 192.168.60.1 ebgp-multihop
- neighbor 192.168.60.1 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-neighbor 192.168.40.1 remote-as 65001
-neighbor 192.168.40.1 ebgp-multihop
-neighbor 192.168.40.1 timers connect 10
-neighbor 192.168.40.2 remote-as 65002
-neighbor 192.168.40.2 ebgp-multihop
-neighbor 192.168.40.2 timers connect 10
-neighbor 192.168.40.3 remote-as 65003
-neighbor 192.168.40.3 ebgp-multihop
-neighbor 192.168.40.3 timers connect 10
-neighbor 192.168.40.4 remote-as 65004
-neighbor 192.168.40.4 ebgp-multihop
-neighbor 192.168.40.4 timers connect 10
-neighbor 192.168.40.5 remote-as 65005
-neighbor 192.168.40.5 ebgp-multihop
-neighbor 192.168.40.5 timers connect 10
-neighbor 192.168.40.6 remote-as 65006
-neighbor 192.168.40.6 ebgp-multihop
-neighbor 192.168.40.6 timers connect 10
-neighbor 192.168.40.7 remote-as 65007
-neighbor 192.168.40.7 ebgp-multihop
-neighbor 192.168.40.7 timers connect 10
-neighbor 192.168.40.8 remote-as 65008
-neighbor 192.168.40.8 ebgp-multihop
-neighbor 192.168.40.8 timers connect 10
-neighbor 192.168.40.9 remote-as 65009
-neighbor 192.168.40.9 ebgp-multihop
-neighbor 192.168.40.9 timers connect 10
-neighbor 192.168.40.10 remote-as 65010
-neighbor 192.168.40.10 ebgp-multihop
-neighbor 192.168.40.10 timers connect 10
-neighbor 192.168.40.11 remote-as 65011
-neighbor 192.168.40.11 ebgp-multihop
-neighbor 192.168.40.11 timers connect 10
-neighbor 192.168.40.12 remote-as 65012
-neighbor 192.168.40.12 ebgp-multihop
-neighbor 192.168.40.12 timers connect 10
-neighbor 192.168.40.13 remote-as 65013
-neighbor 192.168.40.13 ebgp-multihop
-neighbor 192.168.40.13 timers connect 10
-neighbor 192.168.40.14 remote-as 65014
-neighbor 192.168.40.14 ebgp-multihop
-neighbor 192.168.40.14 timers connect 10
-neighbor 192.168.40.15 remote-as 65015
-neighbor 192.168.40.15 ebgp-multihop
-neighbor 192.168.40.15 timers connect 10
-neighbor 192.168.40.16 remote-as 65016
-neighbor 192.168.40.16 ebgp-multihop
-neighbor 192.168.40.16 timers connect 10
-neighbor 192.168.40.17 remote-as 65017
-neighbor 192.168.40.17 ebgp-multihop
-neighbor 192.168.40.17 timers connect 10
-neighbor 192.168.40.18 remote-as 65018
-neighbor 192.168.40.18 ebgp-multihop
-neighbor 192.168.40.18 timers connect 10
-neighbor 192.168.40.19 remote-as 65019
-neighbor 192.168.40.19 ebgp-multihop
-neighbor 192.168.40.19 timers connect 10
-neighbor 192.168.40.20 remote-as 65020
-neighbor 192.168.40.20 ebgp-multihop
-neighbor 192.168.40.20 timers connect 10
-neighbor 192.168.40.21 remote-as 65021
-neighbor 192.168.40.21 ebgp-multihop
-neighbor 192.168.40.21 timers connect 10
-neighbor 192.168.40.22 remote-as 65022
-neighbor 192.168.40.22 ebgp-multihop
-neighbor 192.168.40.22 timers connect 10
-neighbor 192.168.40.23 remote-as 65023
-neighbor 192.168.40.23 ebgp-multihop
-neighbor 192.168.40.23 timers connect 10
-neighbor 192.168.40.24 remote-as 65024
-neighbor 192.168.40.24 ebgp-multihop
-neighbor 192.168.40.24 timers connect 10
-neighbor 192.168.40.25 remote-as 65025
-neighbor 192.168.40.25 ebgp-multihop
-neighbor 192.168.40.25 timers connect 10
-neighbor 192.168.40.26 remote-as 65026
-neighbor 192.168.40.26 ebgp-multihop
-neighbor 192.168.40.26 timers connect 10
-neighbor 192.168.40.27 remote-as 65027
-neighbor 192.168.40.27 ebgp-multihop
-neighbor 192.168.40.27 timers connect 10
-neighbor 192.168.40.28 remote-as 65028
-neighbor 192.168.40.28 ebgp-multihop
-neighbor 192.168.40.28 timers connect 10
-neighbor 192.168.40.29 remote-as 65029
-neighbor 192.168.40.29 ebgp-multihop
-neighbor 192.168.40.29 timers connect 10
-neighbor 192.168.40.30 remote-as 65030
-neighbor 192.168.40.30 ebgp-multihop
-neighbor 192.168.40.30 timers connect 10
-neighbor 192.168.40.31 remote-as 65031
-neighbor 192.168.40.31 ebgp-multihop
-neighbor 192.168.40.31 timers connect 10
-neighbor 192.168.40.32 remote-as 65032
-neighbor 192.168.40.32 ebgp-multihop
-neighbor 192.168.40.32 timers connect 10
-neighbor 192.168.40.33 remote-as 65033
-neighbor 192.168.40.33 ebgp-multihop
-neighbor 192.168.40.33 timers connect 10
-neighbor 192.168.40.34 remote-as 65034
-neighbor 192.168.40.34 ebgp-multihop
-neighbor 192.168.40.34 timers connect 10
-neighbor 192.168.40.35 remote-as 65035
-neighbor 192.168.40.35 ebgp-multihop
-neighbor 192.168.40.35 timers connect 10
-neighbor 192.168.40.36 remote-as 65036
-neighbor 192.168.40.36 ebgp-multihop
-neighbor 192.168.40.36 timers connect 10
-neighbor 192.168.40.37 remote-as 65037
-neighbor 192.168.40.37 ebgp-multihop
-neighbor 192.168.40.37 timers connect 10
-neighbor 192.168.40.38 remote-as 65038
-neighbor 192.168.40.38 ebgp-multihop
-neighbor 192.168.40.38 timers connect 10
-neighbor 192.168.40.39 remote-as 65039
-neighbor 192.168.40.39 ebgp-multihop
-neighbor 192.168.40.39 timers connect 10
-neighbor 192.168.40.40 remote-as 65040
-neighbor 192.168.40.40 ebgp-multihop
-neighbor 192.168.40.40 timers connect 10
-neighbor 192.168.40.41 remote-as 65041
-neighbor 192.168.40.41 ebgp-multihop
-neighbor 192.168.40.41 timers connect 10
-neighbor 192.168.40.42 remote-as 65042
-neighbor 192.168.40.42 ebgp-multihop
-neighbor 192.168.40.42 timers connect 10
-neighbor 192.168.40.43 remote-as 65043
-neighbor 192.168.40.43 ebgp-multihop
-neighbor 192.168.40.43 timers connect 10
-neighbor 192.168.40.44 remote-as 65044
-neighbor 192.168.40.44 ebgp-multihop
-neighbor 192.168.40.44 timers connect 10
-neighbor 192.168.40.45 remote-as 65045
-neighbor 192.168.40.45 ebgp-multihop
-neighbor 192.168.40.45 timers connect 10
-neighbor 192.168.40.46 remote-as 65046
-neighbor 192.168.40.46 ebgp-multihop
-neighbor 192.168.40.46 timers connect 10
-neighbor 192.168.40.47 remote-as 65047
-neighbor 192.168.40.47 ebgp-multihop
-neighbor 192.168.40.47 timers connect 10
-neighbor 192.168.40.48 remote-as 65048
-neighbor 192.168.40.48 ebgp-multihop
-neighbor 192.168.40.48 timers connect 10
-neighbor 192.168.40.49 remote-as 65049
-neighbor 192.168.40.49 ebgp-multihop
-neighbor 192.168.40.49 timers connect 10
-neighbor 192.168.40.50 remote-as 65050
-neighbor 192.168.40.50 ebgp-multihop
-neighbor 192.168.40.50 timers connect 10
-neighbor 192.168.40.51 remote-as 65051
-neighbor 192.168.40.51 ebgp-multihop
-neighbor 192.168.40.51 timers connect 10
-neighbor 192.168.40.52 remote-as 65052
-neighbor 192.168.40.52 ebgp-multihop
-neighbor 192.168.40.52 timers connect 10
-neighbor 192.168.40.53 remote-as 65053
-neighbor 192.168.40.53 ebgp-multihop
-neighbor 192.168.40.53 timers connect 10
-neighbor 192.168.40.54 remote-as 65054
-neighbor 192.168.40.54 ebgp-multihop
-neighbor 192.168.40.54 timers connect 10
-neighbor 192.168.40.55 remote-as 65055
-neighbor 192.168.40.55 ebgp-multihop
-neighbor 192.168.40.55 timers connect 10
-neighbor 192.168.40.56 remote-as 65056
-neighbor 192.168.40.56 ebgp-multihop
-neighbor 192.168.40.56 timers connect 10
-neighbor 192.168.40.57 remote-as 65057
-neighbor 192.168.40.57 ebgp-multihop
-neighbor 192.168.40.57 timers connect 10
-neighbor 192.168.40.58 remote-as 65058
-neighbor 192.168.40.58 ebgp-multihop
-neighbor 192.168.40.58 timers connect 10
-neighbor 192.168.40.59 remote-as 65059
-neighbor 192.168.40.59 ebgp-multihop
-neighbor 192.168.40.59 timers connect 10
-neighbor 192.168.40.60 remote-as 65060
-neighbor 192.168.40.60 ebgp-multihop
-neighbor 192.168.40.60 timers connect 10
-neighbor 192.168.40.61 remote-as 65061
-neighbor 192.168.40.61 ebgp-multihop
-neighbor 192.168.40.61 timers connect 10
-neighbor 192.168.40.62 remote-as 65062
-neighbor 192.168.40.62 ebgp-multihop
-neighbor 192.168.40.62 timers connect 10
-neighbor 192.168.40.63 remote-as 65063
-neighbor 192.168.40.63 ebgp-multihop
-neighbor 192.168.40.63 timers connect 10
-neighbor 192.168.40.64 remote-as 65064
-neighbor 192.168.40.64 ebgp-multihop
-neighbor 192.168.40.64 timers connect 10
-neighbor 192.168.40.65 remote-as 65065
-neighbor 192.168.40.65 ebgp-multihop
-neighbor 192.168.40.65 timers connect 10
-neighbor 192.168.40.66 remote-as 65066
-neighbor 192.168.40.66 ebgp-multihop
-neighbor 192.168.40.66 timers connect 10
-neighbor 192.168.40.67 remote-as 65067
-neighbor 192.168.40.67 ebgp-multihop
-neighbor 192.168.40.67 timers connect 10
-neighbor 192.168.40.68 remote-as 65068
-neighbor 192.168.40.68 ebgp-multihop
-neighbor 192.168.40.68 timers connect 10
-neighbor 192.168.40.69 remote-as 65069
-neighbor 192.168.40.69 ebgp-multihop
-neighbor 192.168.40.69 timers connect 10
-neighbor 192.168.40.70 remote-as 65070
-neighbor 192.168.40.70 ebgp-multihop
-neighbor 192.168.40.70 timers connect 10
-neighbor 192.168.40.71 remote-as 65071
-neighbor 192.168.40.71 ebgp-multihop
-neighbor 192.168.40.71 timers connect 10
-neighbor 192.168.40.72 remote-as 65072
-neighbor 192.168.40.72 ebgp-multihop
-neighbor 192.168.40.72 timers connect 10
-neighbor 192.168.40.73 remote-as 65073
-neighbor 192.168.40.73 ebgp-multihop
-neighbor 192.168.40.73 timers connect 10
-neighbor 192.168.40.74 remote-as 65074
-neighbor 192.168.40.74 ebgp-multihop
-neighbor 192.168.40.74 timers connect 10
-neighbor 192.168.40.75 remote-as 65075
-neighbor 192.168.40.75 ebgp-multihop
-neighbor 192.168.40.75 timers connect 10
-neighbor 192.168.40.76 remote-as 65076
-neighbor 192.168.40.76 ebgp-multihop
-neighbor 192.168.40.76 timers connect 10
-neighbor 192.168.40.77 remote-as 65077
-neighbor 192.168.40.77 ebgp-multihop
-neighbor 192.168.40.77 timers connect 10
-neighbor 192.168.40.78 remote-as 65078
-neighbor 192.168.40.78 ebgp-multihop
-neighbor 192.168.40.78 timers connect 10
-neighbor 192.168.40.79 remote-as 65079
-neighbor 192.168.40.79 ebgp-multihop
-neighbor 192.168.40.79 timers connect 10
-neighbor 192.168.40.80 remote-as 65080
-neighbor 192.168.40.80 ebgp-multihop
-neighbor 192.168.40.80 timers connect 10
-neighbor 192.168.40.81 remote-as 65081
-neighbor 192.168.40.81 ebgp-multihop
-neighbor 192.168.40.81 timers connect 10
-neighbor 192.168.40.82 remote-as 65082
-neighbor 192.168.40.82 ebgp-multihop
-neighbor 192.168.40.82 timers connect 10
-neighbor 192.168.40.83 remote-as 65083
-neighbor 192.168.40.83 ebgp-multihop
-neighbor 192.168.40.83 timers connect 10
-neighbor 192.168.40.84 remote-as 65084
-neighbor 192.168.40.84 ebgp-multihop
-neighbor 192.168.40.84 timers connect 10
-neighbor 192.168.40.85 remote-as 65085
-neighbor 192.168.40.85 ebgp-multihop
-neighbor 192.168.40.85 timers connect 10
-neighbor 192.168.40.86 remote-as 65086
-neighbor 192.168.40.86 ebgp-multihop
-neighbor 192.168.40.86 timers connect 10
-neighbor 192.168.40.87 remote-as 65087
-neighbor 192.168.40.87 ebgp-multihop
-neighbor 192.168.40.87 timers connect 10
-neighbor 192.168.40.88 remote-as 65088
-neighbor 192.168.40.88 ebgp-multihop
-neighbor 192.168.40.88 timers connect 10
-neighbor 192.168.40.89 remote-as 65089
-neighbor 192.168.40.89 ebgp-multihop
-neighbor 192.168.40.89 timers connect 10
-neighbor 192.168.40.90 remote-as 65090
-neighbor 192.168.40.90 ebgp-multihop
-neighbor 192.168.40.90 timers connect 10
-neighbor 192.168.40.91 remote-as 65091
-neighbor 192.168.40.91 ebgp-multihop
-neighbor 192.168.40.91 timers connect 10
-neighbor 192.168.40.92 remote-as 65092
-neighbor 192.168.40.92 ebgp-multihop
-neighbor 192.168.40.92 timers connect 10
-neighbor 192.168.40.93 remote-as 65093
-neighbor 192.168.40.93 ebgp-multihop
-neighbor 192.168.40.93 timers connect 10
-neighbor 192.168.40.94 remote-as 65094
-neighbor 192.168.40.94 ebgp-multihop
-neighbor 192.168.40.94 timers connect 10
-neighbor 192.168.40.95 remote-as 65095
-neighbor 192.168.40.95 ebgp-multihop
-neighbor 192.168.40.95 timers connect 10
-neighbor 192.168.40.96 remote-as 65096
-neighbor 192.168.40.96 ebgp-multihop
-neighbor 192.168.40.96 timers connect 10
-neighbor 192.168.40.97 remote-as 65097
-neighbor 192.168.40.97 ebgp-multihop
-neighbor 192.168.40.97 timers connect 10
-neighbor 192.168.40.98 remote-as 65098
-neighbor 192.168.40.98 ebgp-multihop
-neighbor 192.168.40.98 timers connect 10
-neighbor 192.168.40.99 remote-as 65099
-neighbor 192.168.40.99 ebgp-multihop
-neighbor 192.168.40.99 timers connect 10
-neighbor 192.168.40.100 remote-as 65100
-neighbor 192.168.40.100 ebgp-multihop
-neighbor 192.168.40.100 timers connect 10
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/mininet/quagga2.conf
deleted file mode 100644
index 20ca9e4..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/quagga2.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg b/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg
deleted file mode 100644
index 5feaf1d..0000000
--- a/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg
+++ /dev/null
@@ -1 +0,0 @@
-corsaDpid = 00:00:00:00:00:00:00:01
diff --git a/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg b/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg
deleted file mode 100644
index 65c7bf3..0000000
--- a/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-# Sample configuration for link discovery
-# Note that this file location is required for packaging onos and launching it in another localtion.
-# If you are launching onos locally, this configuration file would be placed at: $(KARAF_ROOT)/etc
-
-#
-# Disable Link Dicovery Permanently (Note: changing this property at runtime will have NO effect)
-#
-disableLinkDiscovery = true
-
-#
-# Enable Broadcast Discovery Protocol
-#
-#useBDDP = false
-
-#
-# Disable LLDP's recieved from specific devices
-# Details of the devices are in the file configured below
-#
-#lldpSuppression =
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py
deleted file mode 100755
index 13c66ac..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py
+++ /dev/null
@@ -1,346 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #sw3 = self.addSwitch('sw3', dpid='00000000000000a3')
- #sw4 = self.addSwitch('sw4', dpid='00000000000000a4')
- #sw5 = self.addSwitch('sw5', dpid='00000000000000a5')
- #sw6 = self.addSwitch('sw6', dpid='00000000000000a6')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3' )
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4' )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- host5 = self.addHost( 'host5' )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
-
- #Backup link from router5 to router4
- self.addLink( host4, host5)
-
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.40.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-# sw2.cmd('ovs-vsctl set-controller sw2 tcp:127.0.0.1:6633')
-# sw3.cmd('ovs-vsctl set-controller sw3 tcp:127.0.0.1:6633')
-# sw4.cmd('ovs-vsctl set-controller sw4 tcp:127.0.0.1:6633')
-# sw5.cmd('ovs-vsctl set-controller sw5 tcp:127.0.0.1:6633')
-# sw6.cmd('ovs-vsctl set-controller sw6 tcp:127.0.0.1:6633')
-
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- host1.defaultIntf().setIP('192.168.10.101/24')
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- host3.setIP('192.168.10.1', 24, 'host3-eth0')
- #host3.cmd('sudo ip addr add 172.16.20.1/24 dev host3-eth0')
- host3.setIP('192.168.20.1', 24, 'host3-eth1')
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1')
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setIP('192.168.30.1', 24, 'host4-eth0')
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- host4.setIP('10.0.0.4', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:33', 'host4-eth2')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth3')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth3')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- #as6rs, host5 = net.get('as6rs', 'host5')
- host5 = net.get('host5')
- #as6rs.setIP('192.168.60.1', 24, 'as6rs-eth0')
- #as6rs.setMAC('00:00:00:00:06:01', 'as6rs-eth0')
- host5.setIP('192.168.60.2', 24, 'host5-eth0')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('10.0.0.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:66', 'host5-eth2')
- host5.setIP('1.168.30.5', 24, 'host5-eth3')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth3')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf
deleted file mode 100644
index 5e7028d..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.101 remote-as 64513
- neighbor 10.0.0.4 remote-as 64516
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index d334c2a..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 ebgp-multihop
- neighbor 192.168.60.2 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf
deleted file mode 100644
index 14c7d67..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
- neighbor 10.0.0.5 remote-as 64521
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/routeserver/addresses.json b/TestON/tests/PeeringRouterTest/routeserver/addresses.json
deleted file mode 100644
index ee83480..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/addresses.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "1",
- "ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01"
-
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "2",
- "ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "3",
- "ips" : ["192.168.30.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "4",
- "ips" : ["192.168.60.101/24"],
- "mac" : "00:00:00:00:00:01"
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/PeeringRouteServerMininet.py b/TestON/tests/PeeringRouterTest/routeserver/mininet/PeeringRouteServerMininet.py
deleted file mode 100755
index 0c8cb08..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/PeeringRouteServerMininet.py
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #sw3 = self.addSwitch('sw3', dpid='00000000000000a3')
- #sw4 = self.addSwitch('sw4', dpid='00000000000000a4')
- #sw5 = self.addSwitch('sw5', dpid='00000000000000a5')
- #sw6 = self.addSwitch('sw6', dpid='00000000000000a6')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3' )
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4' )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- as6rs = self.addHost( 'as6rs' )
- host5 = self.addHost( 'host5' )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( as6rs, as6sw )
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
-
- #Backup link from router5 to router4
- self.addLink( host4, host5)
-
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
- self.addLink(swTestOn, as6rs)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.40.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-# sw2.cmd('ovs-vsctl set-controller sw2 tcp:127.0.0.1:6633')
-# sw3.cmd('ovs-vsctl set-controller sw3 tcp:127.0.0.1:6633')
-# sw4.cmd('ovs-vsctl set-controller sw4 tcp:127.0.0.1:6633')
-# sw5.cmd('ovs-vsctl set-controller sw5 tcp:127.0.0.1:6633')
-# sw6.cmd('ovs-vsctl set-controller sw6 tcp:127.0.0.1:6633')
-
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- host1.defaultIntf().setIP('192.168.10.101/24')
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- host3.setIP('192.168.10.1', 24, 'host3-eth0')
- #host3.cmd('sudo ip addr add 172.16.20.1/24 dev host3-eth0')
- host3.setIP('192.168.20.1', 24, 'host3-eth1')
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1')
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setIP('192.168.30.1', 24, 'host4-eth0')
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- host4.setIP('10.0.0.4', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:33', 'host4-eth2')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth3')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth3')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- #time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- as6rs, host5 = net.get('as6rs', 'host5')
-
- as6rs.setIP('192.168.60.1', 24, 'as6rs-eth0')
- as6rs.setMAC('00:00:00:06:06:01', 'as6rs-eth0')
- as6rs.setIP('1.168.30.6', 24, 'as6rs-eth1')
- as6rs.setMAC('00:00:00:06:06:06', 'as6rs-eth1')
-
- host5.setIP('192.168.60.2', 24, 'host5-eth0')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('10.0.0.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:66', 'host5-eth2')
- host5.setIP('1.168.30.5', 24, 'host5-eth3')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth3')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- startquagga(as6rs, 4, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host, as6rs ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6-rs.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6-rs.conf
deleted file mode 100644
index 1eac0dd..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6-rs.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64520
- bgp router-id 192.168.60.1
- neighbor 192.168.60.101 remote-as 64513
- neighbor 192.168.60.101 route-server-client
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 route-server-client
-! network 172.16.60.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6.conf
deleted file mode 100644
index 19cc140..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.1 remote-as 64520
- neighbor 10.0.0.4 remote-as 64516
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index bf37a60..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.1 remote-as 64520
- neighbor 192.168.60.1 ebgp-multihop
- neighbor 192.168.60.1 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga2.conf
deleted file mode 100644
index 14c7d67..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/quagga2.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
- neighbor 10.0.0.5 remote-as 64521
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeserver/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/routeserver/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/routeserver/sdnip.json b/TestON/tests/PeeringRouterTest/routeserver/sdnip.json
deleted file mode 100644
index 1f0a80a..0000000
--- a/TestON/tests/PeeringRouterTest/routeserver/sdnip.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "2",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "3",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.60.1"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:02",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:01",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "1",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "2",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "3",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "4",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/sdnip.json b/TestON/tests/PeeringRouterTest/sdnip.json
deleted file mode 100644
index 5b61d05..0000000
--- a/TestON/tests/PeeringRouterTest/sdnip.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "2",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "3",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.60.2"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:02",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:02",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "1",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "2",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "3",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "4",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/vlan/addresses.json b/TestON/tests/PeeringRouterTest/vlan/addresses.json
deleted file mode 100644
index f800c1f..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/addresses.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "1",
- "ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "10"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "2",
- "ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "20"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "3",
- "ips" : ["192.168.30.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "30"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "4",
- "ips" : ["192.168.60.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "60"
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py b/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py
deleted file mode 100755
index 9cbfc6d..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py
+++ /dev/null
@@ -1,376 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.node import Host
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/admin/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class VLANHost( Host ):
- "Host connected to VLAN interface"
-
- def config( self, vlan=10, intf2 = '', ip2 = 0, vlan2 = 0, **params):
- """Configure VLANHost according to (optional) parameters:
- vlan: VLAN ID for default interface"""
-
- r = super( VLANHost, self ).config( **params )
-
- intf = params['inf']
- # remove IP from default, "physical" interface
- self.cmd( 'ifconfig %s inet 0' % intf )
- # create VLAN interface
- self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
- # assign the host's IP to the VLAN interface
- self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
- # update the intf name and host's intf map
- newName = '%s.%d' % ( intf, vlan )
- # update the (Mininet) interface to refer to VLAN interface name
- defaultIntf = self.defaultIntf()
- defaultIntf.name = newName
- # add VLAN interface to host's name to intf map
- self.nameToIntf[ newName ] = defaultIntf
-
- return r
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3', cls=VLANHost, vlan=10, inf="host3-eth0", ip="192.168.10.1")
-
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4', cls=VLANHost, vlan=30, inf="host4-eth0", ip="192.168.30.1" )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- host5 = self.addHost( 'host5', cls=VLANHost, vlan=60, inf="host5-eth0", ip="192.168.60.2" )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- #host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth1 trunk=60')
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth2 trunk=60')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- #host1.defaultIntf().setIP('192.168.10.101/24')
-
- host1.cmd( 'ifconfig host1-eth0 inet 0')
- host1.cmd( 'vconfig add host1-eth0 10')
- host1.cmd( 'ifconfig host1-eth0.10 inet 192.168.10.101')
-
- host1.cmd( 'vconfig add host1-eth0 20')
- host1.cmd( 'ifconfig host1-eth0.20 inet 192.168.20.101')
-
- host1.cmd( 'vconfig add host1-eth0 30')
- host1.cmd( 'ifconfig host1-eth0.30 inet 192.168.30.101')
-
- host1.cmd( 'vconfig add host1-eth0 60')
- host1.cmd( 'ifconfig host1-eth0.60 inet 192.168.60.101')
-
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- # add additional VLAN interface
- host3.cmd( 'ifconfig host3-eth1 inet 0')
- host3.cmd( 'vconfig add host3-eth1 20')
- host3.cmd( 'ifconfig host3-eth1.20 inet 192.168.20.1')
- # change the interface for the sencond connection to sw1 to vlan interface
- newName = "host3-eth1.20"
- secondIntf = host3.intf("host3-eth1")
- secondIntf.name = newName
- host3.nameToIntf[ newName ] = secondIntf
-
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0.10')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1.20')
-
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- host3.cmd('ip route add default via 192.168.10.101')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0.30')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host4.cmd('ip route add default via 192.168.30.101')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth2')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- host5 = net.get('host5')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0.60')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('1.168.30.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth2')
- host5.cmd('ip route add default via 192.168.60.101')
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6-rs.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6-rs.conf
deleted file mode 100644
index 1eac0dd..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6-rs.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64520
- bgp router-id 192.168.60.1
- neighbor 192.168.60.101 remote-as 64513
- neighbor 192.168.60.101 route-server-client
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 route-server-client
-! network 172.16.60.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6.conf
deleted file mode 100644
index 434f983..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.101 remote-as 64513
-! neighbor 192.168.60.1 remote-as 64520
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index d334c2a..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 ebgp-multihop
- neighbor 192.168.60.2 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn.conf
deleted file mode 100644
index 77392a6..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga-sdn.conf
+++ /dev/null
@@ -1,349 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.1 remote-as 64520
- neighbor 192.168.60.1 ebgp-multihop
- neighbor 192.168.60.1 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-neighbor 192.168.40.1 remote-as 65001
-neighbor 192.168.40.1 ebgp-multihop
-neighbor 192.168.40.1 timers connect 10
-neighbor 192.168.40.2 remote-as 65002
-neighbor 192.168.40.2 ebgp-multihop
-neighbor 192.168.40.2 timers connect 10
-neighbor 192.168.40.3 remote-as 65003
-neighbor 192.168.40.3 ebgp-multihop
-neighbor 192.168.40.3 timers connect 10
-neighbor 192.168.40.4 remote-as 65004
-neighbor 192.168.40.4 ebgp-multihop
-neighbor 192.168.40.4 timers connect 10
-neighbor 192.168.40.5 remote-as 65005
-neighbor 192.168.40.5 ebgp-multihop
-neighbor 192.168.40.5 timers connect 10
-neighbor 192.168.40.6 remote-as 65006
-neighbor 192.168.40.6 ebgp-multihop
-neighbor 192.168.40.6 timers connect 10
-neighbor 192.168.40.7 remote-as 65007
-neighbor 192.168.40.7 ebgp-multihop
-neighbor 192.168.40.7 timers connect 10
-neighbor 192.168.40.8 remote-as 65008
-neighbor 192.168.40.8 ebgp-multihop
-neighbor 192.168.40.8 timers connect 10
-neighbor 192.168.40.9 remote-as 65009
-neighbor 192.168.40.9 ebgp-multihop
-neighbor 192.168.40.9 timers connect 10
-neighbor 192.168.40.10 remote-as 65010
-neighbor 192.168.40.10 ebgp-multihop
-neighbor 192.168.40.10 timers connect 10
-neighbor 192.168.40.11 remote-as 65011
-neighbor 192.168.40.11 ebgp-multihop
-neighbor 192.168.40.11 timers connect 10
-neighbor 192.168.40.12 remote-as 65012
-neighbor 192.168.40.12 ebgp-multihop
-neighbor 192.168.40.12 timers connect 10
-neighbor 192.168.40.13 remote-as 65013
-neighbor 192.168.40.13 ebgp-multihop
-neighbor 192.168.40.13 timers connect 10
-neighbor 192.168.40.14 remote-as 65014
-neighbor 192.168.40.14 ebgp-multihop
-neighbor 192.168.40.14 timers connect 10
-neighbor 192.168.40.15 remote-as 65015
-neighbor 192.168.40.15 ebgp-multihop
-neighbor 192.168.40.15 timers connect 10
-neighbor 192.168.40.16 remote-as 65016
-neighbor 192.168.40.16 ebgp-multihop
-neighbor 192.168.40.16 timers connect 10
-neighbor 192.168.40.17 remote-as 65017
-neighbor 192.168.40.17 ebgp-multihop
-neighbor 192.168.40.17 timers connect 10
-neighbor 192.168.40.18 remote-as 65018
-neighbor 192.168.40.18 ebgp-multihop
-neighbor 192.168.40.18 timers connect 10
-neighbor 192.168.40.19 remote-as 65019
-neighbor 192.168.40.19 ebgp-multihop
-neighbor 192.168.40.19 timers connect 10
-neighbor 192.168.40.20 remote-as 65020
-neighbor 192.168.40.20 ebgp-multihop
-neighbor 192.168.40.20 timers connect 10
-neighbor 192.168.40.21 remote-as 65021
-neighbor 192.168.40.21 ebgp-multihop
-neighbor 192.168.40.21 timers connect 10
-neighbor 192.168.40.22 remote-as 65022
-neighbor 192.168.40.22 ebgp-multihop
-neighbor 192.168.40.22 timers connect 10
-neighbor 192.168.40.23 remote-as 65023
-neighbor 192.168.40.23 ebgp-multihop
-neighbor 192.168.40.23 timers connect 10
-neighbor 192.168.40.24 remote-as 65024
-neighbor 192.168.40.24 ebgp-multihop
-neighbor 192.168.40.24 timers connect 10
-neighbor 192.168.40.25 remote-as 65025
-neighbor 192.168.40.25 ebgp-multihop
-neighbor 192.168.40.25 timers connect 10
-neighbor 192.168.40.26 remote-as 65026
-neighbor 192.168.40.26 ebgp-multihop
-neighbor 192.168.40.26 timers connect 10
-neighbor 192.168.40.27 remote-as 65027
-neighbor 192.168.40.27 ebgp-multihop
-neighbor 192.168.40.27 timers connect 10
-neighbor 192.168.40.28 remote-as 65028
-neighbor 192.168.40.28 ebgp-multihop
-neighbor 192.168.40.28 timers connect 10
-neighbor 192.168.40.29 remote-as 65029
-neighbor 192.168.40.29 ebgp-multihop
-neighbor 192.168.40.29 timers connect 10
-neighbor 192.168.40.30 remote-as 65030
-neighbor 192.168.40.30 ebgp-multihop
-neighbor 192.168.40.30 timers connect 10
-neighbor 192.168.40.31 remote-as 65031
-neighbor 192.168.40.31 ebgp-multihop
-neighbor 192.168.40.31 timers connect 10
-neighbor 192.168.40.32 remote-as 65032
-neighbor 192.168.40.32 ebgp-multihop
-neighbor 192.168.40.32 timers connect 10
-neighbor 192.168.40.33 remote-as 65033
-neighbor 192.168.40.33 ebgp-multihop
-neighbor 192.168.40.33 timers connect 10
-neighbor 192.168.40.34 remote-as 65034
-neighbor 192.168.40.34 ebgp-multihop
-neighbor 192.168.40.34 timers connect 10
-neighbor 192.168.40.35 remote-as 65035
-neighbor 192.168.40.35 ebgp-multihop
-neighbor 192.168.40.35 timers connect 10
-neighbor 192.168.40.36 remote-as 65036
-neighbor 192.168.40.36 ebgp-multihop
-neighbor 192.168.40.36 timers connect 10
-neighbor 192.168.40.37 remote-as 65037
-neighbor 192.168.40.37 ebgp-multihop
-neighbor 192.168.40.37 timers connect 10
-neighbor 192.168.40.38 remote-as 65038
-neighbor 192.168.40.38 ebgp-multihop
-neighbor 192.168.40.38 timers connect 10
-neighbor 192.168.40.39 remote-as 65039
-neighbor 192.168.40.39 ebgp-multihop
-neighbor 192.168.40.39 timers connect 10
-neighbor 192.168.40.40 remote-as 65040
-neighbor 192.168.40.40 ebgp-multihop
-neighbor 192.168.40.40 timers connect 10
-neighbor 192.168.40.41 remote-as 65041
-neighbor 192.168.40.41 ebgp-multihop
-neighbor 192.168.40.41 timers connect 10
-neighbor 192.168.40.42 remote-as 65042
-neighbor 192.168.40.42 ebgp-multihop
-neighbor 192.168.40.42 timers connect 10
-neighbor 192.168.40.43 remote-as 65043
-neighbor 192.168.40.43 ebgp-multihop
-neighbor 192.168.40.43 timers connect 10
-neighbor 192.168.40.44 remote-as 65044
-neighbor 192.168.40.44 ebgp-multihop
-neighbor 192.168.40.44 timers connect 10
-neighbor 192.168.40.45 remote-as 65045
-neighbor 192.168.40.45 ebgp-multihop
-neighbor 192.168.40.45 timers connect 10
-neighbor 192.168.40.46 remote-as 65046
-neighbor 192.168.40.46 ebgp-multihop
-neighbor 192.168.40.46 timers connect 10
-neighbor 192.168.40.47 remote-as 65047
-neighbor 192.168.40.47 ebgp-multihop
-neighbor 192.168.40.47 timers connect 10
-neighbor 192.168.40.48 remote-as 65048
-neighbor 192.168.40.48 ebgp-multihop
-neighbor 192.168.40.48 timers connect 10
-neighbor 192.168.40.49 remote-as 65049
-neighbor 192.168.40.49 ebgp-multihop
-neighbor 192.168.40.49 timers connect 10
-neighbor 192.168.40.50 remote-as 65050
-neighbor 192.168.40.50 ebgp-multihop
-neighbor 192.168.40.50 timers connect 10
-neighbor 192.168.40.51 remote-as 65051
-neighbor 192.168.40.51 ebgp-multihop
-neighbor 192.168.40.51 timers connect 10
-neighbor 192.168.40.52 remote-as 65052
-neighbor 192.168.40.52 ebgp-multihop
-neighbor 192.168.40.52 timers connect 10
-neighbor 192.168.40.53 remote-as 65053
-neighbor 192.168.40.53 ebgp-multihop
-neighbor 192.168.40.53 timers connect 10
-neighbor 192.168.40.54 remote-as 65054
-neighbor 192.168.40.54 ebgp-multihop
-neighbor 192.168.40.54 timers connect 10
-neighbor 192.168.40.55 remote-as 65055
-neighbor 192.168.40.55 ebgp-multihop
-neighbor 192.168.40.55 timers connect 10
-neighbor 192.168.40.56 remote-as 65056
-neighbor 192.168.40.56 ebgp-multihop
-neighbor 192.168.40.56 timers connect 10
-neighbor 192.168.40.57 remote-as 65057
-neighbor 192.168.40.57 ebgp-multihop
-neighbor 192.168.40.57 timers connect 10
-neighbor 192.168.40.58 remote-as 65058
-neighbor 192.168.40.58 ebgp-multihop
-neighbor 192.168.40.58 timers connect 10
-neighbor 192.168.40.59 remote-as 65059
-neighbor 192.168.40.59 ebgp-multihop
-neighbor 192.168.40.59 timers connect 10
-neighbor 192.168.40.60 remote-as 65060
-neighbor 192.168.40.60 ebgp-multihop
-neighbor 192.168.40.60 timers connect 10
-neighbor 192.168.40.61 remote-as 65061
-neighbor 192.168.40.61 ebgp-multihop
-neighbor 192.168.40.61 timers connect 10
-neighbor 192.168.40.62 remote-as 65062
-neighbor 192.168.40.62 ebgp-multihop
-neighbor 192.168.40.62 timers connect 10
-neighbor 192.168.40.63 remote-as 65063
-neighbor 192.168.40.63 ebgp-multihop
-neighbor 192.168.40.63 timers connect 10
-neighbor 192.168.40.64 remote-as 65064
-neighbor 192.168.40.64 ebgp-multihop
-neighbor 192.168.40.64 timers connect 10
-neighbor 192.168.40.65 remote-as 65065
-neighbor 192.168.40.65 ebgp-multihop
-neighbor 192.168.40.65 timers connect 10
-neighbor 192.168.40.66 remote-as 65066
-neighbor 192.168.40.66 ebgp-multihop
-neighbor 192.168.40.66 timers connect 10
-neighbor 192.168.40.67 remote-as 65067
-neighbor 192.168.40.67 ebgp-multihop
-neighbor 192.168.40.67 timers connect 10
-neighbor 192.168.40.68 remote-as 65068
-neighbor 192.168.40.68 ebgp-multihop
-neighbor 192.168.40.68 timers connect 10
-neighbor 192.168.40.69 remote-as 65069
-neighbor 192.168.40.69 ebgp-multihop
-neighbor 192.168.40.69 timers connect 10
-neighbor 192.168.40.70 remote-as 65070
-neighbor 192.168.40.70 ebgp-multihop
-neighbor 192.168.40.70 timers connect 10
-neighbor 192.168.40.71 remote-as 65071
-neighbor 192.168.40.71 ebgp-multihop
-neighbor 192.168.40.71 timers connect 10
-neighbor 192.168.40.72 remote-as 65072
-neighbor 192.168.40.72 ebgp-multihop
-neighbor 192.168.40.72 timers connect 10
-neighbor 192.168.40.73 remote-as 65073
-neighbor 192.168.40.73 ebgp-multihop
-neighbor 192.168.40.73 timers connect 10
-neighbor 192.168.40.74 remote-as 65074
-neighbor 192.168.40.74 ebgp-multihop
-neighbor 192.168.40.74 timers connect 10
-neighbor 192.168.40.75 remote-as 65075
-neighbor 192.168.40.75 ebgp-multihop
-neighbor 192.168.40.75 timers connect 10
-neighbor 192.168.40.76 remote-as 65076
-neighbor 192.168.40.76 ebgp-multihop
-neighbor 192.168.40.76 timers connect 10
-neighbor 192.168.40.77 remote-as 65077
-neighbor 192.168.40.77 ebgp-multihop
-neighbor 192.168.40.77 timers connect 10
-neighbor 192.168.40.78 remote-as 65078
-neighbor 192.168.40.78 ebgp-multihop
-neighbor 192.168.40.78 timers connect 10
-neighbor 192.168.40.79 remote-as 65079
-neighbor 192.168.40.79 ebgp-multihop
-neighbor 192.168.40.79 timers connect 10
-neighbor 192.168.40.80 remote-as 65080
-neighbor 192.168.40.80 ebgp-multihop
-neighbor 192.168.40.80 timers connect 10
-neighbor 192.168.40.81 remote-as 65081
-neighbor 192.168.40.81 ebgp-multihop
-neighbor 192.168.40.81 timers connect 10
-neighbor 192.168.40.82 remote-as 65082
-neighbor 192.168.40.82 ebgp-multihop
-neighbor 192.168.40.82 timers connect 10
-neighbor 192.168.40.83 remote-as 65083
-neighbor 192.168.40.83 ebgp-multihop
-neighbor 192.168.40.83 timers connect 10
-neighbor 192.168.40.84 remote-as 65084
-neighbor 192.168.40.84 ebgp-multihop
-neighbor 192.168.40.84 timers connect 10
-neighbor 192.168.40.85 remote-as 65085
-neighbor 192.168.40.85 ebgp-multihop
-neighbor 192.168.40.85 timers connect 10
-neighbor 192.168.40.86 remote-as 65086
-neighbor 192.168.40.86 ebgp-multihop
-neighbor 192.168.40.86 timers connect 10
-neighbor 192.168.40.87 remote-as 65087
-neighbor 192.168.40.87 ebgp-multihop
-neighbor 192.168.40.87 timers connect 10
-neighbor 192.168.40.88 remote-as 65088
-neighbor 192.168.40.88 ebgp-multihop
-neighbor 192.168.40.88 timers connect 10
-neighbor 192.168.40.89 remote-as 65089
-neighbor 192.168.40.89 ebgp-multihop
-neighbor 192.168.40.89 timers connect 10
-neighbor 192.168.40.90 remote-as 65090
-neighbor 192.168.40.90 ebgp-multihop
-neighbor 192.168.40.90 timers connect 10
-neighbor 192.168.40.91 remote-as 65091
-neighbor 192.168.40.91 ebgp-multihop
-neighbor 192.168.40.91 timers connect 10
-neighbor 192.168.40.92 remote-as 65092
-neighbor 192.168.40.92 ebgp-multihop
-neighbor 192.168.40.92 timers connect 10
-neighbor 192.168.40.93 remote-as 65093
-neighbor 192.168.40.93 ebgp-multihop
-neighbor 192.168.40.93 timers connect 10
-neighbor 192.168.40.94 remote-as 65094
-neighbor 192.168.40.94 ebgp-multihop
-neighbor 192.168.40.94 timers connect 10
-neighbor 192.168.40.95 remote-as 65095
-neighbor 192.168.40.95 ebgp-multihop
-neighbor 192.168.40.95 timers connect 10
-neighbor 192.168.40.96 remote-as 65096
-neighbor 192.168.40.96 ebgp-multihop
-neighbor 192.168.40.96 timers connect 10
-neighbor 192.168.40.97 remote-as 65097
-neighbor 192.168.40.97 ebgp-multihop
-neighbor 192.168.40.97 timers connect 10
-neighbor 192.168.40.98 remote-as 65098
-neighbor 192.168.40.98 ebgp-multihop
-neighbor 192.168.40.98 timers connect 10
-neighbor 192.168.40.99 remote-as 65099
-neighbor 192.168.40.99 ebgp-multihop
-neighbor 192.168.40.99 timers connect 10
-neighbor 192.168.40.100 remote-as 65100
-neighbor 192.168.40.100 ebgp-multihop
-neighbor 192.168.40.100 timers connect 10
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/quagga2.conf
deleted file mode 100644
index 20ca9e4..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/quagga2.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/vlan/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/PeeringRouterConvergenceVlanMininet.py b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/PeeringRouterConvergenceVlanMininet.py
deleted file mode 100755
index 983d666..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/PeeringRouterConvergenceVlanMininet.py
+++ /dev/null
@@ -1,381 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.node import Host
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class VLANHost( Host ):
- "Host connected to VLAN interface"
-
- def config( self, vlan=10, intf2 = '', ip2 = 0, vlan2 = 0, **params):
- """Configure VLANHost according to (optional) parameters:
- vlan: VLAN ID for default interface"""
-
- r = super( VLANHost, self ).config( **params )
-
- intf = params['inf']
- # remove IP from default, "physical" interface
- self.cmd( 'ifconfig %s inet 0' % intf )
- # create VLAN interface
- self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
- # assign the host's IP to the VLAN interface
- self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
- # update the intf name and host's intf map
- newName = '%s.%d' % ( intf, vlan )
- # update the (Mininet) interface to refer to VLAN interface name
- defaultIntf = self.defaultIntf()
- defaultIntf.name = newName
- # add VLAN interface to host's name to intf map
- self.nameToIntf[ newName ] = defaultIntf
-
- return r
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3', cls=VLANHost, vlan=10, inf="host3-eth0", ip="192.168.10.1")
-
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4', cls=VLANHost, vlan=30, inf="host4-eth0", ip="192.168.30.1" )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- host5 = self.addHost( 'host5', cls=VLANHost, vlan=60, inf="host5-eth0", ip="192.168.60.2" )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
- #Backup link from router5 to router4
- self.addLink( host4, host5)
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- #host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth1 trunk=60')
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth2 trunk=60')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- #host1.defaultIntf().setIP('192.168.10.101/24')
-
- host1.cmd( 'ifconfig host1-eth0 inet 0')
- host1.cmd( 'vconfig add host1-eth0 10')
- host1.cmd( 'ifconfig host1-eth0.10 inet 192.168.10.101')
-
- host1.cmd( 'vconfig add host1-eth0 20')
- host1.cmd( 'ifconfig host1-eth0.20 inet 192.168.20.101')
-
- host1.cmd( 'vconfig add host1-eth0 30')
- host1.cmd( 'ifconfig host1-eth0.30 inet 192.168.30.101')
-
- host1.cmd( 'vconfig add host1-eth0 60')
- host1.cmd( 'ifconfig host1-eth0.60 inet 192.168.60.101')
-
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- # add additional VLAN interface
- host3.cmd( 'ifconfig host3-eth1 inet 0')
- host3.cmd( 'vconfig add host3-eth1 20')
- host3.cmd( 'ifconfig host3-eth1.20 inet 192.168.20.1')
- # change the interface for the sencond connection to sw1 to vlan interface
- newName = "host3-eth1.20"
- secondIntf = host3.intf("host3-eth1")
- secondIntf.name = newName
- host3.nameToIntf[ newName ] = secondIntf
-
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0.10')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1.20')
-
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0.30')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- host4.setIP('10.0.0.4', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:33', 'host4-eth2')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth3')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth3')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- host5 = net.get('host5')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0.60')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('10.0.0.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:66', 'host5-eth2')
- host5.setIP('1.168.30.5', 24, 'host5-eth3')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth3')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-as6.conf
deleted file mode 100644
index 5e7028d..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.101 remote-as 64513
- neighbor 10.0.0.4 remote-as 64516
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index d334c2a..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 ebgp-multihop
- neighbor 192.168.60.2 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga2.conf
deleted file mode 100644
index 14c7d67..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/quagga2.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
- neighbor 10.0.0.5 remote-as 64521
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeconvergence/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/addresses.json b/TestON/tests/PeeringRouterTest/vlan/routeserver/addresses.json
deleted file mode 100644
index f800c1f..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/addresses.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "1",
- "ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "10"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "2",
- "ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "20"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "3",
- "ips" : ["192.168.30.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "30"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:01",
- "port" : "4",
- "ips" : ["192.168.60.101/24"],
- "mac" : "00:00:00:00:00:01",
- "vlan" : "60"
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/PeeringRouteServerVlanMininet.py b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/PeeringRouteServerVlanMininet.py
deleted file mode 100755
index 3ba30cd..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/PeeringRouteServerVlanMininet.py
+++ /dev/null
@@ -1,389 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.node import Host
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-import sys
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
-
-class VLANHost( Host ):
- "Host connected to VLAN interface"
-
- def config( self, vlan=10, intf2 = '', ip2 = 0, vlan2 = 0, **params):
- """Configure VLANHost according to (optional) parameters:
- vlan: VLAN ID for default interface"""
-
- r = super( VLANHost, self ).config( **params )
-
- intf = params['inf']
- # remove IP from default, "physical" interface
- self.cmd( 'ifconfig %s inet 0' % intf )
- # create VLAN interface
- self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
- # assign the host's IP to the VLAN interface
- self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
- # update the intf name and host's intf map
- newName = '%s.%d' % ( intf, vlan )
- # update the (Mininet) interface to refer to VLAN interface name
- defaultIntf = self.defaultIntf()
- defaultIntf.name = newName
- # add VLAN interface to host's name to intf map
- self.nameToIntf[ newName ] = defaultIntf
-
- return r
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='0000000000000001')
- sw2 = self.addSwitch('sw2', dpid='0000000000000002')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3', cls=VLANHost, vlan=10, inf="host3-eth0", ip="192.168.10.1")
-
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4', cls=VLANHost, vlan=30, inf="host4-eth0", ip="192.168.30.1" )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- as6rs = self.addHost( 'as6rs', cls=VLANHost, vlan=60, inf="as6rs-eth0", ip="192.168.60.1" )
- host5 = self.addHost( 'host5', cls=VLANHost, vlan=60, inf="host5-eth0", ip="192.168.60.2" )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw2 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( as6rs, as6sw )
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
- #Backup link from router5 to router4
- self.addLink( host4, host5)
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
- self.addLink(swTestOn, as6rs)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- #host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth1 trunk=60')
- as6sw.cmd( 'sudo ovs-vsctl set port as6sw-eth2 trunk=60')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- #host1.defaultIntf().setIP('192.168.10.101/24')
-
- host1.cmd( 'ifconfig host1-eth0 inet 0')
- host1.cmd( 'vconfig add host1-eth0 10')
- host1.cmd( 'ifconfig host1-eth0.10 inet 192.168.10.101')
-
- host1.cmd( 'vconfig add host1-eth0 20')
- host1.cmd( 'ifconfig host1-eth0.20 inet 192.168.20.101')
-
- host1.cmd( 'vconfig add host1-eth0 30')
- host1.cmd( 'ifconfig host1-eth0.30 inet 192.168.30.101')
-
- host1.cmd( 'vconfig add host1-eth0 60')
- host1.cmd( 'ifconfig host1-eth0.60 inet 192.168.60.101')
-
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- # add additional VLAN interface
- host3.cmd( 'ifconfig host3-eth1 inet 0')
- host3.cmd( 'vconfig add host3-eth1 20')
- host3.cmd( 'ifconfig host3-eth1.20 inet 192.168.20.1')
- # change the interface for the sencond connection to sw1 to vlan interface
- newName = "host3-eth1.20"
- secondIntf = host3.intf("host3-eth1")
- secondIntf.name = newName
- host3.nameToIntf[ newName ] = secondIntf
-
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0.10')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1.20')
-
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0.30')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- host4.setIP('10.0.0.4', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:33', 'host4-eth2')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth3')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth3')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- as6rs, host5 = net.get('as6rs', 'host5')
-
- as6rs.setMAC('00:00:00:06:06:01', 'as6rs-eth0')
- as6rs.setIP('1.168.30.6', 24, 'as6rs-eth1')
- as6rs.setMAC('00:00:00:06:06:06', 'as6rs-eth1')
-
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0.60')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('10.0.0.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:66', 'host5-eth2')
- host5.setIP('1.168.30.5', 24, 'host5-eth3')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth3')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
- startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- startquagga(as6rs, 4, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6-rs.conf')
- startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host, as6rs ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- if len(sys.argv) > 1:
- QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
- sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6-rs.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6-rs.conf
deleted file mode 100644
index 1eac0dd..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6-rs.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64520
- bgp router-id 192.168.60.1
- neighbor 192.168.60.101 remote-as 64513
- neighbor 192.168.60.101 route-server-client
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 route-server-client
-! network 172.16.60.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6.conf
deleted file mode 100644
index 19cc140..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.1 remote-as 64520
- neighbor 10.0.0.4 remote-as 64516
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-sdn-modified.conf
deleted file mode 100644
index bf37a60..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.1 remote-as 64520
- neighbor 192.168.60.1 ebgp-multihop
- neighbor 192.168.60.1 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga2.conf
deleted file mode 100644
index 14c7d67..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/quagga2.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
- neighbor 10.0.0.5 remote-as 64521
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/mininet/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/PeeringRouterTest/vlan/routeserver/sdnip.json b/TestON/tests/PeeringRouterTest/vlan/routeserver/sdnip.json
deleted file mode 100644
index f3117c6..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/routeserver/sdnip.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "2",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "3",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.60.1"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:02",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:02",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "1",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "2",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "3",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "4",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
diff --git a/TestON/tests/PeeringRouterTest/vlan/sdnip.json b/TestON/tests/PeeringRouterTest/vlan/sdnip.json
deleted file mode 100644
index 5b61d05..0000000
--- a/TestON/tests/PeeringRouterTest/vlan/sdnip.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "2",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "3",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:01",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.60.2"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:02",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:02",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "1",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "2",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "3",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:01",
- "interfacePort" : "4",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
diff --git a/TestON/tests/PingallExample/PingallExample.params b/TestON/tests/PingallExample/PingallExample.params
deleted file mode 100644
index 1e4cfc1..0000000
--- a/TestON/tests/PingallExample/PingallExample.params
+++ /dev/null
@@ -1,12 +0,0 @@
-<PARAMS>
- <testcases>1,2,3</testcases>
- <ENV>
- <cellName>SingleHA</cellName>
- </ENV>
- <Git>xe</Git>
-
- <CTRL>
- <ip1>10.128.30.11</ip1>
- <port1>6633</port1>
- </CTRL>
-</PARAMS>
diff --git a/TestON/tests/PingallExample/PingallExample.py b/TestON/tests/PingallExample/PingallExample.py
deleted file mode 100644
index 914f48e..0000000
--- a/TestON/tests/PingallExample/PingallExample.py
+++ /dev/null
@@ -1,171 +0,0 @@
-"""
-Description: This test is an example of a simple single node ONOS test
-
-List of test cases:
-CASE1: Compile ONOS and push it to the test machine
-CASE2: Assign mastership to controller
-CASE3: Pingall
-"""
-class PingallExample:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- CASE1 is to compile ONOS and push it to the test machines
-
- Startup sequence:
- git pull
- mvn clean install
- onos-package
- cell <name>
- onos-verify-cell
- onos-install -f
- onos-wait-for-start
- """
- desc = "ONOS Single node cluster restart HA test - initialization"
- main.log.report( desc )
- main.case( "Setting up test environment" )
-
- # load some vairables from the params file
- PULLCODE = False
- if main.params[ 'Git' ] == 'True':
- PULLCODE = True
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Compiling the latest version of ONOS" )
- if PULLCODE:
- main.step( "Git checkout and pull master" )
- main.ONOSbench.gitCheckout( "master" )
- gitPullResult = main.ONOSbench.gitPull()
-
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.TRUE
- if gitPullResult == main.TRUE:
- cleanInstallResult = main.ONOSbench.cleanInstall()
- else:
- main.log.warn( "Did not pull new code so skipping mvn " +
- "clean install" )
- main.ONOSbench.getVersion( report=True )
-
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if onos1Isup:
- break
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- # TODO: if it becomes an issue, we can retry this step a few times
-
- cliResult = main.ONOScli1.startOnosCli( ONOS1Ip )
-
- case1Result = ( cleanInstallResult and packageResult and
- cellResult and verifyResult and
- onos1InstallResult and
- onos1Isup and cliResult )
-
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- if case1Result == main.FALSE:
- main.cleanup()
- main.exit()
-
- # Starting the mininet using the old way
- main.step( "Starting Mininet ..." )
- netIsUp = main.Mininet1.startNet()
- if netIsUp:
- main.log.info("Mininet CLI is up")
- else:
- main.log.info("Mininet CLI is down")
-
- def CASE2( self, main ):
- """
- Assign mastership to controller
- """
- import re
-
- main.log.report( "Assigning switches to controller" )
- main.case( "Assigning Controller" )
- main.step( "Assign switches to controller" )
-
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
-
- for i in range( 1, 14 ):
- main.Mininet1.assignSwController(
- sw="s" + str( i ),
- ip=ONOS1Ip,
- port=ONOS1Port )
-
- mastershipCheck = main.TRUE
- for i in range( 1, 14 ):
- response = main.Mininet1.getSwController( "s" + str( i ) )
- try:
- main.log.info( str( response ) )
- except Exception:
- main.log.info( repr( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- mastershipCheck = mastershipCheck and main.TRUE
- else:
- mastershipCheck = main.FALSE
- if mastershipCheck == main.TRUE:
- main.log.report( "Switch mastership assigned correctly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=mastershipCheck,
- onpass="Switch mastership assigned correctly",
- onfail="Switches not assigned correctly to controllers" )
-
- def CASE3( self, main ):
- """
- Install forwarding app, Pingall and unistall the app
- """
- import time
-
- main.log.report( "Run Pingall" )
- main.case( "Run Pingall" )
-
- # install onos-app-fwd
- main.step( "Activate reactive forwarding app" )
- main.ONOScli1.activateApp( "org.onosproject.fwd" )
-
- # REACTIVE FWD test
- main.step( "Run the pingall command in Mininet" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- time2 = time.time()
- main.log.info( "Time for pingall: %2f seconds" % ( time2 - time1 ) )
-
- # uninstall onos-app-fwd
- main.step( "Deactivate reactive forwarding app" )
- main.ONOScli1.deactivateApp( "org.onosproject.fwd" )
-
- utilities.assert_equals( expect=main.TRUE, actual=pingResult,
- onpass="All hosts are reachable",
- onfail="Some pings failed" )
diff --git a/TestON/tests/PingallExample/PingallExample.topo b/TestON/tests/PingallExample/PingallExample.topo
deleted file mode 100644
index 3eda540..0000000
--- a/TestON/tests/PingallExample/PingallExample.topo
+++ /dev/null
@@ -1,47 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli1>
- <host>10.128.30.10</host>
- <user>admin</user>
- <password></password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli1>
-
- <ONOS1>
- <host>10.128.30.11</host>
- <user>admin</user>
- <password></password>
- <type>OnosDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <Mininet1>
- <host>10.128.30.9</host>
- <user>admin</user>
- <password></password>
- <type>MininetCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --topo=tree,3,3 </arg1>
- <arg2> </arg2>
- <arg3> </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/ProdFunc/ProdFunc.params b/TestON/tests/ProdFunc/ProdFunc.params
deleted file mode 100755
index c8e125b..0000000
--- a/TestON/tests/ProdFunc/ProdFunc.params
+++ /dev/null
@@ -1,43 +0,0 @@
-<PARAMS>
- #1,4,10,5,6,7,8,9,8,11,8,20,21,22,10,23,24
- <testcases>1,4,10,5,6,7,8,9,8,11,8,2,20,21,22,10,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>driver_test</cellName>
- </ENV>
- <GIT>
- <pull>True</pull>
- </GIT>
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>15</SwitchDiscovery>
- </timers>
-</PARAMS>
diff --git a/TestON/tests/ProdFunc/ProdFunc.py b/TestON/tests/ProdFunc/ProdFunc.py
deleted file mode 100644
index 5673173..0000000
--- a/TestON/tests/ProdFunc/ProdFunc.py
+++ /dev/null
@@ -1,1751 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-# import sys
-# import os
-# import re
-import json
-
-time.sleep( 1 )
-
-
-class ProdFunc:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- import time
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-log
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- gitPull = main.params[ 'GIT' ][ 'pull' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.step( "Git checkout and get version" )
- main.ONOSbench.gitCheckout( "master" )
- if gitPull == 'True':
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == 1:
- main.step( "Using mvn clean & install" )
- main.ONOSbench.cleanInstall()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- elif gitPullResult == 0:
- main.log.report(
- "Git Pull Failed, look into logs for detailed reason" )
- main.cleanup()
- main.exit()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- else:
- main.log.info( "Skipping git pull" )
- main.ONOSbench.getVersion( report=True )
- packageResult = main.TRUE
-
- main.step( "Uninstalling ONOS package" )
- onosInstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
- if onosInstallResult == main.TRUE:
- main.log.report( "Uninstalling ONOS package successful" )
- else:
- main.log.report( "Uninstalling ONOS package failed" )
-
- time.sleep( 20 )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.ONOSbench.onosInstall( ONOS1Ip )
- print onosInstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- time.sleep( 20 )
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- startResult = main.TRUE
- #main.step( "Starting ONOS service" )
- #startResult = main.ONOSbench.onosStart( ONOS1Ip )
-
- main.ONOS2.startOnosCli( ONOS1Ip )
- main.step( "Starting Mininet CLI..." )
-
- # Starting the mininet using the old way
- main.step( "Starting Mininet ..." )
- netIsUp = main.Mininet1.startNet()
- if netIsUp:
- main.log.info("Mininet CLI is up")
-
- case1Result = ( packageResult and
- cellResult and verifyResult
- and onosInstallResult and
- onos1Isup and startResult )
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE2( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
-
- main.case( "Switch down discovery" )
- main.log.report( "This testcase is testing a switch down discovery" )
- main.log.report( "__________________________________" )
-
- switchSleep = int( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.log.report( description )
- main.case( description )
-
- # TODO: Make this switch parameterizable
- main.step( "Kill s28 " )
- main.log.report( "Deleting s28" )
- # FIXME: use new dynamic topo functions
- main.Mininet1.delSwitch( "s28" )
- main.log.info(
- "Waiting " +
- str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- # Peek at the deleted switch
- device = main.ONOS2.getDevice( dpid="0028" )
- print "device = ", device
- if device[ u'available' ] == 'False':
- case2Result = main.FALSE
- else:
- case2Result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=case2Result,
- onpass="Switch down discovery successful",
- onfail="Switch down discovery failed" )
-
- def CASE101( self, main ):
- """
- Cleanup sequence:
- onos-service <nodeIp> stop
- onos-uninstall
-
- TODO: Define rest of cleanup
-
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.case( "Cleaning up test environment" )
-
- main.step( "Testing ONOS kill function" )
- killResult = main.ONOSbench.onosKill( ONOS1Ip )
-
- main.step( "Stopping ONOS service" )
- stopResult = main.ONOSbench.onosStop( ONOS1Ip )
-
- main.step( "Uninstalling ONOS service" )
- uninstallResult = main.ONOSbench.onosUninstall()
-
- case11Result = killResult and stopResult and uninstallResult
- utilities.assert_equals( expect=main.TRUE, actual=case11Result,
- onpass="Cleanup successful",
- onfail="Cleanup failed" )
-
- def CASE3( self, main ):
- """
- Test 'onos' command and its functionality in driver
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.case( "Testing 'onos' command" )
-
- main.step( "Sending command 'onos -w <onos-ip> system:name'" )
- cmdstr1 = "system:name"
- cmdResult1 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult1 )
-
- main.step( "Sending command 'onos -w <onos-ip> onos:topology'" )
- cmdstr2 = "onos:topology"
- cmdResult2 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult2 )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
-
- main.step( "Disconnecting mininet and restarting ONOS" )
- step1Result = main.TRUE
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
- step1Result = mininetDisconnect
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Mininet disconnect successfully",
- onfail="Mininet failed to disconnect")
- """
- main.step( "Removing raft logs before a clean installation of ONOS" )
- step2Result = main.TRUE
- removeRaftLogsResult = main.ONOSbench.onosRemoveRaftLogs()
- step2Result = removeRaftLogsResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Raft logs removed successfully",
- onfail="Failed to remove raft logs")
- """
- main.step( "Applying cell variable to environment" )
- step3Result = main.TRUE
- setCellResult = main.ONOSbench.setCell( cellName )
- verifyCellResult = main.ONOSbench.verifyCell()
- step3Result = setCellResult and verifyCellResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Cell applied successfully",
- onfail="Failed to apply cell")
-
- main.step( "Uninstalling ONOS package" )
- step4Result = main.TRUE
- ONOSip1 = main.params[ 'CTRL' ][ 'ip1' ]
- onosUninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOSip1)
- step4Result = onosUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully uninstalled ONOS",
- onfail="Failed to uninstall ONOS")
-
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- step5Result = main.TRUE
- onosInstallResult = main.ONOSbench.onosInstall( node = ONOSip1 )
- step5Result = onosInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully installed ONOS",
- onfail="Failed to install ONOS")
-
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- main.step( "Starting ONOS service" )
- step6Result = main.TRUE
- startResult = main.ONOSbench.onosStart( ONOS1Ip )
- step6Result = startResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step6Result,
- onpass="Successfully started ONOS",
- onfail="Failed to start ONOS")
-
- main.step( "Starting ONOS cli" )
- step7Result = main.TRUE
- cliResult = main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
- step7Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step7Result,
- onpass="Successfully started ONOS cli",
- onfail="Failed to start ONOS cli")
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- import time
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
-
- main.step( "Activate optical app" )
- step1Result = main.TRUE
- activateOpticalResult = main.ONOS2.activateApp( "org.onosproject.optical" )
- step1Result = activateOpticalResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully activated optical app",
- onfail="Failed to activate optical app")
-
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- main.step( "Starting mininet and LINC-OE" )
- step2Result = main.TRUE
- time.sleep( 10 )
- opticalMnScript = main.LincOE2.runOpticalMnScript(ctrllerIP = main.params[ 'CTRL' ][ 'ip1' ])
- step2Result = opticalMnScript
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Started the topology successfully ",
- onfail="Failed to start the topology")
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
-
- main.step( "Starts new ONOS cli" )
- step1Result = main.TRUE
- cliResult = main.ONOS3.startOnosCli( ONOSIp=main.params[ 'CTRL' ]\
- [ 'ip1' ] )
- step1Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully starts a new cli",
- onfail="Failed to start new cli" )
-
- main.step( "Compare topology" )
- step2Result = main.TRUE
- devicesResult = main.ONOS3.devices( jsonFormat=False )
- print "devices_result :\n", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- # sleeps for sometime so the state of the switches will be active
- time.sleep( 30 )
- print "_________________________________"
- linksResult = main.ONOS3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
- step2Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully loaded packet optical topology",
- onfail="Failed to load packet optical topology" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Install point intents between 2 packet layer device and " +
- "ping the hosts" )
-
- main.step( "Adding point intents" )
- checkFlowResult = main.TRUE
- step1Result = main.TRUE
- main.pIntentsId = []
- pIntent1 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- pIntent2 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- main.pIntentsId.append( pIntent1 )
- main.pIntentsId.append( pIntent2 )
- time.sleep( 10 )
- main.log.info( "Checking intents state")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- time.sleep( 10 )
- main.log.info( "Checking flows state")
- checkFlowResult = main.ONOS3.checkFlowsState()
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 10 )
- main.log.info( "Checking intents state one more time")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- step1Result = checkStateResult and checkFlowResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully added point intents",
- onfail="Failed to add point intents")
-
- main.step( "Ping h1 and h5" )
- step2Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step2Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
-
- main.step( "Attach to the Linc-OE session" )
- step1Result = main.TRUE
- attachConsole = main.LincOE1.attachLincOESession()
- step1Result = attachConsole
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully attached Linc-OE session",
- onfail="Failed to attached Linc-OE session")
-
- main.step( "Bring a port down and verify the link state" )
- step2Result = main.TRUE
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- links = main.ONOS3.links()
- main.log.info( "links = " + links )
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
- time.sleep( 10 )
- checkFlowsState = main.ONOS3.checkFlowsState()
- step2Result = linksStateResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfuly brought down a link",
- onfail="Failed to bring down a link")
-
- main.step( "Verify Rerouting by a ping test" )
- step3Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step3Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- main.step( "Bring the downed port up and verify the link state" )
- step4Result = main.TRUE
- main.LincOE1.portUp( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 0:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- step4Result = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully brought the port up",
- onfail="Failed to bring the port up")
- """
- main.step( "Removing host intents" )
- step5Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step5Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
- """
- def CASE10( self ):
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- main.step( "Uninstalling reactive forwarding app" )
- step1Result = main.TRUE
- # Unistall onos-app-fwd app to disable reactive forwarding
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOS2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
- step1Result = appUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully deactivate reactive forwarding app",
- onfail="Failed to deactivate reactive forwarding app")
- # After reactive forwarding is disabled, the reactive flows on
- # switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
- flows = main.ONOS2.flows()
- main.log.info( flows )
-
- def CASE25( self ):
- """
- Add host intents between 2 packet layer host
- """
- import time
- import json
- main.log.report( "Adding host intents between 2 optical layer host" )
- main.case( "Test add host intents between optical layer host" )
-
- main.step( "Discover host using arping" )
- step1Result = main.TRUE
- main.hostMACs = []
- main.hostId = []
- #Listing host MAC addresses
- for i in range( 1 , 7 ):
- main.hostMACs.append( "00:00:00:00:00:" +
- str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
- for macs in main.hostMACs:
- main.hostId.append( macs + "/-1" )
- host1 = main.hostId[ 0 ]
- host2 = main.hostId[ 1 ]
- # Use arping to discover the hosts
- main.LincOE2.arping( host = "h1" )
- main.LincOE2.arping( host = "h2" )
- time.sleep( 5 )
- hostsDict = main.ONOS3.hosts()
- if not len( hostsDict ):
- step1Result = main.FALSE
- # Adding host intent
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Hosts discovered",
- onfail="Failed to discover hosts")
-
- main.step( "Adding host intents to h1 and h2" )
- step2Result = main.TRUE
- intentsId = []
- intent1 = main.ONOS3.addHostIntent( hostIdOne = host1,
- hostIdTwo = host2 )
- intentsId.append( intent1 )
- time.sleep( 5 )
- intent2 = main.ONOS3.addHostIntent( hostIdOne = host2,
- hostIdTwo = host1 )
- intentsId.append( intent2 )
- # Checking intents state before pinging
- main.log.info( "Checking intents state" )
- time.sleep( 15 )
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- #check intent state again if intents are not in installed state
- if not intentResult:
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- step2Result = intentResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step2Result,
- onpass="All intents are in INSTALLED state ",
- onfail="Some of the intents are not in " +
- "INSTALLED state " )
-
- # pinging h1 to h2 and then ping h2 to h1
- main.step( "Pinging h1 and h2" )
- step3Result = main.TRUE
- pingResult = main.TRUE
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h2" )
- pingResult = pingResult and main.LincOE2.pingHostOptical( src="h2",
- target="h1" )
- step3Result = pingResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step3Result,
- onpass="Pinged successfully between h1 and h2",
- onfail="Pinged failed between h1 and h2" )
- # Removed all added host intents
- main.step( "Removing host intents" )
- step4Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step4Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
-
- def CASE4( self, main ):
- import re
- import time
- main.log.report( "This testcase is testing the assignment of" +
- " all the switches to all the controllers and" +
- " discovering the hosts in reactive mode" )
- main.log.report( "__________________________________" )
-
- main.case( "Pingall Test" )
- main.step( "Assigning switches to controllers" )
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- for i in range( 1, 29 ):
- if i == 1:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 2 and i < 5:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 5 and i < 8:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 8 and i < 18:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 18 and i < 28:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- else:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- SwitchMastership = main.TRUE
- for i in range( 1, 29 ):
- if i == 1:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 2 and i < 5:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 5 and i < 8:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 8 and i < 18:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 18 and i < 28:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- else:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is" + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
-
- if SwitchMastership == main.TRUE:
- main.log.report( "Controller assignmnet successful" )
- else:
- main.log.report( "Controller assignmnet failed" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=SwitchMastership,
- onpass="MasterControllers assigned correctly" )
- """
- for i in range ( 1,29 ):
- main.Mininet1.assignSwController( sw=str( i ),count=5,
- ip1=ONOS1Ip,port1=ONOS1Port,
- ip2=ONOS2Ip,port2=ONOS2Port,
- ip3=ONOS3Ip,port3=ONOS3Port,
- ip4=ONOS4Ip,port4=ONOS4Port,
- ip5=ONOS5Ip,port5=ONOS5Port )
- """
- # REACTIVE FWD test
- main.log.info( "Activate fwd app" )
- appInstallResult = main.ONOS2.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
- time.sleep( 10 )
-
- main.step( "Get list of hosts from Mininet" )
- hostList = main.Mininet1.getHosts().keys()
- main.log.info( hostList )
-
- main.step( "Get host list in ONOS format" )
- hostOnosList = main.ONOS2.getHostsId( hostList )
- main.log.info( hostOnosList )
- # time.sleep( 5 )
-
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- # Start onos cli again because u might have dropped out of
- # onos prompt to the shell prompt
- # if there was no activity
- main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
-
- case4Result = SwitchMastership and pingResult
- if pingResult == main.TRUE:
- main.log.report( "Pingall Test in reactive mode to" +
- " discover the hosts successful" )
- else:
- main.log.report( "Pingall Test in reactive mode to" +
- " discover the hosts failed" )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case4Result,
- onpass="Controller assignment and Pingall Test successful",
- onfail="Controller assignment and Pingall Test NOT successful" )
-
- def CASE11( self ):
- # NOTE: This testcase require reactive forwarding mode enabled
- # NOTE: in the beginning and then uninstall it before adding
- # NOTE: point intents. Again the app is installed so that
- # NOTE: testcase 10 can be ran successively
- import time
- main.log.report(
- "This testcase moves a host from one switch to another to add" +
- "point intents between them and then perform ping" )
- main.log.report( "__________________________________" )
- main.log.info( "Moving host from one switch to another" )
- main.case( "Moving host from a device and attach it to another device" )
- main.step( "Moving host h9 from device s9 and attach it to s8" )
- main.Mininet1.moveHost(host = 'h9', oldSw = 's9', newSw = 's8')
-
- main.log.info( "Activate fwd app" )
- appInstallResult = main.ONOS2.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- time.sleep(25) #Time delay to have all the flows ready
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall( timeout=120,
- shortCircuit=True,
- acceptableFailed=20 )
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- hosts = main.ONOS2.hosts( jsonFormat = False )
- main.log.info( hosts )
-
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOS2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- main.step( "Add point intents between hosts on the same device")
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003008/1",
- "of:0000000000003008/3",
- ethType='IPV4',
- ethSrc='00:00:00:00:00:08',
- ethDst='00:00:00:00:00:09' )
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003008/3",
- "of:0000000000003008/1",
- ethType='IPV4',
- ethSrc='00:00:00:00:00:09',
- ethDst='00:00:00:00:00:08' )
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- main.case( "Ping hosts on the same devices" )
- ping = main.Mininet1.pingHost( src = 'h8', target = 'h9' )
-
- '''
- main.case( "Installing reactive forwarding app" )
- # Install onos-app-fwd app to enable reactive forwarding
- appUninstallResult = main.ONOS2.featureInstall( "onos-app-fwd" )
- main.log.info( "onos-app-fwd installed" )
- '''
-
- if ping == main.FALSE:
- main.log.report(
- "Point intents for hosts on same devices haven't" +
- " been installed correctly. Cleaning up" )
- if ping == main.TRUE:
- main.log.report(
- "Point intents for hosts on same devices" +
- "installed correctly. Cleaning up" )
-
- case11Result = ping
- utilities.assert_equals(
- expect = main.TRUE,
- actual = case11Result,
- onpass = "Point intents for hosts on same devices" +
- "Ping Test successful",
- onfail = "Point intents for hosts on same devices" +
- "Ping Test NOT successful" )
-
- def CASE12( self ):
- """
- Verify the default flows on each switch in proactive mode
- """
- main.log.report( "This testcase is verifying num of default" +
- " flows on each switch" )
- main.log.report( "__________________________________" )
- main.case( "Verify num of default flows on each switch" )
- main.step( "Obtaining the device id's and flowrule count on them" )
-
- case12Result = main.TRUE
- idList = main.ONOS2.getAllDevicesId()
- for id in idList:
- count = main.ONOS2.FlowAddedCount( id )
- main.log.info("count = " +count)
- if int(count) != 3:
- case12Result = main.FALSE
- break
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case12Result,
- onpass = "Expected default num of flows exist",
- onfail = "Expected default num of flows do not exist")
-
- def CASE6( self ):
- import time
- main.log.report( "This testcase is testing the addition of" +
- " host intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.case( "Obtaining host id's" )
- main.step( "Get hosts" )
- hosts = main.ONOS2.hosts()
- main.log.info( hosts )
-
- main.step( "Get all devices id" )
- devicesIdList = main.ONOS2.getAllDevicesId()
- main.log.info( devicesIdList )
-
- # ONOS displays the hosts in hex format unlike mininet which does
- # in decimal format
- # So take care while adding intents
- """
- main.step( "Add host-to-host intents for mininet hosts h8 and h18 or
- ONOS hosts h8 and h12" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1" )
- print "______________________________________________________"
- """
- intentsId = []
- for i in range( 8, 18 ):
- main.log.info(
- "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: get host can return None
- if host1:
- host1Id = main.ONOS2.getHost( host1 )[ 'id' ]
- if host2:
- host2Id = main.ONOS2.getHost( host2 )[ 'id' ]
- if host1Id and host2Id:
- intentsId.append( main.ONOS2.addHostIntent( host1Id, host2Id ) )
-
- checkIntentResult = main.ONOS2.checkIntentState( intentsId )
- time.sleep( 10 )
- hIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intents:" + hIntents )
- flows = main.ONOS2.flows()
- main.log.info( "flows:" + flows )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- # while i<10:
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping all test after Host intent addition failed.Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Host intent addition successful" )
-
- checkIntentResult = main.ONOS2.checkIntentState( intentsId )
-
- case6Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case6Result,
- onpass="Pingall Test after Host intents addition successful",
- onfail="Pingall Test after Host intents addition failed" )
-
- def CASE5( self, main ):
- """
- Check ONOS topology matches with mininet
- """
- import json
- main.log.report( "This testcase is testing if all ONOS nodes" +
- " are in topology sync with mininet" )
- main.log.report( "__________________________________" )
- main.case( "Comparing Mininet topology with the topology of ONOS" )
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- TopologyCheck = main.TRUE
- main.step( "Compare ONOS Topology to MN Topology" )
- devicesJson = main.ONOS2.devices()
- linksJson = main.ONOS2.links()
- portsJson = main.ONOS2.ports()
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- result1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devicesJson ), json.loads( portsJson ) )
- result2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( linksJson ) )
-
- result = result1 and result2
-
- print "***********************"
- if result == main.TRUE:
- main.log.report( "ONOS" + " Topology matches MN Topology" )
- else:
- main.log.report( "ONOS" + " Topology does not match MN Topology" )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=result,
- onpass="ONOS" +
- " Topology matches MN Topology",
- onfail="ONOS" +
- " Topology does not match MN Topology" )
-
- TopologyCheck = TopologyCheck and result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=TopologyCheck,
- onpass="Topology checks passed",
- onfail="Topology checks failed" )
-
- def CASE7( self, main ):
- """
- Link discovery test case. Checks if ONOS can discover a link
- down or up properly.
- """
-
- linkSleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "This testscase is killing a link to ensure that" +
- " link discovery is consistent" )
- main.log.report( "__________________________________" )
- main.log.report( "Killing a link to ensure that link discovery" +
- " is consistent" )
- main.case( "Killing a link to Ensure that Link Discovery" +
- "is Working Properly" )
- """
- main.step( "Start continuous pings" )
-
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
- """
- main.step( "Determine the current number of switches and links" )
- topologyOutput = main.ONOS2.topology()
- topologyResult = main.ONOS1.getTopology( topologyOutput )
- activeSwitches = topologyResult[ 'devices' ]
- links = topologyResult[ 'links' ]
- print "activeSwitches = ", type( activeSwitches )
- print "links = ", type( links )
- main.log.info(
- "Currently there are %s switches and %s links" %
- ( str( activeSwitches ), str( links ) ) )
-
- main.step( "Kill Link between s3 and s28" )
- main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOS2.topology()
- LinkDown = main.ONOS1.checkStatus(
- topologyOutput, activeSwitches, str(
- int( links ) - 2 ) )
- if LinkDown == main.TRUE:
- main.log.report( "Link Down discovered properly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=LinkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- # Check ping result here..add code for it
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOS2.topology()
- LinkUp = main.ONOS1.checkStatus(
- topologyOutput,
- activeSwitches,
- str( links ) )
- if LinkUp == main.TRUE:
- main.log.report( "Link up discovered properly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=LinkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- # NOTE Check ping result here..add code for it
-
- main.step( "Compare ONOS Topology to MN Topology" )
-
- devicesJson = main.ONOS2.devices()
- linksJson = main.ONOS2.links()
- portsJson = main.ONOS2.ports()
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- result1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devicesJson ), json.loads( portsJson ) )
- result2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( linksJson ) )
-
- result = result1 and result2
- print "***********************"
-
- if result == main.TRUE:
- main.log.report( "ONOS" + " Topology matches MN Topology" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=result,
- onpass="ONOS" +
- " Topology matches MN Topology",
- onfail="ONOS" +
- " Topology does not match MN Topology" )
-
- TopologyCheck = TopologyCheck and result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=TopologyCheck,
- onpass="Topology checks passed",
- onfail="Topology checks failed" )
-
- result = LinkDown and LinkUp and TopologyCheck
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Link failure is discovered correctly",
- onfail="Link Discovery failed" )
-
- def CASE8( self ):
- """
- Intent removal
- """
- main.log.report( "This testcase removes any previously added intents" +
- " before adding any new set of intents" )
- main.log.report( "__________________________________" )
- main.log.info( "intent removal" )
- main.case( "Removing installed intents" )
- main.step( "Obtain the intent id's" )
- currentIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intent_result = " + currentIntents )
- intentLinewise = currentIntents.split( "\n" )
-
- intentList = [line for line in intentLinewise \
- if line.startswith( "id=")]
- intentids = [line.split( "," )[ 0 ].split( "=" )[ 1 ] for line in \
- intentList]
- for id in intentids:
- print "id = ", id
-
- main.step(
- "Iterate through the intentids list and remove each intent" )
- for id in intentids:
- main.ONOS2.removeIntent( intentId=id ,purge=True)
-
- remainingIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intent_result = " + remainingIntents )
- if remainingIntents:
- main.log.info( "There are still remaining intents " )
- intentResult = main.FALSE
- else:
- intentResult = main.TRUE
-
- intentList = [line for line in remainingIntents.split( "\n" ) \
- if line.startswith( "id=")]
- intentState = [line.split( "," )[ 1 ].split( "=" )[ 1 ] for line in \
- intentList]
- for state in intentState:
- print state
-
- case8Result = main.TRUE
- for state in intentState:
- if state != 'WITHDRAWN':
- case8Result = main.FALSE
- break
-
- PingResult = main.TRUE
- """
- if case8Result == main.TRUE:
- i = 8
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.TRUE:
- i = 19
- PingResult = PingResult and main.TRUE
- elif ping == main.FALSE:
- i += 1
- PingResult = PingResult and main.FALSE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- # Note: If the ping result failed, that means the intents have been
- # withdrawn correctly.
- if PingResult == main.TRUE:
- main.log.report( "Installed intents have not been withdrawn correctly" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.FALSE:
- main.log.report( "Installed intents have been withdrawn correctly" )
- """
-
- if case8Result:
- main.log.report( "Intent removal successful" )
- else:
- main.log.report( "Intent removal failed" )
-
- utilities.assert_equals( expect=main.TRUE, actual=case8Result,
- onpass="Intent removal test passed",
- onfail="Intent removal test failed" )
-
- def CASE9( self ):
- """
- Testing Point intents
- """
- main.log.report(
- "This test case adds point intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.log.info( "Adding point intents" )
- main.case(
- "Adding bidirectional point for mn hosts" +
- "( h8-h18, h9-h19, h10-h20, h11-h21, h12-h22, " +
- "h13-h23, h14-h24, h15-h25, h16-h26, h17-h27 )" )
- macsDict = {}
- for i in range( 1,29 ):
- macsDict[ 'h' + str( i ) ]= main.Mininet1.getMacAddress( host='h'+ str( i ) )
- print macsDict
- main.step( "Add point intents for mn hosts h8 and h18 or" +
- "ONOS hosts h8 and h12" )
- # main.step(var1)
- ptpIntentResult = main.ONOS2.addPointIntent(
- ingressDevice="of:0000000000003008/1",
- egressDevice="of:0000000000006018/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h8' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- ingressDevice="of:0000000000006018/1",
- egressDevice="of:0000000000003008/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h18' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var2 = "Add point intents for mn hosts h9&h19 or ONOS hosts h9&h13"
- main.step(var2)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003009/1",
- "of:0000000000006019/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h9' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006019/1",
- "of:0000000000003009/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h19' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var3 = "Add point intents for MN hosts h10&h20 or ONOS hosts hA&h14"
- main.step(var3)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003010/1",
- "of:0000000000006020/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h10' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006020/1",
- "of:0000000000003010/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h20' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var4 = "Add point intents for mininet hosts h11 and h21 or" +\
- " ONOS hosts hB and h15"
- main.case(var4)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003011/1",
- "of:0000000000006021/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h11' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006021/1",
- "of:0000000000003011/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h21' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var5 = "Add point intents for mininet hosts h12 and h22 " +\
- "ONOS hosts hC and h16"
- main.case(var5)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003012/1",
- "of:0000000000006022/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h12' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006022/1",
- "of:0000000000003012/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h22' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var6 = "Add point intents for mininet hosts h13 and h23 or" +\
- " ONOS hosts hD and h17"
- main.case(var6)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003013/1",
- "of:0000000000006023/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h13' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006023/1",
- "of:0000000000003013/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h23' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var7 = "Add point intents for mininet hosts h14 and h24 or" +\
- " ONOS hosts hE and h18"
- main.case(var7)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003014/1",
- "of:0000000000006024/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h14' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006024/1",
- "of:0000000000003014/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h24' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var8 = "Add point intents for mininet hosts h15 and h25 or" +\
- " ONOS hosts hF and h19"
- main.case(var8)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003015/1",
- "of:0000000000006025/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h15' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006025/1",
- "of:0000000000003015/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h25' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var9 = "Add intents for mininet hosts h16 and h26 or" +\
- " ONOS hosts h10 and h1A"
- main.case(var9)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003016/1",
- "of:0000000000006026/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h16' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006026/1",
- "of:0000000000003016/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h26' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var10 = "Add point intents for mininet hosts h17 and h27 or" +\
- " ONOS hosts h11 and h1B"
- main.case(var10)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003017/1",
- "of:0000000000006027/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h17' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006027/1",
- "of:0000000000003017/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h27' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- print(
- "___________________________________________________________" )
-
- flowHandle = main.ONOS2.flows()
- #main.log.info( "flows :" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report(
- "Point intents have not ben installed correctly. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Point Intents have been installed correctly" )
-
- case9Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case9Result,
- onpass="Point intents addition and Pingall Test successful",
- onfail="Point intents addition and Pingall Test NOT successful" )
diff --git a/TestON/tests/ProdFunc/ProdFunc.topo b/TestON/tests/ProdFunc/ProdFunc.topo
deleted file mode 100755
index 292a8a4..0000000
--- a/TestON/tests/ProdFunc/ProdFunc.topo
+++ /dev/null
@@ -1,93 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
- <arg4> --mac </arg4>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/ProdFunc/__init__.py b/TestON/tests/ProdFunc/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/ProdFunc/__init__.py
+++ /dev/null
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.params b/TestON/tests/ProdFunc13/ProdFunc13.params
deleted file mode 100755
index b926dad..0000000
--- a/TestON/tests/ProdFunc13/ProdFunc13.params
+++ /dev/null
@@ -1,43 +0,0 @@
-<PARAMS>
- #1,4,10,5,6,7,8,9,8,11,8,20,21,22,10,23,24
- <testcases>1,4,10,5,6,7,8,9,8,11,8,2,20,21,22,10,23,24</testcases>
- #Environment variables
- <ENV>
- <cellName>driver_test</cellName>
- </ENV>
- <GIT>
- <pull>False</pull>
- </GIT>
- <CTRL>
- <ip1>10.128.20.11</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <PING>
- <source1>h8</source1>
- <source2>h9</source2>
- <source3>h10</source3>
- <source4>h11</source4>
- <source5>h12</source5>
- <source6>h13</source6>
- <source7>h14</source7>
- <source8>h15</source8>
- <source9>h16</source9>
- <source10>h17</source10>
- <target1>10.0.0.18</target1>
- <target2>10.0.0.19</target2>
- <target3>10.0.0.20</target3>
- <target4>10.0.0.21</target4>
- <target5>10.0.0.22</target5>
- <target6>10.0.0.23</target6>
- <target7>10.0.0.24</target7>
- <target8>10.0.0.25</target8>
- <target9>10.0.0.26</target9>
- <target10>10.0.0.27</target10>
- </PING>
-
- <timers>
- <LinkDiscovery>5</LinkDiscovery>
- <SwitchDiscovery>15</SwitchDiscovery>
- </timers>
-</PARAMS>
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.py b/TestON/tests/ProdFunc13/ProdFunc13.py
deleted file mode 100644
index a274c07..0000000
--- a/TestON/tests/ProdFunc13/ProdFunc13.py
+++ /dev/null
@@ -1,1752 +0,0 @@
-
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
-
-import time
-# import sys
-# import os
-# import re
-import json
-
-time.sleep( 1 )
-
-
-class ProdFunc13:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- import time
- """
- Startup sequence:
- cell <name>
- onos-verify-cell
- onos-remove-raft-log
- git pull
- mvn clean install
- onos-package
- onos-install -f
- onos-wait-for-start
- """
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- gitPull = main.params[ 'GIT' ][ 'pull' ]
-
- main.case( "Setting up test environment" )
- main.log.report(
- "This testcase is testing setting up test environment" )
- main.log.report( "__________________________________" )
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.step( "Git checkout and get version" )
- main.ONOSbench.gitCheckout( "master" )
- if gitPull == 'True':
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == 1:
- main.step( "Using mvn clean & install" )
- main.ONOSbench.cleanInstall()
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
- elif gitPullResult == 0:
- main.log.report(
- "Git Pull Failed, look into logs for detailed reason" )
- main.cleanup()
- main.exit()
- main.log.info( "git_pull_result = " + str( gitPullResult ))
- else:
- main.log.info( "Skipping git pull" )
- main.ONOSbench.getVersion( report=True )
- packageResult = main.TRUE
-
- main.step( "Uninstalling ONOS package" )
- onosInstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
- if onosInstallResult == main.TRUE:
- main.log.report( "Uninstalling ONOS package successful" )
- else:
- main.log.report( "Uninstalling ONOS package failed" )
-
- time.sleep( 20 )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.ONOSbench.onosInstall( ONOS1Ip )
- print onosInstallResult
- if onosInstallResult == main.TRUE:
- main.log.report( "Installing ONOS package successful" )
- else:
- main.log.report( "Installing ONOS package failed" )
-
- time.sleep( 20 )
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- startResult = main.TRUE
- #main.step( "Starting ONOS service" )
- #startResult = main.ONOSbench.onosStart( ONOS1Ip )
-
- main.ONOS2.startOnosCli( ONOS1Ip )
- main.step( "Starting Mininet CLI..." )
-
- # Starting the mininet using the old way
- main.step( "Starting Mininet ..." )
- netIsUp = main.Mininet1.startNet()
- if netIsUp:
- main.log.info("Mininet CLI is up")
-
- case1Result = ( packageResult and
- cellResult and verifyResult
- and onosInstallResult and
- onos1Isup and startResult )
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="Test startup successful",
- onfail="Test startup NOT successful" )
-
- def CASE2( self, main ):
- """
- Switch Down
- """
- # NOTE: You should probably run a topology check after this
- import time
-
- main.case( "Switch down discovery" )
- main.log.report( "This testcase is testing a switch down discovery" )
- main.log.report( "__________________________________" )
-
- switchSleep = int( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
-
- description = "Killing a switch to ensure it is discovered correctly"
- main.log.report( description )
- main.case( description )
-
- # TODO: Make this switch parameterizable
- main.step( "Kill s28 " )
- main.log.report( "Deleting s28" )
- # FIXME: use new dynamic topo functions
- main.Mininet1.delSwitch( "s28" )
- main.log.info(
- "Waiting " +
- str( switchSleep ) +
- " seconds for switch down to be discovered" )
- time.sleep( switchSleep )
- # Peek at the deleted switch
- device = main.ONOS2.getDevice( dpid="0028" )
- print "device = ", device
- if device[ u'available' ] == 'False':
- case2Result = main.FALSE
- else:
- case2Result = main.TRUE
- utilities.assert_equals( expect=main.TRUE, actual=case2Result,
- onpass="Switch down discovery successful",
- onfail="Switch down discovery failed" )
-
- def CASE101( self, main ):
- """
- Cleanup sequence:
- onos-service <nodeIp> stop
- onos-uninstall
-
- TODO: Define rest of cleanup
-
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.case( "Cleaning up test environment" )
-
- main.step( "Testing ONOS kill function" )
- killResult = main.ONOSbench.onosKill( ONOS1Ip )
-
- main.step( "Stopping ONOS service" )
- stopResult = main.ONOSbench.onosStop( ONOS1Ip )
-
- main.step( "Uninstalling ONOS service" )
- uninstallResult = main.ONOSbench.onosUninstall()
-
- case11Result = killResult and stopResult and uninstallResult
- utilities.assert_equals( expect=main.TRUE, actual=case11Result,
- onpass="Cleanup successful",
- onfail="Cleanup failed" )
-
- def CASE3( self, main ):
- """
- Test 'onos' command and its functionality in driver
- """
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.case( "Testing 'onos' command" )
-
- main.step( "Sending command 'onos -w <onos-ip> system:name'" )
- cmdstr1 = "system:name"
- cmdResult1 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr1 )
- main.log.info( "onos command returned: " + cmdResult1 )
-
- main.step( "Sending command 'onos -w <onos-ip> onos:topology'" )
- cmdstr2 = "onos:topology"
- cmdResult2 = main.ONOSbench.onosCli( ONOS1Ip, cmdstr2 )
- main.log.info( "onos command returned: " + cmdResult2 )
-
- def CASE20( self ):
- """
- Exit from mininet cli
- reinstall ONOS
- """
- import time
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.log.report( "This testcase exits the mininet cli and reinstalls" +
- "ONOS to switch over to Packet Optical topology" )
- main.log.report( "_____________________________________________" )
- main.case( "Disconnecting mininet and restarting ONOS" )
-
- main.step( "Disconnecting mininet and restarting ONOS" )
- step1Result = main.TRUE
- mininetDisconnect = main.Mininet1.disconnect()
- print "mininetDisconnect = ", mininetDisconnect
- step1Result = mininetDisconnect
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Mininet disconnect successfully",
- onfail="Mininet failed to disconnect")
- """
- main.step( "Removing raft logs before a clean installation of ONOS" )
- step2Result = main.TRUE
- removeRaftLogsResult = main.ONOSbench.onosRemoveRaftLogs()
- step2Result = removeRaftLogsResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Raft logs removed successfully",
- onfail="Failed to remove raft logs")
- """
- main.step( "Applying cell variable to environment" )
- step3Result = main.TRUE
- setCellResult = main.ONOSbench.setCell( cellName )
- verifyCellResult = main.ONOSbench.verifyCell()
- step3Result = setCellResult and verifyCellResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Cell applied successfully",
- onfail="Failed to apply cell")
-
- main.step( "Uninstalling ONOS package" )
- step4Result = main.TRUE
- ONOSip1 = main.params[ 'CTRL' ][ 'ip1' ]
- onosUninstallResult = main.ONOSbench.onosUninstall( nodeIp = ONOSip1)
- step4Result = onosUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully uninstalled ONOS",
- onfail="Failed to uninstall ONOS")
-
- time.sleep( 5 )
- main.step( "Installing ONOS package" )
- step5Result = main.TRUE
- onosInstallResult = main.ONOSbench.onosInstall( node = ONOSip1 )
- step5Result = onosInstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully installed ONOS",
- onfail="Failed to install ONOS")
-
- onos1Isup = main.ONOSbench.isup()
- if onos1Isup == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up" )
-
- main.step( "Starting ONOS service" )
- step6Result = main.TRUE
- startResult = main.ONOSbench.onosStart( ONOS1Ip )
- step6Result = startResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step6Result,
- onpass="Successfully started ONOS",
- onfail="Failed to start ONOS")
-
- main.step( "Starting ONOS cli" )
- step7Result = main.TRUE
- cliResult = main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
- step7Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step7Result,
- onpass="Successfully started ONOS cli",
- onfail="Failed to start ONOS cli")
-
- def CASE21( self, main ):
- """
- On ONOS bench, run this command:
- sudo -E python ~/onos/tools/test/topos/opticalTest.py -OC1
- which spawns packet optical topology and copies the links
- json file to the onos instance.
- Note that in case of Packet Optical, the links are not learnt
- from the topology, instead the links are learnt
- from the json config file
- """
- import time
- main.log.report(
- "This testcase starts the packet layer topology and REST" )
- main.log.report( "_____________________________________________" )
- main.case( "Starting LINC-OE and other components" )
-
- main.step( "Activate optical app" )
- step1Result = main.TRUE
- activateOpticalResult = main.ONOS2.activateApp( "org.onosproject.optical" )
- step1Result = activateOpticalResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully activated optical app",
- onfail="Failed to activate optical app")
-
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- main.step( "Starting mininet and LINC-OE" )
- step2Result = main.TRUE
- time.sleep( 10 )
- opticalMnScript = main.LincOE2.runOpticalMnScript(ctrllerIP = main.params[ 'CTRL' ][ 'ip1' ])
- step2Result = opticalMnScript
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Started the topology successfully ",
- onfail="Failed to start the topology")
-
- def CASE22( self, main ):
- """
- Curretly we use, 10 optical switches(ROADM's) and
- 6 packet layer mininet switches each with one host.
- Therefore, the roadmCount variable = 10,
- packetLayerSWCount variable = 6, hostCount=6 and
- links=46.
- All this is hardcoded in the testcase. If the topology changes,
- these hardcoded values need to be changed
- """
- import time
- main.log.report(
- "This testcase compares the optical+packet topology against what" +
- " is expected" )
- main.case( "Topology comparision" )
-
- main.step( "Starts new ONOS cli" )
- step1Result = main.TRUE
- cliResult = main.ONOS3.startOnosCli( ONOSIp=main.params[ 'CTRL' ]\
- [ 'ip1' ] )
- step1Result = cliResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully starts a new cli",
- onfail="Failed to start new cli" )
-
- main.step( "Compare topology" )
- step2Result = main.TRUE
- devicesResult = main.ONOS3.devices( jsonFormat=False )
- print "devices_result :\n", devicesResult
- devicesLinewise = devicesResult.split( "\n" )
- roadmCount = 0
- packetLayerSWCount = 0
- for line in devicesLinewise:
- components = line.split( "," )
- availability = components[ 1 ].split( "=" )[ 1 ]
- type = components[ 3 ].split( "=" )[ 1 ]
- if availability == 'true' and type == 'ROADM':
- roadmCount += 1
- elif availability == 'true' and type == 'SWITCH':
- packetLayerSWCount += 1
- if roadmCount == 10:
- print "Number of Optical Switches = %d and is" % roadmCount +\
- " correctly detected"
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is correctly detected" )
- opticalSWResult = main.TRUE
- else:
- print "Number of Optical Switches = %d and is wrong" % roadmCount
- main.log.info(
- "Number of Optical Switches = " +
- str( roadmCount ) +
- " and is wrong" )
- opticalSWResult = main.FALSE
- if packetLayerSWCount == 6:
- print "Number of Packet layer or mininet Switches = %d "\
- % packetLayerSWCount + "and is correctly detected"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is correctly detected" )
- packetSWResult = main.TRUE
- else:
- print "Number of Packet layer or mininet Switches = %d and"\
- % packetLayerSWCount + " is wrong"
- main.log.info(
- "Number of Packet layer or mininet Switches = " +
- str( packetLayerSWCount ) +
- " and is wrong" )
- packetSWResult = main.FALSE
- # sleeps for sometime so the state of the switches will be active
- time.sleep( 30 )
- print "_________________________________"
- linksResult = main.ONOS3.links( jsonFormat=False )
- print "links_result = ", linksResult
- print "_________________________________"
- linkActiveCount = linksResult.count("state=ACTIVE")
- main.log.info( "linkActiveCount = " + str( linkActiveCount ))
- if linkActiveCount == 46:
- linkActiveResult = main.TRUE
- main.log.info(
- "Number of links in ACTIVE state are correct")
- else:
- linkActiveResult = main.FALSE
- main.log.info(
- "Number of links in ACTIVE state are wrong")
- step2Result = opticalSWResult and packetSWResult and \
- linkActiveResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully loaded packet optical topology",
- onfail="Failed to load packet optical topology" )
-
- def CASE23( self, main ):
- import time
- """
- Add bidirectional point intents between 2 packet layer( mininet )
- devices and
- ping mininet hosts
- """
- main.log.report(
- "This testcase adds bidirectional point intents between 2 " +
- "packet layer( mininet ) devices and ping mininet hosts" )
- main.case( "Install point intents between 2 packet layer device and " +
- "ping the hosts" )
-
- main.step( "Adding point intents" )
- checkFlowResult = main.TRUE
- step1Result = main.TRUE
- main.pIntentsId = []
- pIntent1 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0001/1",
- "of:0000ffffffff0005/1" )
- pIntent2 = main.ONOS3.addPointIntent(
- "of:0000ffffffff0005/1",
- "of:0000ffffffff0001/1" )
- main.pIntentsId.append( pIntent1 )
- main.pIntentsId.append( pIntent2 )
- time.sleep( 10 )
- main.log.info( "Checking intents state")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- time.sleep( 10 )
- main.log.info( "Checking flows state")
- checkFlowResult = main.ONOS3.checkFlowsState()
- # Sleep for 30 seconds to provide time for the intent state to change
- time.sleep( 10 )
- main.log.info( "Checking intents state one more time")
- checkStateResult = main.ONOS3.checkIntentState(
- intentsId = main.pIntentsId )
- step1Result = checkStateResult and checkFlowResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully added point intents",
- onfail="Failed to add point intents")
-
- main.step( "Ping h1 and h5" )
- step2Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step2Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- def CASE24( self, main ):
- import time
- import json
- """
- LINC uses its own switch IDs. You can use the following
- command on the LINC console to find the mapping between
- DPIDs and LINC IDs.
- rp(application:get_all_key(linc)).
-
- Test Rerouting of Packet Optical by bringing a port down
- ( port 20 ) of a switch( switchID=1, or LincOE switchID =9 ),
- so that link
- ( between switch1 port20 - switch5 port50 ) is inactive
- and do a ping test. If rerouting is successful,
- ping should pass. also check the flows
- """
- main.log.report(
- "This testcase tests rerouting and pings mininet hosts" )
- main.case( "Test rerouting and pings mininet hosts" )
-
- main.step( "Attach to the Linc-OE session" )
- step1Result = main.TRUE
- attachConsole = main.LincOE1.attachLincOESession()
- step1Result = attachConsole
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully attached Linc-OE session",
- onfail="Failed to attached Linc-OE session")
-
- main.step( "Bring a port down and verify the link state" )
- step2Result = main.TRUE
- main.LincOE1.portDown( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 2:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- links = main.ONOS3.links()
- main.log.info( "links = " + links )
- linksResult = json.loads( links )
- linksStateResult = main.FALSE
- for item in linksResult:
- if item[ 'src' ][ 'device' ] == "of:0000ffffffffff01" and item[
- 'src' ][ 'port' ] == "20":
- if item[ 'dst' ][ 'device' ] == "of:0000ffffffffff05" and item[
- 'dst' ][ 'port' ] == "50":
- linksState = item[ 'state' ]
- if linksState == "INACTIVE":
- main.log.info(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- main.log.report(
- "Links state is inactive as expected due to one" +
- " of the ports being down" )
- linksStateResult = main.TRUE
- break
- else:
- main.log.info(
- "Links state is not inactive as expected" )
- main.log.report(
- "Links state is not inactive as expected" )
- linksStateResult = main.FALSE
- time.sleep( 10 )
- checkFlowsState = main.ONOS3.checkFlowsState()
- step2Result = linksStateResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step2Result,
- onpass="Successfuly brought down a link",
- onfail="Failed to bring down a link")
-
- main.step( "Verify Rerouting by a ping test" )
- step3Result = main.TRUE
- main.log.info( "\n\nh1 is Pinging h5" )
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h5" )
- step3Result = pingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step3Result,
- onpass="Successfully pinged h1 and h5",
- onfail="Failed to ping between h1 and h5")
-
- main.step( "Bring the downed port up and verify the link state" )
- step4Result = main.TRUE
- main.LincOE1.portUp( swId="9", ptId="20" )
- linksNonjson = main.ONOS3.links( jsonFormat=False )
- main.log.info( "links = " + linksNonjson )
- linkInactiveCount = linksNonjson.count( "state=INACTIVE" )
- main.log.info( "linkInactiveCount = " + str( linkInactiveCount ))
- if linkInactiveCount == 0:
- main.log.info(
- "Number of links in INACTIVE state are correct")
- else:
- main.log.info(
- "Number of links in INACTIVE state are wrong")
- step4Result = main.FALSE
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully brought the port up",
- onfail="Failed to bring the port up")
- """
- main.step( "Removing host intents" )
- step5Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step5Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step5Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
- """
- def CASE10( self ):
- main.log.report(
- "This testcase uninstalls the reactive forwarding app" )
- main.log.report( "__________________________________" )
- main.case( "Uninstalling reactive forwarding app" )
- main.step( "Uninstalling reactive forwarding app" )
- step1Result = main.TRUE
- # Unistall onos-app-fwd app to disable reactive forwarding
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOS2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
- step1Result = appUninstallResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Successfully deactivate reactive forwarding app",
- onfail="Failed to deactivate reactive forwarding app")
- # After reactive forwarding is disabled, the reactive flows on
- # switches timeout in 10-15s
- # So sleep for 15s
- time.sleep( 15 )
- flows = main.ONOS2.flows()
- main.log.info( flows )
-
- def CASE25( self ):
- """
- Add host intents between 2 packet layer host
- """
- import time
- import json
- main.log.report( "Adding host intents between 2 optical layer host" )
- main.case( "Test add host intents between optical layer host" )
-
- main.step( "Discover host using arping" )
- step1Result = main.TRUE
- main.hostMACs = []
- main.hostId = []
- #Listing host MAC addresses
- for i in range( 1 , 7 ):
- main.hostMACs.append( "00:00:00:00:00:" +
- str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
- for macs in main.hostMACs:
- main.hostId.append( macs + "/-1" )
- host1 = main.hostId[ 0 ]
- host2 = main.hostId[ 1 ]
- # Use arping to discover the hosts
- main.LincOE2.arping( host = "h1" )
- main.LincOE2.arping( host = "h2" )
- time.sleep( 5 )
- hostsDict = main.ONOS3.hosts()
- if not len( hostsDict ):
- step1Result = main.FALSE
- # Adding host intent
- utilities.assert_equals(
- expect=main.TRUE,
- actual=step1Result,
- onpass="Hosts discovered",
- onfail="Failed to discover hosts")
-
- main.step( "Adding host intents to h1 and h2" )
- step2Result = main.TRUE
- intentsId = []
- intent1 = main.ONOS3.addHostIntent( hostIdOne = host1,
- hostIdTwo = host2 )
- intentsId.append( intent1 )
- time.sleep( 5 )
- intent2 = main.ONOS3.addHostIntent( hostIdOne = host2,
- hostIdTwo = host1 )
- intentsId.append( intent2 )
- # Checking intents state before pinging
- main.log.info( "Checking intents state" )
- time.sleep( 15 )
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- #check intent state again if intents are not in installed state
- if not intentResult:
- intentResult = main.ONOS3.checkIntentState( intentsId = intentsId )
- step2Result = intentResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step2Result,
- onpass="All intents are in INSTALLED state ",
- onfail="Some of the intents are not in " +
- "INSTALLED state " )
-
- # pinging h1 to h2 and then ping h2 to h1
- main.step( "Pinging h1 and h2" )
- step3Result = main.TRUE
- pingResult = main.TRUE
- pingResult = main.LincOE2.pingHostOptical( src="h1", target="h2" )
- pingResult = pingResult and main.LincOE2.pingHostOptical( src="h2",
- target="h1" )
- step3Result = pingResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step3Result,
- onpass="Pinged successfully between h1 and h2",
- onfail="Pinged failed between h1 and h2" )
- # Removed all added host intents
- main.step( "Removing host intents" )
- step4Result = main.TRUE
- removeResult = main.TRUE
- # Check remaining intents
- intentsJson = json.loads( main.ONOS3.intents() )
- main.ONOS3.removeIntent( intentId=intent1, purge=True )
- main.ONOS3.removeIntent( intentId=intent2, purge=True )
- for intents in intentsJson:
- main.ONOS3.removeIntent( intentId=intents.get( 'id' ),
- app='org.onosproject.optical',
- purge=True )
- print json.loads( main.ONOS3.intents() )
- if len( json.loads( main.ONOS3.intents() ) ):
- removeResult = main.FALSE
- step4Result = removeResult
- utilities.assert_equals( expect=main.TRUE,
- actual=step4Result,
- onpass="Successfully removed host intents",
- onfail="Failed to remove host intents" )
-
- def CASE4( self, main ):
- import re
- import time
- main.log.report( "This testcase is testing the assignment of" +
- " all the switches to all the controllers and" +
- " discovering the hosts in reactive mode" )
- main.log.report( "__________________________________" )
-
- main.case( "Pingall Test" )
- main.step( "Assigning switches to controllers" )
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- ONOS1Port = main.params[ 'CTRL' ][ 'port1' ]
- for i in range( 1, 29 ):
- if i == 1:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 2 and i < 5:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 5 and i < 8:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 8 and i < 18:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- elif i >= 18 and i < 28:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- else:
- main.Mininet1.assignSwController(
- sw=str( i ),
- ip1=ONOS1Ip,
- port1=ONOS1Port )
- SwitchMastership = main.TRUE
- for i in range( 1, 29 ):
- if i == 1:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 2 and i < 5:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 5 and i < 8:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 8 and i < 18:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- elif i >= 18 and i < 28:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is " + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
- else:
- response = main.Mininet1.getSwController( "s" + str( i ) )
- print( "Response is" + str( response ) )
- if re.search( "tcp:" + ONOS1Ip, response ):
- SwitchMastership = SwitchMastership and main.TRUE
- else:
- SwitchMastership = main.FALSE
-
- if SwitchMastership == main.TRUE:
- main.log.report( "Controller assignmnet successful" )
- else:
- main.log.report( "Controller assignmnet failed" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=SwitchMastership,
- onpass="MasterControllers assigned correctly" )
- """
- for i in range ( 1,29 ):
- main.Mininet1.assignSwController( sw=str( i ),count=5,
- ip1=ONOS1Ip,port1=ONOS1Port,
- ip2=ONOS2Ip,port2=ONOS2Port,
- ip3=ONOS3Ip,port3=ONOS3Port,
- ip4=ONOS4Ip,port4=ONOS4Port,
- ip5=ONOS5Ip,port5=ONOS5Port )
- """
- # REACTIVE FWD test
- main.log.info( "Activate fwd app" )
- appInstallResult = main.ONOS2.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
- time.sleep( 10 )
-
- main.step( "Get list of hosts from Mininet" )
- hostList = main.Mininet1.getHosts().keys()
- main.log.info( hostList )
-
- main.step( "Get host list in ONOS format" )
- hostOnosList = main.ONOS2.getHostsId( hostList )
- main.log.info( hostOnosList )
- # time.sleep( 5 )
-
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall()
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- # Start onos cli again because u might have dropped out of
- # onos prompt to the shell prompt
- # if there was no activity
- main.ONOS2.startOnosCli( ONOSIp=main.params[ 'CTRL' ][ 'ip1' ] )
-
- case4Result = SwitchMastership and pingResult
- if pingResult == main.TRUE:
- main.log.report( "Pingall Test in reactive mode to" +
- " discover the hosts successful" )
- else:
- main.log.report( "Pingall Test in reactive mode to" +
- " discover the hosts failed" )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case4Result,
- onpass="Controller assignment and Pingall Test successful",
- onfail="Controller assignment and Pingall Test NOT successful" )
-
- def CASE11( self ):
- # NOTE: This testcase require reactive forwarding mode enabled
- # NOTE: in the beginning and then uninstall it before adding
- # NOTE: point intents. Again the app is installed so that
- # NOTE: testcase 10 can be ran successively
- import time
- main.log.report(
- "This testcase moves a host from one switch to another to add" +
- "point intents between them and then perform ping" )
- main.log.report( "__________________________________" )
- main.log.info( "Moving host from one switch to another" )
- main.case( "Moving host from a device and attach it to another device" )
- main.step( "Moving host h9 from device s9 and attach it to s8" )
- main.Mininet1.moveHost(host = 'h9', oldSw = 's9', newSw = 's8')
-
- main.log.info( "Activate fwd app" )
- appInstallResult = main.ONOS2.activateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- time.sleep(25) #Time delay to have all the flows ready
- main.step( "Pingall" )
- pingResult = main.FALSE
- time1 = time.time()
- pingResult = main.Mininet1.pingall( timeout=120,
- shortCircuit=True,
- acceptableFailed=20 )
- time2 = time.time()
- print "Time for pingall: %2f seconds" % ( time2 - time1 )
-
- hosts = main.ONOS2.hosts( jsonFormat = False )
- main.log.info( hosts )
-
- main.log.info( "deactivate reactive forwarding app" )
- appUninstallResult = main.ONOS2.deactivateApp( "org.onosproject.fwd" )
- appCheck = main.ONOS2.appToIDCheck()
- if appCheck != main.TRUE:
- main.log.warn( main.ONOS2.apps() )
- main.log.warn( main.ONOS2.appIDs() )
-
- main.step( "Add point intents between hosts on the same device")
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003008/1",
- "of:0000000000003008/3",
- ethType='IPV4',
- ethSrc='00:00:00:00:00:08',
- ethDst='00:00:00:00:00:09' )
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003008/3",
- "of:0000000000003008/1",
- ethType='IPV4',
- ethSrc='00:00:00:00:00:09',
- ethDst='00:00:00:00:00:08' )
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- main.case( "Ping hosts on the same devices" )
- ping = main.Mininet1.pingHost( src = 'h8', target = 'h9' )
-
- '''
- main.case( "Installing reactive forwarding app" )
- # Install onos-app-fwd app to enable reactive forwarding
- appUninstallResult = main.ONOS2.featureInstall( "onos-app-fwd" )
- main.log.info( "onos-app-fwd installed" )
- '''
-
- if ping == main.FALSE:
- main.log.report(
- "Point intents for hosts on same devices haven't" +
- " been installed correctly. Cleaning up" )
- if ping == main.TRUE:
- main.log.report(
- "Point intents for hosts on same devices" +
- "installed correctly. Cleaning up" )
-
- case11Result = ping
- utilities.assert_equals(
- expect = main.TRUE,
- actual = case11Result,
- onpass = "Point intents for hosts on same devices" +
- "Ping Test successful",
- onfail = "Point intents for hosts on same devices" +
- "Ping Test NOT successful" )
-
- def CASE12( self ):
- """
- Verify the default flows on each switch in proactive mode
- """
- main.log.report( "This testcase is verifying num of default" +
- " flows on each switch" )
- main.log.report( "__________________________________" )
- main.case( "Verify num of default flows on each switch" )
- main.step( "Obtaining the device id's and flowrule count on them" )
-
- case12Result = main.TRUE
- idList = main.ONOS2.getAllDevicesId()
- for id in idList:
- count = main.ONOS2.FlowAddedCount( id )
- main.log.info("count = " +count)
- if int(count) != 3:
- case12Result = main.FALSE
- break
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case12Result,
- onpass = "Expected default num of flows exist",
- onfail = "Expected default num of flows do not exist")
-
- def CASE6( self ):
- import time
- main.log.report( "This testcase is testing the addition of" +
- " host intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.case( "Obtaining host id's" )
- main.step( "Get hosts" )
- hosts = main.ONOS2.hosts()
- main.log.info( hosts )
-
- main.step( "Get all devices id" )
- devicesIdList = main.ONOS2.getAllDevicesId()
- main.log.info( devicesIdList )
-
- # ONOS displays the hosts in hex format unlike mininet which does
- # in decimal format
- # So take care while adding intents
- """
- main.step( "Add host-to-host intents for mininet hosts h8 and h18 or
- ONOS hosts h8 and h12" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1" )
- hthIntentResult = main.ONOS2.addHostIntent(
- "00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1" )
- print "______________________________________________________"
- """
- intentsId = []
- for i in range( 8, 18 ):
- main.log.info(
- "Adding host intent between h" + str( i ) +
- " and h" + str( i + 10 ) )
- host1 = "00:00:00:00:00:" + \
- str( hex( i )[ 2: ] ).zfill( 2 ).upper()
- host2 = "00:00:00:00:00:" + \
- str( hex( i + 10 )[ 2: ] ).zfill( 2 ).upper()
- # NOTE: get host can return None
- if host1:
- host1Id = main.ONOS2.getHost( host1 )[ 'id' ]
- if host2:
- host2Id = main.ONOS2.getHost( host2 )[ 'id' ]
- if host1Id and host2Id:
- intentsId.append( main.ONOS2.addHostIntent( host1Id, host2Id ) )
-
- checkIntentResult = main.ONOS2.checkIntentState( intentsId )
- time.sleep( 10 )
- hIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intents:" + hIntents )
- flows = main.ONOS2.flows()
- main.log.info( "flows:" + flows )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- # while i<10:
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
- if PingResult == main.FALSE:
- main.log.report(
- "Ping all test after Host intent addition failed.Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report(
- "Ping all test after Host intent addition successful" )
-
- checkIntentResult = main.ONOS2.checkIntentState( intentsId )
-
- case6Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case6Result,
- onpass="Pingall Test after Host intents addition successful",
- onfail="Pingall Test after Host intents addition failed" )
-
- def CASE5( self, main ):
- """
- Check ONOS topology matches with mininet
- """
- import json
- main.log.report( "This testcase is testing if all ONOS nodes" +
- " are in topology sync with mininet" )
- main.log.report( "__________________________________" )
- main.case( "Comparing Mininet topology with the topology of ONOS" )
- main.step( "Start continuous pings" )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong(
- src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
-
- TopologyCheck = main.TRUE
- main.step( "Compare ONOS Topology to MN Topology" )
- devicesJson = main.ONOS2.devices()
- linksJson = main.ONOS2.links()
- portsJson = main.ONOS2.ports()
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- result1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devicesJson ), json.loads( portsJson ) )
- result2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( linksJson ) )
-
- result = result1 and result2
-
- print "***********************"
- if result == main.TRUE:
- main.log.report( "ONOS" + " Topology matches MN Topology" )
- else:
- main.log.report( "ONOS" + " Topology does not match MN Topology" )
-
- utilities.assert_equals(
- expect=main.TRUE,
- actual=result,
- onpass="ONOS" +
- " Topology matches MN Topology",
- onfail="ONOS" +
- " Topology does not match MN Topology" )
-
- TopologyCheck = TopologyCheck and result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=TopologyCheck,
- onpass="Topology checks passed",
- onfail="Topology checks failed" )
-
- def CASE7( self, main ):
- """
- Link discovery test case. Checks if ONOS can discover a link
- down or up properly.
- """
- linkSleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
-
- main.log.report( "This testscase is killing a link to ensure that" +
- " link discovery is consistent" )
- main.log.report( "__________________________________" )
- main.log.report( "Killing a link to ensure that link discovery" +
- " is consistent" )
- main.case( "Killing a link to Ensure that Link Discovery" +
- "is Working Properly" )
- """
- main.step( "Start continuous pings" )
-
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source1' ],
- target=main.params[ 'PING' ][ 'target1' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source2' ],
- target=main.params[ 'PING' ][ 'target2' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source3' ],
- target=main.params[ 'PING' ][ 'target3' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source4' ],
- target=main.params[ 'PING' ][ 'target4' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source5' ],
- target=main.params[ 'PING' ][ 'target5' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source6' ],
- target=main.params[ 'PING' ][ 'target6' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source7' ],
- target=main.params[ 'PING' ][ 'target7' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source8' ],
- target=main.params[ 'PING' ][ 'target8' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source9' ],
- target=main.params[ 'PING' ][ 'target9' ],
- pingTime=500 )
- main.Mininet2.pingLong( src=main.params[ 'PING' ][ 'source10' ],
- target=main.params[ 'PING' ][ 'target10' ],
- pingTime=500 )
- """
- main.step( "Determine the current number of switches and links" )
- topologyOutput = main.ONOS2.topology()
- topologyResult = main.ONOS1.getTopology( topologyOutput )
- activeSwitches = topologyResult[ 'devices' ]
- links = topologyResult[ 'links' ]
- print "activeSwitches = ", type( activeSwitches )
- print "links = ", type( links )
- main.log.info(
- "Currently there are %s switches and %s links" %
- ( str( activeSwitches ), str( links ) ) )
-
- main.step( "Kill Link between s3 and s28" )
- main.Mininet1.link( END1="s3", END2="s28", OPTION="down" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOS2.topology()
- LinkDown = main.ONOS1.checkStatus(
- topologyOutput, activeSwitches, str(
- int( links ) - 2 ) )
- if LinkDown == main.TRUE:
- main.log.report( "Link Down discovered properly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=LinkDown,
- onpass="Link Down discovered properly",
- onfail="Link down was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- # Check ping result here..add code for it
-
- main.step( "Bring link between s3 and s28 back up" )
- LinkUp = main.Mininet1.link( END1="s3", END2="s28", OPTION="up" )
- time.sleep( linkSleep )
- topologyOutput = main.ONOS2.topology()
- LinkUp = main.ONOS1.checkStatus(
- topologyOutput,
- activeSwitches,
- str( links ) )
- if LinkUp == main.TRUE:
- main.log.report( "Link up discovered properly" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=LinkUp,
- onpass="Link up discovered properly",
- onfail="Link up was not discovered in " +
- str( linkSleep ) +
- " seconds" )
-
- # NOTE Check ping result here..add code for it
-
- main.step( "Compare ONOS Topology to MN Topology" )
- TopologyCheck = main.TRUE
-
- devicesJson = main.ONOS2.devices()
- linksJson = main.ONOS2.links()
- portsJson = main.ONOS2.ports()
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
-
- result1 = main.Mininet1.compareSwitches(
- mnSwitches, json.loads( devicesJson ), json.loads( portsJson ) )
- result2 = main.Mininet1.compareLinks(
- mnSwitches, mnLinks, json.loads( linksJson ) )
-
- result = result1 and result2
- print "***********************"
-
- if result == main.TRUE:
- main.log.report( "ONOS" + " Topology matches MN Topology" )
- utilities.assert_equals(
- expect=main.TRUE,
- actual=result,
- onpass="ONOS" +
- " Topology matches MN Topology",
- onfail="ONOS" +
- " Topology does not match MN Topology" )
-
- TopologyCheck = TopologyCheck and result
- utilities.assert_equals(
- expect=main.TRUE,
- actual=TopologyCheck,
- onpass="Topology checks passed",
- onfail="Topology checks failed" )
-
- result = LinkDown and LinkUp and TopologyCheck
- utilities.assert_equals( expect=main.TRUE, actual=result,
- onpass="Link failure is discovered correctly",
- onfail="Link Discovery failed" )
-
- def CASE8( self ):
- """
- Intent removal
- """
- import time
- main.log.report( "This testcase removes any previously added intents" +
- " before adding any new set of intents" )
- main.log.report( "__________________________________" )
- main.log.info( "intent removal" )
- main.case( "Removing installed intents" )
- main.step( "Obtain the intent id's" )
- currentIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intent_result = " + currentIntents )
- intentLinewise = currentIntents.split( "\n" )
-
- intentList = [line for line in intentLinewise \
- if line.startswith( "id=")]
- intentids = [line.split( "," )[ 0 ].split( "=" )[ 1 ] for line in \
- intentList]
- for id in intentids:
- print "id = ", id
-
- main.step(
- "Iterate through the intentids list and remove each intent" )
- for id in intentids:
- main.ONOS2.removeIntent( intentId=id ,purge=True)
-
- remainingIntents = main.ONOS2.intents( jsonFormat=False )
- main.log.info( "intent_result = " + remainingIntents )
- if remainingIntents:
- main.log.info( "There are still remaining intents " )
- intentResult = main.FALSE
- else:
- intentResult = main.TRUE
-
- intentList = [line for line in remainingIntents.split( "\n" ) \
- if line.startswith( "id=")]
- intentState = [line.split( "," )[ 1 ].split( "=" )[ 1 ] for line in \
- intentList]
- for state in intentState:
- print state
-
- case8Result = main.TRUE
- for state in intentState:
- if state != 'WITHDRAWN':
- case8Result = main.FALSE
- break
-
- PingResult = main.TRUE
- """
- if case8Result == main.TRUE:
- i = 8
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.TRUE:
- i = 19
- PingResult = PingResult and main.TRUE
- elif ping == main.FALSE:
- i += 1
- PingResult = PingResult and main.FALSE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- # Note: If the ping result failed, that means the intents have been
- # withdrawn correctly.
- if PingResult == main.TRUE:
- main.log.report( "Installed intents have not been withdrawn correctly" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.FALSE:
- main.log.report( "Installed intents have been withdrawn correctly" )
- """
-
- if case8Result:
- main.log.report( "Intent removal successful" )
- else:
- main.log.report( "Intent removal failed" )
-
- utilities.assert_equals( expect=main.TRUE, actual=case8Result,
- onpass="Intent removal test passed",
- onfail="Intent removal test failed" )
-
- def CASE9( self ):
- """
- Testing Point intents
- """
- main.log.report(
- "This test case adds point intents and then does pingall" )
- main.log.report( "__________________________________" )
- main.log.info( "Adding point intents" )
- main.case(
- "Adding bidirectional point for mn hosts" +
- "( h8-h18, h9-h19, h10-h20, h11-h21, h12-h22, " +
- "h13-h23, h14-h24, h15-h25, h16-h26, h17-h27 )" )
- macsDict = {}
- for i in range( 1,29 ):
- macsDict[ 'h' + str( i ) ]= main.Mininet1.getMacAddress( host='h'+ str( i ) )
- print macsDict
- main.step( "Add point intents for mn hosts h8 and h18 or" +
- "ONOS hosts h8 and h12" )
- # main.step(var1)
- ptpIntentResult = main.ONOS2.addPointIntent(
- ingressDevice="of:0000000000003008/1",
- egressDevice="of:0000000000006018/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h8' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- ingressDevice="of:0000000000006018/1",
- egressDevice="of:0000000000003008/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h18' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var2 = "Add point intents for mn hosts h9&h19 or ONOS hosts h9&h13"
- main.step(var2)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003009/1",
- "of:0000000000006019/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h9' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006019/1",
- "of:0000000000003009/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h19' ))
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var3 = "Add point intents for MN hosts h10&h20 or ONOS hosts hA&h14"
- main.step(var3)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003010/1",
- "of:0000000000006020/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h10' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006020/1",
- "of:0000000000003010/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h20' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var4 = "Add point intents for mininet hosts h11 and h21 or" +\
- " ONOS hosts hB and h15"
- main.case(var4)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003011/1",
- "of:0000000000006021/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h11' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006021/1",
- "of:0000000000003011/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h21' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var5 = "Add point intents for mininet hosts h12 and h22 " +\
- "ONOS hosts hC and h16"
- main.case(var5)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003012/1",
- "of:0000000000006022/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h12' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006022/1",
- "of:0000000000003012/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h22' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var6 = "Add point intents for mininet hosts h13 and h23 or" +\
- " ONOS hosts hD and h17"
- main.case(var6)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003013/1",
- "of:0000000000006023/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h13' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006023/1",
- "of:0000000000003013/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h23' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var7 = "Add point intents for mininet hosts h14 and h24 or" +\
- " ONOS hosts hE and h18"
- main.case(var7)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003014/1",
- "of:0000000000006024/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h14' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006024/1",
- "of:0000000000003014/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h24' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var8 = "Add point intents for mininet hosts h15 and h25 or" +\
- " ONOS hosts hF and h19"
- main.case(var8)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003015/1",
- "of:0000000000006025/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h15' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006025/1",
- "of:0000000000003015/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h25' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var9 = "Add intents for mininet hosts h16 and h26 or" +\
- " ONOS hosts h10 and h1A"
- main.case(var9)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003016/1",
- "of:0000000000006026/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h16' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006026/1",
- "of:0000000000003016/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h26' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- # main.log.info( getIntentResult )
-
- var10 = "Add point intents for mininet hosts h17 and h27 or" +\
- " ONOS hosts h11 and h1B"
- main.case(var10)
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000003017/1",
- "of:0000000000006027/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h17' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- ptpIntentResult = main.ONOS2.addPointIntent(
- "of:0000000000006027/1",
- "of:0000000000003017/1",
- ethType='IPV4',
- ethSrc=macsDict.get( 'h27' ))
-
- if ptpIntentResult == main.TRUE:
- getIntentResult = main.ONOS2.intents()
- main.log.info( "Point to point intent install successful" )
- #main.log.info( getIntentResult )
-
- print(
- "___________________________________________________________" )
-
- flowHandle = main.ONOS2.flows()
- #main.log.info( "flows :" + flowHandle )
-
- count = 1
- i = 8
- PingResult = main.TRUE
- while i < 18:
- main.log.info(
- "\n\nh" + str( i ) + " is Pinging h" + str( i + 10 ) )
- ping = main.Mininet1.pingHost(
- src="h" + str( i ), target="h" + str( i + 10 ) )
- if ping == main.FALSE and count < 5:
- count += 1
- # i = 8
- PingResult = main.FALSE
- main.log.report( "Ping between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- " failed. Making attempt number " +
- str( count ) +
- " in 2 seconds" )
- time.sleep( 2 )
- elif ping == main.FALSE:
- main.log.report( "All ping attempts between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "have failed" )
- i = 19
- PingResult = main.FALSE
- elif ping == main.TRUE:
- main.log.info( "Ping test between h" +
- str( i ) +
- " and h" +
- str( i +
- 10 ) +
- "passed!" )
- i += 1
- PingResult = main.TRUE
- else:
- main.log.info( "Unknown error" )
- PingResult = main.ERROR
-
- if PingResult == main.FALSE:
- main.log.report(
- "Point intents have not ben installed correctly. Cleaning up" )
- # main.cleanup()
- # main.exit()
- if PingResult == main.TRUE:
- main.log.report( "Point Intents have been installed correctly" )
-
- case9Result = PingResult
- utilities.assert_equals(
- expect=main.TRUE,
- actual=case9Result,
- onpass="Point intents addition and Pingall Test successful",
- onfail="Point intents addition and Pingall Test NOT successful" )
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.topo b/TestON/tests/ProdFunc13/ProdFunc13.topo
deleted file mode 100755
index 2605b2e..0000000
--- a/TestON/tests/ProdFunc13/ProdFunc13.topo
+++ /dev/null
@@ -1,93 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1>
- <host>10.128.10.11</host>
- <user>sdn</user>
- <password>sdn</password>
- <type>OnosDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
-
- <Mininet1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <arg4> --mac </arg4>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS>
- #Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
- <arg2> --topo mytopo </arg2>
- <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet2>
-
- <LincOE1>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>LincOEDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE1>
-
- <LincOE2>
- <host>10.128.10.11</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </LincOE2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/ProdFunc13/__init__.py b/TestON/tests/ProdFunc13/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/ProdFunc13/__init__.py
+++ /dev/null
diff --git a/TestON/tests/FuncStartTemplate/FuncStartTemplate.params b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.params
similarity index 100%
rename from TestON/tests/FuncStartTemplate/FuncStartTemplate.params
rename to TestON/tests/SAMPstartTemplate/SAMPstartTemplate.params
diff --git a/TestON/tests/FuncStartTemplate/FuncStartTemplate.py b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
similarity index 98%
rename from TestON/tests/FuncStartTemplate/FuncStartTemplate.py
rename to TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
index 59c242c..9df58af 100644
--- a/TestON/tests/FuncStartTemplate/FuncStartTemplate.py
+++ b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
@@ -2,12 +2,7 @@
# Testing the basic functionality of ONOS Next
# For sanity and driver functionality excercises only.
-import time
-import json
-
-time.sleep( 1 )
-
-class FuncStartTemplate:
+class SAMPstartTemplate:
def __init__( self ):
self.default = ''
diff --git a/TestON/tests/FuncStartTemplate/FuncStartTemplate.topo b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo
similarity index 100%
rename from TestON/tests/FuncStartTemplate/FuncStartTemplate.topo
rename to TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo
diff --git a/TestON/tests/FuncStartTemplate/__init__.py b/TestON/tests/SAMPstartTemplate/__init__.py
similarity index 100%
rename from TestON/tests/FuncStartTemplate/__init__.py
rename to TestON/tests/SAMPstartTemplate/__init__.py
diff --git a/TestON/tests/SCPFcbench/SCPFcbench.params b/TestON/tests/SCPFcbench/SCPFcbench.params
new file mode 100644
index 0000000..8a11b56
--- /dev/null
+++ b/TestON/tests/SCPFcbench/SCPFcbench.params
@@ -0,0 +1,40 @@
+<PARAMS>
+
+ <testcases>1,2</testcases>
+
+ <SCALE>1</SCALE>
+ <availableNodes>1</availableNodes>
+
+ <ENV>
+ <cellName>Cbenchcell</cellName>
+ </ENV>
+
+ <TEST>
+ <skipCleanInstall>yes</skipCleanInstall>
+ <mode>t</mode> #t throughput
+ </TEST>
+
+ <GIT>
+ <autopull>off</autopull>
+ <checkout>master</checkout>
+ </GIT>
+
+ <CTRL>
+ <USER>admin</USER>
+ <ip1>OC1</ip1>
+ <port1>6633</port1>
+ </CTRL>
+
+ <MN>
+ <ip1>OC1</ip1>
+ </MN>
+
+ <BENCH>
+ <user>admin</user>
+ <ip1>localhost</ip1>
+ </BENCH>
+
+ <JSON>
+ </JSON>
+
+</PARAMS>
diff --git a/TestON/tests/CbenchBM/CbenchBM.py b/TestON/tests/SCPFcbench/SCPFcbench.py
similarity index 88%
rename from TestON/tests/CbenchBM/CbenchBM.py
rename to TestON/tests/SCPFcbench/SCPFcbench.py
index d042f45..79cdce2 100644
--- a/TestON/tests/CbenchBM/CbenchBM.py
+++ b/TestON/tests/SCPFcbench/SCPFcbench.py
@@ -5,17 +5,19 @@
# cameron@onlab.us
import sys
+import os
import os.path
-class CbenchBM:
+class SCPFcbench:
def __init__( self ):
self.default = ''
def CASE1( self, main ):
- import time
+ import time
+ import os
global init
try:
if type(init) is not bool:
@@ -47,8 +49,8 @@
#Populate ONOSIp with ips from params
for i in range(1, maxNodes + 1):
- ipString = 'ip' + str(i)
- ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
+ ipString = os.environ[main.params['CTRL']['ip1']]
+ ONOSIp.append(ipString)
#mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
if skipMvn != "yes":
@@ -81,10 +83,23 @@
for i in range(1, maxNodes + 1):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
-
+
+ time.sleep(10)
+ main.ONOSbench.handle.sendline(" ")
+ main.ONOSbench.handle.expect(":~")
+ print "pexpect: \n" + main.ONOSbench.handle.before
+
+
+ print "Cellname is: "+ cellName + "ONOS IP is: " + str(ONOSIp)
+ main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,"drivers,openflow,fwd",ONOSIp[1])
+
main.step( "Set Cell" )
main.ONOSbench.setCell(cellName)
-
+
+ #main.ONOSbench.handle.sendline(" ")
+ #main.ONOSbench.handle.expect(":~")
+ #print "pexpect: \n" + main.ONOSbench.handle.before
+
main.step( "Creating ONOS package" )
packageResult = main.ONOSbench.onosPackage()
@@ -165,7 +180,7 @@
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- dbfile = open("CbenchBMDB", "w+")
+ dbfile = open("CbenchDB", "w+")
temp = "'" + commit + "',"
temp += "'" + mode + "',"
temp += "'" + avg + "',"
diff --git a/TestON/tests/SCPFcbench/SCPFcbench.topo b/TestON/tests/SCPFcbench/SCPFcbench.topo
new file mode 100644
index 0000000..cae9c93
--- /dev/null
+++ b/TestON/tests/SCPFcbench/SCPFcbench.topo
@@ -0,0 +1,35 @@
+<TOPOLOGY>
+
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS><home>~/onos</home></COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>OCN</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS1>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ </COMPONENT>
+
+</TOPOLOGY>
+
diff --git a/TestON/tests/SdnIpTest/__init__.py b/TestON/tests/SCPFcbench/__init__.py
similarity index 100%
rename from TestON/tests/SdnIpTest/__init__.py
rename to TestON/tests/SCPFcbench/__init__.py
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.params b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.params
similarity index 100%
rename from TestON/tests/IntentEventTP/IntentEventTP.params
rename to TestON/tests/SCPFintentEventTp/SCPFintentEventTp.params
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.py b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
similarity index 98%
rename from TestON/tests/IntentEventTP/IntentEventTP.py
rename to TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
index 44178b2..069f1c4 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.py
+++ b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
@@ -8,7 +8,7 @@
import os.path
-class IntentEventTP:
+class SCPFintentEventTp:
def __init__( self ):
self.default = ''
@@ -212,7 +212,7 @@
main.ONOSbench.handle.sendline("onos $OC1 summary")
main.ONOSbench.handle.expect(":~")
main.log.info("before" + main.ONOSbench.handle.before)
- clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
+ clusterCheck = main.ONOSbench.handle.before
print("\nBefore: " + str(clusterCheck))
if ("SCC(s)=1,") in clusterCheck:
break
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.topo b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.topo
similarity index 100%
rename from TestON/tests/IntentEventTP/IntentEventTP.topo
rename to TestON/tests/SCPFintentEventTp/SCPFintentEventTp.topo
diff --git a/TestON/tests/SdnIpSingleSwitch/__init__.py b/TestON/tests/SCPFintentEventTp/__init__.py
similarity index 100%
rename from TestON/tests/SdnIpSingleSwitch/__init__.py
rename to TestON/tests/SCPFintentEventTp/__init__.py
diff --git a/TestON/tests/SdnIpSingleSwitch/CASE4-ping-as2host.sh b/TestON/tests/SdnIpSingleSwitch/CASE4-ping-as2host.sh
deleted file mode 100755
index 52768b2..0000000
--- a/TestON/tests/SdnIpSingleSwitch/CASE4-ping-as2host.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-
-#all the address in this for loop should work
-
-# ping test between as2 and as3
-for ((i=0;i<10;i++)); do
-
- #echo '------from 3.0.0.x to 4.0.1.'$j'------'
-
- for ((j=0; j<10; ++j )) ; do
- echo '3.0.'$i'.1 -> 4.0.'$j'.1'
- ping -c 1 -w 1 -I 3.0.$i.1 4.0.$j.1 | grep 'from 4.0.'$j'.1'
-
- done
-
-done
-for ((i=0;i<10;i++)); do
-
- #echo '------from 3.0.0.x to 5.0.1.'$j'------'
-
- for ((j=0; j<10; ++j )) ; do
- echo '3.0.'$i'.1 -> 5.0.'$j'.1'
- ping -c 1 -w 1 -I 3.0.$i.1 5.0.$j.1 | grep 'from 5.0.'$j'.1'
-
- done
-
-done
-
-# ping test between as2 and as4
-for ((i=1;i<2;i++)); do
- for ((prefix=101; prefix<=200; ++prefix)) ; do
- for ((j=0; j<10; ++j )) ; do
- echo '3.0.0.'$i' - > '$prefix'.0.'$j'.1'
- ping -c 1 -w 1 -I 3.0.0.$i $prefix.0.$j.1 | grep 'from '$prefix'.0.'$j'.1'
-
- done
- done
-
-done
-
diff --git a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.params b/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.params
deleted file mode 100755
index 467141d..0000000
--- a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.params
+++ /dev/null
@@ -1,25 +0,0 @@
-<PARAMS>
-
- <testcases>4</testcases>
-
- #Environment variables
- <ENV>
- <cellName>sdnip_single_instance</cellName>
- </ENV>
-
- <CTRL>
- <ip1>127.0.0.1</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <GIT>
- <autoPull>off</autoPull>
- <checkout>master</checkout>
- </GIT>
-
- <JSON>
- <prefix>prefix</prefix>
- <nextHop>nextHop</nextHop>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.py b/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.py
deleted file mode 100644
index d13bdb3..0000000
--- a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.py
+++ /dev/null
@@ -1,1133 +0,0 @@
-# from cupshelpers.config import prefix
-
-# Testing the basic functionality of SDN-IP
-
-
-class SdnIpSingleSwitch:
-
- def __init__( self ):
- self.default = ''
-
-# from cupshelpers.config import prefix
-
-# Testing the basic functionality of SDN-IP
-
-
-class SdnIpSingleSwitch:
-
- def __init__( self ):
- self.default = ''
-
- def CASE4( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
- ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- SDNIPJSONFILEPATH = \
- "/home/sdnip/TestON/tests/SdnIpSingleSwitch/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- time.sleep( 20 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- time.sleep( 60 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get rpoute intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = \
- main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = \
- main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- main.log.info( "Ping Test Start" )
- time.sleep(1000000)
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- pingTestScript = "CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/CASE4-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 20 )
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/CASE4-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 100 )
-
- # main.step( "Test whether Mininet is started" )
- # main.Mininet2.handle.sendline( "xterm host1" )
- # main.Mininet2.handle.expect( "mininet>" )
-
- def CASE3( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
- ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case( "The test case is to help to setup the TestON \
- environment and test new drivers" )
- # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- SDNIPJSONFILEPATH = \
- "/home/admin/workspace/onos/tools/package/config/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = \
- main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- for prefix in prefixesHostX:
- allRoutesExpected.append(
- prefix + "/" + "192.168.40." + str( i - 100 ) )
-
- routeIntentsExpectedHostX = \
- main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
- prefixesHostX, "192.168.40." + str( i - 100 ),
- "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
- routeIntentsExpected = routeIntentsExpected + \
- routeIntentsExpectedHostX
-
- main.log.info( "Login Quagga CLI on host" + str( i ) )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
- main.log.info(
- "Enter configuration model of Quagga CLI on host" + str( i ) )
- QuaggaCliHostX.enterConfig( 65000 + i - 100 )
- main.log.info( "Add routes to Quagga on host" + str( i ) )
- QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
-
- time.sleep( 60 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get rpoute intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
- SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 20 )
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- for i in range( 101, 201 ):
- prefixesHostX = \
- main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
- getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 100 )
-
- # main.step( "Test whether Mininet is started" )
- # main.Mininet2.handle.sendline( "xterm host1" )
- # main.Mininet2.handle.expect( "mininet>" )
-
- def CASE1( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents \
- from ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- # bgpPeerHosts = []
- # for i in range( 3, 5 ):
- # bgpPeerHosts.append( "host" + str( i ) )
- # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
-
- # for i in range( 3, 5 ):
- # QuaggaCliHost = "QuaggaCliHost" + str( i )
- # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
-
- # main.log.info( prefixes )
- # allRoutesExpected.append( prefixes )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Starting ONOS service" )
- # TODO: start ONOS from Mininet Script
- # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
- # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
- time.sleep( 60 )
-
- # get all routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get rpoute intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = \
- main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
-
- # ping test
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-
- # main.log.info( "main.ONOScli.get_routes_num() = " )
- # main.log.info( main.ONOScli.getRoutesNum() )
- # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
- # main.ONOScli.getRoutesNum(),
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 30 )
-
- # main.step( "Test whether Mininet is started" )
- # main.Mininet2.handle.sendline( "xterm host1" )
- # main.Mininet2.handle.expect( "mininet>" )
-
- def CASE2( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents \
- from ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- from time import localtime, strftime
-
- main.case(
- "The test case is to help to setup the TestON environment and \
- test new drivers" )
- SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- # main.log.report( "Removing raft logs" )
- # main.ONOSbench.onosRemoveRaftLogs()
- # main.log.report( "Uninstalling ONOS" )
- # main.ONOSbench.onosUninstall( ONOS1Ip )
- main.step( "Creating ONOS package" )
- # packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
- # node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- # time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
- SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- # roundNum = 0;
- # while( True ):
- for roundNum in range( 1, 6 ):
- # round = round + 1;
- main.log.report( "The Round " + str( roundNum ) +
- " test starts................................" )
-
- main.step( "Login all BGP peers and add routes into peers" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info(
- "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info(
- "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
- time.sleep( 60 )
-
- # get all routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step(
- "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get route intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str(
- routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info(
- "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after adding routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after adding routes \
- wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
- + str( roundNum ) + "-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- # ping test
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.log.info( "Delete routes to Quagga on host3" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.log.info( "Delete routes to Quagga on host4" )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass=
- "***MultiPointToSinglePoint Intents number in SDN-IP \
- is 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
- is 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting \
- routes correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting \
- routes wrong!***" )
-
- time.sleep( 20 )
- # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
- + str( roundNum ) + "-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 30 )
-
diff --git a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.topo b/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.topo
deleted file mode 100755
index df9f7d2..0000000
--- a/TestON/tests/SdnIpSingleSwitch/SdnIpSingleSwitch.topo
+++ /dev/null
@@ -1,73 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>127.0.0.1</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOSbench>
-
- <ONOScli>
- <host>127.0.0.1</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOScli>
-
- <ONOS1>
- <host>127.0.0.1</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>OnosDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS>
- <home>~/onos</home>
- </COMPONENTS>
- </ONOS1>
-
- <QuaggaCliHost3>
- <host>1.168.30.2</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>QuaggaCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost3>
- <QuaggaCliHost4>
- <host>1.168.30.3</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>QuaggaCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost4>
- <QuaggaCliHost5>
- <host>1.168.30.5</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>QuaggaCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost5>
- <QuaggaCliHost>
- <host>1.168.30.100</host>
- <user>sdnip</user>
- <password>sdnip</password>
- <type>QuaggaCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost>
-
-
- </COMPONENT>
-</TOPOLOGY>
-
diff --git a/TestON/tests/SdnIpSingleSwitch/addresses.json b/TestON/tests/SdnIpSingleSwitch/addresses.json
deleted file mode 100644
index 203de9b..0000000
--- a/TestON/tests/SdnIpSingleSwitch/addresses.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:a1",
- "port" : "2",
- "ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01"
-
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a1",
- "port" : "3",
- "ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a1",
- "port" : "4",
- "ips" : ["192.168.30.101/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a1",
- "port" : "5",
- "ips" : ["192.168.60.101/24"],
- "mac" : "00:00:00:00:00:01"
- }
-
- ]
-}
diff --git a/TestON/tests/SdnIpSingleSwitch/intents.json b/TestON/tests/SdnIpSingleSwitch/intents.json
deleted file mode 100644
index d17715f..0000000
--- a/TestON/tests/SdnIpSingleSwitch/intents.json
+++ /dev/null
@@ -1,1468 +0,0 @@
-[
- {
- "id":"0xffffffffcb2cb6ec",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x140a3304",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffcb2d9828",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x1a89f138",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd1418988",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x2cd85684",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3122a56b",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5874487",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x6ae96523",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x217361ed",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaee31428",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x68cad35c",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffed2b21fa",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffa5dbcf50",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x373774a3",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0x5a75d509",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8d492c5d",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffef408263",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8ce7d031",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffb344fe39",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xf2665f1",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5b61a473",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd0e186b8",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x4d8d4942",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3738d163",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffff993b0fc9",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xfffffffff33e39a0",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffda3dd5b2",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8ce60db9",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xfeca8b9",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3124d881",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x40241a59",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd141fa26",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x3018359e",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaee2a38a",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x658af442",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaf46b62f",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x7a92607b",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8d484b21",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffe8c0c42f",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffed295f82",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x28379d0",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffdba23bce",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5e70036",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaf44f3b7",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffd73a0afb",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x751d3d2e",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffc4847e9e",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3fb23806",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x23d68afe",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0x751be06e",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0xffffffff85bf43de",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x6aea465f",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x27f32021",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xf25f553",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5821c559",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xfffffffff3406cb6",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x14daab84",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd7d10b27",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffff8f921bfd",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0xffffffffa79364e5",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffb81af9ff",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0x14d9eb65",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffd1edad87",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x14d88ea5",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0xffffffff932872c7",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd0df53a2",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x12f07370",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- }
-]
\ No newline at end of file
diff --git a/TestON/tests/SdnIpSingleSwitch/sdnip.json b/TestON/tests/SdnIpSingleSwitch/sdnip.json
deleted file mode 100644
index 6f719cf..0000000
--- a/TestON/tests/SdnIpSingleSwitch/sdnip.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "2",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "3",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "5",
- "ipAddress" : "192.168.60.2"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:01",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a1",
- "interfacePort" : "2",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a1",
- "interfacePort" : "3",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a1",
- "interfacePort" : "4",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a1",
- "interfacePort" : "5",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/SdnIpSingleSwitchMininet.py b/TestON/tests/SdnIpSingleSwitch/topology/SdnIpSingleSwitchMininet.py
deleted file mode 100755
index 6befc1b..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/SdnIpSingleSwitchMininet.py
+++ /dev/null
@@ -1,333 +0,0 @@
-#!/usr/bin/python
-
-"""
-Start up the SDN-IP demo topology
-"""
-
-"""
-AS1 = 64513, (SDN AS)
-AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
-AS3 = 64516, reachable by 192.168.30.1
-AS4 = 64517, reachable by 192.168.40.1
-AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
-"""
-
-from mininet.net import Mininet
-from mininet.node import Controller, RemoteController
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.topo import Topo
-from mininet.util import quietRun
-from mininet.moduledeps import pathCheck
-
-import os.path
-import time
-from subprocess import Popen, STDOUT, PIPE
-
-QUAGGA_DIR = '/usr/lib/quagga'
-#QUAGGA_DIR = '/usr/local/sbin'
-QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
-
-
-class SDNIpModifiedTopo( Topo ):
- "SDN Ip Modified Topology"
-
- def __init__( self, *args, **kwargs ):
- global numHost101
- global numHost200
- numHost101 = 101
- numHost200 = 200
- Topo.__init__( self, *args, **kwargs )
- sw1 = self.addSwitch('sw1', dpid='00000000000000a1')
- #sw2 = self.addSwitch('sw2', dpid='00000000000000a2')
- #sw3 = self.addSwitch('sw3', dpid='00000000000000a3')
- #sw4 = self.addSwitch('sw4', dpid='00000000000000a4')
- #sw5 = self.addSwitch('sw5', dpid='00000000000000a5')
- #sw6 = self.addSwitch('sw6', dpid='00000000000000a6')
- #add a switch for 3 quagga hosts
- swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
- #Note this switch isn't part of the SDN topology
- #We'll use the ovs-controller to turn this into a learning switch
- as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
-
- host1 = self.addHost( 'host1' )
- root1 = self.addHost( 'root1', inNamespace=False , ip='0')
- rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
-
- #AS2 host
- host3 = self.addHost( 'host3' )
- as2host = self.addHost( 'as2host' )
- #AS3 host
- host4 = self.addHost( 'host4' )
- as3host = self.addHost( 'as3host' )
- #AS6 host
- host5 = self.addHost( 'host5' )
- as6host = self.addHost( 'as6host' )
-
- self.addLink( host1, sw1 )
- #Links to the multihomed AS
- self.addLink( host3, sw1 )
- self.addLink( host3, sw1 )
- self.addLink( as2host, host3 )
- #Single links to the remaining two ASes
- self.addLink( host4, sw1 )
- self.addLink( as3host, host4 )
-
- #AS3-AS4 link
- #self.addLink( host4, host5)
- #Add new AS6 to its bridge
- self.addLink( host5, as6sw )
- self.addLink( as6host, host5 )
- #test the host behind the router(behind the router server)
-# for i in range(1, 10):
- # host = self.addHost('as6host%d' % i)
- # self.addLink(host, as6router)
-
- ## Internal Connection To Hosts ##
- self.addLink( root1, host1 )
-
- # self.addLink( sw1, sw2 )
- # self.addLink( sw1, sw3 )
- # self.addLink( sw2, sw4 )
- # self.addLink( sw3, sw4 )
- # self.addLink( sw3, sw5 )
- # self.addLink( sw4, sw6 )
- # self.addLink( sw5, sw6 )
- self.addLink( as6sw, sw1 )
-
-
- self.addLink(swTestOn, rootTestOn)
- #self.addLink(swTestOn, host1)
- self.addLink(swTestOn, host3)
- self.addLink(swTestOn, host4)
- self.addLink(swTestOn, host5)
- self.addLink(swTestOn, as2host)
-
-
- #self.addLink(rootTestOn, host4)
-
-def startsshd( host ):
- "Start sshd on host"
- info( '*** Starting sshd\n' )
- name, intf, ip = host.name, host.defaultIntf(), host.IP()
- banner = '/tmp/%s.banner' % name
- host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
- host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
- info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
-
-def startsshds ( hosts ):
- for h in hosts:
- startsshd( h )
-
-def stopsshd( ):
- "Stop *all* sshd processes with a custom banner"
- info( '*** Shutting down stale sshd/Banner processes ',
- quietRun( "pkill -9 -f Banner" ), '\n' )
-
-def startquagga( host, num, config_file ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- print zebra_cmd
- print quagga_cmd
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-def startquaggahost5( host, num ):
- info( '*** Starting Quagga on %s\n' % host )
- zebra_cmd = 'sudo %s/zebra -d -f zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
- quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
-
- host.cmd( zebra_cmd )
- host.cmd( quagga_cmd )
-
-
-def stopquagga( ):
- quietRun( 'sudo pkill -9 -f bgpd' )
- quietRun( 'sudo pkill -9 -f zebra' )
-
-def sdn1net():
- topo = SDNIpModifiedTopo()
- info( '*** Creating network\n' )
- net = Mininet( topo=topo, controller=RemoteController )
- net = Mininet( topo=topo, controller=RemoteController )
-
- host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
-
- #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")
-
- #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
- #add IP prefixes
- #for j in range(0,121):
- #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
-
- ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
- #sw1 = net.get('sw1')
- host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
- host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
- #host1.cmd('ip addr add 192.168.40.101/24 dev host1-eth0')
- host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
-
- # Net has to be start after adding the above link
- net.start()
-
- # Set up as6sw as a learning switch as quickly as possible so it
- # hopefully doesn't connect to the actual controller
- # TODO figure out how to change controller before starting switch
- as6sw = net.get('as6sw')
- as6sw.cmd('ovs-vsctl set-controller as6sw none')
- as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
-
-
- sw1 = net.get('sw1')
- sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
-# sw2.cmd('ovs-vsctl set-controller sw2 tcp:127.0.0.1:6633')
-# sw3.cmd('ovs-vsctl set-controller sw3 tcp:127.0.0.1:6633')
-# sw4.cmd('ovs-vsctl set-controller sw4 tcp:127.0.0.1:6633')
-# sw5.cmd('ovs-vsctl set-controller sw5 tcp:127.0.0.1:6633')
-# sw6.cmd('ovs-vsctl set-controller sw6 tcp:127.0.0.1:6633')
-
-
- swTestOn = net.get('swTestOn')
- swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
- swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
-
- host1.defaultIntf().setIP('192.168.10.101/24')
- # Run BGPd
- #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
- #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
-
- # Configure new host interfaces
- #host2.defaultIntf().setIP('172.16.10.2/24')
- #host2.defaultIntf().setMAC('00:00:00:00:01:02')
- #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
-
- # Set up AS2
- host3.setIP('192.168.10.1', 24, 'host3-eth0')
- #host3.cmd('sudo ip addr add 172.16.20.1/24 dev host3-eth0')
- host3.setIP('192.168.20.1', 24, 'host3-eth1')
- host3.setMAC('00:00:00:00:02:01', 'host3-eth0')
- host3.setMAC('00:00:00:00:02:02', 'host3-eth1')
- #host3.setIP('172.16.20.254', 24, 'host3-eth2')
- host3.setIP('3.0.0.254', 8, 'host3-eth2')
- host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
-
- host3.setIP('1.168.30.2', 24, 'host3-eth3')
- host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
- host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
- as2host = net.get('as2host')
- #as2host.defaultIntf().setIP('172.16.20.1/24')
- for i in range(0, 20):
- as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
- as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
-
- as2host.cmd('ip route add default via 3.0.0.254')
-
- # Set up AS3
- host4.setIP('192.168.30.1', 24, 'host4-eth0')
- host4.setMAC('00:00:00:00:03:01', 'host4-eth0')
- host4.setIP('4.0.0.254', 8, 'host4-eth1')
- host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
- host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- as3host = net.get('as3host')
- for i in range(0, 20):
- as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
- as3host.cmd('ip route add default via 4.0.0.254')
-
- #root space
- host4.setIP('1.168.30.3', 24, 'host4-eth2')
- host4.setMAC('00:00:00:00:03:03', 'host4-eth2')
-
- # Set up AS4
- #as4host = net.get('as4host')
- #as4host.defaultIntf().setIP('172.16.40.1/24')
- #as4host.cmd('ip route add default via 172.16.40.254')
-
- # setup interface address for 100 quagga hosts
- time.sleep(10)
- #for i in range(numHost101, numHost200 + 1):
- #host100 = net.get('host' + str(i))
- #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
- #as4host100 = net.get('as4host%s' %(i))
- #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
- #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
- #for j in range(0, 100):
- #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
-
- # Set up AS6 - This has a router and a route server
- #as6rs, host5 = net.get('as6rs', 'host5')
- host5 = net.get('host5')
- #as6rs.setIP('192.168.60.1', 24, 'as6rs-eth0')
- #as6rs.setMAC('00:00:00:00:06:01', 'as6rs-eth0')
- host5.setIP('192.168.60.2', 24, 'host5-eth0')
- host5.setMAC('00:00:00:00:06:02', 'host5-eth0')
- #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
- host5.setIP('5.0.0.254', 8, 'host5-eth1')
- host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
- host5.setIP('1.168.30.5', 24, 'host5-eth2')
- host5.setMAC('00:00:00:00:06:05', 'host5-eth2')
-
- as6host = net.get('as6host')
- #as6host.defaultIntf().setIP('5.0.0.1/24')
- for i in range(0, 10):
- as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
- as6host.cmd('ip route add default via 5.0.0.254')
-
- # test the host in the as6
- #for i in range(1, 10):
- # baseip = (i-1)*4
- # host = net.get('as6host%d' % i)
- # host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
- # host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
- # as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
-
- # Start Quagga on border routers
- startquagga(host3, 1, 'quagga1.conf')
- startquagga(host4, 2, 'quagga2.conf')
- #for i in range(numHost101, numHost200 + 1):
- #host100=net.get('host%d' % (i))
- #startquaggahost5(host100, i)
-
- #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
- startquagga(host5, 5, 'quagga-as6.conf')
-
- #root1, root2, rootTestOn = net.get( 'root1', 'root2', 'rootTestOn' )
- root1, rootTestOn = net.get( 'root1', 'rootTestOn' )
- host1.intf('host1-eth1').setIP('1.1.1.1/24')
- root1.intf('root1-eth0').setIP('1.1.1.2/24')
- #host2.intf('host2-eth1').setIP('1.1.2.1/24')
- #root2.intf('root2-eth0').setIP('1.1.2.2/24')
-
- #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
- rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
-
- stopsshd()
-
- startquagga(host1, 100, 'quagga-sdn-modified.conf')
- hosts = [ host1, host3, host4, host5, as2host ];
- #sshdHosts = sshdHosts + hosts
- startsshds( hosts )
- #
- onos1 = '127.0.0.1'
- forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
- root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
-
- # Forward 2605 to root namespace for easier access to SDN domain BGPd
- # If root can ssh to itself without a password this should work
- root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
- #time.sleep(3000000000)
- CLI( net )
-
- # Close the ssh port forwarding
- #quietRun('sudo pkill -f 1.1.1.1')
-
- stopsshd()
- stopquagga()
- net.stop()
-
-if __name__ == '__main__':
- setLogLevel( 'debug' )
- sdn1net()
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6-rs.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6-rs.conf
deleted file mode 100644
index 1eac0dd..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6-rs.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64520
- bgp router-id 192.168.60.1
- neighbor 192.168.60.101 remote-as 64513
- neighbor 192.168.60.101 route-server-client
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 route-server-client
-! network 172.16.60.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6.conf
deleted file mode 100644
index 434f983..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga-as6.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64521
- bgp router-id 192.168.60.2
- neighbor 192.168.60.101 remote-as 64513
-! neighbor 192.168.60.1 remote-as 64520
-! neighbor 192.168.60.3 remote-as 64520
-! network 172.16.60.0/24
-! network 172.16.70.4/30
- ! network 172.16.70.8/30
- ! network 172.16.70.12/30
- ! network 172.16.70.16/30
- ! network 172.16.70.20/30
- ! network 172.16.70.24/30
- ! network 172.16.70.28/30
- ! network 172.16.70.32/30
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn-modified.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn-modified.conf
deleted file mode 100644
index d334c2a..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn-modified.conf
+++ /dev/null
@@ -1,49 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.2 remote-as 64521
- neighbor 192.168.60.2 ebgp-multihop
- neighbor 192.168.60.2 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn.conf
deleted file mode 100644
index 77392a6..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga-sdn.conf
+++ /dev/null
@@ -1,349 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-route-map AS65000 permit 1
- set as-path prepend 65000
-!
-router bgp 64513
- bgp router-id 192.168.10.101
- timers bgp 1 3
- !timers bgp 3 9
- neighbor 192.168.10.1 remote-as 64514
- neighbor 192.168.10.1 ebgp-multihop
- neighbor 192.168.10.1 timers connect 5
- neighbor 192.168.20.1 remote-as 64514
- neighbor 192.168.20.1 ebgp-multihop
- neighbor 192.168.20.1 timers connect 5
- neighbor 192.168.20.1 route-map AS65000 in
- neighbor 192.168.30.1 remote-as 64516
- neighbor 192.168.30.1 ebgp-multihop
- neighbor 192.168.30.1 timers connect 5
- neighbor 192.168.60.1 remote-as 64520
- neighbor 192.168.60.1 ebgp-multihop
- neighbor 192.168.60.1 timers connect 5
- neighbor 1.1.1.2 remote-as 64513
- neighbor 1.1.1.2 port 2000
- neighbor 1.1.1.2 timers connect 5
-
-
-neighbor 192.168.40.1 remote-as 65001
-neighbor 192.168.40.1 ebgp-multihop
-neighbor 192.168.40.1 timers connect 10
-neighbor 192.168.40.2 remote-as 65002
-neighbor 192.168.40.2 ebgp-multihop
-neighbor 192.168.40.2 timers connect 10
-neighbor 192.168.40.3 remote-as 65003
-neighbor 192.168.40.3 ebgp-multihop
-neighbor 192.168.40.3 timers connect 10
-neighbor 192.168.40.4 remote-as 65004
-neighbor 192.168.40.4 ebgp-multihop
-neighbor 192.168.40.4 timers connect 10
-neighbor 192.168.40.5 remote-as 65005
-neighbor 192.168.40.5 ebgp-multihop
-neighbor 192.168.40.5 timers connect 10
-neighbor 192.168.40.6 remote-as 65006
-neighbor 192.168.40.6 ebgp-multihop
-neighbor 192.168.40.6 timers connect 10
-neighbor 192.168.40.7 remote-as 65007
-neighbor 192.168.40.7 ebgp-multihop
-neighbor 192.168.40.7 timers connect 10
-neighbor 192.168.40.8 remote-as 65008
-neighbor 192.168.40.8 ebgp-multihop
-neighbor 192.168.40.8 timers connect 10
-neighbor 192.168.40.9 remote-as 65009
-neighbor 192.168.40.9 ebgp-multihop
-neighbor 192.168.40.9 timers connect 10
-neighbor 192.168.40.10 remote-as 65010
-neighbor 192.168.40.10 ebgp-multihop
-neighbor 192.168.40.10 timers connect 10
-neighbor 192.168.40.11 remote-as 65011
-neighbor 192.168.40.11 ebgp-multihop
-neighbor 192.168.40.11 timers connect 10
-neighbor 192.168.40.12 remote-as 65012
-neighbor 192.168.40.12 ebgp-multihop
-neighbor 192.168.40.12 timers connect 10
-neighbor 192.168.40.13 remote-as 65013
-neighbor 192.168.40.13 ebgp-multihop
-neighbor 192.168.40.13 timers connect 10
-neighbor 192.168.40.14 remote-as 65014
-neighbor 192.168.40.14 ebgp-multihop
-neighbor 192.168.40.14 timers connect 10
-neighbor 192.168.40.15 remote-as 65015
-neighbor 192.168.40.15 ebgp-multihop
-neighbor 192.168.40.15 timers connect 10
-neighbor 192.168.40.16 remote-as 65016
-neighbor 192.168.40.16 ebgp-multihop
-neighbor 192.168.40.16 timers connect 10
-neighbor 192.168.40.17 remote-as 65017
-neighbor 192.168.40.17 ebgp-multihop
-neighbor 192.168.40.17 timers connect 10
-neighbor 192.168.40.18 remote-as 65018
-neighbor 192.168.40.18 ebgp-multihop
-neighbor 192.168.40.18 timers connect 10
-neighbor 192.168.40.19 remote-as 65019
-neighbor 192.168.40.19 ebgp-multihop
-neighbor 192.168.40.19 timers connect 10
-neighbor 192.168.40.20 remote-as 65020
-neighbor 192.168.40.20 ebgp-multihop
-neighbor 192.168.40.20 timers connect 10
-neighbor 192.168.40.21 remote-as 65021
-neighbor 192.168.40.21 ebgp-multihop
-neighbor 192.168.40.21 timers connect 10
-neighbor 192.168.40.22 remote-as 65022
-neighbor 192.168.40.22 ebgp-multihop
-neighbor 192.168.40.22 timers connect 10
-neighbor 192.168.40.23 remote-as 65023
-neighbor 192.168.40.23 ebgp-multihop
-neighbor 192.168.40.23 timers connect 10
-neighbor 192.168.40.24 remote-as 65024
-neighbor 192.168.40.24 ebgp-multihop
-neighbor 192.168.40.24 timers connect 10
-neighbor 192.168.40.25 remote-as 65025
-neighbor 192.168.40.25 ebgp-multihop
-neighbor 192.168.40.25 timers connect 10
-neighbor 192.168.40.26 remote-as 65026
-neighbor 192.168.40.26 ebgp-multihop
-neighbor 192.168.40.26 timers connect 10
-neighbor 192.168.40.27 remote-as 65027
-neighbor 192.168.40.27 ebgp-multihop
-neighbor 192.168.40.27 timers connect 10
-neighbor 192.168.40.28 remote-as 65028
-neighbor 192.168.40.28 ebgp-multihop
-neighbor 192.168.40.28 timers connect 10
-neighbor 192.168.40.29 remote-as 65029
-neighbor 192.168.40.29 ebgp-multihop
-neighbor 192.168.40.29 timers connect 10
-neighbor 192.168.40.30 remote-as 65030
-neighbor 192.168.40.30 ebgp-multihop
-neighbor 192.168.40.30 timers connect 10
-neighbor 192.168.40.31 remote-as 65031
-neighbor 192.168.40.31 ebgp-multihop
-neighbor 192.168.40.31 timers connect 10
-neighbor 192.168.40.32 remote-as 65032
-neighbor 192.168.40.32 ebgp-multihop
-neighbor 192.168.40.32 timers connect 10
-neighbor 192.168.40.33 remote-as 65033
-neighbor 192.168.40.33 ebgp-multihop
-neighbor 192.168.40.33 timers connect 10
-neighbor 192.168.40.34 remote-as 65034
-neighbor 192.168.40.34 ebgp-multihop
-neighbor 192.168.40.34 timers connect 10
-neighbor 192.168.40.35 remote-as 65035
-neighbor 192.168.40.35 ebgp-multihop
-neighbor 192.168.40.35 timers connect 10
-neighbor 192.168.40.36 remote-as 65036
-neighbor 192.168.40.36 ebgp-multihop
-neighbor 192.168.40.36 timers connect 10
-neighbor 192.168.40.37 remote-as 65037
-neighbor 192.168.40.37 ebgp-multihop
-neighbor 192.168.40.37 timers connect 10
-neighbor 192.168.40.38 remote-as 65038
-neighbor 192.168.40.38 ebgp-multihop
-neighbor 192.168.40.38 timers connect 10
-neighbor 192.168.40.39 remote-as 65039
-neighbor 192.168.40.39 ebgp-multihop
-neighbor 192.168.40.39 timers connect 10
-neighbor 192.168.40.40 remote-as 65040
-neighbor 192.168.40.40 ebgp-multihop
-neighbor 192.168.40.40 timers connect 10
-neighbor 192.168.40.41 remote-as 65041
-neighbor 192.168.40.41 ebgp-multihop
-neighbor 192.168.40.41 timers connect 10
-neighbor 192.168.40.42 remote-as 65042
-neighbor 192.168.40.42 ebgp-multihop
-neighbor 192.168.40.42 timers connect 10
-neighbor 192.168.40.43 remote-as 65043
-neighbor 192.168.40.43 ebgp-multihop
-neighbor 192.168.40.43 timers connect 10
-neighbor 192.168.40.44 remote-as 65044
-neighbor 192.168.40.44 ebgp-multihop
-neighbor 192.168.40.44 timers connect 10
-neighbor 192.168.40.45 remote-as 65045
-neighbor 192.168.40.45 ebgp-multihop
-neighbor 192.168.40.45 timers connect 10
-neighbor 192.168.40.46 remote-as 65046
-neighbor 192.168.40.46 ebgp-multihop
-neighbor 192.168.40.46 timers connect 10
-neighbor 192.168.40.47 remote-as 65047
-neighbor 192.168.40.47 ebgp-multihop
-neighbor 192.168.40.47 timers connect 10
-neighbor 192.168.40.48 remote-as 65048
-neighbor 192.168.40.48 ebgp-multihop
-neighbor 192.168.40.48 timers connect 10
-neighbor 192.168.40.49 remote-as 65049
-neighbor 192.168.40.49 ebgp-multihop
-neighbor 192.168.40.49 timers connect 10
-neighbor 192.168.40.50 remote-as 65050
-neighbor 192.168.40.50 ebgp-multihop
-neighbor 192.168.40.50 timers connect 10
-neighbor 192.168.40.51 remote-as 65051
-neighbor 192.168.40.51 ebgp-multihop
-neighbor 192.168.40.51 timers connect 10
-neighbor 192.168.40.52 remote-as 65052
-neighbor 192.168.40.52 ebgp-multihop
-neighbor 192.168.40.52 timers connect 10
-neighbor 192.168.40.53 remote-as 65053
-neighbor 192.168.40.53 ebgp-multihop
-neighbor 192.168.40.53 timers connect 10
-neighbor 192.168.40.54 remote-as 65054
-neighbor 192.168.40.54 ebgp-multihop
-neighbor 192.168.40.54 timers connect 10
-neighbor 192.168.40.55 remote-as 65055
-neighbor 192.168.40.55 ebgp-multihop
-neighbor 192.168.40.55 timers connect 10
-neighbor 192.168.40.56 remote-as 65056
-neighbor 192.168.40.56 ebgp-multihop
-neighbor 192.168.40.56 timers connect 10
-neighbor 192.168.40.57 remote-as 65057
-neighbor 192.168.40.57 ebgp-multihop
-neighbor 192.168.40.57 timers connect 10
-neighbor 192.168.40.58 remote-as 65058
-neighbor 192.168.40.58 ebgp-multihop
-neighbor 192.168.40.58 timers connect 10
-neighbor 192.168.40.59 remote-as 65059
-neighbor 192.168.40.59 ebgp-multihop
-neighbor 192.168.40.59 timers connect 10
-neighbor 192.168.40.60 remote-as 65060
-neighbor 192.168.40.60 ebgp-multihop
-neighbor 192.168.40.60 timers connect 10
-neighbor 192.168.40.61 remote-as 65061
-neighbor 192.168.40.61 ebgp-multihop
-neighbor 192.168.40.61 timers connect 10
-neighbor 192.168.40.62 remote-as 65062
-neighbor 192.168.40.62 ebgp-multihop
-neighbor 192.168.40.62 timers connect 10
-neighbor 192.168.40.63 remote-as 65063
-neighbor 192.168.40.63 ebgp-multihop
-neighbor 192.168.40.63 timers connect 10
-neighbor 192.168.40.64 remote-as 65064
-neighbor 192.168.40.64 ebgp-multihop
-neighbor 192.168.40.64 timers connect 10
-neighbor 192.168.40.65 remote-as 65065
-neighbor 192.168.40.65 ebgp-multihop
-neighbor 192.168.40.65 timers connect 10
-neighbor 192.168.40.66 remote-as 65066
-neighbor 192.168.40.66 ebgp-multihop
-neighbor 192.168.40.66 timers connect 10
-neighbor 192.168.40.67 remote-as 65067
-neighbor 192.168.40.67 ebgp-multihop
-neighbor 192.168.40.67 timers connect 10
-neighbor 192.168.40.68 remote-as 65068
-neighbor 192.168.40.68 ebgp-multihop
-neighbor 192.168.40.68 timers connect 10
-neighbor 192.168.40.69 remote-as 65069
-neighbor 192.168.40.69 ebgp-multihop
-neighbor 192.168.40.69 timers connect 10
-neighbor 192.168.40.70 remote-as 65070
-neighbor 192.168.40.70 ebgp-multihop
-neighbor 192.168.40.70 timers connect 10
-neighbor 192.168.40.71 remote-as 65071
-neighbor 192.168.40.71 ebgp-multihop
-neighbor 192.168.40.71 timers connect 10
-neighbor 192.168.40.72 remote-as 65072
-neighbor 192.168.40.72 ebgp-multihop
-neighbor 192.168.40.72 timers connect 10
-neighbor 192.168.40.73 remote-as 65073
-neighbor 192.168.40.73 ebgp-multihop
-neighbor 192.168.40.73 timers connect 10
-neighbor 192.168.40.74 remote-as 65074
-neighbor 192.168.40.74 ebgp-multihop
-neighbor 192.168.40.74 timers connect 10
-neighbor 192.168.40.75 remote-as 65075
-neighbor 192.168.40.75 ebgp-multihop
-neighbor 192.168.40.75 timers connect 10
-neighbor 192.168.40.76 remote-as 65076
-neighbor 192.168.40.76 ebgp-multihop
-neighbor 192.168.40.76 timers connect 10
-neighbor 192.168.40.77 remote-as 65077
-neighbor 192.168.40.77 ebgp-multihop
-neighbor 192.168.40.77 timers connect 10
-neighbor 192.168.40.78 remote-as 65078
-neighbor 192.168.40.78 ebgp-multihop
-neighbor 192.168.40.78 timers connect 10
-neighbor 192.168.40.79 remote-as 65079
-neighbor 192.168.40.79 ebgp-multihop
-neighbor 192.168.40.79 timers connect 10
-neighbor 192.168.40.80 remote-as 65080
-neighbor 192.168.40.80 ebgp-multihop
-neighbor 192.168.40.80 timers connect 10
-neighbor 192.168.40.81 remote-as 65081
-neighbor 192.168.40.81 ebgp-multihop
-neighbor 192.168.40.81 timers connect 10
-neighbor 192.168.40.82 remote-as 65082
-neighbor 192.168.40.82 ebgp-multihop
-neighbor 192.168.40.82 timers connect 10
-neighbor 192.168.40.83 remote-as 65083
-neighbor 192.168.40.83 ebgp-multihop
-neighbor 192.168.40.83 timers connect 10
-neighbor 192.168.40.84 remote-as 65084
-neighbor 192.168.40.84 ebgp-multihop
-neighbor 192.168.40.84 timers connect 10
-neighbor 192.168.40.85 remote-as 65085
-neighbor 192.168.40.85 ebgp-multihop
-neighbor 192.168.40.85 timers connect 10
-neighbor 192.168.40.86 remote-as 65086
-neighbor 192.168.40.86 ebgp-multihop
-neighbor 192.168.40.86 timers connect 10
-neighbor 192.168.40.87 remote-as 65087
-neighbor 192.168.40.87 ebgp-multihop
-neighbor 192.168.40.87 timers connect 10
-neighbor 192.168.40.88 remote-as 65088
-neighbor 192.168.40.88 ebgp-multihop
-neighbor 192.168.40.88 timers connect 10
-neighbor 192.168.40.89 remote-as 65089
-neighbor 192.168.40.89 ebgp-multihop
-neighbor 192.168.40.89 timers connect 10
-neighbor 192.168.40.90 remote-as 65090
-neighbor 192.168.40.90 ebgp-multihop
-neighbor 192.168.40.90 timers connect 10
-neighbor 192.168.40.91 remote-as 65091
-neighbor 192.168.40.91 ebgp-multihop
-neighbor 192.168.40.91 timers connect 10
-neighbor 192.168.40.92 remote-as 65092
-neighbor 192.168.40.92 ebgp-multihop
-neighbor 192.168.40.92 timers connect 10
-neighbor 192.168.40.93 remote-as 65093
-neighbor 192.168.40.93 ebgp-multihop
-neighbor 192.168.40.93 timers connect 10
-neighbor 192.168.40.94 remote-as 65094
-neighbor 192.168.40.94 ebgp-multihop
-neighbor 192.168.40.94 timers connect 10
-neighbor 192.168.40.95 remote-as 65095
-neighbor 192.168.40.95 ebgp-multihop
-neighbor 192.168.40.95 timers connect 10
-neighbor 192.168.40.96 remote-as 65096
-neighbor 192.168.40.96 ebgp-multihop
-neighbor 192.168.40.96 timers connect 10
-neighbor 192.168.40.97 remote-as 65097
-neighbor 192.168.40.97 ebgp-multihop
-neighbor 192.168.40.97 timers connect 10
-neighbor 192.168.40.98 remote-as 65098
-neighbor 192.168.40.98 ebgp-multihop
-neighbor 192.168.40.98 timers connect 10
-neighbor 192.168.40.99 remote-as 65099
-neighbor 192.168.40.99 ebgp-multihop
-neighbor 192.168.40.99 timers connect 10
-neighbor 192.168.40.100 remote-as 65100
-neighbor 192.168.40.100 ebgp-multihop
-neighbor 192.168.40.100 timers connect 10
-
- network 172.16.10.0/24
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga1.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga1.conf
deleted file mode 100644
index 264f85e..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga1.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-!
-! Zebra configuration saved from vty
-! 2014/11/25 11:22:24
-!
-hostname bgpd
-password hello
-log stdout
-!
-router bgp 64514
- bgp router-id 192.168.10.1
-! network 3.0.0.0/24
-! network 3.0.1.0/24
-! network 3.0.2.0/24
-! network 3.0.3.0/24
-! network 3.0.4.0/24
-! network 3.0.5.0/24
-! network 3.0.6.0/24
-! network 3.0.7.0/24
-! network 3.0.8.0/24
-! network 3.0.9.0/24
- neighbor 192.168.20.101 remote-as 64513
- neighbor 192.168.20.101 route-map PREPEND2 in
- neighbor 192.168.20.101 route-map PREPEND2 out
-!
-route-map PREPEND1 permit 1
- set as-path prepend 64514
-!
-route-map PREPEND2 permit 2
- set as-path prepend 64514 64514
-!
-line vty
-!
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/quagga2.conf b/TestON/tests/SdnIpSingleSwitch/topology/quagga2.conf
deleted file mode 100644
index 20ca9e4..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/quagga2.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-! -*- bgp -*-
-!
-! BGPd sample configuratin file
-!
-! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
-!
-hostname bgpd
-password hello
-!enable password please-set-at-here
-!
-!bgp mulitple-instance
-!
-router bgp 64516
- bgp router-id 192.168.30.1
-! timers bgp 1 3
- neighbor 192.168.30.101 remote-as 64513
-! neighbor 192.168.50.2 remote-as 65001
-! network 172.16.30.0/24
-! neighbor 10.0.0.2 route-map set-nexthop out
-! neighbor 10.0.0.2 ebgp-multihop
-! neighbor 10.0.0.2 next-hop-self
-!
-! access-list all permit any
-!
-!route-map set-nexthop permit 10
-! match ip address all
-! set ip next-hop 10.0.0.1
-!
-!log file /usr/local/var/log/quagga/bgpd.log
-!
-log stdout
diff --git a/TestON/tests/SdnIpSingleSwitch/topology/zebra.conf b/TestON/tests/SdnIpSingleSwitch/topology/zebra.conf
deleted file mode 100644
index 0f8e3a2..0000000
--- a/TestON/tests/SdnIpSingleSwitch/topology/zebra.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname zebra
-password hello
-enable password 0fw0rk
-log stdout
-!
-! Interfaces description.
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-!log file /usr/local/var/log/quagga/zebra.log
diff --git a/TestON/tests/SdnIpTest/SdnIpTest.params b/TestON/tests/SdnIpTest/SdnIpTest.params
deleted file mode 100755
index c84af17..0000000
--- a/TestON/tests/SdnIpTest/SdnIpTest.params
+++ /dev/null
@@ -1,27 +0,0 @@
-<PARAMS>
-
- <testcases>100, [4]*5</testcases>
-
- #Environment variables
- <ENV>
- <cellName>sdnip_single_instance</cellName>
- </ENV>
-
- <CTRL>
- <numCtrl>1</numCtrl>
- <ip1>10.128.4.52</ip1>
- <port1>6633</port1>
- </CTRL>
-
- <GIT>
- <autoPull>on</autoPull>
- <branch1>master</branch1>
- <branch2>onos-1.2</branch2>
- </GIT>
-
- <JSON>
- <prefix>prefix</prefix>
- <nextHop>nextHop</nextHop>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/SdnIpTest/SdnIpTest.py b/TestON/tests/SdnIpTest/SdnIpTest.py
deleted file mode 100644
index 43bf580..0000000
--- a/TestON/tests/SdnIpTest/SdnIpTest.py
+++ /dev/null
@@ -1,1469 +0,0 @@
-
-# Testing the functionality of SDN-IP with single ONOS instance
-class SdnIpTest:
-
- def __init__( self ):
- self.default = ''
- global branchName
-
- # This case is to setup ONOS
- def CASE100( self, main ):
- """
- CASE100 is to compile ONOS and push it to the test machines
- Startup sequence:
- git pull
- mvn clean install
- onos-package
- cell <name>
- onos-verify-cell
- onos-install -f
- onos-wait-for-start
- """
- import time
- main.case( "Setting up test environment" )
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-
- main.step( "Applying cell variable to environment" )
- cellResult = main.ONOSbench.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- branchName = main.ONOSbench.getBranchName()
- main.log.info( "ONOS is on branch: " + branchName )
-
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- cleanInstallResult = main.TRUE
- gitPullResult = main.TRUE
-
- main.step( "Git pull" )
- gitPullResult = main.ONOSbench.gitPull()
-
- main.step( "Using mvn clean & install" )
- cleanInstallResult = main.TRUE
-# if gitPullResult == main.TRUE:
-# cleanInstallResult = main.ONOSbench.cleanInstall()
-# else:
-# main.log.warn( "Did not pull new code so skipping mvn " +
-# "clean install" )
- cleanInstallResult = main.ONOSbench.cleanInstall( mciTimeout= 1000 )
- main.ONOSbench.getVersion( report=True )
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage( opTimeout=500 )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
- node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- for i in range( 2 ):
- onos1Isup = main.ONOSbench.isup( ONOS1Ip, timeout=420 )
- if onos1Isup:
- break
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- cliResult = main.ONOScli.startOnosCli( ONOS1Ip,
- commandlineTimeout=100, onosStartTimeout=600)
-
- case1Result = ( cleanInstallResult and packageResult and
- cellResult and verifyResult and
- onos1InstallResult and
- onos1Isup and cliResult )
-
- utilities.assert_equals( expect=main.TRUE, actual=case1Result,
- onpass="ONOS startup successful",
- onfail="ONOS startup NOT successful" )
-
- if case1Result == main.FALSE:
- main.cleanup()
- main.exit()
-
- def CASE4( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
- ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- from time import localtime, strftime
-
- main.case("This case is to testing the functionality of SDN-IP with \
- single ONOS instance" )
- SDNIPJSONFILEPATH = \
- "/home/admin/ONOS/tools/package/config/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Activate sdn-ip application" )
- main.ONOScli.activateApp( "org.onosproject.sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- for prefix in prefixesHostX:
- allRoutesExpected.append( prefix + "/" + "192.168.40."
- + str( i - 100 ) )
-
- routeIntentsExpectedHostX = \
- main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
- prefixesHostX, "192.168.40." + str( i - 100 ),
- "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
- routeIntentsExpected = routeIntentsExpected + \
- routeIntentsExpectedHostX
-
- main.log.info( "Login Quagga CLI on host" + str( i ) )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
- main.log.info(
- "Enter configuration model of Quagga CLI on host" + str( i ) )
- QuaggaCliHostX.enterConfig( 65000 + i - 100 )
- main.log.info( "Add routes to Quagga on host" + str( i ) )
- QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
-
- time.sleep( 60 )
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get route intents from ONOS CLI
- routeIntentsActualNum = \
- main.QuaggaCliHost3.extractActualRouteIntentNum( getIntentsResult )
- routeIntentsExpectedNum = 1030
- main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
- main.log.info( routeIntentsExpectedNum )
- main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
- main.log.info( routeIntentsActualNum )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsExpectedNum, routeIntentsActualNum ),
- onpass="***MultiPointToSinglePoint Intent Num in SDN-IP is \
- correct!***",
- onfail="***MultiPointToSinglePoint Intent Num in SDN-IP is \
- wrong!***" )
-
- if( eq( routeIntentsExpectedNum, routeIntentsActualNum ) ):
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
-
- bgpIntentsActualNum = \
- main.QuaggaCliHost3.extractActualBgpIntentNum( getIntentsResult )
- bgpIntentsExpectedNum = 624
- main.log.info( "bgpIntentsExpected num is:" )
- main.log.info( bgpIntentsExpectedNum )
- main.log.info( "bgpIntentsActual num is:" )
- main.log.info( bgpIntentsActualNum)
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
- onpass="***PointToPointIntent Intent Num in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intent Num in SDN-IP are wrong!***" )
- if ( eq( bgpIntentsExpectedNum, bgpIntentsActualNum ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # Wait until all MultiPointToSinglePoint intents are in system
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-"\
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 20 )
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActualNum = \
- main.QuaggaCliHost3.extractActualRouteIntentNum(
- getIntentsResult )
- main.log.info( "route Intents Actual Num is: " )
- main.log.info( routeIntentsActualNum )
- utilities.assertEquals(
- expect=0, actual=routeIntentsActualNum,
- onpass="***MultiPointToSinglePoint Intent Num in SDN-IP is 0, \
- correct!***",
- onfail="***MultiPointToSinglePoint Intent Num in SDN-IP is not 0, \
- wrong!***" )
-
- if( eq( 0, routeIntentsActualNum ) ):
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-"\
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 100 )
-
- def CASE_4_origin( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
- ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- from time import localtime, strftime
-
- main.case("This case is to testing the functionality of SDN-IP with \
- single ONOS instance" )
- SDNIPJSONFILEPATH = \
- "/home/admin/ONOS/tools/package/config/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host5" )
- prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
- main.log.info( prefixesHost5 )
- for prefix in prefixesHost5:
- allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
- routeIntentsExpectedHost5 = \
- main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
- prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4 + routeIntentsExpectedHost5
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- if branchName == "onos-1.1":
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- else:
- main.log.info( "Activate sdn-ip application" )
- main.ONOScli.activateApp( "org.onosproject.sdnip" )
- #main.log.info( "Installing sdn-ip feature" )
- #main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- main.log.info( "Login Quagga CLI on host5" )
- main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
- main.log.info( "Enter configuration model of Quagga CLI on host5" )
- main.QuaggaCliHost5.enterConfig( 64521 )
- main.log.info( "Add routes to Quagga on host5" )
- main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- for prefix in prefixesHostX:
- allRoutesExpected.append( prefix + "/" + "192.168.40."
- + str( i - 100 ) )
-
- routeIntentsExpectedHostX = \
- main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
- prefixesHostX, "192.168.40." + str( i - 100 ),
- "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
- routeIntentsExpected = routeIntentsExpected + \
- routeIntentsExpectedHostX
-
- main.log.info( "Login Quagga CLI on host" + str( i ) )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
- main.log.info(
- "Enter configuration model of Quagga CLI on host" + str( i ) )
- QuaggaCliHostX.enterConfig( 65000 + i - 100 )
- main.log.info( "Add routes to Quagga on host" + str( i ) )
- QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
-
- time.sleep( 60 )
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- #if branchName == "master":
- # allRoutesActual = \
- # main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
- #elif branchName == "onos-1.0":
- # allRoutesActual = \
- # main.QuaggaCliHost3.extractActualRoutesOneDotZero( getRoutesResult )
- #else:
- # main.log("ONOS is on wrong branch")
- # exit
-
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get route intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents before \
- deleting routes wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = \
- main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = \
- main.QuaggaCliHost3.extractActualBgpIntents( getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # Wait until all MultiPointToSinglePoint intents are in system
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 20 )
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report( "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes correct!***" )
- else:
- main.log.report( "***MultiPointToSinglePoint Intents after \
- deleting routes wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE4-ping-results-after-delete-routes-"\
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 100 )
-
- def CASE3( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
- ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case( "The test case is to help to setup the TestON \
- environment and test new drivers" )
- # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- SDNIPJSONFILEPATH = \
- "/home/admin/ONOS/tools/package/config/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- if branchName == "onos-1.1":
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- else:
- main.log.info( "Activate sdn-ip application" )
- main.ONOScli.activateApp( "org.onosproject.sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
-
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
- for i in range( 101, 201 ):
- prefixesHostX = \
- main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- for prefix in prefixesHostX:
- allRoutesExpected.append(
- prefix + "/" + "192.168.40." + str( i - 100 ) )
-
- routeIntentsExpectedHostX = \
- main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
- prefixesHostX, "192.168.40." + str( i - 100 ),
- "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
- routeIntentsExpected = routeIntentsExpected + \
- routeIntentsExpectedHostX
-
- main.log.info( "Login Quagga CLI on host" + str( i ) )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
- main.log.info(
- "Enter configuration model of Quagga CLI on host" + str( i ) )
- QuaggaCliHostX.enterConfig( 65000 + i - 100 )
- main.log.info( "Add routes to Quagga on host" + str( i ) )
- QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
-
- time.sleep( 60 )
-
- # get routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get rpoute intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
- SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 20 )
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
- for i in range( 101, 201 ):
- prefixesHostX = \
- main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
- main.log.info( prefixesHostX )
- QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
- QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
- getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 100 )
-
- # main.step( "Test whether Mininet is started" )
- # main.Mininet2.handle.sendline( "xterm host1" )
- # main.Mininet2.handle.expect( "mininet>" )
-
- def CASE1( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents \
- from ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- # from datetime import datetime
- from time import localtime, strftime
-
- main.case("The test case is to help to setup the TestON environment \
- and test new drivers" )
- SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
- # bgpPeerHosts = []
- # for i in range( 3, 5 ):
- # bgpPeerHosts.append( "host" + str( i ) )
- # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
-
- # for i in range( 3, 5 ):
- # QuaggaCliHost = "QuaggaCliHost" + str( i )
- # prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
-
- # main.log.info( prefixes )
- # allRoutesExpected.append( prefixes )
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Starting ONOS service" )
- # TODO: start ONOS from Mininet Script
- # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
- main.step( "Installing ONOS package" )
- onos1InstallResult = main.ONOSbench.onosInstall(
- options="-f", node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
- # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
-
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
- main.step( "Login all BGP peers and add routes into peers" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info( "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info( "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
- time.sleep( 60 )
-
- # get all routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding routes are correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding routes are wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step( "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get rpoute intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents before deleting routes \
- wrong!***" )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = \
- main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
-
- # ping test
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-
- # main.log.info( "main.ONOScli.get_routes_num() = " )
- # main.log.info( main.ONOScli.getRoutesNum() )
- # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
- # main.ONOScli.getRoutesNum(),
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
- 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting routes \
- wrong!***" )
-
- time.sleep( 20 )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 30 )
-
- # main.step( "Test whether Mininet is started" )
- # main.Mininet2.handle.sendline( "xterm host1" )
- # main.Mininet2.handle.expect( "mininet>" )
-
- def CASE2( self, main ):
- """
- Test the SDN-IP functionality
- allRoutesExpected: all expected routes for all BGP peers
- routeIntentsExpected: all expected MultiPointToSinglePointIntent \
- intents
- bgpIntentsExpected: expected PointToPointIntent intents
- allRoutesActual: all routes from ONOS LCI
- routeIntentsActual: actual MultiPointToSinglePointIntent intents \
- from ONOS CLI
- bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
- """
- import time
- import json
- from operator import eq
- from time import localtime, strftime
-
- main.case(
- "The test case is to help to setup the TestON environment and \
- test new drivers" )
- SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
- # all expected routes for all BGP peers
- allRoutesExpected = []
- main.step( "Start to generate routes for all BGP peers" )
-
- main.log.info( "Generate prefixes for host3" )
- prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
- main.log.info( prefixesHost3 )
- # generate route with next hop
- for prefix in prefixesHost3:
- allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
- routeIntentsExpectedHost3 = \
- main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
- prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
- SDNIPJSONFILEPATH )
-
- main.log.info( "Generate prefixes for host4" )
- prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
- main.log.info( prefixesHost4 )
- # generate route with next hop
- for prefix in prefixesHost4:
- allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
- routeIntentsExpectedHost4 = \
- main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
- prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
- SDNIPJSONFILEPATH )
-
- routeIntentsExpected = routeIntentsExpectedHost3 + \
- routeIntentsExpectedHost4
-
- main.log.report( "Removing raft logs" )
- main.ONOSbench.onosRemoveRaftLogs()
- main.log.report( "Uninstalling ONOS" )
- main.ONOSbench.onosUninstall( ONOS1Ip )
-
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
- main.step( "Set cell for ONOS-cli environment" )
- main.ONOScli.setCell( cellName )
- verifyResult = main.ONOSbench.verifyCell()
- # main.log.report( "Removing raft logs" )
- # main.ONOSbench.onosRemoveRaftLogs()
- # main.log.report( "Uninstalling ONOS" )
- # main.ONOSbench.onosUninstall( ONOS1Ip )
- main.step( "Creating ONOS package" )
- # packageResult = main.ONOSbench.onosPackage()
-
- main.step( "Installing ONOS package" )
- # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
- # node=ONOS1Ip )
-
- main.step( "Checking if ONOS is up yet" )
- # time.sleep( 60 )
- onos1Isup = main.ONOSbench.isup( ONOS1Ip )
- if not onos1Isup:
- main.log.report( "ONOS1 didn't start!" )
-
- main.step( "Start ONOS-cli" )
- main.ONOScli.startOnosCli( ONOS1Ip )
-
- main.step( "Get devices in the network" )
- listResult = main.ONOScli.devices( jsonFormat=False )
- main.log.info( listResult )
- time.sleep( 10 )
- main.log.info( "Installing sdn-ip feature" )
- main.ONOScli.featureInstall( "onos-app-sdnip" )
- time.sleep( 10 )
-
- main.step( "Check BGP PointToPointIntent intents installed" )
- # bgp intents expected
- bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
- SDNIPJSONFILEPATH )
- # get BGP intents from ONOS CLI
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
- getIntentsResult )
-
- bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
- bgpIntentsStrActual = str( bgpIntentsActual )
- main.log.info( "PointToPointIntent intents expected:" )
- main.log.info( bgpIntentsStrExpected )
- main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
- main.log.info( bgpIntentsStrActual )
-
- utilities.assertEquals(
- expect=True,
- actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
- onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
- onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are correct!***" )
- else:
- main.log.report(
- "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
- allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- # roundNum = 0;
- # while( True ):
- for roundNum in range( 1, 6 ):
- # round = round + 1;
- main.log.report( "The Round " + str( roundNum ) +
- " test starts................................" )
-
- main.step( "Login all BGP peers and add routes into peers" )
- main.log.info( "Login Quagga CLI on host3" )
- main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
- main.log.info(
- "Enter configuration model of Quagga CLI on host3" )
- main.QuaggaCliHost3.enterConfig( 64514 )
- main.log.info( "Add routes to Quagga on host3" )
- main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
- main.log.info( "Login Quagga CLI on host4" )
- main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
- main.log.info(
- "Enter configuration model of Quagga CLI on host4" )
- main.QuaggaCliHost4.enterConfig( 64516 )
- main.log.info( "Add routes to Quagga on host4" )
- main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
- time.sleep( 60 )
-
- # get all routes inside SDN-IP
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
- # parse routes from ONOS CLI
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
- # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
- allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
- main.step( "Check routes installed" )
- main.log.info( "Routes expected:" )
- main.log.info( allRoutesStrExpected )
- main.log.info( "Routes get from ONOS CLI:" )
- main.log.info( allRoutesStrActual )
- utilities.assertEquals(
- expect=allRoutesStrExpected, actual=allRoutesStrActual,
- onpass="***Routes in SDN-IP are correct!***",
- onfail="***Routes in SDN-IP are wrong!***" )
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after adding correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after adding wrong!***" )
-
- time.sleep( 20 )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
- main.step(
- "Check MultiPointToSinglePointIntent intents installed" )
- # routeIntentsExpected are generated when generating routes
- # get route intents from ONOS CLI
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
- routeIntentsStrActual = str(
- routeIntentsActual ).replace( 'u', "" )
- main.log.info( "MultiPointToSinglePoint intents expected:" )
- main.log.info( routeIntentsStrExpected )
- main.log.info(
- "MultiPointToSinglePoint intents get from ONOS CLI:" )
- main.log.info( routeIntentsStrActual )
- utilities.assertEquals(
- expect=True,
- actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
- onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
- correct!***",
- onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
- wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after adding routes \
- correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after adding routes \
- wrong!***" )
-
- #============================= Ping Test ========================
- # wait until all MultiPointToSinglePoint
- time.sleep( 20 )
- # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
- + str( roundNum ) + "-ping-results-before-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- # ping test
-
- #============================= Deleting Routes ==================
- main.step( "Check deleting routes installed" )
- main.log.info( "Delete routes to Quagga on host3" )
- main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
- main.log.info( "Delete routes to Quagga on host4" )
- main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-
- getRoutesResult = main.ONOScli.routes( jsonFormat=True )
- allRoutesActual = \
- main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
- main.log.info( "allRoutes_actual = " )
- main.log.info( allRoutesActual )
-
- utilities.assertEquals(
- expect="[]", actual=str( allRoutesActual ),
- onpass="***Route number in SDN-IP is 0, correct!***",
- onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
- if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
- main.log.report(
- "***Routes in SDN-IP after deleting correct!***" )
- else:
- main.log.report(
- "***Routes in SDN-IP after deleting wrong!***" )
-
- main.step( "Check intents after deleting routes" )
- getIntentsResult = main.ONOScli.intents( jsonFormat=True )
- routeIntentsActual = \
- main.QuaggaCliHost3.extractActualRouteIntents(
- getIntentsResult )
- main.log.info( "main.ONOScli.intents()= " )
- main.log.info( routeIntentsActual )
- utilities.assertEquals(
- expect="[]", actual=str( routeIntentsActual ),
- onpass=
- "***MultiPointToSinglePoint Intents number in SDN-IP \
- is 0, correct!***",
- onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
- is 0, wrong!***" )
-
- if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting \
- routes correct!***" )
- else:
- main.log.report(
- "***MultiPointToSinglePoint Intents after deleting \
- routes wrong!***" )
-
- time.sleep( 20 )
- # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
- pingTestResultsFile = \
- "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
- + str( roundNum ) + "-ping-results-after-delete-routes-" \
- + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
- pingTestResults = main.QuaggaCliHost.pingTest(
- "1.168.30.100", pingTestScript, pingTestResultsFile )
- main.log.info( pingTestResults )
- time.sleep( 30 )
-
diff --git a/TestON/tests/SdnIpTest/SdnIpTest.topo b/TestON/tests/SdnIpTest/SdnIpTest.topo
deleted file mode 100755
index fe9d1bb..0000000
--- a/TestON/tests/SdnIpTest/SdnIpTest.topo
+++ /dev/null
@@ -1,870 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOScli>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOScli>
-
- <ONOS1>
- <host>10.128.4.52</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <QuaggaCliHost3>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost3>
- <QuaggaCliHost4>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost4>
- <QuaggaCliHost5>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost5>
-
- <QuaggaCliHost>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost>
-
- <QuaggaCliHost101>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>101</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost101>
- <QuaggaCliHost102>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>102</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost102>
- <QuaggaCliHost103>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>103</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost103>
- <QuaggaCliHost104>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>104</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost104>
- <QuaggaCliHost105>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>105</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost105>
- <QuaggaCliHost106>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>106</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost106>
- <QuaggaCliHost107>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>107</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost107>
- <QuaggaCliHost108>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>108</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost108>
- <QuaggaCliHost109>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>109</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost109>
- <QuaggaCliHost110>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>110</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost110>
- <QuaggaCliHost111>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>111</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost111>
- <QuaggaCliHost112>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>112</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost112>
- <QuaggaCliHost113>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>113</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost113>
- <QuaggaCliHost114>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>114</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost114>
- <QuaggaCliHost115>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>115</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost115>
- <QuaggaCliHost116>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>116</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost116>
- <QuaggaCliHost117>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>117</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost117>
- <QuaggaCliHost118>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>118</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost118>
- <QuaggaCliHost119>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>119</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost119>
- <QuaggaCliHost120>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>120</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost120>
- <QuaggaCliHost121>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>121</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost121>
- <QuaggaCliHost122>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>122</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost122>
- <QuaggaCliHost123>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>123</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost123>
- <QuaggaCliHost124>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>124</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost124>
- <QuaggaCliHost125>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>125</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost125>
- <QuaggaCliHost126>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>126</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost126>
- <QuaggaCliHost127>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>127</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost127>
- <QuaggaCliHost128>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>128</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost128>
- <QuaggaCliHost129>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>129</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost129>
- <QuaggaCliHost130>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>130</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost130>
- <QuaggaCliHost131>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>131</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost131>
- <QuaggaCliHost132>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>132</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost132>
- <QuaggaCliHost133>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>133</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost133>
- <QuaggaCliHost134>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>134</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost134>
- <QuaggaCliHost135>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>135</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost135>
- <QuaggaCliHost136>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>136</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost136>
- <QuaggaCliHost137>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>137</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost137>
- <QuaggaCliHost138>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>138</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost138>
- <QuaggaCliHost139>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>139</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost139>
- <QuaggaCliHost140>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>140</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost140>
- <QuaggaCliHost141>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>141</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost141>
- <QuaggaCliHost142>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>142</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost142>
- <QuaggaCliHost143>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>143</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost143>
- <QuaggaCliHost144>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>144</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost144>
- <QuaggaCliHost145>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>145</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost145>
- <QuaggaCliHost146>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>146</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost146>
- <QuaggaCliHost147>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>147</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost147>
- <QuaggaCliHost148>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>148</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost148>
- <QuaggaCliHost149>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>149</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost149>
- <QuaggaCliHost150>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>150</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost150>
- <QuaggaCliHost151>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>151</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost151>
- <QuaggaCliHost152>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>152</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost152>
- <QuaggaCliHost153>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>153</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost153>
- <QuaggaCliHost154>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>154</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost154>
- <QuaggaCliHost155>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>155</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost155>
- <QuaggaCliHost156>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>156</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost156>
- <QuaggaCliHost157>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>157</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost157>
- <QuaggaCliHost158>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>158</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost158>
- <QuaggaCliHost159>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>159</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost159>
- <QuaggaCliHost160>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>160</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost160>
- <QuaggaCliHost161>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>161</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost161>
- <QuaggaCliHost162>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>162</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost162>
- <QuaggaCliHost163>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>163</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost163>
- <QuaggaCliHost164>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>164</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost164>
- <QuaggaCliHost165>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>165</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost165>
- <QuaggaCliHost166>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>166</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost166>
- <QuaggaCliHost167>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>167</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost167>
- <QuaggaCliHost168>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>168</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost168>
- <QuaggaCliHost169>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>169</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost169>
- <QuaggaCliHost170>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>170</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost170>
- <QuaggaCliHost171>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>171</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost171>
- <QuaggaCliHost172>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>172</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost172>
- <QuaggaCliHost173>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>173</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost173>
- <QuaggaCliHost174>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>174</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost174>
- <QuaggaCliHost175>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>175</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost175>
- <QuaggaCliHost176>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>176</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost176>
- <QuaggaCliHost177>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>177</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost177>
- <QuaggaCliHost178>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>178</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost178>
- <QuaggaCliHost179>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>179</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost179>
- <QuaggaCliHost180>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>180</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost180>
- <QuaggaCliHost181>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>181</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost181>
- <QuaggaCliHost182>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>182</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost182>
- <QuaggaCliHost183>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>183</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost183>
- <QuaggaCliHost184>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>184</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost184>
- <QuaggaCliHost185>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>185</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost185>
- <QuaggaCliHost186>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>186</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost186>
- <QuaggaCliHost187>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>187</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost187>
- <QuaggaCliHost188>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>188</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost188>
- <QuaggaCliHost189>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>189</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost189>
- <QuaggaCliHost190>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>190</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost190>
- <QuaggaCliHost191>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>191</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost191>
- <QuaggaCliHost192>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>192</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost192>
- <QuaggaCliHost193>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>193</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost193>
-
- <QuaggaCliHost194>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>194</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost194>
- <QuaggaCliHost195>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>195</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost195>
- <QuaggaCliHost196>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>196</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost196>
- <QuaggaCliHost197>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>197</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost197>
- <QuaggaCliHost198>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>198</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost198>
- <QuaggaCliHost199>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>199</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost199>
- <QuaggaCliHost200>
- <host>127.0.0.1</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>QuaggaCliDriver</type>
- <connect_order>200</connect_order>
- <COMPONENTS> </COMPONENTS>
- </QuaggaCliHost200>
-
-
- </COMPONENT>
-</TOPOLOGY>
-
diff --git a/TestON/tests/SdnIpTest/addresses.json b/TestON/tests/SdnIpTest/addresses.json
deleted file mode 100644
index f7eb983..0000000
--- a/TestON/tests/SdnIpTest/addresses.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "addresses" : [
- {
- "dpid" : "00:00:00:00:00:00:00:a3",
- "port" : "1",
- "ips" : ["192.168.10.0/24"],
- "mac" : "00:00:00:00:00:01"
-
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a5",
- "port" : "1",
- "ips" : ["192.168.20.0/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a2",
- "port" : "1",
- "ips" : ["192.168.30.0/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a6",
- "port" : "1",
- "ips" : ["192.168.40.0/24"],
- "mac" : "00:00:00:00:00:01"
- },
- {
- "dpid" : "00:00:00:00:00:00:00:a4",
- "port" : "4",
- "ips" : ["192.168.60.0/24"],
- "mac" : "00:00:00:00:00:01"
- }
-
- ]
-}
\ No newline at end of file
diff --git a/TestON/tests/SdnIpTest/intents.json b/TestON/tests/SdnIpTest/intents.json
deleted file mode 100644
index d17715f..0000000
--- a/TestON/tests/SdnIpTest/intents.json
+++ /dev/null
@@ -1,1468 +0,0 @@
-[
- {
- "id":"0xffffffffcb2cb6ec",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x140a3304",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffcb2d9828",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x1a89f138",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd1418988",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x2cd85684",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3122a56b",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5874487",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x6ae96523",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x217361ed",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaee31428",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x68cad35c",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffed2b21fa",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffa5dbcf50",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x373774a3",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0x5a75d509",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8d492c5d",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffef408263",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8ce7d031",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffb344fe39",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xf2665f1",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5b61a473",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd0e186b8",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x4d8d4942",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3738d163",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffff993b0fc9",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xfffffffff33e39a0",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffda3dd5b2",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8ce60db9",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xfeca8b9",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3124d881",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x40241a59",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd141fa26",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x3018359e",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaee2a38a",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x658af442",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaf46b62f",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x7a92607b",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffff8d484b21",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffe8c0c42f",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffed295f82",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x28379d0",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffdba23bce",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5e70036",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0xffffffffaf44f3b7",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a5",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffd73a0afb",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x751d3d2e",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffc4847e9e",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x3fb23806",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x23d68afe",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0x751be06e",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0xffffffff85bf43de",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x6aea465f",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a3",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x27f32021",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xf25f553",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x5821c559",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xfffffffff3406cb6",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "ingress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x14daab84",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd7d10b27",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffff8f921bfd",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0xffffffffa79364e5",
- "type":"MultiPointToSinglePointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "ingress":[
- {
- "device":"of:00000000000000a3",
- "port":"1"
- },
- {
- "device":"of:00000000000000a4",
- "port":"4"
- },
- {
- "device":"of:00000000000000a6",
- "port":"1"
- },
- {
- "device":"of:00000000000000a5",
- "port":"1"
- }
- ],
- "egress":{
- "device":"of:00000000000000a2",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffb81af9ff",
- "type":"LinkCollectionIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
- "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
- "links":[
- {
- "src":{
- "device":"of:00000000000000a4",
- "port":"1"
- },
- "dst":{
- "device":"of:00000000000000a2",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a5",
- "port":"2"
- },
- "dst":{
- "device":"of:00000000000000a3",
- "port":"4"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a6",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"3"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- },
- {
- "src":{
- "device":"of:00000000000000a3",
- "port":"3"
- },
- "dst":{
- "device":"of:00000000000000a4",
- "port":"2"
- },
- "type":"DIRECT",
- "state":"ACTIVE",
- "annotations":{
-
- }
- }
- ]
- }
- ]
- },
- {
- "id":"0x14d9eb65",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "egress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "installable":[
- {
- "id":"0xffffffffd1edad87",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0x14d88ea5",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a4",
- "port":"4"
- },
- "installable":[
- {
- "id":"0xffffffff932872c7",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- },
- {
- "id":"0xffffffffd0df53a2",
- "type":"PointToPointIntent",
- "appId":"org.onlab.onos.sdnip",
- "state":"INSTALLED",
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "ingress":{
- "device":"of:00000000000000a1",
- "port":"1"
- },
- "egress":{
- "device":"of:00000000000000a6",
- "port":"1"
- },
- "installable":[
- {
- "id":"0x12f07370",
- "type":"PathIntent",
- "appId":"org.onlab.onos.sdnip",
- "resources":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ],
- "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
- "path":[
- "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
- "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
- ]
- }
- ]
- }
-]
\ No newline at end of file
diff --git a/TestON/tests/SdnIpTest/sdnip.json b/TestON/tests/SdnIpTest/sdnip.json
deleted file mode 100644
index a5d1867..0000000
--- a/TestON/tests/SdnIpTest/sdnip.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-
- "bgpPeers" : [
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a3",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.10.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a5",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.20.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a2",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.30.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a6",
- "attachmentPort" : "1",
- "ipAddress" : "192.168.40.1"
- },
- {
- "attachmentDpid" : "00:00:00:00:00:00:00:a4",
- "attachmentPort" : "4",
- "ipAddress" : "192.168.60.1"
- }
-
- ],
- "bgpSpeakers" : [
- {
- "name" : "bgpSpeaker1",
- "attachmentDpid" : "00:00:00:00:00:00:00:a1",
- "attachmentPort" : "1",
- "macAddress" : "00:00:00:00:00:01",
- "interfaceAddresses" : [
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a3",
- "interfacePort" : "1",
- "ipAddress" : "192.168.10.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a5",
- "interfacePort" : "1",
- "ipAddress" : "192.168.20.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a2",
- "interfacePort" : "1",
- "ipAddress" : "192.168.30.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a6",
- "interfacePort" : "1",
- "ipAddress" : "192.168.40.101"
- },
- {
- "interfaceDpid" : "00:00:00:00:00:00:00:a4",
- "interfacePort" : "4",
- "ipAddress" : "192.168.60.101"
- }
-
- ]
-
- }
-
- ]
-}
\ No newline at end of file
diff --git a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params
deleted file mode 100644
index eba319c..0000000
--- a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.params
+++ /dev/null
@@ -1,96 +0,0 @@
-<PARAMS>
- <testcases>1,2,3,4,2,3,4,2,3,4,2,3</testcases>
-
- <ENV>
- <cellName>topo_perf_test</cellName>
- <cellFeatures>"drivers,metrics,openflow"</cellFeatures>
- </ENV>
-
- <GIT>
- #autoPull 'on' or 'off'
- <autoPull>off</autoPull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <user>admin</user>
- <ip1>10.254.1.201</ip1>
- <port1>6633</port1>
- <ip2>10.254.1.202</ip2>
- <port2>6633</port2>
- <ip3>10.254.1.203</ip3>
- <port3>6633</port3>
- <ip4>10.254.1.204</ip4>
-
- <ip5>10.254.1.205</ip5>
- <ip6>10.254.1.206</ip6>
- <ip7>10.254.1.207</ip7>
- </CTRL>
-
- <MN>
- <ip1>10.254.1.200</ip1>
- <ip2>10.254.1.200</ip2>
- </MN>
-
- <BENCH>
- <ip>10.254.1.200</ip>
- </BENCH>
-
- <TSHARK>
- <ofpPortStatus>OF 1.3 146</ofpPortStatus>
- <ofpRoleReply>OF 1.3 90 of_role_reply</ofpRoleReply>
- <featureReply>OF 1.3 98 of_features_reply</featureReply>
- <roleRequest>OF 1.3 90 of_role_request</roleRequest>
- <tcpSynAck>TCP 74 6633</tcpSynAck>
- <finAckSequence>FIN</finAckSequence>
- </TSHARK>
-
- <TEST>
- #'on' or 'off' debug mode.
- #If on, logging will be more verbose and
- #tshark pcap will be enabled
- #pcap file located at /tmp/'capture_name'
- <debugMode>off</debugMode>
- <onosLogFile>/opt/onos/log/karaf*</onosLogFile>
- <mci>off</mci>
-
- <topoConfigFile>
- single_topo_event_accumulator.cfg
- </topoConfigFile>
- <topoConfigName>
- org.onlab.onos.net.topology.impl.DefaultTopologyProvider.cfg
- </topoConfigName>
-
- #Number of times to iterate each case
- <numIter>13</numIter>
- <numSwitch>2</numSwitch>
- #Number of iterations to ignore initially
- <iterIgnore>2</iterIgnore>
-
- <singleSwThreshold>0,1000</singleSwThreshold>
- <portUpThreshold>0,1000</portUpThreshold>
- <portDownThreshold>0,1000</portDownThreshold>
- <linkUpThreshold>0,10000</linkUpThreshold>
- <linkDownThreshold>0,10000</linkDownThreshold>
- <swDisc100Threshold>0,10000</swDisc100Threshold>
-
- <tabletFile>tablets_3node.json</tabletFile>
- </TEST>
-
- <DB>
- <postToDB>on</postToDB>
- <portEventResultPath>
- /home/admin/ONLabTest/TestON/tests/TopoPerfNextBM/portEventResultDb.log
- </portEventResultPath>
- <switchEventResultPath>
- /home/admin/ONLabTest/TestON/tests/TopoPerfNextBM/switchEventResultDb.log
- </switchEventResultPath>
- </DB>
-
- <JSON>
- <deviceTimestamp>topologyDeviceEventTimestamp</deviceTimestamp>
- <hostTimestamp>topologyHostEventTimestamp</hostTimestamp>
- <linkTimestamp>topologyLinkEventTimestamp</linkTimestamp>
- <graphTimestamp>topologyGraphEventTimestamp</graphTimestamp>
- </JSON>
-</PARAMS>
diff --git a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py
deleted file mode 100644
index e2245ba..0000000
--- a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.py
+++ /dev/null
@@ -1,1306 +0,0 @@
-# 2015.03.12 10:22:05 PDT
-#Embedded file name: ../tests/TopoPerfNextBM/TopoPerfNextBM.py
-import time
-import sys
-import os
-import re
-
-class TopoPerfNextBM:
-
- def __init__(self):
- self.default = ''
-
- def CASE1(self, main):
- """
- ONOS startup sequence
- """
- global clusterCount
- global timeToPost
- global runNum
- global jenkinsBuildNumber
-
- import time
- import os
-
- clusterCount = 1
- timeToPost = time.strftime('%Y-%m-%d %H:%M:%S')
- runNum = time.strftime('%d%H%M%S')
- cellName = main.params['ENV']['cellName']
- gitPull = main.params['GIT']['autoPull']
- checkoutBranch = main.params['GIT']['checkout']
-
- # Get jenkins build number from environment.
- # This environment variable will only exist when
- # triggered by a jenkins job
- try:
- jenkinsBuildNumber = str(os.environ['BUILD_NUMBER'])
- main.log.report( 'Jenkins build number: ' +
- jenkinsBuildNumber )
- except KeyError:
- # Jenkins build number is also used in posting to DB
- # If this test is not triggered by jenkins, give
- # it 0 instead, ensuring that
- # the DB post will recognize it as a non-jenkins run
- jenkinsBuildNumber = str(0)
- main.log.info( 'Job is not run by jenkins. '+
- 'Build number set to: ' + jenkinsBuildNumber)
-
- global CLIs
- CLIs = []
- global nodes
- nodes = []
- global nodeIpList
- nodeIpList = []
- for i in range( 1, 8 ):
- CLIs.append( getattr( main, 'ONOS' + str( i ) + 'cli' ) )
- nodes.append( getattr( main, 'ONOS' + str( i ) ) )
- nodeIpList.append( main.params[ 'CTRL' ][ 'ip'+str(i) ] )
-
- MN1Ip = main.params['MN']['ip1']
- BENCHIp = main.params['BENCH']['ip']
- cellFeatures = main.params['ENV']['cellFeatures']
- topoCfgFile = main.params['TEST']['topoConfigFile']
- topoCfgName = main.params['TEST']['topoConfigName']
- portEventResultPath = main.params['DB']['portEventResultPath']
- switchEventResultPath = main.params['DB']['switchEventResultPath']
- mvnCleanInstall = main.params['TEST']['mci']
-
- main.case('Setting up test environment')
-
- # NOTE: Below is deprecated after new way to install features
- #main.log.info('Copying topology event accumulator config' +
- # ' to ONOS /package/etc')
- #main.ONOSbench.handle.sendline('cp ~/' +
- # topoCfgFile + ' ~/ONOS/tools/package/etc/' +
- # topoCfgName)
- #main.ONOSbench.handle.expect('\\$')
-
- main.log.report('Setting up test environment')
-
- main.step('Starting mininet topology ')
- main.Mininet1.startNet()
-
- main.step('Cleaning previously installed ONOS if any')
- # Nodes 2 ~ 7
- for i in range( 1, 7 ):
- main.ONOSbench.onosUninstall(nodeIp=nodeIpList[i])
-
- main.step('Clearing previous DB log file')
-
- fPortLog = open(portEventResultPath, 'w')
- fPortLog.write('')
- fPortLog.close()
- fSwitchLog = open(switchEventResultPath, 'w')
- fSwitchLog.write('')
- fSwitchLog.close()
-
- main.step('Creating cell file')
- cellFileResult = main.ONOSbench.createCellFile(
- BENCHIp, cellName, MN1Ip, cellFeatures, nodeIpList[0])
-
- main.step('Applying cell file to environment')
- cellApplyResult = main.ONOSbench.setCell(cellName)
- verifyCellResult = main.ONOSbench.verifyCell()
-
- main.step('Git checkout and pull ' + checkoutBranch)
- if gitPull == 'on':
- checkoutResult = main.TRUE
- pullResult = main.ONOSbench.gitPull()
- else:
- checkoutResult = main.TRUE
- pullResult = main.TRUE
- main.log.info('Skipped git checkout and pull')
-
- main.log.report('Commit information - ')
- main.ONOSbench.getVersion(report=True)
- main.step('Using mvn clean & install')
- if mvnCleanInstall == 'on':
- mvnResult = main.ONOSbench.cleanInstall()
- elif mvnCleanInstall == 'off':
- main.log.info('mci turned off by settings')
- mvnResult = main.TRUE
- main.step('Set cell for ONOS cli env')
- CLIs[0].setCell(cellName)
-
- main.step('Creating ONOS package')
- packageResult = main.ONOSbench.onosPackage()
-
- main.step('Installing ONOS package')
- install1Result = main.ONOSbench.onosInstall(node=nodeIpList[0])
-
- time.sleep(10)
-
- main.step('Start onos cli')
- cli1 = CLIs[0].startOnosCli(nodeIpList[0])
-
- main.step( 'activating essential applications' )
- CLIs[0].activateApp( 'org.onosproject.metrics' )
- CLIs[0].activateApp( 'org.onosproject.openflow' )
-
- main.step( 'Configuring application parameters' )
-
- configName = 'org.onosproject.net.topology.impl.DefaultTopologyProvider'
- configParam = 'maxEvents 1'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
- configParam = 'maxBatchMs 0'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
- configParam = 'maxIdleMs 0'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
-
- utilities.assert_equals(expect=main.TRUE,
- actual=cellFileResult and cellApplyResult and\
- verifyCellResult and checkoutResult and\
- pullResult and mvnResult and\
- install1Result,
- onpass='Test Environment setup successful',
- onfail='Failed to setup test environment')
-
- def CASE2(self, main):
- """
- Assign s3 to ONOS1 and measure latency
-
- There are 4 levels of latency measurements to this test:
- 1 ) End-to-end measurement: Complete end-to-end measurement
- from TCP ( SYN/ACK ) handshake to Graph change
- 2 ) OFP-to-graph measurement: 'ONOS processing' snippet of
- measurement from OFP Vendor message to Graph change
- 3 ) OFP-to-device measurement: 'ONOS processing without
- graph change' snippet of measurement from OFP vendor
- message to Device change timestamp
- 4 ) T0-to-device measurement: Measurement that includes
- the switch handshake to devices timestamp without
- the graph view change. ( TCP handshake -> Device
- change )
- """
- import time
- import subprocess
- import json
- import requests
- import os
- import numpy
-
- ONOSUser = main.params['CTRL']['user']
- defaultSwPort = main.params['CTRL']['port1']
- numIter = main.params['TEST']['numIter']
- iterIgnore = int(main.params['TEST']['iterIgnore'])
-
- deviceTimestampKey = main.params['JSON']['deviceTimestamp']
- graphTimestampKey = main.params['JSON']['graphTimestamp']
-
- debugMode = main.params['TEST']['debugMode']
- onosLog = main.params['TEST']['onosLogFile']
- resultPath = main.params['DB']['switchEventResultPath']
- thresholdStr = main.params['TEST']['singleSwThreshold']
- thresholdObj = thresholdStr.split(',')
- thresholdMin = int(thresholdObj[0])
- thresholdMax = int(thresholdObj[1])
-
- # Look for 'role-request' messages,
- # which replaces the 'vendor' messages previously seen
- # on OVS 2.0.1
- tsharkTcpString = main.params[ 'TSHARK' ][ 'tcpSynAck' ]
- tsharkFeatureReply = main.params[ 'TSHARK' ][ 'featureReply' ]
- tsharkRoleRequest = main.params[ 'TSHARK' ][ 'roleRequest' ]
- tsharkOfString = main.params[ 'TSHARK' ][ 'ofpRoleReply' ]
- tsharkFinAckSequence = main.params[ 'TSHARK' ][ 'finAckSequence' ]
-
- tsharkOfOutput = '/tmp/tshark_of_topo.txt'
- tsharkTcpOutput = '/tmp/tshark_tcp_topo.txt'
- tsharkRoleOutput = '/tmp/tshark_role_request.txt'
- tsharkFeatureOutput = '/tmp/tshark_feature_reply.txt'
- tsharkFinAckOutput = '/tmp/tshark_fin_ack.txt'
-
- # Switch connect measurement list
- # TCP Syn/Ack -> Feature Reply latency collection for each node
- tcpToFeatureLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
- # Feature Reply -> Role Request latency collection for each node
- featureToRoleRequestLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- # Role Request -> Role Reply latency collection for each node
- roleRequestToRoleReplyLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- # Role Reply -> Device Update latency collection for each node
- roleReplyToDeviceLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- # Device Update -> Graph Update latency collection for each node
- deviceToGraphLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- endToEndLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
-
- # Switch disconnect measurement lists
- # Mininet Fin / Ack -> Mininet Ack
- finAckTransactionLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- # Mininet Ack -> Device Event
- ackToDeviceLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- # Device event -> Graph event
- deviceToGraphDiscLatNodeIter = numpy.zeros((clusterCount,
- int(numIter)))
- endToEndDiscLatNodeIter = numpy.zeros((clusterCount, int(numIter)))
-
- assertion = main.TRUE
- localTime = time.strftime('%x %X')
- localTime = localTime.replace('/', '')
- localTime = localTime.replace(' ', '_')
- localTime = localTime.replace(':', '')
-
- if debugMode == 'on':
- main.ONOS1.tsharkPcap('eth0',
- '/tmp/single_sw_lat_pcap_' + localTime)
- main.log.info('Debug mode is on')
- main.log.report('Latency of adding one switch to controller')
- main.log.report('First ' + str(iterIgnore) +
- ' iterations ignored' + ' for jvm warmup time')
- main.log.report('Total iterations of test: ' + str(numIter))
-
- for i in range(0, int(numIter)):
- main.log.info('Starting tshark capture')
- main.ONOS1.tsharkGrep(tsharkTcpString, tsharkTcpOutput)
- main.ONOS1.tsharkGrep(tsharkOfString, tsharkOfOutput)
- main.ONOS1.tsharkGrep(tsharkRoleRequest, tsharkRoleOutput)
- main.ONOS1.tsharkGrep(tsharkFeatureReply, tsharkFeatureOutput)
-
- time.sleep(10)
-
- main.log.info('Assigning s3 to controller')
- main.Mininet1.assignSwController(sw='3',
- ip1=nodeIpList[0], port1=defaultSwPort)
-
- jsonStr = []
- for node in range (0, clusterCount):
- metricsSwUp = CLIs[node].topologyEventsMetrics()
- jsonStr.append(metricsSwUp)
-
- main.log.info('Stopping all Tshark processes')
- main.ONOS1.tsharkStop()
-
- time.sleep(5)
-
- main.log.info('Copying over tshark files')
- os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
- ':' + tsharkTcpOutput + ' /tmp/')
- os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
- ':' + tsharkRoleOutput + ' /tmp/')
- os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
- ':' + tsharkFeatureOutput + ' /tmp/')
- os.system('scp ' + ONOSUser + '@' +
- nodeIpList[0] + ':' + tsharkOfOutput + ' /tmp/')
-
- # Get tcp syn / ack output
- time.sleep(1)
-
- tcpFile = open(tsharkTcpOutput, 'r')
- tempText = tcpFile.readline()
- tempText = tempText.split(' ')
- main.log.info('Object read in from TCP capture: ' +
- str(tempText))
-
- if len(tempText) > 1:
- t0Tcp = float(tempText[1]) * 1000.0
- else:
- main.log.error('Tshark output file for TCP' +
- ' returned unexpected results')
- t0Tcp = 0
- assertion = main.FALSE
- tcpFile.close()
-
- # Get Role reply output
- ofFile = open(tsharkOfOutput, 'r')
- lineOfp = ''
- while True:
- tempText = ofFile.readline()
- if tempText != '':
- lineOfp = tempText
- else:
- break
- obj = lineOfp.split(' ')
- main.log.info('Object read in from OFP capture: ' +
- str(lineOfp))
- if len(obj) > 1:
- t0Ofp = float(obj[1]) * 1000.0
- else:
- main.log.error('Tshark output file for OFP' +
- ' returned unexpected results')
- t0Ofp = 0
- assertion = main.FALSE
- ofFile.close()
-
- # Get role request output
- roleFile = open(tsharkRoleOutput, 'r')
- tempText = roleFile.readline()
- tempText = tempText.split(' ')
- if len(tempText) > 1:
- main.log.info('Object read in from role request capture:' +
- str(tempText))
- roleTimestamp = float(tempText[1]) * 1000.0
- else:
- main.log.error('Tshark output file for role request' +
- ' returned unexpected results')
- timeRoleRequest = 0
- assertion = main.FALSE
- roleFile.close()
-
- # Get feature reply output
- featureFile = open(tsharkFeatureOutput, 'r')
- tempText = featureFile.readline()
- tempText = tempText.split(' ')
- if len(tempText) > 1:
- main.log.info('Object read in from feature reply capture: '+
- str(tempText))
- if tempText[1] != ' ' and float(tempText[1]) > 1400000000.0:
- temp = tempText[1]
- elif tempText[2] != ' ' and float(tempText[2]) > 1400000000.0:
- temp = tempText[2]
- else:
- temp = 0
- featureTimestamp = float(temp) * 1000.0
- else:
- main.log.error('Tshark output file for feature reply' +
- ' returned unexpected results')
- timeFeatureReply = 0
- assertion = main.FALSE
- featureFile.close()
-
- for node in range(0, clusterCount):
- nodeNum = node+1
- #metricsSwUp = CLIs[node].topologyEventsMetrics
- #jsonStr = metricsSwUp()
- jsonObj = json.loads(jsonStr[node])
- if jsonObj:
- graphTimestamp = jsonObj[graphTimestampKey]['value']
- deviceTimestamp = jsonObj[deviceTimestampKey]['value']
- else:
- main.log.error( "Unexpected JSON object" )
- # If we could not obtain the JSON object,
- # set the timestamps to 0, which will be
- # excluded from the measurement later on
- # (realized as invalid)
- graphTimestamp = 0
- deviceTimestamp = 0
-
- endToEnd = int(graphTimestamp) - int(t0Tcp)
-
- # Below are measurement breakdowns of the end-to-end
- # measurement.
- tcpToFeature = int(featureTimestamp) - int(t0Tcp)
- featureToRole = int(roleTimestamp) - int(featureTimestamp)
- roleToOfp = float(t0Ofp) - float(roleTimestamp)
- ofpToDevice = float(deviceTimestamp) - float(t0Ofp)
- # Timestamps gathered from ONOS are millisecond
- # precision. They are returned as integers, thus no
- # need to be more precise than 'int'. However,
- # the processing seems to be mostly under 1 ms,
- # thus this may be a problem point to handle any
- # submillisecond output that we are unsure of.
- # For now, this will be treated as 0 ms if less than 1 ms
- deviceToGraph = int(graphTimestamp) - int(deviceTimestamp)
-
- if endToEnd >= thresholdMin and\
- endToEnd < thresholdMax and i >= iterIgnore:
- endToEndLatNodeIter[node][i] = endToEnd
- main.log.info("ONOS "+str(nodeNum)+ " end-to-end: "+
- str(endToEnd) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+ " end-to-end "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(endToEnd))
-
- if tcpToFeature >= thresholdMin and\
- tcpToFeature < thresholdMax and i >= iterIgnore:
- tcpToFeatureLatNodeIter[node][i] = tcpToFeature
- main.log.info("ONOS "+str(nodeNum)+ " tcp-to-feature: "+
- str(tcpToFeature) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+ " tcp-to-feature "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(tcpToFeature))
-
- if featureToRole >= thresholdMin and\
- featureToRole < thresholdMax and i >= iterIgnore:
- featureToRoleRequestLatNodeIter[node][i] = featureToRole
- main.log.info("ONOS "+str(nodeNum)+ " feature-to-role: "+
- str(featureToRole) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+ " feature-to-role "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(featureToRole))
-
- if roleToOfp >= thresholdMin and\
- roleToOfp < thresholdMax and i >= iterIgnore:
- roleRequestToRoleReplyLatNodeIter[node][i] = roleToOfp
- main.log.info("ONOS "+str(nodeNum)+ " role-to-reply: "+
- str(roleToOfp) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+ " role-to-reply "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(roleToOfp))
-
- if ofpToDevice >= thresholdMin and\
- ofpToDevice < thresholdMax and i >= iterIgnore:
- roleReplyToDeviceLatNodeIter[node][i] = ofpToDevice
- main.log.info("ONOS "+str(nodeNum)+ " reply-to-device: "+
- str(ofpToDevice) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+ " reply-to-device "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(ofpToDevice))
-
- if deviceToGraph >= thresholdMin and\
- deviceToGraph < thresholdMax and i >= iterIgnore:
- deviceToGraphLatNodeIter[node][i] = deviceToGraph
- main.log.info("ONOS "+str(nodeNum)+ " device-to-graph: "+
- str(deviceToGraph) + " ms")
- else:
- if deviceToGraph == 0:
- deviceToGraphLatNodeIter[node][i] = 0
- main.log.info("ONOS "+str(nodeNum) +
- " device-to-graph measurement "+
- "was set to 0 ms because of precision "+
- "uncertainty. ")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " device-to-graph "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(deviceToGraph))
-
- # ********************
- time.sleep(5)
-
- # Get device id to remove
- deviceIdJsonStr = main.ONOS1cli.devices()
-
- main.log.info( "Device obj obtained: " + str(deviceIdJsonStr) )
- deviceId = json.loads(deviceIdJsonStr)
-
- deviceList = []
- for device in deviceId:
- deviceList.append(device['id'])
-
- # Measure switch down metrics
- # TCP FIN/ACK -> TCP FIN
- # TCP FIN -> Device Event
- # Device Event -> Graph Event
- # Capture switch down FIN / ACK packets
-
- # The -A 1 grep option allows us to grab 1 extra line after the
- # last tshark output grepped originally
- main.ONOS1.tsharkGrep( tsharkFinAckSequence, tsharkFinAckOutput,
- grepOptions = '-A 1' )
-
- time.sleep( 5 )
-
- removeJsonList = []
-
- main.step('Remove switch from controller')
- main.Mininet1.deleteSwController('s3')
- firstDevice = deviceList[0]
-
- # We need to get metrics before removing
- # device from the store below.
- for node in range(0, clusterCount):
- metricsSwDown = CLIs[node].topologyEventsMetrics
- jsonStr = metricsSwDown()
- removeJsonList.append( json.loads(jsonStr) )
-
- main.ONOS1.tsharkStop()
-
- main.log.info( "Removing device " +str(firstDevice)+
- " from ONOS" )
-
- #if deviceId:
- main.ONOS1cli.deviceRemove(firstDevice)
-
- main.log.info('Copying over tshark files')
- os.system('scp ' + ONOSUser + '@' + nodeIpList[0] +
- ':' + tsharkFinAckOutput + ' /tmp/')
-
- time.sleep( 10 )
- finAckOutputList = []
- with open(tsharkFinAckOutput, 'r') as f:
- tempLine = f.readlines()
- main.log.info('Object read in from FinAck capture: ' +
- "\n".join(tempLine))
-
- index = 1
- for line in tempLine:
- obj = line.split(' ')
-
- # There are at least 3 objects in field (valid
- # tshark output is lengthy)
- if len(obj) > 2:
- # If first index of object is like an epoch time
- if obj[1] != ' ' and float(obj[1]) > 1400000000.0:
- temp = obj[1]
- elif obj[2] != ' 'and float(obj[2]) > 1400000000.0:
- temp = obj[2]
- elif obj[3] != ' 'and float(obj[3]) > 1400000000.0:
- temp = obj[3]
- else:
- temp = 0
- if index == 1:
- tFinAck = float(temp) * 1000.0
- elif index == 2:
- continue
- elif index == 3:
- tAck = float(temp) * 1000.0
- else:
- tFinAck = 0
- tAck = 0
- else:
- main.log.error('Tshark output file for OFP' +
- ' returned unexpected results')
- tFinAck = 0
- tAck = 0
- assertion = main.FALSE
-
- index = index+1
-
- # with open() as f takes care of closing file
-
- time.sleep(5)
-
- for node in range(0, clusterCount):
- nodeNum = node+1
- jsonObj = removeJsonList[node]
- if jsonObj:
- graphTimestamp = jsonObj[graphTimestampKey]['value']
- deviceTimestamp = jsonObj[deviceTimestampKey]['value']
- main.log.info("Graph timestamp: "+str(graphTimestamp))
- main.log.info("Device timestamp: "+str(deviceTimestamp))
- else:
- main.log.error( "Unexpected JSON object" )
- # If we could not obtain the JSON object,
- # set the timestamps to 0, which will be
- # excluded from the measurement later on
- # (realized as invalid)
- graphTimestamp = 0
- deviceTimestamp = 0
-
- finAckTransaction = float(tAck) - float(tFinAck)
- ackToDevice = float(deviceTimestamp) - float(tAck)
- deviceToGraph = float(graphTimestamp) - float(deviceTimestamp)
- endToEndDisc = int(graphTimestamp) - int(tFinAck)
-
- if endToEndDisc >= thresholdMin and\
- endToEndDisc < thresholdMax and i >= iterIgnore:
- endToEndDiscLatNodeIter[node][i] = endToEndDisc
- main.log.info("ONOS "+str(nodeNum) +
- "end-to-end disconnection: "+
- str(endToEndDisc) + " ms" )
- else:
- main.log.info("ONOS " + str(nodeNum) +
- " end-to-end disconnection "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(endToEndDisc))
-
- if finAckTransaction >= thresholdMin and\
- finAckTransaction < thresholdMax and i >= iterIgnore:
- finAckTransactionLatNodeIter[node][i] = finAckTransaction
- main.log.info("ONOS "+str(nodeNum)+
- " fin/ack transaction: "+
- str(finAckTransaction) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " fin/ack transaction "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(finAckTransaction))
-
- if ackToDevice >= thresholdMin and\
- ackToDevice < thresholdMax and i >= iterIgnore:
- ackToDeviceLatNodeIter[node][i] = ackToDevice
- main.log.info("ONOS "+str(nodeNum)+
- " ack-to-device: "+
- str(ackToDevice) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " ack-to-device "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(ackToDevice))
-
- if deviceToGraph >= thresholdMin and\
- deviceToGraph < thresholdMax and i >= iterIgnore:
- deviceToGraphDiscLatNodeIter[node][i] = deviceToGraph
- main.log.info("ONOS "+str(nodeNum)+
- " device-to-graph disconnect: "+
- str(deviceToGraph) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " device-to-graph disconnect "+
- "measurement ignored due to excess in "+
- "threshold or premature iteration: ")
- main.log.info(str(deviceToGraph))
-
- endToEndAvg = 0
- ofpToGraphAvg = 0
- dbCmdList = []
- for node in range(0, clusterCount):
- # List of latency for each node
- endToEndList = []
- tcpToFeatureList = []
- featureToRoleList = []
- roleToOfpList = []
- ofpToDeviceList = []
- deviceToGraphList = []
-
- finAckTransactionList = []
- ackToDeviceList = []
- deviceToGraphDiscList = []
- endToEndDiscList = []
-
- # LatNodeIter 2d arrays contain all iteration latency
- # for each node of the current scale cluster size
- # Switch connection measurements
- # Set further acceptance criteria for measurements
- # here if you would like to filter reporting results
- for item in endToEndLatNodeIter[node]:
- if item > 0.0:
- endToEndList.append(item)
-
- for item in tcpToFeatureLatNodeIter[node]:
- if item > 0.0:
- tcpToFeatureList.append(item)
-
- for item in featureToRoleRequestLatNodeIter[node]:
- if item > 0.0:
- featureToRoleList.append(item)
-
- for item in roleRequestToRoleReplyLatNodeIter[node]:
- if item > 0.0:
- roleToOfpList.append(item)
-
- for item in roleReplyToDeviceLatNodeIter[node]:
- if item >= 0.0:
- ofpToDeviceList.append(item)
-
- for item in featureToRoleRequestLatNodeIter[node]:
- if item > 0.0:
- featureToRoleList.append(item)
-
- for item in deviceToGraphLatNodeIter[node]:
- if item >= 0.0:
- deviceToGraphList.append(item)
-
- # Switch disconnect measurements
- for item in endToEndDiscLatNodeIter[node]:
- if item > 0.0:
- endToEndDiscList.append(item)
-
- for item in finAckTransactionLatNodeIter[node]:
- if item > 0.0:
- finAckTransactionList.append(item)
-
- for item in ackToDeviceLatNodeIter[node]:
- if item > 0.0:
- ackToDeviceList.append(item)
-
- for item in deviceToGraphDiscLatNodeIter[node]:
- if item >= 0.0:
- deviceToGraphDiscList.append(item)
-
- endToEndAvg = round(numpy.mean(endToEndList), 2)
- endToEndStdDev = round(numpy.std(endToEndList), 2)
-
- tcpToFeatureAvg = round(numpy.mean(tcpToFeatureList), 2)
- tcpToFeatureStdDev = round(numpy.std(tcpToFeatureList), 2)
-
- featureToRoleAvg = round(numpy.mean(featureToRoleList), 2)
- featureToRoleStdDev = round(numpy.std(featureToRoleList), 2)
-
- roleToOfpAvg = round(numpy.mean(roleToOfpList), 2)
- roleToOfpStdDev = round(numpy.std(roleToOfpList), 2)
-
- ofpToDeviceAvg = round(numpy.mean(ofpToDeviceList), 2)
- ofpToDeviceStdDev = round(numpy.std(ofpToDeviceList), 2)
-
- deviceToGraphAvg = round(numpy.mean(deviceToGraphList), 2)
- deviceToGraphStdDev = round(numpy.std(deviceToGraphList), 2)
-
- endToEndDiscAvg = round(numpy.mean(endToEndDiscList), 2)
- endToEndDiscStdDev = round(numpy.std(endToEndDiscList), 2)
-
- finAckAvg = round(numpy.mean(finAckTransactionList), 2)
- finAckStdDev = round(numpy.std(finAckTransactionList), 2)
-
- ackToDeviceAvg = round(numpy.mean(ackToDeviceList), 2)
- ackToDeviceStdDev = round(numpy.std(ackToDeviceList), 2)
-
- deviceToGraphDiscAvg = round(numpy.mean(deviceToGraphDiscList), 2)
- deviceToGraphDiscStdDev = round(numpy.std(deviceToGraphDiscList), 2)
-
- main.log.report(' - Node ' + str(node + 1) + ' Summary - ')
- main.log.report(' - Switch Connection Statistics - ')
-
- main.log.report(' End-to-end Avg: ' + str(endToEndAvg) +
- ' ms' + ' End-to-end Std dev: ' +
- str(endToEndStdDev) + ' ms')
-
- main.log.report(' Tcp-to-feature-reply Avg: ' +
- str(tcpToFeatureAvg) + ' ms')
- main.log.report(' Tcp-to-feature-reply Std dev: '+
- str(tcpToFeatureStdDev) + ' ms')
-
- main.log.report(' Feature-reply-to-role-request Avg: ' +
- str(featureToRoleAvg) + ' ms')
- main.log.report(' Feature-reply-to-role-request Std Dev: ' +
- str(featureToRoleStdDev) + ' ms')
-
- main.log.report(' Role-request-to-role-reply Avg: ' +
- str(roleToOfpAvg) +' ms')
- main.log.report(' Role-request-to-role-reply Std dev: ' +
- str(roleToOfpStdDev) + ' ms')
-
- main.log.report(' Role-reply-to-device Avg: ' +
- str(ofpToDeviceAvg) +' ms')
- main.log.report(' Role-reply-to-device Std dev: ' +
- str(ofpToDeviceStdDev) + ' ms')
-
- main.log.report(' Device-to-graph Avg: ' +
- str(deviceToGraphAvg) + ' ms')
- main.log.report( 'Device-to-graph Std dev: ' +
- str(deviceToGraphStdDev) + ' ms')
-
- main.log.report(' - Switch Disconnection Statistics - ')
- main.log.report(' End-to-end switch disconnect Avg: ' +
- str(endToEndDiscAvg) + ' ms')
- main.log.report(' End-to-end switch disconnect Std dev: ' +
- str(endToEndDiscStdDev) + ' ms')
- main.log.report(' Fin/Ack-to-Ack Avg: ' + str(finAckAvg) + ' ms')
- main.log.report(' Fin/Ack-to-Ack Std dev: ' +
- str(finAckStdDev) + ' ms')
-
- main.log.report(' Ack-to-device Avg: ' + str(ackToDeviceAvg) +
- ' ms')
- main.log.report(' Ack-to-device Std dev: ' + str(ackToDeviceStdDev) +
- ' ms')
-
- main.log.report(' Device-to-graph (disconnect) Avg: ' +
- str(deviceToGraphDiscAvg) + ' ms')
- main.log.report(' Device-to-graph (disconnect) Std dev: ' +
- str(deviceToGraphDiscStdDev) + ' ms')
-
- # For database schema, refer to Amazon web services
- dbCmdList.append(
- "INSERT INTO switch_latency_details VALUES('" +
- timeToPost + "','switch_latency_results'," +
- jenkinsBuildNumber + ',' + str(clusterCount) + ",'baremetal" +
- str(node + 1) + "'," +
- str(endToEndAvg) + ',' +
- str(tcpToFeatureAvg) + ',' +
- str(featureToRoleAvg) + ',' +
- str(roleToOfpAvg) + ',' +
- str(ofpToDeviceAvg) + ',' +
- str(deviceToGraphAvg) + ',' +
- str(endToEndDiscAvg) + ',' +
- str(finAckAvg) + ',' +
- str(ackToDeviceAvg) + ',' +
- str(deviceToGraphDiscAvg) +
- ');')
-
- if debugMode == 'on':
- main.ONOS1.cpLogsToDir('/opt/onos/log/karaf.log',
- '/tmp/', copyFileName='sw_lat_karaf')
- fResult = open(resultPath, 'a')
- for line in dbCmdList:
- if line:
- fResult.write(line + '\n')
- fResult.close()
-
- assertion = main.TRUE
-
- utilities.assert_equals(expect=main.TRUE, actual=assertion,
- onpass='Switch latency test successful',
- onfail='Switch latency test failed')
-
- def CASE3(self, main):
- """
- Bring port up / down and measure latency.
- Port enable / disable is simulated by ifconfig up / down
-
- In ONOS-next, we must ensure that the port we are
- manipulating is connected to another switch with a valid
- connection. Otherwise, graph view will not be updated.
- """
- import time
- import subprocess
- import os
- import requests
- import json
- import numpy
- ONOS1Ip = main.params['CTRL']['ip1']
- ONOS2Ip = main.params['CTRL']['ip2']
- ONOS3Ip = main.params['CTRL']['ip3']
- ONOSUser = main.params['CTRL']['user']
- defaultSwPort = main.params['CTRL']['port1']
- assertion = main.TRUE
- numIter = main.params['TEST']['numIter']
- iterIgnore = int(main.params['TEST']['iterIgnore'])
-
- deviceTimestampKey = main.params['JSON']['deviceTimestamp']
- graphTimestampKey = main.params['JSON']['graphTimestamp']
- linkTimestampKey = main.params['JSON']['linkTimestamp']
-
- tsharkPortUp = '/tmp/tshark_port_up.txt'
- tsharkPortDown = '/tmp/tshark_port_down.txt'
- tsharkPortStatus = main.params[ 'TSHARK' ][ 'ofpPortStatus' ]
-
- debugMode = main.params['TEST']['debugMode']
- postToDB = main.params['DB']['postToDB']
- resultPath = main.params['DB']['portEventResultPath']
- localTime = time.strftime('%x %X')
- localTime = localTime.replace('/', '')
- localTime = localTime.replace(' ', '_')
- localTime = localTime.replace(':', '')
-
- if debugMode == 'on':
- main.ONOS1.tsharkPcap('eth0', '/tmp/port_lat_pcap_' + localTime)
-
- upThresholdStr = main.params['TEST']['portUpThreshold']
- downThresholdStr = main.params['TEST']['portDownThreshold']
- upThresholdObj = upThresholdStr.split(',')
- downThresholdObj = downThresholdStr.split(',')
- upThresholdMin = int(upThresholdObj[0])
- upThresholdMax = int(upThresholdObj[1])
- downThresholdMin = int(downThresholdObj[0])
- downThresholdMax = int(downThresholdObj[1])
-
- interfaceConfig = 's1-eth1'
- main.log.report('Port enable / disable latency')
- main.log.report('Simulated by ifconfig up / down')
- main.log.report('Total iterations of test: ' + str(numIter))
- main.step('Assign switches s1 and s2 to controller 1')
-
- main.Mininet1.assignSwController(sw='1',
- ip1=ONOS1Ip, port1=defaultSwPort)
- main.Mininet1.assignSwController(sw='2',
- ip1=ONOS1Ip, port1=defaultSwPort)
-
- time.sleep(15)
-
- portUpEndToEndNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portUpOfpToDevNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portUpDevToLinkNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portUpLinkToGraphNodeIter = numpy.zeros((clusterCount, int(numIter)))
-
- portDownEndToEndNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portDownOfpToDevNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portDownDevToLinkNodeIter = numpy.zeros((clusterCount, int(numIter)))
- portDownLinkToGraphNodeIter = numpy.zeros((clusterCount, int(numIter)))
-
- for i in range(0, int(numIter)):
- main.step('Starting wireshark capture for port status down')
- main.ONOS1.tsharkGrep(tsharkPortStatus, tsharkPortDown)
-
- time.sleep(5)
-
- main.step('Disable port: ' + interfaceConfig)
- main.Mininet1.handle.sendline('sh ifconfig ' +
- interfaceConfig + ' down')
- main.Mininet1.handle.expect('mininet>')
-
- jsonStrPtDown = []
- for node in range (0, clusterCount):
- metricsPortDown = CLIs[node].topologyEventsMetrics()
- jsonStrPtDown.append(metricsPortDown)
-
- time.sleep(3)
-
- main.ONOS1.tsharkStop()
-
- os.system('scp ' + ONOSUser + '@' + ONOS1Ip + ':' +
- tsharkPortDown + ' /tmp/')
-
- fPortDown = open(tsharkPortDown, 'r')
- fLine = fPortDown.readline()
- objDown = fLine.split(' ')
- if len(fLine) > 0:
- timestampBeginPtDown = int(float(objDown[1]) * 1000)
- # At times, tshark reports timestamp at the 3rd
- # index of the array. If initial readings were
- # unlike the epoch timestamp, then check the 3rd
- # index and set that as a timestamp
- if timestampBeginPtDown < 1400000000000:
- timestampBeginPtDown = int(float(objDown[2]) * 1000)
- # If there are any suspicion of invalid results
- # check this reported value
- main.log.info('Port down begin timestamp: ' +
- str(timestampBeginPtDown))
- else:
- main.log.info('Tshark output file returned unexpected' +
- ' results: ' + str(objDown))
- timestampBeginPtDown = 0
- fPortDown.close()
-
- for node in range(0, clusterCount):
- nodeNum = node+1
- # metricsDown = CLIs[node].topologyEventsMetrics
- #jsonStrPtDown[node] = metricsDown()
- jsonObj = json.loads(jsonStrPtDown[node])
-
- if jsonObj:
- graphTimestamp = jsonObj[graphTimestampKey]['value']
- deviceTimestamp = jsonObj[deviceTimestampKey]['value']
- linkTimestamp = jsonObj[linkTimestampKey]['value']
- else:
- main.log.error( "Unexpected json object" )
- graphTimestamp = 0
- deviceTimestamp = 0
- linkTimestamp = 0
-
- ptDownEndToEnd = int(graphTimestamp) - int(timestampBeginPtDown)
- ptDownOfpToDevice = float(deviceTimestamp) - float(timestampBeginPtDown)
- ptDownDeviceToLink = float(linkTimestamp) - float(deviceTimestamp)
- ptDownLinkToGraph = float(graphTimestamp) - float(linkTimestamp)
-
- if ptDownEndToEnd >= downThresholdMin and\
- ptDownEndToEnd < downThresholdMax and i >= iterIgnore:
- portDownEndToEndNodeIter[node][i] = ptDownEndToEnd
- main.log.info("ONOS "+str(nodeNum)+
- " port down End-to-end: "+
- str(ptDownEndToEnd) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port down End-to-end ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptDownOfpToDevice >= downThresholdMin and\
- ptDownOfpToDevice < downThresholdMax and i >= iterIgnore:
- portDownOfpToDevNodeIter[node][i] = ptDownOfpToDevice
- main.log.info("ONOS "+str(nodeNum)+
- " port down Ofp-to-device: "+
- str(ptDownOfpToDevice) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port down Ofp-to-device ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptDownDeviceToLink >= downThresholdMin and\
- ptDownDeviceToLink < downThresholdMax and i >= iterIgnore:
- portDownDevToLinkNodeIter[node][i] = ptDownDeviceToLink
- main.log.info("ONOS "+str(nodeNum)+
- " port down Device-to-link "+
- str(ptDownDeviceToLink) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port down Device-to-link ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptDownLinkToGraph >= downThresholdMin and\
- ptDownLinkToGraph < downThresholdMax and i >= iterIgnore:
- portDownLinkToGraphNodeIter[node][i] = ptDownLinkToGraph
- main.log.info("ONOS "+str(nodeNum)+
- " port down Link-to-graph "+
- str(ptDownLinkToGraph) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port down Link-to-graph ignored"+
- " due to excess in threshold or premature iteration")
-
- time.sleep(3)
-
- main.step('Starting wireshark capture for port status up')
- main.ONOS1.tsharkGrep(tsharkPortStatus, tsharkPortUp)
-
- time.sleep(5)
- main.step('Enable port and obtain timestamp')
- main.Mininet1.handle.sendline('sh ifconfig ' + interfaceConfig + ' up')
- main.Mininet1.handle.expect('mininet>')
-
- jsonStrPtUp = []
- for node in range (0, clusterCount):
- metricsPortUp = CLIs[node].topologyEventsMetrics()
- jsonStrPtUp.append(metricsPortUp)
-
- time.sleep(5)
- main.ONOS1.tsharkStop()
-
- time.sleep(3)
- os.system('scp ' + ONOSUser + '@' +
- ONOS1Ip + ':' + tsharkPortUp + ' /tmp/')
-
- fPortUp = open(tsharkPortUp, 'r')
- fLine = fPortUp.readline()
- objUp = fLine.split(' ')
- if len(fLine) > 0:
- timestampBeginPtUp = int(float(objUp[1]) * 1000)
- if timestampBeginPtUp < 1400000000000:
- timestampBeginPtUp = int(float(objUp[2]) * 1000)
- main.log.info('Port up begin timestamp: ' + str(timestampBeginPtUp))
- else:
- main.log.info('Tshark output file returned unexpected' + ' results.')
- timestampBeginPtUp = 0
- fPortUp.close()
-
- for node in range(0, clusterCount):
- nodeNum = node+1
- #metricsUp = CLIs[node].topologyEventsMetrics
- #jsonStrUp = metricsUp()
- jsonObj = json.loads(jsonStrPtUp[node])
-
- if jsonObj:
- graphTimestamp = jsonObj[graphTimestampKey]['value']
- deviceTimestamp = jsonObj[deviceTimestampKey]['value']
- linkTimestamp = jsonObj[linkTimestampKey]['value']
- else:
- main.log.error( "Unexpected json object" )
- graphTimestamp = 0
- deviceTimestamp = 0
- linkTimestamp = 0
-
- ptUpEndToEnd = int(graphTimestamp) - int(timestampBeginPtUp)
- ptUpOfpToDevice = float(deviceTimestamp) - float(timestampBeginPtUp)
- ptUpDeviceToLink = float(linkTimestamp) - float(deviceTimestamp)
- ptUpLinkToGraph = float(graphTimestamp) - float(linkTimestamp)
-
- if ptUpEndToEnd >= upThresholdMin and\
- ptUpEndToEnd < upThresholdMax and i > iterIgnore:
- portUpEndToEndNodeIter[node][i] = ptUpEndToEnd
- main.log.info("ONOS "+str(nodeNum)+
- " port up End-to-end: "+
- str(ptUpEndToEnd) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port up End-to-end ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptUpOfpToDevice >= upThresholdMin and\
- ptUpOfpToDevice < upThresholdMax and i > iterIgnore:
- portUpOfpToDevNodeIter[node][i] = ptUpOfpToDevice
- main.log.info("ONOS "+str(nodeNum)+
- " port up Ofp-to-device: "+
- str(ptUpOfpToDevice) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port up Ofp-to-device ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptUpDeviceToLink >= upThresholdMin and\
- ptUpDeviceToLink < upThresholdMax and i > iterIgnore:
- portUpDevToLinkNodeIter[node][i] = ptUpDeviceToLink
- main.log.info("ONOS "+str(nodeNum)+
- " port up Device-to-link: "+
- str(ptUpDeviceToLink) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port up Device-to-link ignored"+
- " due to excess in threshold or premature iteration")
-
- if ptUpLinkToGraph >= upThresholdMin and\
- ptUpLinkToGraph < upThresholdMax and i > iterIgnore:
- portUpLinkToGraphNodeIter[node][i] = ptUpLinkToGraph
- main.log.info("ONOS "+str(nodeNum)+
- " port up Link-to-graph: "+
- str(ptUpLinkToGraph) + " ms")
- else:
- main.log.info("ONOS "+str(nodeNum)+
- " port up Link-to-graph ignored"+
- " due to excess in threshold or premature iteration")
-
- dbCmdList = []
- for node in range(0, clusterCount):
- portUpEndToEndList = []
- portUpOfpToDevList = []
- portUpDevToLinkList = []
- portUpLinkToGraphList = []
-
- portDownEndToEndList = []
- portDownOfpToDevList = []
- portDownDevToLinkList = []
- portDownLinkToGraphList = []
-
- portUpEndToEndAvg = 0
- portUpOfpToDevAvg = 0
- portUpDevToLinkAvg = 0
- portUpLinkToGraphAvg = 0
-
- portDownEndToEndAvg = 0
- portDownOfpToDevAvg = 0
- portDownDevToLinkAvg = 0
- portDownLinkToGraphAvg = 0
-
- # TODO: Update for more pythonic way to get list
- # portUpDevList = [item for item in portUpDevNodeIter[node]
- # if item > 0.0]
- for item in portUpEndToEndNodeIter[node]:
- if item > 0.0:
- portUpEndToEndList.append(item)
-
- for item in portUpOfpToDevNodeIter[node]:
- if item > 0.0:
- portUpOfpToDevList.append(item)
-
- for item in portUpDevToLinkNodeIter[node]:
- if item > 0.0:
- portUpDevToLinkList.append(item)
-
- for item in portUpLinkToGraphNodeIter[node]:
- if item >= 0.0:
- portUpLinkToGraphList.append(item)
-
- for item in portDownEndToEndNodeIter[node]:
- if item > 0.0:
- portDownEndToEndList.append(item)
-
- for item in portDownOfpToDevNodeIter[node]:
- if item > 0.0:
- portDownOfpToDevList.append(item)
-
- for item in portDownDevToLinkNodeIter[node]:
- if item >= 0.0:
- portDownDevToLinkList.append(item)
-
- for item in portDownLinkToGraphNodeIter[node]:
- if item >= 0.0:
- portDownLinkToGraphList.append(item)
-
- portUpEndToEndAvg = round(numpy.mean(portUpEndToEndList), 2)
- portUpOfpToDevAvg = round(numpy.mean(portUpOfpToDevList), 2)
- portUpDevToLinkAvg = round(numpy.mean(portUpDevToLinkList), 2)
- portUpLinkToGraphAvg = round(numpy.mean(portUpLinkToGraphList), 2)
-
- portDownEndToEndAvg = round(numpy.mean(portDownEndToEndList), 2)
- portDownOfpToDevAvg = round(numpy.mean(portDownOfpToDevList), 2)
- portDownDevToLinkAvg = round(numpy.mean(portDownDevToLinkList), 2)
- portDownLinkToGraphAvg = round(numpy.mean(portDownLinkToGraphList), 2)
-
- portUpStdDev = round(numpy.std(portUpEndToEndList), 2)
- portDownStdDev = round(numpy.std(portDownEndToEndList), 2)
-
- main.log.report(' - Node ' + str(node + 1) + ' Summary - ')
- main.log.report(' Port up End-to-end ' +
- str(portUpEndToEndAvg) + ' ms')
- main.log.report(' Port up Ofp-to-device ' +
- str(portUpOfpToDevAvg) + ' ms')
- main.log.report(' Port up Device-to-link ' +
- str(portUpDevToLinkAvg) + ' ms')
- main.log.report(' Port up Link-to-graph ' +
- str(portUpLinkToGraphAvg) + ' ms')
-
- main.log.report(' Port down End-to-end ' +
- str(round(portDownEndToEndAvg, 2)) + ' ms')
- main.log.report(' Port down Ofp-to-device ' +
- str(portDownOfpToDevAvg) + ' ms')
- main.log.report(' Port down Device-to-link ' +
- str(portDownDevToLinkAvg) + ' ms')
- main.log.report(' Port down Link-to-graph' +
- str(portDownLinkToGraphAvg) + ' ms')
-
- dbCmdList.append("INSERT INTO port_latency_details VALUES('" +
- timeToPost + "','port_latency_results'," + jenkinsBuildNumber +
- ',' + str(clusterCount) + ",'baremetal" + str(node + 1) +
- "'," +
- str(portUpEndToEndAvg) +',' +
- str(portUpOfpToDevAvg) + ',' +
- str(portUpDevToLinkAvg) + ',' +
- str(portUpLinkToGraphAvg) + ',' +
- str(portDownEndToEndAvg) + ',' +
- str(portDownOfpToDevAvg) + ',' +
- str(portDownDevToLinkAvg) + ',' +
- str(portDownLinkToGraphAvg) +
- ');')
-
- fResult = open(resultPath, 'a')
- for line in dbCmdList:
- if line:
- fResult.write(line + '\n')
-
- fResult.close()
-
- # Delete switches from controller to prepare for next
- # set of tests
- main.Mininet1.deleteSwController('s1')
- main.Mininet1.deleteSwController('s2')
- utilities.assert_equals(expect=main.TRUE,
- actual=assertion,
- onpass='Port discovery latency calculation successful',
- onfail='Port discovery test failed')
-
- def CASE4(self, main):
- """
- Increase number of nodes and initiate CLI
-
- With the most recent implementation, we need a method to
- ensure all ONOS nodes are killed, as well as redefine
- the cell files to ensure all nodes that will be used
- is in the cell file. Otherwise, exceptions will
- prohibit test from running successfully.
-
- 3/12/15
-
- """
- global clusterCount
- import time
- import os
-
- clusterCount += 2
-
- benchIp = main.params[ 'BENCH' ][ 'ip' ]
- features = main.params[ 'ENV' ][ 'cellFeatures' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- mininetIp = main.params[ 'MN' ][ 'ip1' ]
-
- main.log.report('Increasing cluster size to ' + str(clusterCount))
-
- main.log.step( "Killing all ONOS processes before scale-out" )
-
- for i in range( 1, 8 ):
- main.ONOSbench.onosDie(
- main.params[ 'CTRL' ][ 'ip'+str(i) ] )
- main.ONOSbench.onosUninstall(
- main.params[ 'CTRL' ][ 'ip'+str(i) ] )
-
- main.step( "Creating scale-out cell file" )
- cellIp = []
- for node in range( 1, clusterCount + 1 ):
- cellIp.append( main.params[ 'CTRL' ][ 'ip'+str(node) ] )
-
- main.log.info( "Cell Ip list: " + str(cellIp) )
- main.ONOSbench.createCellFile( benchIp, cellName, mininetIp,
- str(features), *cellIp )
-
- main.step( "Setting cell definition" )
- main.ONOSbench.setCell(cellName)
-
- main.step( "Packaging cell definition" )
- main.ONOSbench.onosPackage()
-
- for node in range( 1, clusterCount + 1 ):
- main.ONOSbench.onosInstall(
- node = main.params[ 'CTRL' ][ 'ip'+str(node) ])
-
- time.sleep( 20 )
-
- for node in range( 1, clusterCount + 1):
- for i in range( 2 ):
- isup = main.ONOSbench.isup(
- main.params[ 'CTRL' ][ 'ip'+str(node) ] )
- if isup:
- main.log.info( "ONOS "+str(node) + " is up\n")
- break
- if not isup:
- main.log.error( "ONOS "+str(node) + " did not start" )
-
- for node in range( 0, clusterCount ):
- CLIs[node].startOnosCli( cellIp[node] )
-
- main.step( 'Setting configurations for metrics' )
- configParam = 'maxEvents 1'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
- configParam = 'maxBatchMs 0'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
- configParam = 'maxIdleMs 0'
- main.ONOSbench.onosCfgSet( nodeIpList[0], configName, configParam )
-
- main.step( 'Activating essential applications' )
- CLIs[0].activateApp( 'org.onosproject.metrics' )
- CLIs[0].activateApp( 'org.onosproject.openflow' )
-
diff --git a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.topo b/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.topo
deleted file mode 100644
index 570dece..0000000
--- a/TestON/tests/TopoPerfNextBM/TopoPerfNextBM.topo
+++ /dev/null
@@ -1,163 +0,0 @@
-<TOPOLOGY>
- <COMPONENT>
-
- <ONOSbench>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>10.254.1.201</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.254.1.202</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.254.1.203</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>10.254.1.204</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
- <ONOS5>
- <host>10.254.1.205</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>10.254.1.206</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>10.254.1.207</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- <Mininet1>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>16</connect_order>
- <COMPONENTS>
- <arg1> --custom topo-perf-2sw.py </arg1>
- <arg2> --topo mytopo</arg2>
- <arg3> </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.254.1.200</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>17</connect_order>
- <COMPONENTS> </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/TopoPerfNextBM/__init__.py b/TestON/tests/TopoPerfNextBM/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/TopoPerfNextBM/__init__.py
+++ /dev/null
diff --git a/TestON/tests/TopoPerfNextBM/backup/TopoPerfNextBM.params b/TestON/tests/TopoPerfNextBM/backup/TopoPerfNextBM.params
deleted file mode 100644
index d681433..0000000
--- a/TestON/tests/TopoPerfNextBM/backup/TopoPerfNextBM.params
+++ /dev/null
@@ -1,96 +0,0 @@
-<PARAMS>
- <testcases>1,2,3,4,2,3,4,2,3,4,2,3</testcases>
-
- <ENV>
- <cellName>topo_perf_test</cellName>
- <cellFeatures>"org.onosproject.metrics,org.onosproject.openflow"</cellFeatures>
- </ENV>
-
- <GIT>
- #autoPull 'on' or 'off'
- <autoPull>off</autoPull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <user>sdn</user>
- <ip1>10.128.174.1</ip1>
- <port1>6633</port1>
- <ip2>10.128.174.2</ip2>
- <port2>6633</port2>
- <ip3>10.128.174.3</ip3>
- <port3>6633</port3>
- <ip4>10.128.174.4</ip4>
-
- <ip5>10.128.174.5</ip5>
- <ip6>10.128.174.6</ip6>
- <ip7>10.128.174.7</ip7>
- </CTRL>
-
- <MN>
- <ip1>10.128.10.90</ip1>
- <ip2>10.128.10.91</ip2>
- </MN>
-
- <BENCH>
- <ip>10.128.174.10</ip>
- </BENCH>
-
- <TSHARK>
- <ofpPortStatus>OF 1.3 146</ofpPortStatus>
- <ofpRoleReply>OF 1.3 90 of_role_reply</ofpRoleReply>
- <featureReply>OF 1.3 98 of_features_reply</featureReply>
- <roleRequest>OF 1.3 90 of_role_request</roleRequest>
- <tcpSynAck>TCP 74 6633</tcpSynAck>
- <finAckSequence>FIN</finAckSequence>
- </TSHARK>
-
- <TEST>
- #'on' or 'off' debug mode.
- #If on, logging will be more verbose and
- #tshark pcap will be enabled
- #pcap file located at /tmp/'capture_name'
- <debugMode>off</debugMode>
- <onosLogFile>/opt/onos/log/karaf*</onosLogFile>
- <mci>off</mci>
-
- <topoConfigFile>
- single_topo_event_accumulator.cfg
- </topoConfigFile>
- <topoConfigName>
- org.onlab.onos.net.topology.impl.DefaultTopologyProvider.cfg
- </topoConfigName>
-
- #Number of times to iterate each case
- <numIter>10</numIter>
- <numSwitch>2</numSwitch>
- #Number of iterations to ignore initially
- <iterIgnore>2</iterIgnore>
-
- <singleSwThreshold>0,1000</singleSwThreshold>
- <portUpThreshold>0,1000</portUpThreshold>
- <portDownThreshold>0,1000</portDownThreshold>
- <linkUpThreshold>0,10000</linkUpThreshold>
- <linkDownThreshold>0,10000</linkDownThreshold>
- <swDisc100Threshold>0,10000</swDisc100Threshold>
-
- <tabletFile>tablets_3node.json</tabletFile>
- </TEST>
-
- <DB>
- <postToDB>on</postToDB>
- <portEventResultPath>
- /home/admin/ONLabTest/TestON/tests/TopoPerfNextBM/portEventResultDb.log
- </portEventResultPath>
- <switchEventResultPath>
- /home/admin/ONLabTest/TestON/tests/TopoPerfNextBM/switchEventResultDb.log
- </switchEventResultPath>
- </DB>
-
- <JSON>
- <deviceTimestamp>topologyDeviceEventTimestamp</deviceTimestamp>
- <hostTimestamp>topologyHostEventTimestamp</hostTimestamp>
- <linkTimestamp>topologyLinkEventTimestamp</linkTimestamp>
- <graphTimestamp>topologyGraphEventTimestamp</graphTimestamp>
- </JSON>
-</PARAMS>
diff --git a/TestON/tests/TopoPerfNextBM/portEventResultDb.log b/TestON/tests/TopoPerfNextBM/portEventResultDb.log
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/TopoPerfNextBM/portEventResultDb.log
+++ /dev/null
diff --git a/TestON/tests/TopoPerfNextBM/switchEventResultDb.log b/TestON/tests/TopoPerfNextBM/switchEventResultDb.log
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/TopoPerfNextBM/switchEventResultDb.log
+++ /dev/null
diff --git a/TestON/tests/flowTP1g/__init__.py b/TestON/tests/flowTP1g/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/flowTP1g/__init__.py
+++ /dev/null
diff --git a/TestON/tests/flowTP1g/flowTP1g.params b/TestON/tests/flowTP1g/flowTP1g.params
deleted file mode 100644
index a3b104f..0000000
--- a/TestON/tests/flowTP1g/flowTP1g.params
+++ /dev/null
@@ -1,73 +0,0 @@
-<PARAMS>
-
- <testcases>1,2,1,2,1,2,1,2,1,2,1,2,1,2</testcases>
-
- <isOnBaremetal>True</isOnBaremetal>
- <SCALE>1,3,3,5,5,7,7</SCALE>
- <availableNodes>7</availableNodes>
-
-
-
- <ENV>
- <cellName>flowTP</cellName>
- <cellApps>drivers,null,demo</cellApps>
- </ENV>
-
- <TEST>
- <enableFlowRuleStoreBackup>true</enableFlowRuleStoreBackup>
- <skipCleanInstall>yes</skipCleanInstall>
- <warmUp>5</warmUp> #number of runs to warm up the system
- <sampleSize>20</sampleSize> #number of runs to take data from
- <neighbors>0,a</neighbors> #list of number of neighbors, a = all
- <flows>122500</flows>
- <switches>35</switches>
- <cooldown>10</cooldown>
- <testCMD0>flow-tester.py -f</testCMD0> #base command
- <testCMD1> -n </testCMD1> #neighbors
-
- </TEST>
-
- <GIT>
- <autopull>off</autopull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <USER>admin</USER>
-
- <ip1>OC1</ip1>
- <port1>6633</port1>
-
- <ip2>OC2</ip2>
- <port2>6633</port2>
-
- <ip3>OC3</ip3>
- <port3>6633</port3>
-
- <ip4>OC4</ip4>
- <port4>6633</port4>
-
- <ip5>OC5</ip5>
- <port5>6633</port5>
-
- <ip6>OC6</ip6>
- <port6>6633</port6>
-
- <ip7>OC7</ip7>
- <port7>6633</port7>
-
- </CTRL>
-
- <MN>
- <ip1>OCN</ip1>
- </MN>
-
- <BENCH>
- <user>admin</user>
- <ip1>OCN</ip1>
- </BENCH>
-
- <JSON>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/flowTP1g/flowTP1g.py b/TestON/tests/flowTP1g/flowTP1g.py
deleted file mode 100644
index 1f6ecbf..0000000
--- a/TestON/tests/flowTP1g/flowTP1g.py
+++ /dev/null
@@ -1,416 +0,0 @@
-# ScaleOutTemplate -> flowTP
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os.path
-
-
-class flowTP1g:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
-
- import time
- global init
- try:
- if type(init) is not bool:
- init = False
- except NameError:
- init = False
-
- #Load values from params file
- checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
- gitPull = main.params[ 'GIT' ][ 'autopull' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- Apps = main.params[ 'ENV' ][ 'cellApps' ]
- BENCHUser = main.params[ 'BENCH' ][ 'user' ]
- maxNodes = int(main.params[ 'availableNodes' ])
- skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
-
- main.log.info("==========DEBUG VERSION 3===========")
-
- main.exceptions = [0]*11
- main.warnings = [0]*11
- main.errors = [0]*11
-
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- if init == False:
- init = True
- global clusterCount #number of nodes running
- global ONOSIp #list of ONOS IP addresses
- global scale
- global commit
-
- clusterCount = 0
- ONOSIp = [ 0 ]
- scale = (main.params[ 'SCALE' ]).split(",")
- clusterCount = int(scale[0])
-
- #Populate ONOSIp with ips from params
- for i in range(1, maxNodes + 1):
- ipString = 'ip' + str(i)
- ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
-
- ONOSIp = [0]
- ONOSIp.extend(main.ONOSbench.getOnosIps())
-
- #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
- if skipMvn != "yes":
- mvnResult = main.ONOSbench.cleanInstall()
-
- #git
- main.step( "Git checkout and pull " + checkoutBranch )
- if gitPull == 'on':
- checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
- pullResult = main.ONOSbench.gitPull()
-
- else:
- checkoutResult = main.TRUE
- pullResult = main.TRUE
- main.log.info( "Skipped git checkout and pull" )
-
- commit = main.ONOSbench.getVersion()
- commit = (commit.split(" "))[1]
-
- resultsDB = open("flowTP1gDB", "w+")
- resultsDB.close()
-
- # -- END OF INIT SECTION --#
-
- clusterCount = int(scale[0])
- scale.remove(scale[0])
- main.log.info("CLUSTER COUNT: " + str(clusterCount))
-
- MN1Ip = ONOSIp[len(ONOSIp)-1]
- BENCHIp = ONOSIp[len(ONOSIp)-2]
-
- #kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating enviornment setup")
- for node in range(1, maxNodes + 1):
- main.ONOSbench.onosDie(ONOSIp[node])
-
- #Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
- for i in range(1, maxNodes + 1):
- main.log.info(" Uninstalling ONOS " + str(i) )
- main.ONOSbench.onosUninstall( ONOSIp[i] )
-
- #construct the cell file
- main.log.info("Creating cell file")
- cellIp = []
- for node in range (1, clusterCount + 1):
- cellIp.append(ONOSIp[node])
-
- main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
- main.log.info("Cell Ip list: " + str(cellIp))
-
- main.step( "Set Cell" )
- main.ONOSbench.setCell(cellName)
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.onosPackage()
-
- main.step( "verify cells" )
- verifyCellResult = main.ONOSbench.verifyCell()
-
- main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
- for node in range(1, clusterCount + 1):
- main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
- main.ONOSbench.onosInstall( ONOSIp[node])
-
- for node in range(1, clusterCount + 1):
- for i in range( 2 ):
- isup = main.ONOSbench.isup( ONOSIp[node] )
- if isup:
- main.log.info("ONOS " + str(node) + " is up\n")
- break
- if not isup:
- main.log.report( "ONOS " + str(node) + " didn't start!" )
-
- for node in range(1, clusterCount + 1):
- exec "a = main.ONOS%scli.startOnosCli" %str(node)
- a(ONOSIp[node])
-
- main.log.info("Startup sequence complete")
- main.ONOSbench.onosErrorLog(ONOSIp[1])
-
- def CASE2( self, main ):
- #
- # This is the flow TP test
- #
- import os.path
- import numpy
- import math
- import time
- import datetime
- import traceback
-
- global currentNeighbors
- try:
- currentNeighbors
- except:
- currentNeighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")[0]
- else:
- if currentNeighbors == "r": #reset
- currentNeighbors = "0"
- else:
- currentNeighbors = "a"
-
- testCMD = [ 0,0,0,0 ]
- warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
- sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
- switches = int(main.params[ 'TEST' ][ 'switches' ])
- neighborList = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")
- testCMD[0] = main.params[ 'TEST' ][ 'testCMD0' ]
- testCMD[1] = main.params[ 'TEST' ][ 'testCMD1' ]
- maxNodes = main.params[ 'availableNodes' ]
- onBaremetal = main.params['isOnBaremetal']
- cooldown = main.params[ 'TEST' ][ 'cooldown' ]
- cellName = main.params[ 'ENV' ][ 'cellName' ]
- BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
- BENCHUser = main.params[ 'BENCH' ][ 'user' ]
- MN1Ip = main.params[ 'MN' ][ 'ip1' ]
- maxNodes = int(main.params[ 'availableNodes' ])
- homeDir = os.path.expanduser('~')
- flowRuleBackup = str(main.params[ 'TEST' ][ 'enableFlowRuleStoreBackup' ])
- main.log.info("Flow Rule Backup is set to:" + flowRuleBackup)
-
- servers = str(clusterCount)
-
- if clusterCount == 1:
- neighborList = ['0']
- currentNeighbors = "r"
- else:
- if currentNeighbors == "a":
- neighborList = [str(clusterCount-1)]
- currentNeighbors = "r"
- else:
- neighborList = ['0']
-
- main.log.info("neightborlist: " + str(neighborList))
-
- ts = time.time()
- st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
-
- #write file to change mem limit to 32 gigs (BAREMETAL ONLY!)
- if onBaremetal == "true":
- filename = "/onos/tools/package/bin/onos-service"
- serviceConfig = open(homeDir + filename, 'w+')
- serviceConfig.write("#!/bin/bash\n ")
- serviceConfig.write("#------------------------------------- \n ")
- serviceConfig.write("# Starts ONOS Apache Karaf container\n ")
- serviceConfig.write("#------------------------------------- \n ")
- serviceConfig.write("#export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-7-openjdk-amd64/}\n ")
- serviceConfig.write("""export JAVA_OPTS="${JAVA_OPTS:--Xms8G -Xmx8G}" \n """)
- serviceConfig.write("")
- serviceConfig.write("ONOS_HOME=/opt/onos \n ")
- serviceConfig.write("")
- serviceConfig.write("[ -d $ONOS_HOME ] && cd $ONOS_HOME || ONOS_HOME=$(dirname $0)/..\n")
- serviceConfig.write("""${ONOS_HOME}/apache-karaf-$KARAF_VERSION/bin/karaf "$@" \n """)
- serviceConfig.close()
-
- for n in neighborList:
- main.log.step("\tSTARTING TEST")
- main.log.step("\tLOADING FROM SERVERS: \t" + str(clusterCount) )
- main.log.step("\tNEIGHBORS:\t" + n )
- main.log.info("=============================================================")
- main.log.info("=============================================================")
- #write file to configure nil link
- ipCSV = ""
- for i in range (1, int(maxNodes) + 1):
- tempstr = "ip" + str(i)
- ipCSV += main.params[ 'CTRL' ][ tempstr ]
- if i < int(maxNodes):
- ipCSV +=","
-
- for i in range(5):
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount 35" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(3)
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders topoShape linear" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(3)
- main.ONOSbench.handle.sendline("""onos $OC1 "null-simulation start" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(3)
- main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
- main.ONOSbench.handle.expect(":~")
- time.sleep(3)
- main.log.info("""onos $OC1 "cfg set org.onosproject.store.flow.impl.NewDistributedFlowRuleStore backupEnabled """ + flowRuleBackup + """" """)
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.store.flow.impl.NewDistributedFlowRuleStore backupEnabled """ + flowRuleBackup + """" """)
- main.ONOSbench.handle.expect(":~")
-
- main.ONOSbench.handle.sendline("""onos $OC1 "cfg get" """)
- main.ONOSbench.handle.expect(":~")
- main.log.info(main.ONOSbench.handle.before)
-
- time.sleep(3)
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- check = main.ONOSbench.handle.before
- main.log.info("\nStart up check: \n" + check + "\n")
- if "SCC(s)=1," in check:
- break
- time.sleep(5)
-
- #devide flows
- flows = int(main.params[ 'TEST' ][ 'flows' ])
- main.log.info("Flow Target = " + str(flows))
-
- flows = (flows *max(int(n)+1,int(servers)))/((int(n) + 1)*int(servers)*(switches))
-
- main.log.info("Flows per switch = " + str(flows))
-
- #build list of servers in "$OC1, $OC2...." format
- serverEnvVars = ""
- for i in range (1,int(servers)+1):
- serverEnvVars += ("-s " + ONOSIp[i] + " ")
-
- data = [[""]*int(servers)]*int(sampleSize)
- maxes = [""]*int(sampleSize)
-
- flowCMD = "python3 " + homeDir + "/onos/tools/test/bin/"
- flowCMD += testCMD[0] + " " + str(flows) + " " + testCMD[1]
- flowCMD += " " + str(n) + " " + str(serverEnvVars) + "-j"
-
- main.log.info(flowCMD)
- #time.sleep(60)
-
- for test in range(0, warmUp + sampleSize):
- if test < warmUp:
- main.log.info("Warm up " + str(test + 1) + " of " + str(warmUp))
- else:
- main.log.info("====== Test run: " + str(test-warmUp+1) + " ======")
-
- main.ONOSbench.handle.sendline(flowCMD)
- main.ONOSbench.handle.expect(":~")
- rawResult = main.ONOSbench.handle.before
- main.log.info("Raw results: \n" + rawResult + "\n")
-
- if "failed" in rawResult:
- main.log.report("FLOW_TESTER.PY FAILURE")
- main.log.report( " \n" + rawResult + " \n")
- for i in range(clusterCount):
- main.log.report("=======================================================")
- main.log.report(" ONOS " + str(i) + "LOG REPORT")
- main.ONOSbench.logReport(ONOSIp[i], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
- main.ONOSbench.handle.sendline("onos $OC1 flows")
- main.ONOSbench.handle.expect(":~")
- main.log.info(main.ONOSbench.handle.before)
-
- break
-
- ########################################################################################
- result = [""]*(clusterCount)
- rawResult = rawResult.splitlines()
-
- for node in range(1, clusterCount + 1):
- for line in rawResult:
- #print("line: " + line)
- if ONOSIp[node] in line and "server" in line:
- temp = line.split(" ")
- for word in temp:
- #print ("word: " + word)
- if "elapsed" in repr(word):
- index = temp.index(word) + 1
- myParsed = (temp[index]).replace(",","")
- myParsed = myParsed.replace("}","")
- myParsed = int(myParsed)
- result[node-1] = myParsed
- main.log.info( ONOSIp[node] + " : " + str(myParsed))
- break
-
- if test >= warmUp:
- for i in result:
- if i == "":
- main.log.error("Missing data point, critical failure incoming")
-
- print result
- maxes[test-warmUp] = max(result)
- main.log.info("Data collection iteration: " + str(test-warmUp) + " of " + str(sampleSize))
- main.log.info("Throughput time: " + str(maxes[test-warmUp]) + "(ms)")
-
- data[test-warmUp] = result
-
- # wait for flows = 0
- for checkCount in range(0,5):
- time.sleep(10)
- main.ONOSbench.handle.sendline("onos $OC1 summary")
- main.ONOSbench.handle.expect(":~")
- flowCheck = main.ONOSbench.handle.before
- if "flows=0," in flowCheck:
- main.log.info("Flows removed")
- break
- else:
- for line in flowCheck.splitlines():
- if "flows=" in line:
- main.log.info("Current Summary: " + line)
- if checkCount == 2:
- main.log.info("Flows are stuck, moving on ")
-
-
- time.sleep(5)
-
- main.log.info("raw data: " + str(data))
- main.log.info("maxes:" + str(maxes))
-
-
- # report data
- print("")
- main.log.info("\t Results (measurments are in milliseconds)")
- print("")
-
- nodeString = ""
- for i in range(1, int(servers) + 1):
- nodeString += ("\tNode " + str(i))
-
- for test in range(0, sampleSize ):
- main.log.info("\t Test iteration " + str(test + 1) )
- main.log.info("\t------------------")
- main.log.info(nodeString)
- resultString = ""
-
- for i in range(0, int(servers) ):
- resultString += ("\t" + str(data[test][i]) )
- main.log.info(resultString)
-
- print("\n")
-
- avgOfMaxes = numpy.mean(maxes)
- main.log.info("Average of max value from each test iteration: " + str(avgOfMaxes))
-
- stdOfMaxes = numpy.std(maxes)
- main.log.info("Standard Deviation of max values: " + str(stdOfMaxes))
- print("\n\n")
-
- avgTP = int(main.params[ 'TEST' ][ 'flows' ]) / avgOfMaxes #result in kflows/second
-
- tp = []
- for i in maxes:
- tp.append((int(main.params[ 'TEST' ][ 'flows' ]) / i ))
-
- stdTP = numpy.std(tp)
-
- main.log.info("Average thoughput: " + str(avgTP) + " Kflows/second" )
- main.log.info("Standard deviation of throughput: " + str(stdTP) + " Kflows/second")
-
- resultsLog = open("flowTP1gDB","a")
- resultString = ("'" + commit + "',")
- resultString += ("'1gig',")
- resultString += ((main.params[ 'TEST' ][ 'flows' ]) + ",")
- resultString += (str(clusterCount) + ",")
- resultString += (str(n) + ",")
- resultString += (str(avgTP) + "," + str(stdTP) + "\n")
- resultsLog.write(resultString)
- resultsLog.close()
-
- main.log.report("Result line to file: " + resultString)
-
- main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
diff --git a/TestON/tests/flowTP1g/flowTP1g.topo b/TestON/tests/flowTP1g/flowTP1g.topo
deleted file mode 100644
index d82f3fd..0000000
--- a/TestON/tests/flowTP1g/flowTP1g.topo
+++ /dev/null
@@ -1,144 +0,0 @@
-<TOPOLOGY>
-
- <COMPONENT>
-
- <ONOSbench>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS><home>~/onos</home></COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS4cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4cli>
-
- <ONOS5cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5cli>
-
- <ONOS6cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6cli>
-
- <ONOS7cli>
- <host>OCN</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7cli>
-
- <ONOS1>
- <host>OC1</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>OC2</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>10</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>OC3</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>11</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <ONOS4>
- <host>OC4</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>12</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS4>
-
-
- <ONOS5>
- <host>OC5</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>13</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS5>
-
- <ONOS6>
- <host>OC6</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>14</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS6>
-
- <ONOS7>
- <host>OC7</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>15</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS7>
-
- </COMPONENT>
-
-</TOPOLOGY>
-