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

Change-Id: I509a8ee7a26c198957bebf59da5c85a0edb8b995
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
index f71d2e5..adc6ac2 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
@@ -24,196 +24,69 @@
             different versions of ONOS.
         - Construct tests variables
         '''
-        gitPull = main.params['GIT']['gitPull']
-        gitBranch = main.params['GIT']['gitBranch']
+        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.cellName = main.params[ 'ENV'][ 'cellName']
+            main.apps = main.params[ 'ENV' ][ 'cellApps' ]
+            main.BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+            main.BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+            main.MN1Ip = main.params[ 'MN' ][ 'ip1' ]
+            main.maxNodes = int( main.params[ 'max' ] )
+            main.numSwitches = ( main.params[ 'TEST' ][ 'numSwitches' ] ).split(",")
+            main.skipRelRsrc = main.params[ 'TEST' ][ 'skipReleaseResourcesOnWithdrawal' ]
+            main.flowObj = main.params[ 'TEST' ][ 'flowObj' ]
+            main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
+            main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
+            main.verifySleep = int( main.params[ 'SLEEP' ][ 'verify' ] )
+            main.scale = ( main.params[ 'SCALE' ] ).split(",")
+            main.testDuration = main.params[ 'TEST' ][ 'duration' ]
+            main.logInterval = main.params[ 'TEST' ][ 'log_interval' ]
+            main.debug = main.params[ 'debugMode' ]
+            main.timeout = int( main.params[ 'SLEEP' ][ 'timeout' ] )
+            main.cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
+            if main.flowObj == "True":
+                main.flowObj = True
+                main.dbFileName = main.params[ 'DATABASE' ][ 'dbFlowObj' ]
+                main.numKeys = main.params[ 'TEST' ][ 'numKeysFlowObj' ]
+            else:
+                main.flowObj = False
+                main.dbFileName = main.params[ 'DATABASE' ][ 'dbName' ]
+                main.numKeys = main.params[ 'TEST' ][ 'numKeys' ]
 
-        main.case( "Pull onos branch and build onos on Teststation." )
+            stepResult = main.testSetUp.gitPulling()
+            # Create DataBase file
+            main.log.info( "Create Database file " + main.dbFileName )
+            resultsDB = open( main.dbFileName, "w+" )
+            resultsDB.close()
 
-        if gitPull == 'True':
-            main.step( "Git Checkout ONOS branch: " + gitBranch )
-            stepResult = main.ONOSbench.gitCheckout( branch=gitBranch )
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully checkout onos branch.",
-                                    onfail="Failed to checkout onos branch. Exiting test...")
-            if not stepResult: main.exit()
-
-            main.step( "Git Pull on ONOS branch:" + gitBranch )
-            stepResult = main.ONOSbench.gitPull()
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully pull onos. ",
-                                    onfail="Failed to pull onos. Exiting test ...")
-            if not stepResult: main.exit()
-
-        else:
-            main.log.warn( "Skipped pulling onos" )
-
-        main.cellName = main.params['ENV']['cellName']
-        main.Apps = main.params['ENV']['cellApps']
-        main.BENCHIp = main.params['BENCH']['ip1']
-        main.BENCHUser = main.params['BENCH']['user']
-        main.MN1Ip = main.params['MN']['ip1']
-        main.maxNodes = int(main.params['max'])
-        main.numSwitches = (main.params['TEST']['numSwitches']).split(",")
-        main.skipRelRsrc = main.params['TEST']['skipReleaseResourcesOnWithdrawal']
-        main.flowObj = main.params['TEST']['flowObj']
-        main.startUpSleep = int(main.params['SLEEP']['startup'])
-        main.installSleep = int(main.params['SLEEP']['install'])
-        main.verifySleep = int(main.params['SLEEP']['verify'])
-        main.scale = (main.params['SCALE']).split(",")
-        main.testDuration = main.params[ 'TEST' ][ 'duration' ]
-        main.logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-        main.debug = main.params[ 'debugMode' ]
-        main.timeout = int(main.params['SLEEP']['timeout'])
-        main.cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
-        if main.flowObj == "True":
-            main.flowObj = True
-            main.dbFileName = main.params['DATABASE']['dbFlowObj']
-            main.numKeys = main.params[ 'TEST' ][ 'numKeysFlowObj' ]
-        else:
-            main.flowObj = False
-            main.dbFileName = main.params['DATABASE']['dbName']
-            main.numKeys = main.params[ 'TEST' ][ 'numKeys' ]
-        # Create DataBase file
-        main.log.info( "Create Database file " + main.dbFileName )
-        resultsDB = open( main.dbFileName, "w+" )
-        resultsDB.close()
-
-        # set neighbors
-        main.neighbors = "1"
+            # set neighbors
+            main.neighbors = "1"
+        except Exception as e:
+            main.testSetUp.envSetupException( e )
+        main.testSetUp.evnSetupConclusion( stepResult )
+        main.commit = main.commit.split( " " )[ 1 ]
 
     def CASE1( self, main ):
         # Clean up test environment and set up
         import time
-        main.log.info( "Get ONOS cluster IP" )
-        print( main.scale )
-        main.numCtrls = int( main.scale.pop(0) )
-        main.ONOSip = []
         main.maxNumBatch = 0
-        main.AllONOSip = main.ONOSbench.getOnosIps()
-        for i in range( main.numCtrls ):
-            main.ONOSip.append( main.AllONOSip[i] )
-        main.log.info( main.ONOSip )
-        main.CLIs = []
-        main.log.info( "Creating list of ONOS cli handles" )
-        for i in range( main.numCtrls ):
-            main.CLIs.append( getattr( main, 'ONOScli%s' % (i + 1) ) )
-
-        if not main.CLIs:
-            main.log.error( "Failed to create the list of ONOS cli handles" )
-            main.cleanup()
-            main.exit()
-
-        main.commit = main.ONOSbench.getVersion( report=True )
-        main.commit = main.commit.split(" ")[1]
-        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 )
-        main.ONOSbench.createCellFile(main.ONOSbench.ip_address,
-                                      main.cellName,
-                                      main.MN1Ip,
-                                      main.Apps,
-                                      main.ONOSip,
-                                      main.ONOScli1.karafUser )
-        main.step( "Apply cell to environment" )
-        cellResult = main.ONOSbench.setCell( main.cellName )
-        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 using thread" )
-        startCliResult = main.TRUE
-        pool = []
-        main.threadID = 0
-        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.getNumCtrls( True )
+        main.testSetUp.envSetup( includeGitPull=False, makeMaxNodes=False )
+        main.testSetUp.ONOSSetUp( main.MN1Ip, True,
+                                  cellName=main.cellName, killRemoveMax=False,
+                                  CtrlsSet=False )
 
         # config apps
         main.CLIs[0].setCfg( "org.onosproject.net.intent.impl.IntentManager",
                                   "skipReleaseResourcesOnWithdrawal " + main.skipRelRsrc )
-        main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(int(main.numCtrls*10)) )
+        main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(int( main.numCtrls*10)) )
         main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "topoShape linear" )
         main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "enabled true" )
         if main.flowObj:
@@ -248,7 +121,7 @@
         main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "numNeighbors " + str( main.neighbors ) )
         main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "cyclePeriod " + main.cyclePeriod )
 
-        main.log.info( "Starting intent-perf test for " + str(main.testDuration) + " seconds..." )
+        main.log.info( "Starting intent-perf test for " + str( main.testDuration) + " seconds..." )
         main.CLIs[0].sendline( "intent-perf-start" )
         stop = time.time() + float( main.testDuration )
 
@@ -256,20 +129,20 @@
             time.sleep(15)
             result = main.CLIs[0].getIntentPerfSummary()
             if result:
-                for ip in main.ONOSip:
-                    main.log.info( "Node {} Overall Rate: {}".format( ip, result[ip] ) )
+                for i in range( main.numCtrls ):
+                    main.log.info( "Node {} Overall Rate: {}".format( main.ONOSip[ i ], result[ main.ONOSip[ i ] ] ) )
         main.log.info( "Stop intent-perf" )
-        for node in main.CLIs:
-            node.sendline( "intent-perf-stop" )
+        for i in range( main.numCtrls ):
+            main.CLIs[i].sendline( "intent-perf-stop" )
         if result:
-            for ip in main.ONOSip:
-                main.log.info( "Node {} final Overall Rate: {}".format( ip, result[ip] ) )
+            for i in range( main.numCtrls ):
+                main.log.info( "Node {} final Overall Rate: {}".format( main.ONOSip[ i ], result[ main.ONOSip[ i ] ] ) )
 
         with open( main.dbFileName, "a" ) as resultDB:
-            for nodes in range( 0, len( main.ONOSip ) ):
+            for nodes in range( main.numCtrls ):
                 resultString = "'" + main.commit + "',"
                 resultString += "'1gig',"
-                resultString += str(main.numCtrls) + ","
+                resultString += str( main.numCtrls) + ","
                 resultString += "'baremetal" + str( nodes+1 ) + "',"
                 resultString += main.neighbors + ","
                 resultString += result[ main.ONOSip[ nodes ] ]+","