Changes for blackbird release 1.1
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.params b/TestON/tests/IntentEventTP/IntentEventTP.params
index d5dd65c..7f355dc 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.params
+++ b/TestON/tests/IntentEventTP/IntentEventTP.params
@@ -20,41 +20,41 @@
     <CTRL> 
         <USER>admin</USER>
 
-        <ip1>10.128.5.51</ip1>
+        <ip1>10.254.1.201</ip1>
         <port1>6633</port1>
 
-        <ip2>10.128.5.52</ip2>
+        <ip2>10.254.1.202</ip2>
         <port2>6633</port2>
 
-        <ip3>10.128.5.53</ip3>
+        <ip3>10.254.1.203</ip3>
         <port3>6633</port3>
 
-        <ip4>10.128.5.54</ip4>
+        <ip4>10.254.1.204</ip4>
         <port4>6633</port4>
 
-        <ip5>10.128.5.65</ip5>
+        <ip5>10.254.1.205</ip5>
         <port5>6633</port5>
 
-        <ip6>10.128.5.66</ip6>
+        <ip6>10.254.1.206</ip6>
         <port6>6633</port6>
 
-         <ip7>10.128.5.67</ip7>
+         <ip7>10.254.1.207</ip7>
         <port7>6633</port7> 
     </CTRL>
 
-    <MN><ip1>10.128.5.55</ip1></MN>
+    <MN><ip1>10.254.1.200</ip1></MN>
 
     <BENCH>
         <user>admin</user>
-        <ip1>10.128.5.55</ip1>
+        <ip1>10.254.1.200</ip1>
     </BENCH>
 
     <TEST> 
-        <loadFrom>1,0,0,0,0,0,0</loadFrom>                                     #generate load on server, 1 = generator on 
-        <numSwitches>35</numSwitches>
+        <loadFrom>1,1,1,1,1,1,1</loadFrom>                                     #generate load on server, 1 = generator on 
+        <numSwitches>10,10,10,10,10,10,10</numSwitches>
         <skipCleanInstall>yes</skipCleanInstall>
-        <duration>60</duration>
-        <log_interval>5</log_interval>                            
+        <duration>600</duration>
+        <log_interval>20</log_interval>                            
     </TEST>
 
     <METRICS>
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.py b/TestON/tests/IntentEventTP/IntentEventTP.py
index b1f0e91..863599c 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.py
+++ b/TestON/tests/IntentEventTP/IntentEventTP.py
@@ -33,7 +33,7 @@
         maxNodes = int(main.params[ 'availableNodes' ])
         MNip = main.params[ 'MN' ][ 'ip1' ]
         skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
-        numSwitches = main.params[ 'TEST' ][ 'numSwitches' ]
+        numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
 
         homeDir = os.path.expanduser('~')
         
@@ -83,68 +83,26 @@
         if skipMvn != "yes":
             mvnResult = main.ONOSbench.cleanInstall()
  
-        #configure null device provider         
-        switchList = [0,int(numSwitches),0,0,0,0,0,0]
-        devicesString  = ""
-        for node in range(1, maxNodes + 1):
-            devicesString += (ONOSIp[node] + ":" + str(switchList[node] ))
-            if node < maxNodes:
-                devicesString += (",")
+        #null link
+        #null provider 
+        #linkgraph 
+        #intentPerf
 
-        main.log.info("Configuring device provider: ONOS 1 with " + (numSwitches) + " switches")
-        localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
-        filePath = homeDir + localPath
-        main.log.info(filePath)
+        myDistribution = []
+        for node in range (1, clusterCount + 1):
+            myDistribution.append(numSwitches[node-1])
 
-        configFile = open(filePath, 'w+')
-        configFile.write("devConfigs = " + devicesString + "\n")
-        configFile.write("#numPorts = 8") 
-        configFile.close()
-        main.log.info("DevConfig = " + devicesString) 
-        main.log.info("Device provider file written and closed")
+        main.ONOSbench.createLinkGraphFile( BENCHIp,cellIp,myDistribution)
+        main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
+        main.ONOSbench.createNullLinkProviderFile(BENCHIp)
 
-        ## configuring null link provider
-        main.log.info(" Configuring null provider to disable flicker" )
-        homeDir = os.path.expanduser('~')
-        main.log.info(homeDir)
-        localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
-        filePath = homeDir + localPath
-        main.log.info(filePath)
-
-        neighborsString = ""
-        for node in range(1, maxNodes + 1):
-            neighborsString += ONOSIp[node]
-            if node < maxNodes:
-                neighborsString += ","
-
-        configFile = open(filePath, 'w+')
-        configFile.write("#eventRate =\n")
-        configFile.write("#cfgFile = /tmp/foo.cfg        #If enabled, points to the full path to the topology file.\n")
-        configFile.write("#neighbors = ")
-        configFile.close()
-        main.log.info("Configuration completed")
+        main.log.step("Writing IntentPerf config file") 
+        intentPerfConfig = open( homeDir + "/onos/tools/package/etc/org.onosproject.intentperf.IntentPerfInstaller.cfg", "w+")
+        intentPerfConfig.write("numKeys = 40000\n")        
+        intentPerfConfig.write("cyclePeriod = 1000\n")
+        intentPerfConfig.write("numNeighors = 0\n")
+        intentPerfConfig.close()
         
-        main.log.info("Writing link graph configuration file..." )
-        homeDir = os.path.expanduser('~')
-        localPath = "/onos/tools/package/etc/linkGraph.cfg"
-        filePath = homeDir + localPath
-        linkGraph = open(filePath, 'w+')
-        linkGraph.write("# NullLinkProvider topology description (config file).\n")
-        linkGraph.write("# The NodeId is only added if the destination is another node's device.\n")
-        linkGraph.write("# Bugs: Comments cannot be appended to a line to be read.\n")
-
-        myPort = 6
-        for node in range(1, clusterCount+1):
-            linkGraph.write("graph " + ONOSIp[node] + " {\n")
-            for switch in range (0, switchList[node]-1):
-                line = ""
-                line = ("\t" + str(switch) + ":" + str(myPort))
-                line += " -- "
-                line += (str(switch+1) + ":" + str(myPort-1) + "\n")
-                linkGraph.write(line) 
-            linkGraph.write("}")
-        linkGraph.close()        
-
         main.step( "Creating ONOS package" )
         packageResult = main.ONOSbench.onosPackage()  
 
@@ -170,7 +128,7 @@
             main.ONOSbench.handle.expect(":~")
             clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
             print("\nBefore: " + str(clusterCheck))
-            if "SCC(s)=1," in clusterCheck and ("devices=" + str(numSwitches)) in clusterCheck:                  #check for links and devices too 
+            if "SCC(s)=1," in clusterCheck:     
                 break 
             if clusterCheck != lastOutput:
                 sameOutput = False 
@@ -205,7 +163,7 @@
         cellName = main.params[ 'ENV' ][ 'cellName' ]
         MNip = main.params[ 'MN' ][ 'ip1' ]
         BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        numSwitches = int(main.params[ 'TEST' ][ 'numSwitches' ])
+        numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
         scale = int( main.params[ 'SCALE' ] )
         maxNodes = int(main.params[ 'availableNodes' ])
         clusterCount += scale
@@ -234,53 +192,23 @@
         main.step( "Set Cell" )
         main.ONOSbench.setCell(cellName)
 
-        baselineSwitchCount = numSwitches/clusterCount
-        switchList = [0,0,0,0,0,0,0,0]
-        
-        for node in range(1, clusterCount + 1):
-            switchList[node] = baselineSwitchCount  
-            
-        for node in range(1, (numSwitches%clusterCount)+1):
-            switchList[node] += 1
-                      
-        devicesString  = ""
-        for node in range(1, maxNodes + 1):
-            devicesString += (ONOSIp[node] + ":" + str(switchList[node] ))
-            if node < maxNodes:
-                devicesString += (",")
+        myDistribution = []
+        for node in range (1, clusterCount + 1):
+            myDistribution.append(numSwitches[node-1])
 
-        main.log.info("Configuring device provider")
-        localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
-        filePath = homeDir + localPath
-        main.log.info(filePath)
+        main.ONOSbench.createLinkGraphFile( BENCHIp, cellIp, myDistribution)
+        main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
+        main.ONOSbench.createNullLinkProviderFile( BENCHIp )
 
-        configFile = open(filePath, 'w+')
-        configFile.write("devConfigs = " + devicesString +"\n")
-        configFile.write("# numPorts = 8")
-        configFile.close()
-        main.log.info("DevConfig = " + devicesString)
-        main.log.info("Device provider file written and closed")
+        #neighbors = max(1, clusterCount-1) 
+        neighbors = 0
 
-        main.log.info("Writing link graph configuration file..." )
-        homeDir = os.path.expanduser('~')
-        localPath = "/onos/tools/package/etc/linkGraph.cfg"
-        filePath = homeDir + localPath
-        linkGraph = open(filePath, 'w+')
-        linkGraph.write("# NullLinkProvider topology description (config file).\n")
-        linkGraph.write("# The NodeId is only added if the destination is another node's device.\n")
-        linkGraph.write("# Bugs: Comments cannot be appended to a line to be read.\n")
-
-        myPort = 6
-        for node in range(1, clusterCount+1):
-            linkGraph.write("graph " + ONOSIp[node] + " {\n")
-            for switch in range (0, switchList[node]-1):
-                line = ""
-                line = ("\t" + str(switch) + ":" + str(myPort))
-                line += " -- "
-                line += (str(switch+1) + ":" + str(myPort-1) + "\n")
-                linkGraph.write(line)
-            linkGraph.write("}\n")
-        linkGraph.close()
+        main.log.step("Writing IntentPerf config file")
+        intentPerfConfig = open( homeDir + "/onos/tools/package/etc/org.onosproject.intentperf.IntentPerfInstaller.cfg", "w+")
+        intentPerfConfig.write("numKeys = 40000\n")
+        intentPerfConfig.write("cyclePeriod = 1000\n")
+        intentPerfConfig.write("numNeighors = " + str(neighbors) + "\n")
+        intentPerfConfig.close()
 
         main.step( "Creating ONOS package, preparing to reinstall" )
         packageResult = main.ONOSbench.onosPackage()   
@@ -306,7 +234,7 @@
             main.ONOSbench.handle.expect(":~")
             clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
             print("\nBefore: " + str(clusterCheck))
-            if "SCC(s)=1," in clusterCheck and ("nodes=" + str(clusterCount)) in clusterCheck and ("devices=" + str(numSwitches)) in clusterCheck:  
+            if ("SCC(s)=1,") in clusterCheck:   
                 break
             if clusterCheck != lastOutput:
                 sameOutput = False
@@ -326,6 +254,7 @@
         import json
         import string 
         import csv
+        import numpy
 
         main.log.info("Cluster Count = " + str(clusterCount))
 
@@ -338,7 +267,7 @@
 
         metricList = [intentsRate, intentsWithdrawn, intentsFailed]
         
-        tempsleep =40
+        tempsleep =20
         main.log.info("sleeping " + str(tempsleep)) 
         time.sleep(tempsleep)
         
@@ -351,47 +280,59 @@
                 main.ONOSbench.handle.sendline(cmd)
                 main.ONOSbench.handle.expect(":~")
                 main.log.info("Load initiated on node " + str(node))
-       
+        
+            time.sleep(5)
+            actcmd = "onos $OC" + str(node) + " intent-perf-start"
+            main.ONOSbench.handle.sendline(actcmd)
+            main.ONOSbench.handle.expect(":~")
+            main.log.info("Starting ONOS " + str(node) + "  intent-perf...")
+
         main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
         stop = time.time() + float( testDuration )
         
         while time.time() < stop:
             time.sleep( float( logInterval ) )
+            groupResult = []
             for node in range (1, clusterCount + 1):
-                myResults = ['0','0','0']
-                for metric in metricList: 
-
-                    onosEnv = "onos $OC" + str(node)  
-                    cmd = onosEnv + " " + metric
-                    main.log.info("COMMAND: " + cmd)
-                    main.ONOSbench.handle.sendline( cmd )
-                    time.sleep(10)
-                    main.ONOSbench.handle.expect(":~")                   
-                    rawResult = main.ONOSbench.handle.before
-                    rawResult = (rawResult.splitlines())
-
-                    tempResult = "--"
-                    for word in rawResult:
-                        if debug: print("word: " + word)
-                        if "m1" in str(word): 
-                            tempResult = word
-                            break
-
-                    if tempResult == "--": 
-                        main.log.error("WRONG pexepct.before data\n" + str(rawResult))
-                        main.log.info("retrying command... ")
-                        main.ONOSbench.handle.sendline(cmd)
-                        main.ONOSbench.handle.expect(":~")
-                        test = main.ONOSbench.handle.before
-                        print ("\n\n" + str(test))
-
-                    tempResult = round(float(tempResult.replace("m1=","")),1)
-                    tempResult = str(tempResult)                        # easy way to clean up number/prep to log
-                    resultIndex = metricList.index(metric)
-                    myResults[resultIndex] = tempResult
+                if loadFrom[node] == "0": continue
+                groupResult.append(0)               
                 
-                main.log.info("\tNode " + str(node))
-                main.log.info("Installed\tWithdrawn\tFailed")
-                main.log.info(myResults[0] + "\t\t " + myResults[1] + "\t\t" + myResults[2] + "\n")
-                
+                cmd = " onos-ssh $OC" + str(node) +  """ cat /opt/onos/log/karaf.log | grep "SNAPSHOT | Throughput" | tail -1  """ 
+                main.log.info("COMMAND: " + str(cmd))
+  
+                x = 0 
+                while True: 
+                    main.ONOSbench.handle.sendline(cmd)                   
+                    main.ONOSbench.handle.expect(":~")
+                    raw = main.ONOSbench.handle.before 
+                    if "OVERALL=" in raw: 
+                        break 
+                    x += 1
+                    if x > 10: 
+                        main.log.error("Expected output not being recieved... continuing")
+                        break
+                    time.sleep(2)
 
+                raw = raw.splitlines()
+                splitResults = []
+                for line in raw: 
+                    splitResults.extend(line.split(" "))
+
+                myResult = "--" 
+                for field in splitResults: 
+                    if "OVERALL" in field: 
+                        myResult = field 
+                
+                if myResult == "--": 
+                    main.log.error("Parsing/Pexpect error\n" + str(splitResults)) 
+
+                myResult = myResult.replace(";", "") 
+                myResult = myResult.replace("OVERALL=","")
+                myResult = float(myResult)  
+                groupResult[len(groupResult) -1] = myResult 
+
+                main.log.info("Node " + str(node) + " overall rate: " + str(myResult))
+
+            main.log.report("Results from this round of polling: " + str(groupResult)) 
+            main.log.report("Cluster Total: " + str(numpy.sum(groupResult)) + "\n")
+                
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.topo b/TestON/tests/IntentEventTP/IntentEventTP.topo
index 30a1467..0e45e0f 100644
--- a/TestON/tests/IntentEventTP/IntentEventTP.topo
+++ b/TestON/tests/IntentEventTP/IntentEventTP.topo
@@ -3,7 +3,7 @@
     <COMPONENT>
 
         <ONOSbench>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosDriver</type>
@@ -12,7 +12,7 @@
         </ONOSbench>
 
         <ONOS1cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -21,7 +21,7 @@
         </ONOS1cli>
 
         <ONOS2cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -30,7 +30,7 @@
         </ONOS2cli>
 
         <ONOS3cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -39,7 +39,7 @@
         </ONOS3cli>
 
         <ONOS4cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -48,7 +48,7 @@
         </ONOS4cli>
 
         <ONOS5cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -57,7 +57,7 @@
         </ONOS5cli>
 
         <ONOS6cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -66,7 +66,7 @@
         </ONOS6cli>
 
         <ONOS7cli>
-            <host>10.128.5.55</host>
+            <host>10.254.1.200</host>
             <user>admin</user>
             <password>onos_test</password>
             <type>OnosCliDriver</type>
@@ -75,7 +75,7 @@
         </ONOS7cli>
 
         <ONOS1>
-            <host>10.128.5.51</host>
+            <host>10.254.1.201</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -84,7 +84,7 @@
         </ONOS1>
 
         <ONOS2>
-            <host>10.128.5.52</host>
+            <host>10.254.1.202</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -93,7 +93,7 @@
         </ONOS2>
 
         <ONOS3>
-            <host>10.128.5.53</host>
+            <host>10.254.1.203</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -102,7 +102,7 @@
         </ONOS3>
 
         <ONOS4>
-            <host>10.128.5.54</host>
+            <host>10.254.1.204</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -112,7 +112,7 @@
 
     
         <ONOS5>
-            <host>10.128.5.65</host>
+            <host>10.254.1.205</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -121,7 +121,7 @@
         </ONOS5>
 
         <ONOS6>
-            <host>10.128.5.66</host>
+            <host>10.254.1.206</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>
@@ -130,7 +130,7 @@
         </ONOS6>
 
         <ONOS7>
-            <host>10.128.5.67</host>
+            <host>10.254.1.207</host>
             <user>sdn</user>
             <password>rocks</password>
             <type>OnosDriver</type>