Look at port stats to choose port

- In TOST port failure tests, look at port stats to
  determine which link is carrying the most traffic
  so we can bring it down
- Add eNB leaf-spine link down case

Change-Id: Ia13f3d41e836deaf21dd93574a39ccd954dd488f
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
index 124fd50..fd33a86 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
@@ -5,17 +5,48 @@
     def CASE1( self, main ):
         main.case("Testing connections")
         main.persistentSetup = True
-    def CASE7( self, main ):
-        """
-        Tests connectivity between two untagged hosts
-        (Ports are configured as vlan-untagged)
 
-        Sets up 3 ONOS instance
-        Start 2x2 leaf-spine topology
-        Pingall
+    def CASE2( self, main ):
+        """
+        Connect to Pod
+        Perform rolling ONOS failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
+
+    def CASE3( self, main ):
+        """
+        Connect to Pod
+        Perform ONL reboot failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
+
+    def CASE4( self, main ):
+        """
+        Connect to Pod
+        Perform Stratum agent failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
+
+    def CASE5( self, main ):
+        """
+        Connect to Pod
+        Perform Switch Power Cycle failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
+
+    def CASE6( self, main ):
+        """
+        Connect to Pod
+        Perform eNB Leaf-Spine Link, portstate failure/recovery test
+        Collect logs and analyze results
         """
         try:
             from tests.USECASE.SegmentRouting.SRStaging.dependencies.SRStagingTest import SRStagingTest
+            import json
         except ImportError:
             main.log.error( "SRStagingTest not found. Exiting the test" )
             main.cleanAndExit()
@@ -23,16 +54,12 @@
             main.funcs
         except ( NameError, AttributeError ):
             main.funcs = SRStagingTest()
-        # Load kubeconfig
-        # Setup ssh tunnel
-        # connect to ONOS CLI
 
-
+        descPrefix = "eNB_Leaf_Spine_Portstate"
         main.funcs.setupTest( main,
-                              test_idx=7,
                               topology='2x2staging',
                               onosNodes=3,
-                              description="Developing tests on the staging pod" )
+                              description="%s tests on the staging pod" % descPrefix )
         srcComponentNames = main.params[ 'PERF' ][ 'traffic_host' ].split()
         srcComponentList = []
         for name in srcComponentNames:
@@ -41,26 +68,23 @@
 
         main.downtimeResults = {}
 
-
         # TODO: MOVE TO CONFIG FILE
-        device = "device:leaf2"
-        port1 = "268"
-        port2 = "284"
-        port3 = "260"
-        port4 = "276"
+        device = "device:leaf1"
+        portsList = [ 176, 180, 184, 188 ]
+        port1 = None
+        port2 = None
+        port3 = None
+        port4 = None
 
-        descPrefix = "Upstream_Leaf_Spine_Portstate"
-        # TODO: Move most of this logic into linkDown/linkUp
         ## First Link Down
         shortDesc = descPrefix + "-Failure1"
-        longDesc = "%s Failure: Bring down %s/%s" % ( descPrefix, device, port1 )
-        main.funcs.linkDown( device, port1, srcComponentList, dstComponent, shortDesc, longDesc )
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port1 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
         ## Second Link Down
         shortDesc = descPrefix + "-Failure2"
-        longDesc = "%s Failure: Bring down %s/%s" % ( descPrefix, device, port2 )
-        main.funcs.linkDown( device, port2, srcComponentList, dstComponent, shortDesc, longDesc )
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port2 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
         ## First Link Up
-        # TODO Check these are set correctly
         shortDesc = descPrefix + "-Recovery1"
         longDesc = "%s Recovery: Bring up %s/%s" % ( descPrefix, device, port1 )
         main.funcs.linkUp( device, port1, srcComponentList, dstComponent, shortDesc, longDesc )
@@ -70,12 +94,86 @@
         main.funcs.linkUp( device, port2, srcComponentList, dstComponent, shortDesc, longDesc )
         ## Third Link Down
         shortDesc = descPrefix + "-Failure3"
-        longDesc = "%s Failure: Bring down %s/%s" % ( descPrefix, device, port3 )
-        main.funcs.linkDown( device, port3, srcComponentList, dstComponent, shortDesc, longDesc )
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port3 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
         ## Forth Link Down
         shortDesc = descPrefix + "-Failure4"
-        longDesc = "%s Failure: Bring down %s/%s" % ( descPrefix, device, port4 )
-        main.funcs.linkDown( device, port4, srcComponentList, dstComponent, shortDesc, longDesc )
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port4 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Third Link Up
+        shortDesc = descPrefix + "-Recovery3"
+        longDesc = "%s Recovery: Bring upn %s/%s" % ( descPrefix, device, port3 )
+        main.funcs.linkUp( device, port3, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Forth Link Up
+        shortDesc = descPrefix + "-Recovery4"
+        longDesc = "%s Recovery: Bring up  %s/%s" % ( descPrefix, device, port4 )
+        main.funcs.linkUp( device, port4, srcComponentList, dstComponent, shortDesc, longDesc )
+
+        main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
+        main.funcs.cleanup( main )
+
+    def CASE7( self, main ):
+        """
+        Connect to Pod
+        Perform Upstream Leaf-Spine Link, portstate failure/recovery test
+        Collect logs and analyze results
+        """
+        try:
+            from tests.USECASE.SegmentRouting.SRStaging.dependencies.SRStagingTest import SRStagingTest
+            import json
+        except ImportError:
+            main.log.error( "SRStagingTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRStagingTest()
+
+        descPrefix = "Upstream_Leaf_Spine_Portstate"
+        main.funcs.setupTest( main,
+                              topology='2x2staging',
+                              onosNodes=3,
+                              description="%s tests on the staging pod" % descPrefix )
+        srcComponentNames = main.params[ 'PERF' ][ 'traffic_host' ].split()
+        srcComponentList = []
+        for name in srcComponentNames:
+            srcComponentList.append( getattr( main, name ) )
+        dstComponent = getattr( main, main.params[ 'PERF' ][ 'pcap_host' ] )
+
+        main.downtimeResults = {}
+
+        # TODO: MOVE TO CONFIG FILE
+        device = "device:leaf2"
+        portsList = [260, 268, 276, 284 ]
+        port1 = None
+        port2 = None
+        port3 = None
+        port4 = None
+
+        ## First Link Down
+        shortDesc = descPrefix + "-Failure1"
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port1 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Second Link Down
+        shortDesc = descPrefix + "-Failure2"
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port2 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## First Link Up
+        shortDesc = descPrefix + "-Recovery1"
+        longDesc = "%s Recovery: Bring up %s/%s" % ( descPrefix, device, port1 )
+        main.funcs.linkUp( device, port1, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Second Link Up
+        shortDesc = descPrefix + "-Recovery2"
+        longDesc = "%s Recovery: Bring up %s/%s" % ( descPrefix, device, port2 )
+        main.funcs.linkUp( device, port2, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Third Link Down
+        shortDesc = descPrefix + "-Failure3"
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port3 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Forth Link Down
+        shortDesc = descPrefix + "-Failure4"
+        longDesc = "%s Failure: Bring down port with most traffic on %s" % ( descPrefix, device )
+        port4 = main.funcs.linkDown( device, portsList, srcComponentList, dstComponent, shortDesc, longDesc )
         ## Third Link Up
         shortDesc = descPrefix + "-Recovery3"
         longDesc = "%s Recovery: Bring upn %s/%s" % ( descPrefix, device, port3 )
@@ -86,6 +184,5 @@
         main.funcs.linkUp( device, port4, srcComponentList, dstComponent, shortDesc, longDesc )
 
         main.log.warn( main.downtimeResults )
-        import json
         main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
         main.funcs.cleanup( main )