diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
index e2265ce..4b803f6 100644
--- a/TestON/drivers/common/clidriver.py
+++ b/TestON/drivers/common/clidriver.py
@@ -294,11 +294,19 @@
                             while "to" means copy "to" the remote machine from
                             local machine
         """
-        returnVal = main.TRUE
+        returnVal = main.FALSE
         ssh_newkey = 'Are you sure you want to continue connecting'
         refused = "ssh: connect to host " + \
                   ipAddress + " port 22: Connection refused"
         cmd = "scp %s " % options
+        try:
+            self.handle.sendline( "" )
+            self.handle.expect( self.prompt, timeout=5 )
+        except pexpect.TIMEOUT:
+            main.log.error( "%s: Component not ready for input" % self.name )
+            main.log.debug( "%s: %s%s" % ( self.name, self.handle.before, str( self.handle.after ) ) )
+            self.handle.send( "\x03" )  # CTRL-C
+            self.handle.expect( self.prompt, timeout=5 )
 
         if direction == "from":
             cmd = cmd + str( userName ) + '@' + str( ipAddress ) + ':' + \
@@ -313,7 +321,8 @@
         main.log.info( self.name + ": Sending: " + cmd )
         self.handle.sendline( cmd )
         i = 0
-        while i < 2:
+        timeout = 120
+        while i <= 6 :
             i = self.handle.expect( [
                                 ssh_newkey,
                                 'password:',
@@ -324,15 +333,17 @@
                                 self.prompt,
                                 pexpect.EOF,
                                 pexpect.TIMEOUT ],
-                                120 )
+                                timeout=timeout )
             if i == 0:  # ask for ssh key confirmation
                 main.log.info( self.name + ": ssh key confirmation received, sending yes" )
                 self.handle.sendline( 'yes' )
             elif i == 1:  # Asked for ssh password
+                timeout = 120
                 main.log.info( self.name + ": ssh connection asked for password, gave password" )
                 self.handle.sendline( pwd )
             elif i == 2:  # File finished transfering
                 main.log.info( self.name + ": Secure copy successful" )
+                timeout = 10
                 returnVal = main.TRUE
             elif i == 3:  # Connection refused
                 main.log.error(
@@ -349,18 +360,21 @@
                 main.log.debug( self.handle.before + self.handle.after )
                 returnVal = main.FALSE
             elif i == 6:  # prompt returned
-                return returnVal
+                timeout = 10
+                main.log.debug( "%s: %s%s" % ( self.name, repr( self.handle.before ), repr( self.handle.after ) ) )
             elif i == 7:  # EOF
                 main.log.error( self.name + ": Pexpect.EOF found!!!" )
                 main.cleanAndExit()
             elif i == 8:  # timeout
-                main.log.error(
-                    "No route to the Host " +
-                    userName +
-                    "@" +
-                    ipAddress )
-                returnVal = main.FALSE
-        self.handle.expect( self.prompt )
+                if returnVal != main.TRUE:
+                    main.log.error(
+                        "No route to the Host " +
+                        userName +
+                        "@" +
+                        ipAddress )
+                return returnVal
+        self.handle.expect( [ self.prompt, pexpect.TIMEOUT ], timeout=5 )
+        main.log.debug( "%s: %s%s" % ( self.name, repr( self.handle.before ), repr( self.handle.after ) ) )
         return returnVal
 
     def scp( self, remoteHost, filePath, dstPath, direction="from", options="" ):
@@ -380,7 +394,7 @@
         jump_host = main.componentDictionary[ remoteHost.name ].get( 'jump_host' )
         if jump_host:
             jump_host = main.componentDictionary.get( jump_host )
-            options += " -J %s@%s " % ( jump_host.get( 'user' ), jump_host.get( 'host' ) )
+            options += " -o 'ProxyJump %s@%s' " % ( jump_host.get( 'user' ), jump_host.get( 'host' ) )
         return self.secureCopy( remoteHost.user_name,
                                 remoteHost.ip_address,
                                 filePath,
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.params
new file mode 100644
index 0000000..6867bf8
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.params
@@ -0,0 +1,81 @@
+<PARAMS>
+    <testcases>2</testcases>
+
+    <GRAPH>
+        <nodeCluster>staging</nodeCluster>
+        <builds>20</builds>
+        <jobName>SRONLReboot</jobName>
+        <branch>master</branch>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>False</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix></switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>trellis_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+    </DEPENDENCY>
+
+    <jsonFileSuffix>.hw</jsonFileSuffix>
+
+    <persistent_setup>True</persistent_setup>
+
+    <kubernetes>
+        <appName>onos-tost-onos-classic</appName>
+        <namespace>tost</namespace>
+    </kubernetes>
+
+    <PERF>
+        <traffic_host>Host1 Host2 Host3</traffic_host>
+        <traffic_cmd_arguments> -u -b 20M -t 40</traffic_cmd_arguments>
+
+        <pcap_host>ng40vm</pcap_host>
+        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
+
+    </PERF>
+    <ONOS_Logging>
+        <org.onosproject.p4runtime.ctl.client>DEBUG</org.onosproject.p4runtime.ctl.client>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.gnmi.ctl>TRACE</org.onosproject.gnmi.ctl>
+    </ONOS_Logging>
+
+
+    <ENV>
+        <cellName>productionCell</cellName>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
+    </ENV>
+
+    <EXTERNAL_APPS>
+    </EXTERNAL_APPS>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+        <TrafficDiscovery>10</TrafficDiscovery>
+    </timers>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+    <TOPO>
+        <switchNum>4</switchNum>
+        <linkNum>16</linkNum>
+    </TOPO>
+
+    <ALARM>
+        <minPassPercent>100</minPassPercent>
+    </ALARM>
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.py
new file mode 100644
index 0000000..1f70cc1
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.py
@@ -0,0 +1,50 @@
+class SRONLReboot:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        main.case("Testing connections")
+        main.persistentSetup = True
+
+    def CASE2( self, main ):
+        """
+        Connect to Pod
+        Perform ONL reboot 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 = "ONL_Reboot"
+        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
+        switchComponent = getattr( main, "SwitchSpine1" )
+        device = "device:leaf1"
+
+        ## First Spine Reboot
+        shortDesc = descPrefix + "-Failure1"
+        longDesc = "%s Failure: Reboot %s" % ( descPrefix, device )
+        main.funcs.onlReboot( device, switchComponent, srcComponentList, dstComponent, shortDesc, longDesc )
+        ## Second Spine Reboot
+
+        main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
+        main.funcs.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.topo
new file mode 120000
index 0000000..502edf5
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/SRONLReboot.topo
@@ -0,0 +1 @@
+../SRStaging.topo
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.params
index 2d99850..3bb151a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.params
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>7</testcases>
+    <testcases>1</testcases>
 
     <GRAPH>
         <nodeCluster>staging</nodeCluster>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
index fd33a86..c593bbb 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.py
@@ -183,6 +183,5 @@
         longDesc = "%s Recovery: Bring up  %s/%s" % ( descPrefix, device, port4 )
         main.funcs.linkUp( device, port4, srcComponentList, dstComponent, shortDesc, longDesc )
 
-        main.log.warn( main.downtimeResults )
         main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
         main.funcs.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
index 15554bb..5e40f5a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
@@ -179,12 +179,11 @@
         </Host3>
 
         <ng40vm>
-            <host>10.32.5.6</host>
+            <host>192.168.122.102</host>
             <user>ng40</user>
             <password>ng40</password>
             <type>HostDriver</type>
             <connect_order>8</connect_order>
-            <jump_host>NetworkBench</jump_host>
             <COMPONENTS>
                 <mac></mac>
                 <inband>false</inband>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.params
new file mode 100644
index 0000000..9a3590e
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.params
@@ -0,0 +1,81 @@
+<PARAMS>
+    <testcases>2</testcases>
+
+    <GRAPH>
+        <nodeCluster>staging</nodeCluster>
+        <builds>20</builds>
+        <jobName>SReNBLeafSpinePortstateFaliure</jobName>
+        <branch>master</branch>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>False</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix></switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>trellis_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+    </DEPENDENCY>
+
+    <jsonFileSuffix>.hw</jsonFileSuffix>
+
+    <persistent_setup>True</persistent_setup>
+
+    <kubernetes>
+        <appName>onos-tost-onos-classic</appName>
+        <namespace>tost</namespace>
+    </kubernetes>
+
+    <PERF>
+        <traffic_host>Host1 Host2 Host3</traffic_host>
+        <traffic_cmd_arguments> -u -b 20M -t 40</traffic_cmd_arguments>
+
+        <pcap_host>ng40vm</pcap_host>
+        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
+
+    </PERF>
+    <ONOS_Logging>
+        <org.onosproject.p4runtime.ctl.client>DEBUG</org.onosproject.p4runtime.ctl.client>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.gnmi.ctl>TRACE</org.onosproject.gnmi.ctl>
+    </ONOS_Logging>
+
+
+    <ENV>
+        <cellName>productionCell</cellName>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
+    </ENV>
+
+    <EXTERNAL_APPS>
+    </EXTERNAL_APPS>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+        <TrafficDiscovery>10</TrafficDiscovery>
+    </timers>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+    <TOPO>
+        <switchNum>4</switchNum>
+        <linkNum>16</linkNum>
+    </TOPO>
+
+    <ALARM>
+        <minPassPercent>100</minPassPercent>
+    </ALARM>
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.py
new file mode 100644
index 0000000..278ea9a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.py
@@ -0,0 +1,115 @@
+class SReNBLeafSpinePortstateFailure:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        main.case("Testing connections")
+        main.persistentSetup = True
+
+    def CASE2( 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()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRStagingTest()
+
+        descPrefix = "eNB_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 = {}
+        dbHeaders = []
+        srcNames = [ src.name for src in srcComponentList ]
+        srcNames.sort()
+        # TODO: MOVE TO CONFIG FILE
+        device = "device:leaf1"
+        portsList = [ 176, 180, 184, 188 ]
+        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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+
+        main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
+        main.funcs.cleanup( main, headerOrder=dbHeaders )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.topo
new file mode 120000
index 0000000..502edf5
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/SReNBLeafSpinePortstateFailure.topo
@@ -0,0 +1 @@
+../SRStaging.topo
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.params
new file mode 100644
index 0000000..0c91d2f
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.params
@@ -0,0 +1,81 @@
+<PARAMS>
+    <testcases>2</testcases>
+
+    <GRAPH>
+        <nodeCluster>staging</nodeCluster>
+        <builds>20</builds>
+        <jobName>SRrollingRestart</jobName>
+        <branch>master</branch>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>False</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix></switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>trellis_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+    </DEPENDENCY>
+
+    <jsonFileSuffix>.hw</jsonFileSuffix>
+
+    <persistent_setup>True</persistent_setup>
+
+    <kubernetes>
+        <appName>onos-tost-onos-classic</appName>
+        <namespace>tost</namespace>
+    </kubernetes>
+
+    <PERF>
+        <traffic_host>Host1 Host2 Host3</traffic_host>
+        <traffic_cmd_arguments> -u -b 20M -t 40</traffic_cmd_arguments>
+
+        <pcap_host>ng40vm</pcap_host>
+        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
+
+    </PERF>
+    <ONOS_Logging>
+        <org.onosproject.p4runtime.ctl.client>DEBUG</org.onosproject.p4runtime.ctl.client>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.gnmi.ctl>TRACE</org.onosproject.gnmi.ctl>
+    </ONOS_Logging>
+
+
+    <ENV>
+        <cellName>productionCell</cellName>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
+    </ENV>
+
+    <EXTERNAL_APPS>
+    </EXTERNAL_APPS>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+        <TrafficDiscovery>10</TrafficDiscovery>
+    </timers>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+    <TOPO>
+        <switchNum>4</switchNum>
+        <linkNum>16</linkNum>
+    </TOPO>
+
+    <ALARM>
+        <minPassPercent>100</minPassPercent>
+    </ALARM>
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.py
new file mode 100644
index 0000000..fc3c44c
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.py
@@ -0,0 +1,15 @@
+class SRrollingRestart:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        main.case("Testing connections")
+        main.persistentSetup = True
+
+    def CASE2( self, main ):
+        """
+        Connect to Pod
+        Perform rolling ONOS failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.topo
new file mode 120000
index 0000000..502edf5
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/SRrollingRestart.topo
@@ -0,0 +1 @@
+../SRStaging.topo
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRrollingRestart/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.params
new file mode 100644
index 0000000..41e1dbc
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.params
@@ -0,0 +1,81 @@
+<PARAMS>
+    <testcases>2</testcases>
+
+    <GRAPH>
+        <nodeCluster>staging</nodeCluster>
+        <builds>20</builds>
+        <jobName>SRstratumRestart</jobName>
+        <branch>master</branch>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>False</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix></switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>trellis_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+    </DEPENDENCY>
+
+    <jsonFileSuffix>.hw</jsonFileSuffix>
+
+    <persistent_setup>True</persistent_setup>
+
+    <kubernetes>
+        <appName>onos-tost-onos-classic</appName>
+        <namespace>tost</namespace>
+    </kubernetes>
+
+    <PERF>
+        <traffic_host>Host1 Host2 Host3</traffic_host>
+        <traffic_cmd_arguments> -u -b 20M -t 40</traffic_cmd_arguments>
+
+        <pcap_host>ng40vm</pcap_host>
+        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
+
+    </PERF>
+    <ONOS_Logging>
+        <org.onosproject.p4runtime.ctl.client>DEBUG</org.onosproject.p4runtime.ctl.client>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.gnmi.ctl>TRACE</org.onosproject.gnmi.ctl>
+    </ONOS_Logging>
+
+
+    <ENV>
+        <cellName>productionCell</cellName>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
+    </ENV>
+
+    <EXTERNAL_APPS>
+    </EXTERNAL_APPS>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+        <TrafficDiscovery>10</TrafficDiscovery>
+    </timers>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+    <TOPO>
+        <switchNum>4</switchNum>
+        <linkNum>16</linkNum>
+    </TOPO>
+
+    <ALARM>
+        <minPassPercent>100</minPassPercent>
+    </ALARM>
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.py
new file mode 100644
index 0000000..b566254
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.py
@@ -0,0 +1,15 @@
+class SRstratumRestart:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        main.case("Testing connections")
+        main.persistentSetup = True
+
+    def CASE2( self, main ):
+        """
+        Connect to Pod
+        Perform Stratum agent failure/recovery test
+        Collect logs and analyze results
+        """
+        pass
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.topo
new file mode 120000
index 0000000..502edf5
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/SRstratumRestart.topo
@@ -0,0 +1 @@
+../SRStaging.topo
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.params b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.params
new file mode 100644
index 0000000..478455f
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.params
@@ -0,0 +1,81 @@
+<PARAMS>
+    <testcases>2</testcases>
+
+    <GRAPH>
+        <nodeCluster>staging</nodeCluster>
+        <builds>20</builds>
+        <jobName>SRupstreamLeafSpinePortstateFailure</jobName>
+        <branch>master</branch>
+    </GRAPH>
+
+    <SCALE>
+        <size>3</size>
+        <max>3</max>
+    </SCALE>
+
+    <DEPENDENCY>
+        <useCommonConf>False</useCommonConf>
+        <useCommonTopo>True</useCommonTopo>
+        <useBmv2>True</useBmv2>
+        <bmv2SwitchType>stratum</bmv2SwitchType>
+        <switchPrefix></switchPrefix>
+        <stratumRoot>~/stratum</stratumRoot>
+        <topology>trellis_fabric.py</topology>
+        <lib>routinglib.py,trellislib.py,stratum.py</lib>
+    </DEPENDENCY>
+
+    <jsonFileSuffix>.hw</jsonFileSuffix>
+
+    <persistent_setup>True</persistent_setup>
+
+    <kubernetes>
+        <appName>onos-tost-onos-classic</appName>
+        <namespace>tost</namespace>
+    </kubernetes>
+
+    <PERF>
+        <traffic_host>Host1 Host2 Host3</traffic_host>
+        <traffic_cmd_arguments> -u -b 20M -t 40</traffic_cmd_arguments>
+
+        <pcap_host>ng40vm</pcap_host>
+        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
+
+    </PERF>
+    <ONOS_Logging>
+        <org.onosproject.p4runtime.ctl.client>DEBUG</org.onosproject.p4runtime.ctl.client>
+        <org.onosproject.segmentrouting>DEBUG</org.onosproject.segmentrouting>
+        <org.onosproject.gnmi.ctl>TRACE</org.onosproject.gnmi.ctl>
+    </ONOS_Logging>
+
+
+    <ENV>
+        <cellName>productionCell</cellName>
+        <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,org.opencord.fabric-tofino,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
+    </ENV>
+
+    <EXTERNAL_APPS>
+    </EXTERNAL_APPS>
+
+    <CTRL>
+        <port>6653</port>
+    </CTRL>
+
+    <timers>
+        <LinkDiscovery>12</LinkDiscovery>
+        <SwitchDiscovery>12</SwitchDiscovery>
+        <TrafficDiscovery>10</TrafficDiscovery>
+    </timers>
+
+    <SLEEP>
+        <startup>10</startup>
+    </SLEEP>
+
+    <TOPO>
+        <switchNum>4</switchNum>
+        <linkNum>16</linkNum>
+    </TOPO>
+
+    <ALARM>
+        <minPassPercent>100</minPassPercent>
+    </ALARM>
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.py
new file mode 100644
index 0000000..e24f8f9
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.py
@@ -0,0 +1,115 @@
+class SRupstreamLeafSpinePortstateFailure:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        main.case("Testing connections")
+        main.persistentSetup = True
+
+    def CASE2( 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 = {}
+        dbHeaders = []
+        srcNames = [ src.name for src in srcComponentList ]
+        srcNames.sort()
+        # 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+        ## 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 )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s" % ( shortDesc, src ) )
+        for src in srcNames:
+            dbHeaders.append( "%s-%s-%s" % ( shortDesc, src, dstComponent.name ) )
+
+        main.log.warn( json.dumps( main.downtimeResults, indent=4, sort_keys=True ) )
+        main.funcs.cleanup( main, headerOrder=dbHeaders )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.topo
new file mode 120000
index 0000000..502edf5
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/SRupstreamLeafSpinePortstateFailure.topo
@@ -0,0 +1 @@
+../SRStaging.topo
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/dependencies/SRStagingTest.py b/TestON/tests/USECASE/SegmentRouting/SRStaging/dependencies/SRStagingTest.py
index 50f3190..ad33e41 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/dependencies/SRStagingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/dependencies/SRStagingTest.py
@@ -25,7 +25,7 @@
 import json
 import pexpect
 
-class SRStagingTest ():
+class SRStagingTest():
 
     def __init__( self ):
         self.default = ''
@@ -45,7 +45,7 @@
         self.switchNames[ '2x2' ] = [ "leaf1", "leaf2", "spine101", "spine102" ]
         main.switchType = "ovs"
 
-    def setupTest( self, main, topology, onosNodes, description, vlan = [] ):
+    def setupTest( self, main, topology, onosNodes, description, vlan=[] ):
         try:
             skipPackage = False
             init = False
@@ -98,7 +98,7 @@
         try:
             # ping right before to make sure arp is cached and sudo is authenticated
             for src in srcList:
-                src.handle.sendline( "sudo /bin/ping -c 1 %s" % dst.ip_address )
+                src.handle.sendline( "sudo /bin/ping -c 1 %s" % dst.interfaces[0]['ips'][0] )
                 try:
                     i = src.handle.expect( [ "password", src.prompt ] )
                     if i == 0:
@@ -108,7 +108,7 @@
                     main.log.error( "Unexpected response from ping" )
                     src.handle.send( '\x03' )  # ctrl-c
                     src.handle.expect( src.prompt )
-                main.log.warn( "%s: %s" % ( src.name, src.handle.before ) )
+                main.log.warn( "%s: %s" % ( src.name, str( src.handle.before ) ) )
             # TODO: Create new components for iperf and tshark?
             #       Also generate more streams with differnt udp ports or some other
             #       method of guranteeing we kill a link with traffic
@@ -142,7 +142,7 @@
             for command in commands:
                 dst.handle.sendline( command )
                 dst.handle.expect( dst.prompt )
-                main.log.debug( "%s: %s" % (dst.name, dst.handle.before ) )
+                main.log.debug( "%s: %s" % (dst.name, str( dst.handle.before ) ) )
             main.log.info( "Starting tshark on %s " % dst.name )
             dst.handle.sendline( "sudo /usr/bin/tshark %s &> /dev/null &" % tsharkArgsReceiver )
             dst.handle.expect( dst.prompt )
@@ -164,7 +164,7 @@
                 for command in commands:
                     src.handle.sendline( command )
                     src.handle.expect( src.prompt )
-                    main.log.debug( "%s: %s" % (src.name, src.handle.before ) )
+                    main.log.debug( "%s: %s" % (src.name, str( src.handle.before ) ) )
 
                 main.log.info( "Starting tshark on %s " % src.name )
                 for src in srcList:
@@ -192,31 +192,50 @@
             # Stop packet capture
             dst.handle.sendline( 'fg' )  # Bring process to front
             dst.handle.send( '\x03' )  # send ctrl-c
-            dst.handle.expect( dst.prompt )
+            try:
+                for _ in range(10):
+                    dst.handle.expect( dst.prompt, timeout=1 )
+            except pexpect.TIMEOUT:
+                pass
             for src in srcList:
                 src.handle.sendline( 'fg' )  # Bring process to front
                 src.handle.send( '\x03' )  # send ctrl-c
-                src.handle.expect( src.prompt )
+                try:
+                    for _ in range(10):
+                        src.handle.expect( src.prompt, timeout=1 )
+                except pexpect.TIMEOUT:
+                    pass
             # Stop traffic
             for src in srcList:
                 src.handle.sendline( 'fg' )  # Bring process to front
                 src.handle.send( '\x03' )  # send ctrl-c
-                src.handle.expect( src.prompt )
+                try:
+                    for _ in range(10):
+                        src.handle.expect( src.prompt, timeout=1 )
+                except pexpect.TIMEOUT:
+                    pass
             main.pingStop = time.time()
             main.log.warn( "It took %s seconds since we started ping for us to stop pcap" % ( main.pingStop - main.pingStart ) )
 
-            main.downtimeResults[ shortDesc ] = {}
             for src in srcList:
                 pcapFileSender = "%s/tshark/%s-%s-tsharkSender" % ( "~/TestON",
                                                                 shortDesc if shortDesc else "tshark",
                                                                 src.name )
-                main.downtimeResults[ shortDesc ].update( { src.name: self.analyzePcap( src, pcapFileSender, "'udp && ip.src == %s'" % src.interfaces[0]['ips'][0], debug=False) } )
-                main.downtimeResults[ shortDesc ].update( { "%s-%s" % ( src.name, dst.name ): self.analyzePcap( dst, pcapFileReceiver, "'udp && ip.src == %s'" % src.interfaces[0]['ips'][0], debug=False) } )
+                senderTime = self.analyzePcap( src, pcapFileSender, "'udp && ip.src == %s'" % src.interfaces[0]['ips'][0], debug=False )
+                receiverTime = self.analyzePcap( dst, pcapFileReceiver, "'udp && ip.src == %s'" % src.interfaces[0]['ips'][0], debug=False )
+                main.downtimeResults[ "%s-%s" % ( shortDesc, src.name ) ] = senderTime
+                main.downtimeResults[ "%s-%s-%s" % ( shortDesc, src.name, dst.name ) ] = receiverTime
                 # Grab pcap
                 senderSCP = main.ONOSbench.scp( src, pcapFileSender, main.logdir, direction="from" )
+                utilities.assert_equals( expect=main.TRUE, actual=senderSCP,
+                                         onpass="Saved pcap files from %s" % src.name,
+                                         onfail="Failed to scp pcap files from %s" % src.name )
             # Grab logs
             # Grab pcap
             receiverSCP = main.ONOSbench.scp( dst, pcapFileReceiver, main.logdir, direction="from" )
+            utilities.assert_equals( expect=main.TRUE, actual=receiverSCP,
+                                     onpass="Saved pcap files from %s" % dst.name,
+                                     onfail="Failed to scp pcap files from %s" % dst.name )
             # Grab Write logs on switches
             #  TODO: kubectl cp write-reqs.txt
 
@@ -368,16 +387,21 @@
                     output += component.handle.before + str( component.handle.after )
             except pexpect.TIMEOUT:
                 main.log.debug( "%s: %s" % ( component.name, output ) )
+                component.handle.send( "\x03" )  # CTRL-C
+                component.handle.expect( component.prompt, timeout=5 )
+                main.log.debug( component.handle.before + str( component.handle.after ) )
             except Exception as e:
                 main.log.exception( "Error in onosDown" )
+                return -1
             lineRE = r'^\s*\d+\s+([0-9.]+)'
             tsharkOptions = "-t dd -r %s -Y %s -T fields -e frame.number -e frame.time_delta  -e ip.src -e ip.dst -e udp" % ( filePath, packetFilter )
             component.handle.sendline( "sudo /usr/bin/tshark %s" % tsharkOptions )
-            i = component.handle.expect( [ "appears to be damaged or corrupt.", "Malformed Packet", component.prompt, pexpect.TIMEOUT ], timeout=60 )
+            i = component.handle.expect( [ "appears to be damaged or corrupt.", "Malformed Packet", component.prompt, pexpect.TIMEOUT ], timeout=240 )
             if i != 2:
                 main.log.error( "Error Reading pcap file" )
+                main.log.debug( component.handle.before + str( component.handle.after ) )
                 component.handle.send( '\x03' )  # CTRL-C to end process
-                component.handle.expect( component.prompt )
+                component.handle.expect( [ component.prompt, pexpect.TIMEOUT ] )
                 main.log.debug( component.handle.before )
                 return 0
             output = component.handle.before
@@ -405,22 +429,25 @@
         except Exception as e:
             main.log.exception( "Error in analyzePcap" )
 
-    def dbWrite( self, main, filename ):
+    def dbWrite( self, main, filename, headerOrder=None ):
         try:
             dbFileName = "%s/%s" % ( main.logdir, filename )
             dbfile = open( dbFileName, "w+" )
             header = []
             row = []
-            for eventName, results in main.downtimeResults.iteritems():
-                for measurementName, value in results.iteritems():
-                    header.append( "'%s-%s'" % ( eventName, measurementName ) )
-                    row.append( "'%s'" % value )
+            if not headerOrder:
+                headerOrder = main.downtimeResults.keys()
+                headerOrder.sort()
+            for item in headerOrder:
+                header.append( "'%s'" % item )
+                row.append( "'%s'" % main.downtimeResults[ item ] )
+
             dbfile.write( ",".join( header ) + "\n" + ",".join( row ) + "\n" )
             dbfile.close()
         except IOError:
             main.log.warn( "Error opening " + dbFileName + " to write results." )
 
-    def cleanup( self, main ):
+    def cleanup( self, main, headerOrder=None ):
         run.cleanup( main )
         main.step( "Writing csv results file for db" )
-        self.dbWrite( main, "SRStaging-dbfile.csv")
+        self.dbWrite( main, main.TEST + "-dbfile.csv", headerOrder )
