Merge "[SDFAB-644] QoS test for with non-mobile traffic classification"
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index 5653ffe..c27388c 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -74,6 +74,7 @@
         __builtin__.main = self
         __builtin__.path = path
         __builtin__.utilities = Utilities()
+        __builtin__.SkipCase = SkipCase
         self.TRUE = 1
         self.FALSE = 0
         self.ERROR = -1
diff --git a/TestON/tests/USECASE/SegmentRouting/INT/INT.topo b/TestON/tests/USECASE/SegmentRouting/INT/INT.topo
index e54c546..1579fa1 100644
--- a/TestON/tests/USECASE/SegmentRouting/INT/INT.topo
+++ b/TestON/tests/USECASE/SegmentRouting/INT/INT.topo
@@ -26,7 +26,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute1>
 
@@ -54,7 +55,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute2>
 
@@ -82,7 +84,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute3>
 
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson
index 5aa179c..de46ab4 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson
@@ -136,7 +136,7 @@
                         <network>10.32.11.254</network>
                         <netmask>26</netmask>
                         <gw>10.32.11.254</gw>
-                        <interface>26</interface>
+                        <interface>eno2</interface>
                     </route1>
                 </routes>
                 <sudo_required>true</sudo_required>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
index ee04e89..195e156 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
@@ -21,6 +21,7 @@
 
 from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
 import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
+import json
 
 class SRBridgingTest ():
 
@@ -38,6 +39,7 @@
         try:
             skipPackage = False
             init = False
+            originalJSON = None
             if not hasattr( main, 'apps' ):
                 init = True
                 run.initTest( main )
@@ -93,6 +95,7 @@
                 # Run the test with physical devices
                 run.connectToPhysicalNetwork( main, hostDiscovery=False )  # We don't want to do host discovery in the pod
                 if main.cfgName:
+                    originalJSON = main.Cluster.active( 0 ).REST.getNetCfg()
                     returnValue = run.loadNewJson( main, suffix=suf )
                     utilities.assert_equals( expect=main.TRUE,
                                  actual=returnValue,
@@ -113,6 +116,8 @@
             run.populateHostsVlan( main, main.Network.hosts.keys()  )
             run.verifyTopology( main, switches, links, onosNodes )
             run.pingAll( main )
+            if originalJSON:
+              run.netCfgTransition( main, json.loads(originalJSON) )
         except Exception as e:
             main.log.exception( "Error in runTest" )
             main.skipCase( result="FAIL", msg=e )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
index 40bf030..07c69b4 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
@@ -86,7 +86,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute1>
 
@@ -114,7 +115,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute2>
 
@@ -142,7 +144,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
             </COMPONENTS>
         </Compute3>
 
@@ -169,7 +172,8 @@
                         <interface></interface>
                     </route1>
                 </routes>
-                <sudo_required>false</sudo_required>
+                <sudo_required>true</sudo_required>
+                <scapy_path>/usr/bin/scapy</scapy_path>
 
             </COMPONENTS>
         </ManagmentServer>
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 93af0ee..3aba8fc 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -216,24 +216,28 @@
 
     @staticmethod
     def loadNewJson( main, suffix='' ):
-        returnValue = main.TRUE
         with open( "%s%s.json%s" % ( main.configPath + main.forJson,
                                      main.cfgName, suffix ) ) as cfg:
             desiredJSON = json.load ( cfg )
-            for device in desiredJSON ["ports"].keys():
-                deviceCfg = desiredJSON[ "ports" ][ device ]
-                currentJSON = main.Cluster.active( 0 ).REST.getNetCfg( subjectClass = "ports", subjectKey = device )
+        return Testcaselib.netCfgTransition( main, desiredJSON )
 
-                currentJSON = json.loads( currentJSON )
-                if currentJSON['interfaces'][0]['ips'] != deviceCfg['interfaces'][0]['ips']:
-                    currentJSON['interfaces'][0]['ips'] = deviceCfg['interfaces'][0]['ips']
-                    data = { 'interfaces': currentJSON['interfaces'] }
-                    A = main.Cluster.active( 0 ).REST.setNetCfg(  data , subjectClass = "ports", subjectKey = device )
-                    returnValue = returnValue and A
-                currentJSON['interfaces'] = deviceCfg['interfaces']
+    @staticmethod
+    def netCfgTransition( main, desiredJSON ):
+        returnValue = main.TRUE
+        for device in desiredJSON ["ports"].keys():
+            deviceCfg = desiredJSON[ "ports" ][ device ]
+            currentJSON = main.Cluster.active( 0 ).REST.getNetCfg( subjectClass = "ports", subjectKey = device )
+
+            currentJSON = json.loads( currentJSON )
+            if currentJSON['interfaces'][0]['ips'] != deviceCfg['interfaces'][0]['ips']:
+                currentJSON['interfaces'][0]['ips'] = deviceCfg['interfaces'][0]['ips']
                 data = { 'interfaces': currentJSON['interfaces'] }
-                B = main.Cluster.active( 0 ).REST.setNetCfg( data , subjectClass = "ports", subjectKey = device )
-                returnValue = returnValue and B
+                A = main.Cluster.active( 0 ).REST.setNetCfg(  data , subjectClass = "ports", subjectKey = device )
+                returnValue = returnValue and A
+            currentJSON['interfaces'] = deviceCfg['interfaces']
+            data = { 'interfaces': currentJSON['interfaces'] }
+            B = main.Cluster.active( 0 ).REST.setNetCfg( data , subjectClass = "ports", subjectKey = device )
+            returnValue = returnValue and B
         return returnValue
 
     @staticmethod