Add stratum bmv2 for SROnosFailure and SRLinkFailure
- Add running stratum switches to these tests
- Add support for docker in SROnosFailure functions
- Add xconnect to cfgtranslator
- Rework switch roles in cfgtranslator
Change-Id: Ic0b386107a7813810de9bf7c34bdf2d869eafa84
(cherry picked from commit d2c84e79dd2257cba150dcde5c089b9d0bf81140)
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum
new file mode 100644
index 0000000..07cfeb9
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params.stratum
@@ -0,0 +1,102 @@
+<PARAMS>
+ <testcases>1,2,4,5</testcases>
+
+ <GRAPH>
+ <nodeCluster>Fabric</nodeCluster>
+ <builds>20</builds>
+ <jobName>SRLinkFailure-stratum</jobName>
+ </GRAPH>
+
+ <SCALE>
+ <size>3</size>
+ <max>3</max>
+ </SCALE>
+
+ <DEPENDENCY>
+ <useCommonConf>True</useCommonConf>
+ <useCommonTopo>True</useCommonTopo>
+ <useBmv2>True</useBmv2>
+ <bmv2SwitchType>stratum</bmv2SwitchType>
+ <switchPrefix>bmv2</switchPrefix>
+ <stratumRoot>~/stratum</stratumRoot>
+ <topology>cord_fabric.py</topology>
+ <lib>routinglib.py,trellislib.py,stratum.py</lib>
+ <conf>bgpdbgp1.conf,bgpdbgp2.conf,bgpdr1.conf,bgpdr2.conf,dhcpd6.conf,dhcpd.conf,zebradbgp1.conf,zebradbgp2.conf</conf>
+ </DEPENDENCY>
+
+ <MN_DOCKER>
+ <args>--privileged --net host --rm -v topo:/topo -v ~/mininet/custom:/home/root/mininet/custom -v /var/run/openvswitch/:/var/run/openvswitch/ -v /tmp/mn-stratum:/tmp -v /tmp/mn_conf/:/home/root/config --hostname mn-stratum -v /etc/network/interfaces:/etc/network/interfaces -it -d</args>
+ <name>trellis_mininet</name>
+ <home>/home/root/</home>
+ </MN_DOCKER>
+
+ <CLUSTER>
+ # Params for onos docker
+ <dockerSkipBuild>True</dockerSkipBuild>
+ <dockerBuildCmd>make ONOS_VERSION=master DOCKER_TAG=TestON-master onos-build trellis-control-build trellis-t3-build tost-build</dockerBuildCmd> # If using another cmd like make
+ <dockerBuildTimeout>1200</dockerBuildTimeout>
+ <dockerFilePath>~/tost-onos</dockerFilePath>
+ <dockerImageTag>tost:TestON-master</dockerImageTag>
+ <dockerOptions>-d --rm --network host -v ~/.ssh/authorized_keys:/root/.ssh/authorized_keys -v /tmp/cluster.json:/root/onos/config/cluster.json </dockerOptions> # We start the container detached, so the docker component can connect to cli instead of logs
+ <atomixImageTag>atomix/atomix:3.1.5</atomixImageTag>
+ <atomixOptions>-d --rm --network host -v ~/.ssh/authorized_keys:/root/.ssh/authorized_keys -v /tmp/atomix.json:/opt/atomix/conf/atomix.json </atomixOptions>
+ </CLUSTER>
+
+ <ENV>
+ <cellName>productionCell</cellName>
+ <cellApps>drivers,hostprovider,netcfghostprovider,lldpprovider,drivers.bmv2,pipelines.fabric,segmentrouting,t3 </cellApps>
+ </ENV>
+
+ <ONOS_Configuration>
+ <org.onosproject.grpc.ctl.GrpcChannelControllerImpl>
+ <enableMessageLog>true</enableMessageLog>
+ </org.onosproject.grpc.ctl.GrpcChannelControllerImpl>
+ </ONOS_Configuration>
+
+ <ONOS_Logging>
+ <org.onosproject.events>TRACE</org.onosproject.events>
+ <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+ <org.onosproject.driver>DEBUG</org.onosproject.driver>
+ <org.onosproject.net.flowobjective.impl>DEBUG</org.onosproject.net.flowobjective.impl>
+ <org.onosproject.routeservice.impl>DEBUG</org.onosproject.routeservice.impl>
+ <org.onosproject.routeservice.store>DEBUG</org.onosproject.routeservice.store>
+ <org.onosproject.routing.fpm>DEBUG</org.onosproject.routing.fpm>
+ <org.onosproject.fpm>DEBUG</org.onosproject.fpm>
+ <org.onosproject.mcast>DEBUG</org.onosproject.mcast>
+ <org.onosproject.p4runtime>DEBUG</org.onosproject.p4runtime>
+ <org.onosproject.protocols.p4runtime>DEBUG</org.onosproject.protocols.p4runtime>
+ <org.onosproject.drivers.p4runtime>DEBUG</org.onosproject.drivers.p4runtime>
+ <org.onosproject.protocols.grpc>DEBUG</org.onosproject.protocols.grpc>
+ <org.onosproject.protocols.gnmi>DEBUG</org.onosproject.protocols.gnmi>
+ <org.onosproject.protocols.gnoi>DEBUG</org.onosproject.protocols.gnoi>
+ <org.onosproject.drivers.gnoi>DEBUG</org.onosproject.drivers.gnoi>
+ <org.onosproject.drivers.gmni>DEBUG</org.onosproject.drivers.gmni>
+ <org.onosproject.drivers.stratum>DEBUG</org.onosproject.drivers.stratum>
+ <org.onosproject.bmv2>DEBUG</org.onosproject.bmv2>
+ </ONOS_Logging>
+
+ <GIT>
+ <pull>False</pull>
+ <branch>master</branch>
+ </GIT>
+
+ <CTRL>
+ <port>6653</port>
+ </CTRL>
+
+ <timers>
+ <LinkDiscovery>12</LinkDiscovery>
+ <SwitchDiscovery>12</SwitchDiscovery>
+ </timers>
+
+ <kill>
+ <switch> spine101 </switch>
+ <dpid> 000000000101 </dpid>
+ <links> leaf1 leaf2 </links>
+ </kill>
+
+ <SLEEP>
+ <startup>10</startup>
+ </SLEEP>
+
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
index 4f07fe5..0a0ef5a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/dependencies/SRLinkFailFuncs.py
@@ -20,6 +20,7 @@
"""
from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
+import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
class SRLinkFailFuncs():
@@ -29,6 +30,7 @@
self.topo[ '0x1' ] = ( 0, 1, '--leaf=1 --spine=0', 'single switch' )
self.topo[ '2x2' ] = ( 2, 2, '', '2x2 Leaf-spine' )
self.topo[ '4x4' ] = ( 4, 4, '--leaf=4 --spine=4', '4x4 Leaf-spine' )
+ main.switchType = "ovs"
self.switchOne = 'spine101'
self.switchTwo = 'leaf2'
self.dpidOne = 'of:0000000000000101'
@@ -38,18 +40,46 @@
def runTest( self, main, caseNum, numNodes, Topo, minFlow ):
try:
- if not hasattr( main, 'apps' ):
- run.initTest( main )
-
description = "Bridging and Routing Link Failure test with " + self.topo[ Topo ][ 3 ] + " and {} Onos".format( numNodes )
main.case( description )
-
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
main.cfgName = Topo
main.Cluster.setRunningNode( numNodes )
run.installOnos( main )
- run.loadJson( main )
+ suf = main.params.get( 'jsonFileSuffix', '')
+ xconnectFile = "%s%s-xconnects.json%s" % ( main.configPath + main.forJson,
+ main.cfgName, suf )
+ if main.useBmv2:
+ switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
+ # Translate configuration file from OVS-OFDPA to BMv2 driver
+ translator.bmv2ToOfdpa( main ) # Try to cleanup if switching between switch types
+ translator.ofdpaToBmv2( main, switchPrefix=switchPrefix )
+ # translate xconnects
+ translator.bmv2ToOfdpa( main, cfgFile=xconnectFile )
+ translator.ofdpaToBmv2( main, cfgFile=xconnectFile, switchPrefix=switchPrefix )
+ else:
+ translator.bmv2ToOfdpa( main )
+ translator.bmv2ToOfdpa( main, cfgFile=xconnectFile )
+ if suf:
+ run.loadJson( main, suffix=suf )
+ else:
+ run.loadJson( main )
run.loadChart( main )
- run.startMininet( main, 'cord_fabric.py', args=self.topo[ Topo ][ 2 ] )
+ if hasattr( main, 'Mininet1' ):
+ run.mnDockerSetup( main ) # optionally create and setup docker image
+
+ # Run the test with Mininet
+ mininet_args = self.topo[ Topo ][ 2 ]
+ if main.useBmv2:
+ mininet_args += ' --switch %s' % main.switchType
+ main.log.info( "Using %s switch" % main.switchType )
+
+ run.startMininet( main, 'cord_fabric.py', args=mininet_args )
+ else:
+ # Run the test with physical devices
+ # TODO: connect TestON to the physical network
+ pass
# xconnects need to be loaded after topology
run.loadXconnects( main )
# pre-configured routing and bridging test