[VOL-2839] Setting expected number of flows

Change-Id: Iaef6f5c35215c54def7c1fcb9bd8282d401adcbf
diff --git a/jjb/pipeline/voltha-scale-measurements.groovy b/jjb/pipeline/voltha-scale-measurements.groovy
index 6c10215..dad278e 100644
--- a/jjb/pipeline/voltha-scale-measurements.groovy
+++ b/jjb/pipeline/voltha-scale-measurements.groovy
@@ -127,6 +127,9 @@
           sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.of.flow.impl.OpenFlowRuleProvider flowPollFrequency ${flowStatInterval}
           sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.of.device.impl.OpenFlowDeviceProvider portStatsPollFrequency ${portsStatInterval}
 
+          # Always deactivate org.opencord.kafka
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.kafka
+
           #Check withOnosApps and disable apps accordingly
           if [ ${withOnosApps} = false ] ; then
             sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.olt
@@ -221,26 +224,65 @@
             '''
           }
         }
-        stage('Wait for flows to be programmed') {
+        stage('Wait for flows to be programmed in VOLTHA') {
+          steps {
+            sh '''
+            if [ ${withOnosApps} = false ] ; then
+              echo "ONOS Apps are not enabled, nothing to check"
+            else
+              function get_flows() {
+                local TOTAL
+                TOTAL=0
+
+                arr=("$@")
+                for id in "${arr[@]}"
+                do
+                  TOTAL=$((TOTAL + $(voltctl logicaldevice flows $id | grep -v ID | wc -l)))
+                done
+                echo $TOTAL
+              }
+
+              LOGICAL_DEVICE_IDS=$(voltctl logicaldevice list | grep BBSIM | awk '{print $1}')
+              IDS=($LOGICAL_DEVICE_IDS)
+
+              FLOWS=$(get_flows "${IDS[@]}")
+
+              until [ $FLOWS -eq ${expectedFlows} ]
+              do
+                echo "${FLOWS} of ${expectedFlows} flows programmed in VOLTHA (time: $SECONDS)"
+                sleep ${pollInterval}
+                FLOWS=$(get_flows "${IDS[@]}")
+              done
+              echo "${expectedFlows} flows correctly programmed (time: $SECONDS)"
+              echo $SECONDS > temp.txt
+              paste onos-ports-time-num.txt temp.txt | awk '{print ($1 + $2)}' > voltha-flows-time-num.txt
+
+              echo "VOLTHA FLOWs Duration(s)" > voltha-flows-time.txt
+              cat voltha-flows-time-num.txt >> voltha-flows-time.txt
+            fi
+            '''
+          }
+        }
+        stage('Wait for flows to be acknowledged in ONOS') {
           steps {
             sh '''
             if [ ${withOnosApps} = false ] ; then
               echo "ONOS Apps are not enabled, nothing to check"
             else
               # wait until all flows are in added state
-              z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s | grep PENDING | wc -l)
-              until [ $z -eq 0 ]
+              z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s | grep ADDED | wc -l)
+              until [ $z -eq ${expectedFlows} ]
               do
-                echo "${z} flows in PENDING state (time: $SECONDS)"
+                echo "${z} of ${expectedFlows} flows in ADDED state (time: $SECONDS)"
                 sleep ${pollInterval}
-                z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s | grep PENDING | wc -l)
+                z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s | grep ADDED | wc -l)
               done
-              echo "All flows correctly programmed (time: $SECONDS)"
+              echo "${expectedFlows} flows correctly acknowledged (time: $SECONDS)"
 
               echo $SECONDS > temp.txt
-              paste onos-ports-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-flows-time-num.txt
+              paste voltha-flows-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-flows-time-num.txt
 
-              echo "FLOWs Duration(s)" > onos-flows-time.txt
+              echo "ONOS FLOWs Duration(s)" > onos-flows-time.txt
               cat onos-flows-time-num.txt >> onos-flows-time.txt
             fi
             '''
@@ -256,6 +298,7 @@
         csvSeries: [
           [displayTableFlag: false, exclusionValues: '', file: 'voltha-devices-time.txt', inclusionFlag: 'OFF', url: ''],
           [displayTableFlag: false, exclusionValues: '', file: 'onos-ports-time.txt', inclusionFlag: 'OFF', url: ''],
+          [displayTableFlag: false, exclusionValues: '', file: 'voltha-flows-time.txt', inclusionFlag: 'OFF', url: ''],
           [displayTableFlag: false, exclusionValues: '', file: 'onos-flows-time.txt', inclusionFlag: 'OFF', url: '']
         ],
         group: 'Voltha-Scale-Numbers', numBuilds: '20', style: 'line', title: "Time (${BBSIMdelay}s Delay)", yaxis: 'Time (s)', useDescr: true
diff --git a/jjb/voltha-scale.yaml b/jjb/voltha-scale.yaml
index 971affe..3ae09b7 100644
--- a/jjb/voltha-scale.yaml
+++ b/jjb/voltha-scale.yaml
@@ -111,6 +111,7 @@
           withOnosApps: true
           flowStatInterval: 5
           portsStatInterval: 5
+          expectedFlows: 201
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-dev'
           build-node: 'voltha-scale'
@@ -159,6 +160,7 @@
     setLinkDiscovery: false
     flowStatInterval: 600
     portsStatInterval: 600
+    expectedFlows: 0 # by defualt ONOS apps are deactivated
 
     parameters:
       - string:
@@ -187,6 +189,11 @@
           description: 'Expected number of activated ONUs'
 
       - string:
+          name: expectedFlows
+          default: '{expectedFlows}'
+          description: 'Expected number of flows in ONOS'
+
+      - string:
           name: pollInterval
           default: 5
           description: 'Sleep time between ONU activation checks'
@@ -346,6 +353,7 @@
     setLinkDiscovery: false
     flowStatInterval: 600
     portsStatInterval: 600
+    expectedFlows: 17 # one EAPOL per ONU + 1 LLDP on the NNI
 
     parameters:
       - string:
@@ -374,6 +382,11 @@
           description: 'Expected number of activated ONUs'
 
       - string:
+          name: expectedFlows
+          default: '{expectedFlows}'
+          description: 'Expected number of flows in ONOS'
+
+      - string:
           name: pollInterval
           default: 5
           description: 'Sleep time between ONU activation checks'