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/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