Merge "Integrating Sanity Test for Openonu-go in Pipeline"
diff --git a/jjb/cord-test/att-workflow.yaml b/jjb/cord-test/att-workflow.yaml
index f4d304c..16f334b 100644
--- a/jjb/cord-test/att-workflow.yaml
+++ b/jjb/cord-test/att-workflow.yaml
@@ -8,6 +8,11 @@
build-timeout: '300'
+ work-flow: ''
+ num-of-openonu: '1'
+ num-of-onos: '1'
+ num-of-atomix: '0'
+
jobs:
# onlab pod1 build
- 'build_pod_manual':
diff --git a/jjb/cord-test/nightly-build-pipeline.yaml b/jjb/cord-test/nightly-build-pipeline.yaml
index c78a2e3..1b4dd59 100644
--- a/jjb/cord-test/nightly-build-pipeline.yaml
+++ b/jjb/cord-test/nightly-build-pipeline.yaml
@@ -116,6 +116,25 @@
default: '16'
description: "Onus per PonPort"
+ - string:
+ name: workFlow
+ default: '{work-flow}'
+ description: 'Installs and uses the specified work flow on the POD'
+
+ - string:
+ name: NumOfOpenOnu
+ default: '{num-of-openonu}'
+ description: 'Installs the specified Number of OpenOnu Adapters'
+
+ - string:
+ name: NumOfOnos
+ default: '{num-of-onos}'
+ description: 'Installs the specified Number of ONOS instances'
+
+ - string:
+ name: NumOfAtomix
+ default: '{num-of-atomix}'
+ description: 'Installs the specified Number of Atomix Instances'
concurrent: true
pipeline-scm:
diff --git a/jjb/cord-test/voltha.yaml b/jjb/cord-test/voltha.yaml
index a54f0ee..c19d8f0 100644
--- a/jjb/cord-test/voltha.yaml
+++ b/jjb/cord-test/voltha.yaml
@@ -22,6 +22,7 @@
config-pod: 'flex-ocp-cord'
release: 'master'
branch: 'master'
+ num-of-openonu: '2'
test-repo: 'voltha-system-tests'
Jenkinsfile: 'Jenkinsfile-voltha-build'
oltDebVersion: 'openolt_asfvolt16-2.3.0-bc6e0853e0e8bf6bd7e4223d4a7ee0dd35ce634d.deb'
@@ -346,6 +347,26 @@
profile: 'Default'
+ # Infosys pod with olt/onu - Manual BUILD/TEST job
+ - 'build_pod_manual':
+ build-node: 'infosys-test-pod'
+ config-pod: 'infosys-pod'
+ release: 'master'
+ branch: 'master'
+ num-of-openonu: '2'
+ test-repo: 'voltha-system-tests'
+ Jenkinsfile: 'Jenkinsfile-voltha-build'
+ oltDebVersion: 'openolt_asfvolt16-2.3.0-bc6e0853e0e8bf6bd7e4223d4a7ee0dd35ce634d.deb'
+ profile: 'Default'
+ # infosys test job - Manual Job
+ - 'build_pod_test':
+ build-node: 'infosys-test-pod'
+ config-pod: 'infosys-pod'
+ branch: 'master'
+ test-repo: 'voltha-system-tests'
+ profile: 'Default'
+ Jenkinsfile: 'Jenkinsfile-voltha-test'
+
# Berlin pod with olt/onu - master versions Default tech profile and timer based job
- 'build_voltha_pod_release':
build-node: 'dt-berlin-community-pod'
diff --git a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
index fef91c7..a576bc0 100644
--- a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
@@ -133,6 +133,21 @@
}
}
+ stage('Dataplane Tests') {
+ environment {
+ ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
+ ROBOT_FILE="Voltha_DT_PODTests.robot"
+ ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/dt-workflow/DataplaneTests"
+ }
+ steps {
+ sh """
+ mkdir -p $ROBOT_LOGS_DIR
+ export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i dataplaneDt -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
+ make -C $WORKSPACE/voltha/voltha-system-tests voltha-dt-test || true
+ """
+ }
+ }
+
stage('Error Scenario Tests') {
environment {
ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
diff --git a/jjb/pipeline/voltha-physical-functional-tests.groovy b/jjb/pipeline/voltha-physical-functional-tests.groovy
index 6772519..f118e07 100644
--- a/jjb/pipeline/voltha-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-physical-functional-tests.groovy
@@ -108,7 +108,7 @@
./log-combine.sh > /dev/null &
mkdir -p $ROBOT_LOGS_DIR
- export ROBOT_MISC_ARGS="--removekeywords wuks -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
+ export ROBOT_MISC_ARGS="--removekeywords wuks -i sanity -i functional -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
make -C $WORKSPACE/voltha/voltha-system-tests voltha-test || true
"""
}
@@ -133,6 +133,21 @@
}
}
+ stage('Dataplane Tests') {
+ environment {
+ ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
+ ROBOT_FILE="Voltha_PODTests.robot"
+ ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/DataplaneTests"
+ }
+ steps {
+ sh """
+ mkdir -p $ROBOT_LOGS_DIR
+ export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i dataplane -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
+ make -C $WORKSPACE/voltha/voltha-system-tests voltha-test || true
+ """
+ }
+ }
+
stage('Error Scenario Tests') {
environment {
ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
diff --git a/jjb/pipeline/voltha-scale-measurements.groovy b/jjb/pipeline/voltha-scale-measurements.groovy
deleted file mode 100644
index 30998d1..0000000
--- a/jjb/pipeline/voltha-scale-measurements.groovy
+++ /dev/null
@@ -1,498 +0,0 @@
-/* voltha-scale-measurements pipeline */
-pipeline {
- /* no label, executor is determined by JJB */
- agent {
- label "${params.buildNode}"
- }
- environment {
- SSHPASS="karaf"
- }
- stages {
- stage('Set build description') {
- steps {
- script {
- currentBuild.description = "$BUILD_TIMESTAMP"
- }
- }
- }
- stage('Cleanup') {
- steps {
- sh '''
- rm -rf *.txt
- for hchart in \$(helm list -q | grep -E -v 'docker-registry|kafkacat|etcd-operator');
- do
- echo "Purging chart: \${hchart}"
- helm delete --purge "\${hchart}"
- done
- bash /home/cord/voltha-scale/wait_for_pods.sh
- bash /home/cord/voltha-scale/stop_port_forward.sh
- '''
- }
- }
- stage('Start') {
- steps {
- sh '''
- #!/usr/bin/env bash
- set -euo pipefail
- '''
- }
- }
- stage('Deploy voltha') {
- options {
- timeout(time:10)
- }
- steps {
- sh '''
- helm repo update
- helm install -n cord-kafka incubator/kafka -f /home/cord/voltha-scale/voltha-values.yaml --version 0.13.3 --set replicas=${numOfKafka} --set persistence.enabled=false --set zookeeper.replicaCount=${numOfKafka} --set zookeeper.persistence.enabled=false
- helm install -n nem-monitoring cord/nem-monitoring --set kpi_exporter.enabled=false,dashboards.xos=false,dashboards.onos=false,dashboards.aaa=false,dashboards.voltha=false
-
- helm install -n radius onf/freeradius ${extraHelmFlags}
-
- # Multi BBSim sadis server (to be migrated in ONF and included in the helm-chart)
- # kubectl create -f https://raw.githubusercontent.com/ciena/bbsim-sadis-server/master/bbsim-sadis-server.yaml
-
- # NOTE wait for the infrastructure to be running before installing VOLTHA
- bash /home/cord/voltha-scale/wait_for_pods.sh
-
- IFS=: read -r onosRepo onosTag <<< ${onosImg}
- helm install -n onos onf/onos --set images.onos.repository=${onosRepo} --set images.onos.tag=${onosTag} ${extraHelmFlags}
-
- IFS=: read -r volthaRepo volthaTag <<< ${volthaImg}
- IFS=: read -r ofAgentRepo ofAgentTag <<< ${ofAgentImg}
- helm install -n voltha ${volthaChart} -f /home/cord/voltha-scale/voltha-values.yaml --set defaults.log_level=${logLevel},images.rw_core.repository=${volthaRepo},images.rw_core.tag=${volthaTag},images.ofagent_go.repository=${ofAgentRepo},images.ofagent_go.tag=${ofAgentTag} ${extraHelmFlags}
-
- IFS=: read -r openoltAdapterRepo openoltAdapterTag <<< ${openoltAdapterImg}
- helm install -n openolt ${openoltAdapterChart} -f /home/cord/voltha-scale/voltha-values.yaml --set defaults.log_level=${logLevel},images.adapter_open_olt.repository=${openoltAdapterRepo},images.adapter_open_olt.tag=${openoltAdapterTag} ${extraHelmFlags}
-
- IFS=: read -r openonuAdapterRepo openonuAdapterTag <<< ${openonuAdapterImg}
- helm install -n openonu ${openonuAdapterChart} -f /home/cord/voltha-scale/voltha-values.yaml --set defaults.log_level=${logLevel},images.adapter_open_onu.repository=${openonuAdapterRepo},images.adapter_open_onu.tag=${openonuAdapterTag} ${extraHelmFlags}
-
- IFS=: read -r bbsimRepo bbsimTag <<< ${bbsimImg}
-
- for i in $(seq 1 $((${numOfBbsim}))); do
- helm install -n bbsim-$i ${bbsimChart} --set olt_id=$i,enablePerf=true,pon=${ponPorts},onu=${onuPerPon},auth=${bbsimAuth},dhcp=${bbsimDhcp},delay=${BBSIMdelay},images.bbsim.repository=${bbsimRepo},images.bbsim.tag=${bbsimTag} ${extraHelmFlags}
- done
-
- bash /home/cord/voltha-scale/wait_for_pods.sh
- bash /home/cord/voltha-scale/start_port_forward.sh
- '''
- }
- }
- stage('Wait for Adapters to be registered in VOLTHA') {
- options {
- timeout(time:5)
- }
- steps{
- waitUntil {
- script {
- openolt_res = sh returnStdout: true, script: """
- voltctl adapter list | grep openolt | wc -l
- """
-
- openonu_res = sh returnStdout: true, script: """
- voltctl adapter list | grep brcm_openomci_onu | wc -l
- """
-
- return openolt_res.toInteger() >= 1 && openonu_res.toInteger() >= 1
- }
- }
- }
- }
- stage('Push MIB template to ETCD') {
- steps {
- sh '''
- if [ ${withMibTemplate} = true ] ; then
- rm -f BBSM-12345123451234512345-00000000000001-v1.json
- wget https://raw.githubusercontent.com/opencord/voltha-openonu-adapter/master/templates/BBSM-12345123451234512345-00000000000001-v1.json
- cat BBSM-12345123451234512345-00000000000001-v1.json | kubectl exec -it $(kubectl get pods | grep etcd-cluster | awk 'NR==1{print $1}') etcdctl put service/voltha/omci_mibs/templates/BBSM/12345123451234512345/00000000000001
- fi
- '''
- }
- }
- stage('Configure ONOS and VOLTHA') {
- steps {
- sh '''
- #Setting LOG level to ${logLevel}
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set ${logLevel}
- kubectl exec $(kubectl get pods | grep bbsim | awk 'NR==1{print $1}') bbsimctl log warn false
-
- #Setting link discovery
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.lldp.impl.LldpLinkProvider enabled ${setLinkDiscovery}
-
- # extending voltctl timeout
- sed -i 's/timeout: 10s/timeout: 5m/g' /home/cord/.volt/config
-
- #Setting the flow and ports stats collection interval
- 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
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.aaa
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.dhcpl2relay
- else
- # config SADIS
- curl --fail -sSL --user karaf:karaf -X POST -H Content-Type:application/json "http://127.0.0.1:30120/onos/v1/network/configuration/apps/org.opencord.sadis" --data '{
- "sadis": {
- "integration": {
- "url": "http://bbsim-sadis-server.default.svc:58080/subscribers/%s",
- "cache": {
- "enabled": true,
- "maxsize": 50,
- "ttl": "PT1m"
- }
- }
- },
- "bandwidthprofile": {
- "integration": {
- "url": "http://bbsim-sadis-server.default.svc:58080/profiles/%s",
- "cache": {
- "enabled": true,
- "maxsize": 50,
- "ttl": "PT1m"
- }
- }
- }
- }'
-
- # config AAA
- curl --fail -sSL --user karaf:karaf -X POST -H Content-Type:application/json "http://127.0.0.1:30120/onos/v1/network/configuration/apps/org.opencord.aaa" --data '{
- "AAA": {
- "radiusConnectionType" : "socket",
- "radiusHost": "radius.default.svc.cluster.local",
- "radiusServerPort": "1812",
- "radiusSecret": "SECRET"
- }
- }'
-
- # config DHCP
- curl --fail -sSL --user karaf:karaf -X POST -H Content-Type:application/json "http://127.0.0.1:30120/onos/v1/network/configuration/apps/org.opencord.dhcpl2relay" --data '{
- "dhcpl2relay" : {
- "useOltUplinkForServerPktInOut": true
- }
- }'
- fi
- '''
- }
- }
- stage('Set timeout at 10 minutes') {
- options {
- timeout(time:10)
- }
- stages {
- stage('Activate OLTs') {
- steps {
- sh '''
- for i in $(seq 1 $((${numOfBbsim}))); do
- voltctl device create -t openolt -H bbsim-$i:50060 -m 0f:f1:ce:c$i:ff:ee
- done
- voltctl device list --filter Type~openolt -q | xargs voltctl device enable
- '''
- }
- }
- stage('Wait for ONUs to be enabled') {
- steps {
- sh '''
- if [ -z ${expectedOnus} ]
- then
- echo -e "You need to set the target ONU number\n"
- exit 1
- fi
-
- # check ONUs reached Active State in VOLTHA
- i=$(voltctl device list | grep -v OLT | grep ACTIVE | wc -l)
- until [ $i -eq ${expectedOnus} ]
- do
- echo "$i ONUs ACTIVE of ${expectedOnus} expected (time: $SECONDS)"
- sleep ${pollInterval}
- i=$(voltctl device list | grep -v OLT | grep ACTIVE | wc -l)
- done
- echo "${expectedOnus} ONUs Activated in $SECONDS seconds (time: $SECONDS)"
-
- echo $SECONDS > voltha-devices-time-num.txt
-
- echo "VOLTHA Duration(s)" > voltha-devices-time.txt
- cat voltha-devices-time-num.txt >> voltha-devices-time.txt
- '''
- }
- }
- stage('Wait for ports to be discovered in ONOS') {
- steps {
- sh '''
- # Check ports showed up in ONOS
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 ports -e | grep BBSM | wc -l)
- until [ $z -eq ${expectedOnus} ]
- do
- echo "${z} enabled ports of ${expectedOnus} expected (time: $SECONDS)"
- sleep ${pollInterval}
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 ports -e | grep BBSM | wc -l)
- done
- echo "${expectedOnus} ports enabled in $SECONDS seconds (time: $SECONDS)"
-
- echo $SECONDS > temp.txt
- paste voltha-devices-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-ports-time-num.txt
-
- echo "PORTs Duration(s)" > onos-ports-time.txt
- cat onos-ports-time-num.txt >> onos-ports-time.txt
- '''
- }
- }
- 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 ADDED | wc -l)
- until [ $z -eq ${expectedFlows} ]
- do
- 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 ADDED | wc -l)
- done
- echo "${expectedFlows} flows correctly acknowledged (time: $SECONDS)"
-
- echo $SECONDS > temp.txt
- paste voltha-flows-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-flows-time-num.txt
-
- echo "ONOS FLOWs Duration(s)" > onos-flows-time.txt
- cat onos-flows-time-num.txt >> onos-flows-time.txt
- fi
- '''
- }
- }
- stage('Wait for subscribers to authenticate') {
- steps {
- sh '''
- if [ ${withOnosApps} = false ] ; then
- echo "ONOS Apps are not enabled, nothing to check"
- elif [ ${bbsimAuth} = false ] ; then
- echo "Authentication is disabled, nothing to check"
- else
- # wait until all subscribers authenticate
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 aaa-users | grep AUTHORIZED_STATE | wc -l)
- until [ $z -eq ${expectedOnus} ]
- do
- echo "${z} of ${expectedOnus} subscribers in AUTHORIZED_STATE state (time: $SECONDS)"
- sleep ${pollInterval}
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 aaa-users | grep AUTHORIZED_STATE | wc -l)
- done
- echo "${expectedOnus} subscribers in AUTHORIZED_STATE (time: $SECONDS)"
-
- echo $SECONDS > temp.txt
- paste onos-flows-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-auth-time-num.txt
-
- echo "ONOS Authentication Duration(s)" > onos-auth-time.txt
- cat onos-auth-time-num.txt >> onos-auth-time.txt
- fi
- '''
- }
- }
- stage('Provision subscribers') {
- steps {
- sh '''
- if [ ${withOnosApps} = false ] ; then
- echo "ONOS Apps are not enabled, nothing to do"
- elif [ ${bbsimAuth} = false ] ; then
- echo "Authentication is disabled, nothing to do"
- else
- # provision all authenticated subscribers
- subs=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 aaa-users | grep AUTHORIZED_STATE | grep -o -E "of:[a-z0-9]+/[0-9]+")
- echo $subs
- subs=($subs)
-
- for s in "${subs[@]}"
- do
- IFS=/ read -r device port <<< $s
- echo "Adding subscriber on device $device and port $port"
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 volt-add-subscriber-access $device $port
- done
- fi
- '''
- }
- }
- stage('Wait for subscribers to DHCP') {
- steps {
- sh '''
- if [ ${withOnosApps} = false ] ; then
- echo "ONOS Apps are not enabled, nothing to check"
- elif [ ${bbsimDhcp} = false ] ; then
- echo "DHCP is disabled, nothing to check"
- else
- # wait until all subscribers DHCP
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 dhcpl2relay-allocations | grep DHCPACK | wc -l)
- until [ $z -eq ${expectedOnus} ]
- do
- echo "${z} of ${expectedOnus} subscribers received DHCPACK (time: $SECONDS)"
- sleep ${pollInterval}
- z=$(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 dhcpl2relay-allocations | grep DHCPACK | wc -l)
- done
- echo "${expectedOnus} subscribers received DHCPACK (time: $SECONDS)"
-
- echo $SECONDS > temp.txt
- paste onos-auth-time-num.txt temp.txt | awk '{print ($1 + $2)}' > onos-dhcp-time-num.txt
-
- echo "ONOS DHCP Duration(s)" > onos-dhcp-time.txt
- cat onos-dhcp-time-num.txt >> onos-dhcp-time.txt
- fi
- '''
- }
- }
- }
- }
- }
- post {
- success {
- plot([
- csvFileName: 'plot-onu-activation.csv',
- 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: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-auth-time.txt', inclusionFlag: 'OFF', url: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-dhcp-time.txt', inclusionFlag: 'OFF', url: ''],
- ],
- group: 'Voltha-Scale-Numbers', numBuilds: '20', style: 'line', title: "Time (${BBSIMdelay}s Delay)", yaxis: 'Time (s)', useDescr: true
- ])
- }
- always {
- // count how many ONUs have been activated
- sh '''
- echo "#-of-ONUs" > voltha-devices-count.txt
- echo $(voltctl device list | grep -v OLT | grep ACTIVE | wc -l) >> voltha-devices-count.txt
- '''
- // count how many ports have been discovered
- sh '''
- echo "#-of-ports" > onos-ports-count.txt
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 ports -e | grep BBSM | wc -l) >> onos-ports-count.txt
- '''
- // count how many flows have been provisioned
- sh '''
- echo "#-of-flows" > onos-flows-count.txt
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s | grep ADDED | wc -l) >> onos-flows-count.txt
- '''
- // dump and count the authenticated users
- sh '''
- if [ ${withOnosApps} = true ] && [ ${bbsimAuth} ] ; then
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 aaa-users) >> onos-aaa-users.txt
-
- echo "#-of-authenticated-users" > onos-aaa-count.txt
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 aaa-users | grep AUTHORIZED_STATE | wc -l) >> onos-aaa-count.txt
- fi
- '''
- // dump and count the dhcp users
- sh '''
- if [ ${withOnosApps} = true ] && [ ${bbsimDhcp} ] ; then
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 dhcpl2relay-allocations) >> onos-dhcp-allocations.txt
-
- echo "#-of-dhcp-allocations" > onos-dhcp-count.txt
- echo $(sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 dhcpl2relay-allocations | grep DHCPACK | wc -l) >> onos-dhcp-count.txt
- fi
- '''
- // check which containers were used in this build
- sh '''
- kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
- kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
- '''
- // dump all the VOLTHA devices informations
- sh '''
- voltctl device list -o json > device-list.json
- python -m json.tool device-list.json > voltha-devices-list.json
- '''
- // dump all the BBSim(s) ONU informations
- sh '''
- BBSIM_IDS=$(kubectl get pods | grep bbsim | grep -v server | awk '{print $1}')
- IDS=($BBSIM_IDS)
-
- for bbsim in "${IDS[@]}"
- do
- kubectl exec -t $bbsim bbsimctl onu list > $bbsim-device-list.txt
- done
- '''
- // get ports and flows from ONOS
- sh '''
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 ports > onos-ports-list.txt
- sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 flows -s > onos-flows-list.txt
- '''
- // collect the CPU usage
- sh '''
- curl -s -X GET -G http://127.0.0.1:31301/api/v1/query --data-urlencode 'query=avg(rate(container_cpu_usage_seconds_total[10m])*100) by (pod_name)' | jq . > cpu-usage.json
- '''
- // get all the logs from kubernetes PODs
- sh '''
- kubectl get pods -o wide
- kubectl logs -l app=adapter-open-olt > open-olt-logs.txt
- kubectl logs -l app=adapter-open-onu > open-onu-logs.txt
- kubectl logs -l app=rw-core > voltha-rw-core-logs.txt
- kubectl logs -l app=ofagent > voltha-ofagent-logs.txt
- kubectl logs -l app=bbsim > bbsim-logs.txt
- kubectl logs -l app=onos > onos-logs.txt
- '''
- // cleanup of things we don't want to archive
- sh '''
- rm -rf BBSM-12345123451234512345-00000000000001-v1.json device-list.json temp.txt
- '''
- // compile a plot of the activate informations
- plot([
- csvFileName: 'plot-numbers.csv',
- csvSeries: [
- [displayTableFlag: false, exclusionValues: '', file: 'voltha-devices-count.txt', inclusionFlag: 'OFF', url: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-ports-count.txt', inclusionFlag: 'OFF', url: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-flows-count.txt', inclusionFlag: 'OFF', url: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-aaa-count.txt', inclusionFlag: 'OFF', url: ''],
- [displayTableFlag: false, exclusionValues: '', file: 'onos-dhcp-count.txt', inclusionFlag: 'OFF', url: ''],
- ],
- group: 'Voltha-Scale-Numbers', numBuilds: '100', style: 'line', title: "Activated ONUs and Recognized Ports", yaxis: 'Number of Ports/ONUs', useDescr: true
- ])
-
- archiveArtifacts artifacts: '*.log,*.json,*txt'
-
- }
- }
-}
diff --git a/jjb/pipeline/voltha-scale-test.groovy b/jjb/pipeline/voltha-scale-test.groovy
index 9f0f2b4..b5785e3 100644
--- a/jjb/pipeline/voltha-scale-test.groovy
+++ b/jjb/pipeline/voltha-scale-test.groovy
@@ -37,7 +37,7 @@
DEPLOY_K8S="no"
CONFIG_SADIS="external"
WITH_KAFKA="kafka.default.svc.cluster.local"
- WITH_ETCD="external"
+ WITH_ETCD="etcd-cluster-client.default.svc.cluster.local"
// install everything in the default namespace
VOLTHA_NS="default"
@@ -116,11 +116,13 @@
}
}
stage('Deploy common infrastructure') {
- // includes monitoring, kafka
+ // includes monitoring, kafka, etcd
steps {
sh '''
helm install -n kafka incubator/kafka --version 0.13.3 --set replicas=3 --set persistence.enabled=false --set zookeeper.replicaCount=3 --set zookeeper.persistence.enabled=false --version=0.15.3
+ helm install --set clusterName=etcd-cluster --set autoCompactionRetention=1 --set clusterSize=3 --set defaults.log_level=WARN --namespace default -n etcd-cluster onf/voltha-etcd-cluster
+
if [ ${withMonitoring} = true ] ; then
helm install -n nem-monitoring cord/nem-monitoring \
--set prometheus.alertmanager.enabled=false,prometheus.pushgateway.enabled=false \
@@ -209,40 +211,42 @@
}
stage('Run Test') {
steps {
- sh '''
- ROBOT_PARAMS="-v olt:${olts} \
- -v pon:${pons} \
- -v onu:${onus} \
- -v workflow:${workflow} \
- -v withEapol:${withEapol} \
- -v withDhcp:${withDhcp} \
- -v withIgmp:${withIgmp} \
- --noncritical non-critical \
- -e teardown "
+ timeout(time: 11, unit: 'MINUTES') {
+ sh '''
+ ROBOT_PARAMS="-v olt:${olts} \
+ -v pon:${pons} \
+ -v onu:${onus} \
+ -v workflow:${workflow} \
+ -v withEapol:${withEapol} \
+ -v withDhcp:${withDhcp} \
+ -v withIgmp:${withIgmp} \
+ --noncritical non-critical \
+ -e teardown "
- if [ ${withEapol} = false ] ; then
- ROBOT_PARAMS+="-e authentication "
- fi
+ if [ ${withEapol} = false ] ; then
+ ROBOT_PARAMS+="-e authentication "
+ fi
- if [ ${withDhcp} = false ] ; then
- ROBOT_PARAMS+="-e dhcp "
- fi
+ if [ ${withDhcp} = false ] ; then
+ ROBOT_PARAMS+="-e dhcp "
+ fi
- if [ ${provisionSubscribers} = false ] ; then
- ROBOT_PARAMS+="-e provision -e flow-after "
- fi
+ if [ ${provisionSubscribers} = false ] ; then
+ ROBOT_PARAMS+="-e provision -e flow-after "
+ fi
- if [ ${withFlows} = false ] ; then
- ROBOT_PARAMS+="-i setup -i activation "
- fi
+ if [ ${withFlows} = false ] ; then
+ ROBOT_PARAMS+="-i setup -i activation "
+ fi
- mkdir -p $WORKSPACE/RobotLogs
- cd voltha-system-tests
- make vst_venv
- source ./vst_venv/bin/activate
- robot -d $WORKSPACE/RobotLogs \
- $ROBOT_PARAMS tests/scale/Voltha_Scale_Tests.robot
- '''
+ mkdir -p $WORKSPACE/RobotLogs
+ cd voltha-system-tests
+ make vst_venv
+ source ./vst_venv/bin/activate
+ robot -d $WORKSPACE/RobotLogs \
+ $ROBOT_PARAMS tests/scale/Voltha_Scale_Tests.robot
+ '''
+ }
}
}
stage('Collect results') {
diff --git a/jjb/voltha-scale.yaml b/jjb/voltha-scale.yaml
index dbb019b..90424ee 100644
--- a/jjb/voltha-scale.yaml
+++ b/jjb/voltha-scale.yaml
@@ -7,66 +7,6 @@
project-name: '{name}'
jobs:
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-10-20-200ms'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 20
- ponPorts: 10
- expectedOnus: 200
- BBSIMdelay: 200
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-16-32-200ms'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 32
- ponPorts: 16
- expectedOnus: 512
- BBSIMdelay: 200
- # multi-adapter
- extraHelmFlags: "--set replicas.adapter_open_onu=8"
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-16-64-200ms'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 64
- ponPorts: 16
- expectedOnus: 1024
- BBSIMdelay: 200
- # multi-adapter
- extraHelmFlags: "--set replicas.adapter_open_onu=8"
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-1-64-200ms'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 64
- ponPorts: 1
- expectedOnus: 64
- BBSIMdelay: 200
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-2-OLTs-10-10-200ms'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 10
- ponPorts: 10
- numOfBbsim: 2
- expectedOnus: 200
- BBSIMdelay: 200
- - 'voltha-scale-measurements-periodic-legacy':
- name: 'voltha-scale-measurements-periodic-10-20-200ms-with-flows'
- build-node: 'onf-pod1-head-node'
- time-trigger: "H H/4 * * *"
- onuPerPon: 20
- ponPorts: 10
- expectedOnus: 200
- BBSIMdelay: 200
- withOnosApps: true
- flowStatInterval: 5
- portsStatInterval: 5
- expectedFlows: 201
- bbsimAuth: false
- bbsimDhcp: false
-
# new Jobs
# name format is <job-template>-<olts>-<pon>-<onus>-<setup>
# needed for comparison with the openonu-go adapter
@@ -222,201 +162,6 @@
build-node: 'voltha-scale'
- job-template:
- id: 'voltha-scale-measurements-periodic-legacy'
- name: '{name}'
- pipeline-script: 'voltha-scale-measurements.groovy'
-
- description: |
- <!-- Managed by Jenkins Job Builder -->
- Created by {id} job-template from ci-management/jjb/voltha-scale.yaml <br /><br />
- Using pipeline {pipeline-script} <br/><br/>
- Scale measurements for VOLTHA 2.x
-
- properties:
- - cord-infra-properties:
- build-days-to-keep: '{build-days-to-keep}'
- artifact-num-to-keep: '{artifact-num-to-keep}'
-
- wrappers:
- - lf-infra-wrappers:
- build-timeout: '{build-timeout}'
- jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
- # default parameters
- bbsimImg: voltha/bbsim:master
- bbsimChart: onf/bbsim
- volthaImg: voltha/voltha-rw-core:master
- ofAgentImg: voltha/voltha-ofagent-go:master
- volthaChart: onf/voltha
- openoltAdapterImg: voltha/voltha-openolt-adapter:master
- openoltAdapterChart: onf/voltha-adapter-openolt
- openonuAdapterImg: voltha/voltha-openonu-adapter:master
- openonuAdapterChart: onf/voltha-adapter-openonu
- onosImg: voltha/voltha-onos:master
- extraHelmFlags: ''
- withMibTemplate: true
- numOfBbsim: 1
- numOfKafka: 3
- withOnosApps: false
- setLinkDiscovery: false
- flowStatInterval: 600
- portsStatInterval: 600
- expectedFlows: 0 # by defualt ONOS apps are deactivated
- bbsimAuth: true
- bbsimDhcp: true
-
- parameters:
- - string:
- name: buildNode
- default: '{build-node}'
- description: 'Name of the Jenkins node to run the job on'
-
- - string:
- name: logLevel
- default: 'WARN'
- description: 'Log level for all the components'
-
- - string:
- name: onuPerPon
- default: '{onuPerPon}'
- description: 'Number of ONUs to provision'
-
- - string:
- name: ponPorts
- default: '{ponPorts}'
- description: 'Number of PONs to provision'
-
- - string:
- name: expectedOnus
- default: '{expectedOnus}'
- 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'
-
- - bool:
- name: withOnosApps
- default: '{withOnosApps}'
- description: 'Option to deactivate certain ONOS apps'
-
- - bool:
- name: withMibTemplate
- default: '{withMibTemplate}'
- description: 'Option to trigger MIB template command'
-
- - bool:
- name: setLinkDiscovery
- default: '{setLinkDiscovery}'
- description: 'Option to toggle Link Discovery'
-
- - string:
- name: BBSIMdelay
- default: '{BBSIMdelay}'
- description: 'BBSIM Delay, milliseconds'
-
- - string:
- name: flowStatInterval
- default: '{flowStatInterval}'
- description: 'Flow Stats Collection Interval, milliseconds'
-
- - string:
- name: portsStatInterval
- default: {portsStatInterval}
- description: 'Ports Stats Collection Interval, milliseconds'
-
- - bool:
- name: bbsimAuth
- default: '{bbsimAuth}'
- description: 'Option to toggle BBSIM EAPOL true/false'
-
- - bool:
- name: bbsimDhcp
- default: '{bbsimDhcp}'
- description: 'Option to toggle BBSIM DHCP true/false'
-
- - string:
- name: bbsimImg
- default: '{bbsimImg}'
- description: 'Custom image selection for BBSIM (repo:tag)'
-
- - string:
- name: bbsimChart
- default: '{bbsimChart}'
- description: 'BBSim chart name (or location on file system)'
-
- - string:
- name: volthaImg
- default: '{volthaImg}'
- description: 'Custom image selection for VOLTHA (repo:tag)'
-
- - string:
- name: ofAgentImg
- default: '{ofAgentImg}'
- description: 'Custom image selection for OfAgent (repo:tag), only supports the go version'
-
- - string:
- name: volthaChart
- default: '{volthaChart}'
- description: 'VOLTHA chart name (or location on file system)'
-
- - string:
- name: openoltAdapterImg
- default: '{openoltAdapterImg}'
- description: 'Custom image selection for Openolt Adapter (repo:tag)'
-
- - string:
- name: openoltAdapterChart
- default: '{openoltAdapterChart}'
- description: 'OpenOLT chart name (or location on file system)'
-
- - string:
- name: openonuAdapterImg
- default: '{openonuAdapterImg}'
- description: 'Custom image selection for Openonu Adapter (repo:tag)'
-
- - string:
- name: openonuAdapterChart
- default: '{openonuAdapterChart}'
- description: 'OpenONU chart name (or location on file system)'
-
- - string:
- name: onosImg
- default: '{onosImg}'
- description: 'Custom image selection for Openonu Adapter (repo:tag)'
-
- - string:
- name: extraHelmFlags
- default: '{extraHelmFlags}'
- description: 'Any extra helm parameters you want (passed to every helm install command)'
-
- - string:
- name: numOfBbsim
- default: '{numOfBbsim}'
- description: 'How many BBSim instances to run'
-
- - string:
- name: numOfKafka
- default: '{numOfKafka}'
- description: 'How many Kafka instances to run'
-
- project-type: pipeline
- concurrent: false
-
- dsl: !include-raw-escape: pipeline/{pipeline-script}
-
- triggers:
- - timed: |
- TZ=America/Los_Angeles
- {time-trigger}
-
-- job-template:
id: 'voltha-scale-measurements'
name: '{name}'
pipeline-script: 'voltha-scale-test.groovy'