Merge "VOL-2435 Allow hardware tests to be configured with delay"
diff --git a/jjb/cord-test/nightly-build-pipeline.yaml b/jjb/cord-test/nightly-build-pipeline.yaml
index f565c37..228100e 100644
--- a/jjb/cord-test/nightly-build-pipeline.yaml
+++ b/jjb/cord-test/nightly-build-pipeline.yaml
@@ -948,6 +948,11 @@
           default: '{profile}'
           description: 'Technology Profile pushed to the ETCD'
 
+      - bool:
+          name: released
+          default: '{released}'
+          description: "Pulls tests that are tagged with released as identifier"
+
       - string:
           name: branch
           default: '{branch}'
diff --git a/jjb/cord-test/voltha.yaml b/jjb/cord-test/voltha.yaml
index 8231ee6..a01557b 100644
--- a/jjb/cord-test/voltha.yaml
+++ b/jjb/cord-test/voltha.yaml
@@ -29,7 +29,7 @@
           test-repo: 'voltha-system-tests'
           Jenkinsfile: 'Jenkinsfile-voltha-test'
 
-      # onlab pod1 OCP pod with olt/onu - testing BAL3.1 release voltha master build job
+      # onlab pod1 OCP pod with olt/onu - Manual testing BAL3.1 release voltha master build job
       - 'build_pod_manual':
           testvm: 'onf-build'
           config-pod: 'onlab-pod1'
@@ -69,6 +69,7 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
+          released: false
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -92,6 +93,7 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
+          released: false
           test-repo: 'voltha-system-tests'
           profile: '1T4GEM-bal31'
 
@@ -115,6 +117,7 @@
           config-pod: 'flex-ocp-cord'
           release: 'release'
           branch: 'master'
+          released: true
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -138,6 +141,7 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
+          released: false
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -161,6 +165,7 @@
           config-pod: 'onf-demo-pod'
           release: 'release'
           branch: 'master'
+          released: true
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -184,6 +189,7 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
+          released: false
           test-repo: 'voltha-system-tests'
           profile: '1T4GEM-bal31'
 
diff --git a/jjb/defaults.yaml b/jjb/defaults.yaml
index 7d6caca..0e88661 100644
--- a/jjb/defaults.yaml
+++ b/jjb/defaults.yaml
@@ -88,6 +88,9 @@
     # (basically the same as imagebuilder projects + helm charts + tools
     version-tag-projects-regexp: '^(xos.*|.*helm-charts|automation-tools|cord-tester|chameleon|rcord|mcord|ecord|acordion|addressmanager|epc-service|exampleservice|fabric.*|globalxos|hippie-oss|hss_db|hypercache|internetemulator|kubernetes-service|monitoring|olt-service|onos-service|openstack|progran|sdn-controller|simpleexampleservice|templateservice|vEE|vEG|vBBU|venb|vHSS|vMME|vnaas|vPGWC|vPGWU|vrouter|vsg|vsg-hw|vSGW|vSM|vspgwc|vspgwu|vtn-service|vtr|att-workflow-driver|tt-workflow-driver|ves-agent|voltha-bbsim|openolt|sadis-server|kafka-topic-exporter|pyvoltha||plyxproto|voltha-protos|alpine-grpc-base|cordctl|voltha-go|voltha-onos|device-management|cord-workflow.*|voltha-system-tests|openairinterface|omec-.*|bbsim|omci-sim|ponsim|pppoel2relay|voltha-api-server|aaa|config|dhcpl2relay|igmp|igmpproxy|kafka-onos|mcast|olt|sadis|vtn|voltha-.*-adapter|voltha-lib-go|voltha-python-base|mn-stratum-siab|ofagent.*|bng|voltctl|openolt-scale-tester)$'
 
+    # List of all repos that contribute to the CORD guide
+    cord-guide-projects-regexp: '^(att-workflow-driver|cord-tester|cordctl|exampleservice|fabric|fabric-crossconnect|hippie-oss|kubernetes-service|olt-service|onos-service|openolt|openstack|rcord|simpleexampleservice|vrouter|vtn-service|xos|xos-gui|xos-tosca)$'
+
     # PyPI related publishing variables
     #
     # Pipe-separated list of directories relative to $WORKSPACE containing
diff --git a/jjb/docs.yaml b/jjb/docs.yaml
index 2a7c91a..91676b0 100644
--- a/jjb/docs.yaml
+++ b/jjb/docs.yaml
@@ -6,7 +6,7 @@
 
     jobs:
       - 'verify-documentation':
-          other-docs-repos-regexp: '.*'
+          other-docs-repos-regexp: '{cord-guide-projects-regexp}'
           branch-regexp: '{modern-branches-regexp}'
 
 - project:
@@ -14,7 +14,7 @@
 
     jobs:
       - 'publish-documentation':
-          other-docs-repos-regexp: '.*'
+          other-docs-repos-regexp: '{cord-guide-projects-regexp}'
           branch-regexp: '{modern-branches-regexp}'
 
 - project:
diff --git a/jjb/pipeline/voltha-bbsim-tests.groovy b/jjb/pipeline/voltha-bbsim-tests.groovy
index 8362159..a6f7b3d 100644
--- a/jjb/pipeline/voltha-bbsim-tests.groovy
+++ b/jjb/pipeline/voltha-bbsim-tests.groovy
@@ -140,7 +140,7 @@
 
            cd $WORKSPACE/kind-voltha/
            echo \$HELM_FLAG
-           EXTRA_HELM_FLAGS=\$HELM_FLAG VOLTHA_LOG_LEVEL=DEBUG TYPE=minimal WITH_RADIUS=y WITH_BBSIM=y INSTALL_ONOS_APPS=y CONFIG_SADIS=y FANCY=0 WITH_SIM_ADAPTERS=n ./voltha up
+           EXTRA_HELM_FLAGS=\$HELM_FLAG VOLTHA_LOG_LEVEL=DEBUG TYPE=minimal WITH_RADIUS=y WITH_BBSIM=y INSTALL_ONOS_APPS=y CONFIG_SADIS=n FANCY=0 WITH_SIM_ADAPTERS=n ./voltha up
            '''
       }
     }
diff --git a/jjb/pipeline/voltha-go-multi-tests.groovy b/jjb/pipeline/voltha-go-multi-tests.groovy
new file mode 100644
index 0000000..ed2107b
--- /dev/null
+++ b/jjb/pipeline/voltha-go-multi-tests.groovy
@@ -0,0 +1,178 @@
+// Copyright 2017-present Open Networking Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// voltha-2.x e2e tests
+// uses kind-voltha to deploy voltha-2.X
+// uses bbsim to simulate OLT/ONUs
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+      timeout(time: 40, unit: 'MINUTES')
+  }
+  environment {
+    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
+    VOLTCONFIG="$HOME/.volt/config-minimal"
+    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$WORKSPACE/kind-voltha/bin"
+    TYPE="minimal"
+    FANCY=0
+    WITH_SIM_ADAPTERS="n"
+    WITH_RADIUS="y"
+    WITH_BBSIM="y"
+    DEPLOY_K8S="y"
+    VOLTHA_LOG_LEVEL="DEBUG"
+    CONFIG_SADIS="n"
+    EXTRA_HELM_FLAGS="${params.extraHelmFlags}"
+    ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs -v teardown_device:False"
+  }
+  stages {
+
+    stage('Repo') {
+      steps {
+        step([$class: 'WsCleanup'])
+        checkout(changelog: true,
+          poll: false,
+          scm: [$class: 'RepoScm',
+            manifestRepositoryUrl: "${params.manifestUrl}",
+            manifestBranch: "${params.manifestBranch}",
+            currentBranch: true,
+            destinationDir: 'voltha',
+            forceSync: true,
+            resetFirst: true,
+            quiet: true,
+            jobs: 4,
+            showAllChanges: true]
+          )
+      }
+    }
+
+    stage('Download kind-voltha') {
+      steps {
+        sh """
+           git clone https://github.com/ciena/kind-voltha.git
+           """
+      }
+    }
+
+    stage('Deploy Voltha') {
+      steps {
+        sh """
+           cd kind-voltha/
+           ./voltha up
+           """
+      }
+    }
+
+    stage('Run E2E Tests') {
+      steps {
+        sh '''
+
+           clear_etcd() {
+             kubectl -n voltha exec $(kubectl -n voltha get pods -lapp=etcd -o=name) -- sh -c "ETCDCTL_API=3 etcdctl del --prefix $1"
+           }
+
+           wait_for_state_change() {
+             timeout 60 bash -c "until voltctl device list -f Type=$2,AdminState=$3,OperStatus=$4,ConnectStatus=$5 -q | wc -l | grep -q 1; do echo Waiting for $1 to change states; voltctl device list; echo; sleep 5; done"
+           }
+
+           mkdir -p $WORKSPACE/RobotLogs
+           git clone https://gerrit.opencord.org/voltha-system-tests
+           cd kind-voltha
+           for i in \$(seq 1 ${testRuns})
+           do
+             make -C $WORKSPACE/voltha-system-tests ${makeTarget}
+             echo "Completed run: \$i"
+             echo ""
+             if [[ \$i -lt ${testRuns} ]]
+             then
+               # For testing multiple back-to-back runs
+               # Doing some manual cleanup to work around known issues in BBSim and ONOS apps
+
+               OLT=\$( voltctl device list -f Type=openolt -q )
+               ONU=\$( voltctl device list -f Type=brcm_openomci_onu -q )
+
+               voltctl device disable \$OLT
+               wait_for_state_change OLT openolt DISABLED UNKNOWN REACHABLE
+               wait_for_state_change ONU brcm_openomci_onu ENABLED DISCOVERED UNREACHABLE
+
+               voltctl device disable \$ONU
+               wait_for_state_change ONU brcm_openomci_onu DISABLED UNKNOWN UNREACHABLE
+
+               voltctl device delete \$OLT
+
+               timeout 60 bash -c 'until voltctl device list -q | wc -l | grep -q 0; do echo "Waiting for all devices to be deleted"; voltctl device list; echo ""; sleep 5; done'
+
+               helm delete --purge bbsim # VOL-2342
+               helm delete --purge onos # VOL-2343, VOL-2363
+               clear_etcd service/voltha/resource_manager
+               clear_etcd service/voltha/openolt
+               clear_etcd service/voltha/devices
+               sleep 30
+               DEPLOY_K8S=no ./voltha up  # Will just re-deploy BBSim and ONOS
+             fi
+           done
+           '''
+      }
+    }
+  }
+
+  post {
+    always {
+      sh '''
+         set +e
+         cd kind-voltha/
+         cp install-minimal.log $WORKSPACE/
+         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\t'}{.imageID}{'\\n'}" | sort | uniq -c
+         kubectl get nodes -o wide
+         kubectl get pods -o wide
+         kubectl get pods -n voltha -o wide
+         ## get default pod logs
+         for pod in \$(kubectl get pods --no-headers | awk '{print \$1}');
+         do
+           if [[ \$pod == *"onos"* && \$pod != *"onos-service"* ]]; then
+             kubectl logs \$pod onos> $WORKSPACE/\$pod.log;
+           else
+             kubectl logs \$pod> $WORKSPACE/\$pod.log;
+           fi
+         done
+         ## get voltha pod logs
+         for pod in \$(kubectl get pods --no-headers -n voltha | awk '{print \$1}');
+         do
+           if [[ \$pod == *"-api-"* ]]; then
+             kubectl logs \$pod arouter -n voltha > $WORKSPACE/\$pod.log;
+           else
+             kubectl logs \$pod -n voltha > $WORKSPACE/\$pod.log;
+           fi
+         done
+         ## shut down voltha
+         WAIT_ON_DOWN=y ./voltha down
+         '''
+         step([$class: 'RobotPublisher',
+            disableArchiveOutput: false,
+            logFileName: 'RobotLogs/log*.html',
+            otherFiles: '',
+            outputFileName: 'RobotLogs/output*.xml',
+            outputPath: '.',
+            passThreshold: 100,
+            reportFileName: 'RobotLogs/report*.html',
+            unstableThreshold: 0]);
+         archiveArtifacts artifacts: '*.log'
+
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha-go-tests.groovy b/jjb/pipeline/voltha-go-tests.groovy
index d5ecedb..7e1227e 100644
--- a/jjb/pipeline/voltha-go-tests.groovy
+++ b/jjb/pipeline/voltha-go-tests.groovy
@@ -36,7 +36,7 @@
     WITH_BBSIM="y"
     DEPLOY_K8S="y"
     VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="y"
+    CONFIG_SADIS="n"
     EXTRA_HELM_FLAGS="${params.extraHelmFlags}"
     ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs"
   }
@@ -83,17 +83,7 @@
         sh '''
            mkdir -p $WORKSPACE/RobotLogs
            git clone https://gerrit.opencord.org/voltha-system-tests
-           for i in \$(seq 1 ${testRuns})
-           do
-             make -C $WORKSPACE/voltha-system-tests ${makeTarget}
-             kubectl -n voltha delete pod -lapp=bbsim  # VOL-2342
-             kubectl -n voltha wait pod -lapp=bbsim --for condition=Ready --timeout=60s # VOL-2342
-             http -a karaf:karaf --ignore-stdin DELETE http://localhost:8181/onos/v1/applications/org.opencord.dhcpl2relay/active > /dev/null  # VOL-2343
-             http -a karaf:karaf --ignore-stdin  POST  http://localhost:8181/onos/v1/applications/org.opencord.dhcpl2relay/active > /dev/null  # VOL-2343
-             http -a karaf:karaf --ignore-stdin DELETE http://localhost:8181/onos/v1/applications/org.opencord.aaa/active > /dev/null  # VOL-2363
-             http -a karaf:karaf --ignore-stdin  POST  http://localhost:8181/onos/v1/applications/org.opencord.aaa/active > /dev/null  # VOL-2363
-             sleep 10
-           done
+           make -C $WORKSPACE/voltha-system-tests ${makeTarget}
            '''
       }
     }
diff --git a/jjb/pipeline/voltha-physical-build-and-tests.groovy b/jjb/pipeline/voltha-physical-build-and-tests.groovy
index 4a028ae..190cfc3 100644
--- a/jjb/pipeline/voltha-physical-build-and-tests.groovy
+++ b/jjb/pipeline/voltha-physical-build-and-tests.groovy
@@ -263,6 +263,7 @@
             sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'service openolt stop' || true
             sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'killall dev_mgmt_daemon' || true
             sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'rm -f /var/log/openolt.log'
+            sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'rm -f /var/log/dev_mgmt_daemon.log'
             sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'service dev_mgmt_daemon start &'
             sleep 5
             sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'service openolt start &'
@@ -344,6 +345,8 @@
           sh returnStdout: false, script: """
           sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/openolt.log $WORKSPACE/openolt-${olt.ip}.log || true
           sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/openolt-${olt.ip}.log  # Remove escape sequences
+          sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/dev_mgmt_daemon.log $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log || true
+          sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log  # Remove escape sequences
           """
         }
       }
diff --git a/jjb/pipeline/voltha-physical-functional-tests.groovy b/jjb/pipeline/voltha-physical-functional-tests.groovy
index baba016..8aa703e 100644
--- a/jjb/pipeline/voltha-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-physical-functional-tests.groovy
@@ -64,12 +64,16 @@
     stage('Subscriber Validation and Ping Tests') {
       environment {
         ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
-        ROBOT_MISC_ARGS="--removekeywords wuks -e bbsim -e notready -d $WORKSPACE/RobotLogs -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir}"
         ROBOT_FILE="Voltha_PODTests.robot"
       }
       steps {
         sh """
         mkdir -p $WORKSPACE/RobotLogs
+        if  ( ${released} ); then
+            export ROBOT_MISC_ARGS="--removekeywords wuks -i released -i sanity -e bbsim -e notready -d $WORKSPACE/RobotLogs -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir}"
+        else
+            export ROBOT_MISC_ARGS="--removekeywords wuks -e bbsim -e notready -d $WORKSPACE/RobotLogs -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir}"
+        fi
         make -C $WORKSPACE/voltha/voltha-system-tests voltha-test || true
         """
       }
diff --git a/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index ab222ac..ef41768 100644
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -30,6 +30,7 @@
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-sanity-test-multi-runs'
+          pipeline-script: 'voltha-go-multi-tests.groovy'
           build-node: 'qct-pod4-node2'
           default-image-tag: 'master'
           code-branch: 'master'