diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 980db4d..62982c3 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -128,7 +128,7 @@
     @staticmethod
     def loadCount( main ):
         with open("%s/count/%s.count" % (main.configPath, main.cfgName)) as count:
-            main.count = json.load(count)
+                main.count = json.load(count)
 
     @staticmethod
     def loadJson( main ):
@@ -237,6 +237,17 @@
                                  onfail="Failed to assign switches to controllers" )
 
     @staticmethod
+    def saveOnosDiagnostics( main ):
+        """
+        Get onos-diags.tar.gz and save it to the log directory.
+        suffix: suffix string of the file name. E.g. onos-diags-case1.tar.gz
+        """
+        main.log.info( "Collecting onos-diags..." )
+        main.ONOSbench.onosDiagnostics( [ctrl.ipAddress for ctrl in main.Cluster.runningNodes],
+                                        main.logdir,
+                                        "-CASE%d" % main.CurrentTestCaseNumber )
+
+    @staticmethod
     def config( main, cfgName ):
         main.spines = []
 
@@ -408,7 +419,7 @@
         return
 
     @staticmethod
-    def pingAll( main, tag="", dumpflows=True, acceptableFailed=0, basedOnIp=False, sleep=10, retryAttempts=1 ):
+    def pingAll( main, tag="", dumpflows=True, acceptableFailed=0, basedOnIp=False, sleep=10, retryAttempts=1, skipOnFail=False ):
         '''
         Verify connectivity between hosts according to the ping chart
         acceptableFailed: max number of acceptable failed pings.
@@ -472,6 +483,10 @@
                     utilities.assert_equals( expect=expect, actual=pa,
                                              onpass="IP connectivity successfully tested",
                                              onfail="IP connectivity failed" )
+            if skipOnFail and pa != expect:
+                Testcaselib.saveOnosDiagnostics( main )
+                Testcaselib.cleanup( main )
+                main.skipCase()
 
         if dumpflows:
             main.ONOSbench.dumpONOSCmd( main.Cluster.active( 0 ).ipAddress,
@@ -650,7 +665,7 @@
                                  onfail="Failed to recover switch?" )
 
     @staticmethod
-    def cleanup( main, physical=False):
+    def cleanup( main, copyKarafLog=True ):
         """
         Stop Onos-cluster.
         Stops Mininet
@@ -666,10 +681,11 @@
         except ( NameError, AttributeError ):
             main.utils = Utils()
 
-        if not physical:
+        if hasattr( main, 'Mininet1' ):
             main.utils.mininetCleanup( main.Mininet1 )
 
-        main.utils.copyKarafLog( "CASE%d" % main.CurrentTestCaseNumber, before=True, includeCaseDesc=False )
+        if copyKarafLog:
+            main.utils.copyKarafLog( "CASE%d" % main.CurrentTestCaseNumber, before=True, includeCaseDesc=False )
 
         for ctrl in main.Cluster.active():
             main.ONOSbench.onosStop( ctrl.ipAddress )
@@ -682,6 +698,7 @@
         Completely Kill an ONOS instance and verify the ONOS cluster can see the proper change
         """
         main.step( "Killing ONOS instances with index(es): {}".format( nodes ) )
+        main.onosSleep = float( main.params[ 'timers' ][ 'OnosDiscovery' ] )
 
         for i in nodes:
             killResult = main.ONOSbench.onosDie( main.Cluster.runningNodes[ i ].ipAddress )
@@ -689,7 +706,7 @@
                                      onpass="ONOS instance Killed",
                                      onfail="Error killing ONOS instance" )
             main.Cluster.runningNodes[ i ].active = False
-        time.sleep( 12 )
+        time.sleep( main.onosSleep )
 
         if len( nodes ) < main.Cluster.numCtrls:
 
@@ -730,6 +747,7 @@
         """
         main.step( "Recovering ONOS instances with index(es): {}".format( nodes ) )
         [ main.ONOSbench.onosStart( main.Cluster.runningNodes[ i ].ipAddress ) for i in nodes ]
+        time.sleep( main.onosSleep )
         for i in nodes:
             isUp = main.ONOSbench.isup( main.Cluster.runningNodes[ i ].ipAddress )
             utilities.assert_equals( expect=main.TRUE, actual=isUp,
