[ONOS-6593]Review and Refactor ONOS startup procedures in TestON

Change-Id: I509a8ee7a26c198957bebf59da5c85a0edb8b995
diff --git a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
index e3af24a..8ab7a44 100644
--- a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
+++ b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
@@ -18,83 +18,69 @@
         import time
         import os
         import imp
-
-        main.case( "Constructing test variables and building ONOS package" )
-        main.step( "Constructing test variables" )
-        stepResult = main.FALSE
-
-        # Test variables
-        main.testOnDirectory = os.path.dirname( os.getcwd ( ) )
-        main.cellName = main.params[ 'ENV' ][ 'cellName' ]
-        main.apps = main.params[ 'ENV' ][ 'cellApps' ]
-        main.scale = ( main.params[ 'SCALE' ] ).split( "," )
-        main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
-        main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
-        main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
-        main.measurementSleep = int( main.params['SLEEP']['measurement'])
-        main.timeout = int( main.params['SLEEP']['timeout'] )
-        main.dbFileName = main.params['DATABASE']['file']
-        main.cellData = {} # for creating cell file
-
-        # Tshark params
-        main.tsharkResultPath = main.params['TSHARK']['tsharkPath']
-        main.tsharkPacketIn = main.params['TSHARK']['tsharkPacketIn']
-
-        main.numlter = main.params['TEST']['numIter']
-        main.iterIgnore = int(main.params['TEST']['iterIgnore'])
-        main.hostTimestampKey = main.params['TEST']['hostTimestamp']
-        main.thresholdStr = main.params['TEST']['singleSwThreshold']
-        main.thresholdObj = main.thresholdStr.split(',')
-        main.thresholdMin = int(main.thresholdObj[0])
-        main.thresholdMax = int(main.thresholdObj[1])
-        main.threadID = 0
-
-        main.CLIs = []
-        main.ONOSip = []
-        main.maxNumBatch = 0
-        main.ONOSip = main.ONOSbench.getOnosIps()
-        main.log.info(main.ONOSip)
-        main.setupSkipped = False
-
-        gitBranch = main.params[ 'GIT' ][ 'branch' ]
-        gitPull = main.params[ 'GIT' ][ 'pull' ]
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-        stepResult = main.TRUE
-
-        main.log.info("Cresting DB file")
-        with open(main.dbFileName, "w+") as dbFile:
-            dbFile.write("")
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="environment set up successfull",
-                                 onfail="environment set up Failed" )
-
-    def CASE1( self ):
-        # main.scale[ 0 ] determines the current number of ONOS controller
-        main.CLIs = []
-        main.numCtrls = int( main.scale[ 0 ] )
-        main.log.info( "Creating list of ONOS cli handles" )
-        for i in range(main.numCtrls):
-            main.CLIs.append( getattr( main, 'ONOScli%s' % (i+1) ) )
-
-        main.log.info(main.CLIs)
-        if not main.CLIs:
-            main.log.error( "Failed to create the list of ONOS cli handles" )
-            main.cleanup()
+        try:
+            from tests.dependencies.ONOSSetup import ONOSSetup
+            main.testSetUp = ONOSSetup()
+        except ImportError:
+            main.log.error( "ONOSSetup not found. exiting the test" )
             main.exit()
+        main.testSetUp.envSetupDescription()
+        stepResult = main.FALSE
+        try:
 
-        main.commit = main.ONOSbench.getVersion(report=True)
-        main.commit = main.commit.split(" ")[1]
+            # Test variables
+            main.cellName = main.params[ 'ENV' ][ 'cellName' ]
+            main.apps = main.params[ 'ENV' ][ 'cellApps' ]
+            main.scale = ( main.params[ 'SCALE' ] ).split( "," )
+            main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
+            main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
+            main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
+            main.measurementSleep = int( main.params[ 'SLEEP' ][ 'measurement' ] )
+            main.timeout = int( main.params[ 'SLEEP' ][ 'timeout' ] )
+            main.dbFileName = main.params[ 'DATABASE' ][ 'file' ]
 
-        with open(main.dbFileName, "a") as dbFile:
+            # Tshark params
+            main.tsharkResultPath = main.params[ 'TSHARK' ][ 'tsharkPath' ]
+            main.tsharkPacketIn = main.params[ 'TSHARK' ][ 'tsharkPacketIn' ]
+
+            main.numlter = main.params[ 'TEST' ][ 'numIter' ]
+            main.iterIgnore = int( main.params[ 'TEST' ][ 'iterIgnore' ] )
+            main.hostTimestampKey = main.params[ 'TEST' ][ 'hostTimestamp' ]
+            main.thresholdStr = main.params[ 'TEST' ][ 'singleSwThreshold' ]
+            main.thresholdObj = main.thresholdStr.split( ',' )
+            main.thresholdMin = int( main.thresholdObj[ 0 ] )
+            main.thresholdMax = int( main.thresholdObj[ 1 ] )
+            main.threadID = 0
+
+            main.maxNumBatch = 0
+            main.setupSkipped = False
+
+            nic = main.params[ 'DATABASE' ][ 'nic' ]
+            node = main.params[ 'DATABASE' ][ 'node' ]
+            nic = main.params[ 'DATABASE' ][ 'nic' ]
+            node = main.params[ 'DATABASE' ][ 'node' ]
+            stepResult = main.TRUE
+
+            main.log.info( "Cresting DB file" )
+            with open( main.dbFileName, "w+" ) as dbFile:
+                dbFile.write( "" )
+
+            stepResult = main.testSetUp.gitPulling()
+        except Exception as e:
+            main.testSetUp.envSetupException( e )
+        main.testSetUp.evnSetupConclusion( stepResult )
+
+        main.commit = main.commit.split( " " )[ 1 ]
+
+        with open( main.dbFileName, "a" ) as dbFile:
             temp = "'" + main.commit + "',"
             temp += "'" + nic + "',"
-            dbFile.write(temp)
+            dbFile.write( temp )
             dbFile.close()
+    def CASE1( self ):
+        # main.scale[ 0 ] determines the current number of ONOS controller
+        main.testSetUp.getNumCtrls( True )
+        main.testSetUp.envSetup( includeGitPull=False, makeMaxNodes=False )
 
     def CASE2( self, main ):
         """
@@ -103,118 +89,9 @@
         - Install ONOS cluster
         - Connect to cli
         """
-        main.log.info( "Starting up %s node(s) ONOS cluster" % main.numCtrls)
-        main.log.info( "Safety check, killing all ONOS processes" +
-                       " before initiating environment setup" )
-
-        for i in range( main.numCtrls ):
-            main.ONOSbench.onosStop( main.ONOSip[ i ] )
-            main.ONOSbench.onosKill( main.ONOSip[ i ] )
-
-        main.log.info( "NODE COUNT = %s" % main.numCtrls)
-
-        tempOnosIp = []
-        for i in range( main.numCtrls ):
-            tempOnosIp.append( main.ONOSip[i] )
-
-        main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
-                                       "temp",
-                                       main.Mininet1.ip_address,
-                                       main.apps,
-                                       tempOnosIp,
-                                       main.ONOScli1.karafUser )
-
-        main.step( "Apply cell to environment" )
-        cellResult = main.ONOSbench.setCell( "temp" )
-        verifyResult = main.ONOSbench.verifyCell()
-        stepResult = cellResult and verifyResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully applied cell to " + \
-                                        "environment",
-                                 onfail="Failed to apply cell to environment " )
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.buckBuild()
-        stepResult = packageResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully created ONOS package",
-                                 onfail="Failed to create ONOS package" )
-
-        main.step( "Uninstall ONOS package on all Nodes" )
-        uninstallResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            main.log.info( "Uninstalling package on ONOS Node IP: " + main.ONOSip[i] )
-            u_result = main.ONOSbench.onosUninstall( main.ONOSip[i] )
-            utilities.assert_equals( expect=main.TRUE, actual=u_result,
-                                     onpass="Test step PASS",
-                                     onfail="Test step FAIL" )
-            uninstallResult = ( uninstallResult and u_result )
-
-        main.step( "Install ONOS package on all Nodes" )
-        installResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            main.log.info( "Installing package on ONOS Node IP: " + main.ONOSip[i] )
-            i_result = main.ONOSbench.onosInstall( node=main.ONOSip[i] )
-            utilities.assert_equals( expect=main.TRUE, actual=i_result,
-                                     onpass="Test step PASS",
-                                     onfail="Test step FAIL" )
-            installResult = installResult and i_result
-
-        main.step( "Set up ONOS secure SSH" )
-        secureSshResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            secureSshResult = secureSshResult and main.ONOSbench.onosSecureSSH( node=main.ONOSip[i] )
-        utilities.assert_equals( expect=main.TRUE, actual=secureSshResult,
-                                 onpass="Test step PASS",
-                                 onfail="Test step FAIL" )
-
-        time.sleep( main.startUpSleep )
-        main.step( "Starting ONOS service" )
-        stopResult = main.TRUE
-        startResult = main.TRUE
-        onosIsUp = main.TRUE
-
-        for i in range( main.numCtrls ):
-            onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
-        if onosIsUp == main.TRUE:
-            main.log.report( "ONOS instance is up and ready" )
-        else:
-            main.log.report( "ONOS instance may not be up, stop and " +
-                             "start ONOS again " )
-            for i in range( main.numCtrls ):
-                stopResult = stopResult and \
-                        main.ONOSbench.onosStop( main.ONOSip[ i ] )
-            for i in range( main.numCtrls ):
-                startResult = startResult and \
-                        main.ONOSbench.onosStart( main.ONOSip[ i ] )
-        stepResult = onosIsUp and stopResult and startResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="ONOS service is ready",
-                                 onfail="ONOS service did not start properly" )
-
-        main.step( "Start ONOS CLI on all nodes" )
-        cliResult = main.TRUE
-        main.step(" Start ONOS cli using thread ")
-        time.sleep( main.startUpSleep )
-        startCliResult  = main.TRUE
-        pool = []
-
-        for i in range( int( main.numCtrls) ):
-            t = main.Thread( target=main.CLIs[i].startOnosCli,
-                             threadID=main.threadID,
-                             name="startOnosCli",
-                             args=[ main.ONOSip[i] ],
-                             kwargs = {"onosStartTimeout":main.timeout} )
-            pool.append(t)
-            t.start()
-            main.threadID = main.threadID + 1
-        for t in pool:
-            t.join()
-            startCliResult = startCliResult and t.result
-        time.sleep( main.startUpSleep )
+        main.testSetUp.ONOSSetUp( main.Mininet1, True,
+                                  cellName=main.cellName, killRemoveMax=False,
+                                  CtrlsSet=False )
 
     def CASE11( self, main ):
         main.log.info( "set and configure Application" )
@@ -224,7 +101,7 @@
         main.step( "Activating org.onosproject.proxyarp" )
         appStatus = utilities.retry( main.ONOSrest1.activateApp,
                                      main.FALSE,
-                                     ['org.onosproject.proxyarp'],
+                                     [ 'org.onosproject.proxyarp' ],
                                      sleep=3,
                                      attempts=3 )
         utilities.assert_equals( expect=main.TRUE,
@@ -246,7 +123,7 @@
                                  onpass="Successfully set DefaultTopologyProvider",
                                  onfail="Failed to set DefaultTopologyProvider" )
 
-        time.sleep(main.startUpSleep)
+        time.sleep( main.startUpSleep)
         main.step('Starting mininet topology')
         mnStatus = main.Mininet1.startNet(args='--topo=linear,1')
         utilities.assert_equals( expect=main.TRUE,
@@ -261,7 +138,7 @@
                                  onpass="Successfully assigned switches to masters",
                                  onfail="Failed assign switches to masters" )
 
-        time.sleep(main.startUpSleep)
+        time.sleep( main.startUpSleep)
 
     def CASE20(self, main):
         """
@@ -278,72 +155,80 @@
         import requests
         import os
         import numpy
-
+        try:
+            from tests.dependencies.utils import Utils
+        except ImportError:
+            main.log.error( "Utils not found exiting the test" )
+            main.exit()
+        try:
+            main.Utils
+        except ( NameError, AttributeError ):
+            main.Utils = Utils()
         # Host adding measurement
         assertion = main.TRUE
 
         main.log.report('Latency of adding one host to ONOS')
-        main.log.report('First ' + str(main.iterIgnore) + ' iterations ignored' + ' for jvm warmup time')
-        main.log.report('Total iterations of test: ' + str(main.numlter))
+        main.log.report('First ' + str( main.iterIgnore ) + ' iterations ignored' + ' for jvm warmup time')
+        main.log.report('Total iterations of test: ' + str( main.numlter ) )
 
         addingHostTime = []
         metricsResultList = []
-        for i in range(0, int(main.numlter)):
-            main.log.info('Clean up data file')
-            with open(main.tsharkResultPath, "w") as dbFile:
-                dbFile.write("")
+        for i in range( 0, int( main.numlter ) ):
+            main.log.info( 'Clean up data file' )
+            with open( main.tsharkResultPath, "w" ) as dbFile:
+                dbFile.write( "" )
 
             main.log.info('Starting tshark capture')
-            main.ONOSbench.tsharkGrep(main.tsharkPacketIn, main.tsharkResultPath)
-            time.sleep(main.measurementSleep)
+            main.ONOSbench.tsharkGrep( main.tsharkPacketIn, main.tsharkResultPath )
+            time.sleep( main.measurementSleep )
 
             main.log.info('host 1 arping...')
             main.Mininet1.arping(srcHost='h1', dstHost='10.0.0.2')
 
-            time.sleep(main.measurementSleep)
+            time.sleep( main.measurementSleep )
 
             main.log.info('Stopping all Tshark processes')
             main.ONOSbench.tsharkStop()
 
-            time.sleep(main.measurementSleep)
+            time.sleep( main.measurementSleep )
 
             # Get tshark output
-            with open(main.tsharkResultPath, "r") as resultFile:
+            with open( main.tsharkResultPath, "r" ) as resultFile:
                 resultText = resultFile.readline()
-                main.log.info('Capture result:' + resultText)
+                main.log.info( 'Capture result:' + resultText )
                 resultText = resultText.split(' ')
-                if len(resultText) > 1:
-                    tsharkResultTime = float(resultText[1]) * 1000.0
+                if len( resultText ) > 1:
+                    tsharkResultTime = float( resultText[ 1 ] ) * 1000.0
                 else:
-                    main.log.error('Tshark output file for packet_in' + ' returned unexpected results')
+                    main.log.error( 'Tshark output file for packet_in' + ' returned unexpected results' )
                     hostTime = 0
                     caseResult = main.FALSE
                 resultFile.close()
             # Compare the timestemps, and get the lowest one.
             temp = 0;
             # Get host event timestamps from each nodes
-            for node in range (0, main.numCtrls):
-                metricsResult = json.loads(main.CLIs[node].topologyEventsMetrics())
-                metricsResult = metricsResult.get(main.hostTimestampKey).get("value")
-                main.log.info("ONOS topology event matrics timestemp: {}".format(str(metricsResult)) )
+            for node in range ( 0, main.numCtrls ):
+                metricsResult = json.loads( main.CLIs[ node ].topologyEventsMetrics() )
+                metricsResult = metricsResult.get( main.hostTimestampKey ).get( "value" )
+                main.log.info( "ONOS topology event matrics timestemp: {}".format( str( metricsResult ) ) )
 
                 if temp < metricsResult:
                     temp = metricsResult
                 metricsResult = temp
 
-            addingHostTime.append(float(metricsResult) - tsharkResultTime)
-            main.log.info("Result of this iteration: {}".format( str( float(metricsResult) - tsharkResultTime) ))
+            addingHostTime.append( float( metricsResult ) - tsharkResultTime )
+            main.log.info( "Result of this iteration: {}".format( str( float( metricsResult ) - tsharkResultTime) ) )
             # gethost to remove
             gethost = main.ONOSrest1.hosts()
             HosttoRemove = []
-            HosttoRemove.append( json.loads( gethost[1:len(gethost)-1] ).get('id') )
-            main.CLIs[0].removeHost(HosttoRemove)
+            HosttoRemove.append( json.loads( gethost[ 1:len( gethost )-1 ] ).get( 'id' ) )
+            main.CLIs[0].removeHost( HosttoRemove )
 
-        main.log.info("Result List: {}".format(addingHostTime))
+        main.log.info( "Result List: {}".format( addingHostTime ) )
 
         # calculate average latency from each nodes
-        averageResult = numpy.average(addingHostTime)
-        main.log.info("Average Latency: {}".format(averageResult))
+        averageResult = numpy.average( addingHostTime )
+        main.log.info( "Average Latency: {}".format( averageResult ) )
 
         # calculate std
         stdResult = numpy.std(addingHostTime)
@@ -368,5 +253,4 @@
                 onpass='Host latency test successful',
                 onfail='Host latency test failed')
 
-        main.Mininet1.stopNet()
-        del main.scale[0]
+        main.Utils.mininetCleanup( main.Mininet1 )