blob: d57594e4b800cb4ea3dceb614f97307cfcd6698f [file] [log] [blame]
Hardik Windlass0f9621d2021-02-24 21:23:19 +05301// Copyright 2021-present Open Networking Foundation
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
Hardik Windlass0f9621d2021-02-24 21:23:19 +053014// voltha-2.x e2e tests
15// uses bbsim to simulate OLT/ONUs
Hardik Windlass0f9621d2021-02-24 21:23:19 +053016// NOTE we are importing the library even if it's global so that it's
17// easier to change the keywords during a replay
18library identifier: 'cord-jenkins-libraries@master',
19 retriever: modernSCM([
20 $class: 'GitSCMSource',
21 remote: 'https://gerrit.opencord.org/ci-management.git'
22])
Hardik Windlass0f9621d2021-02-24 21:23:19 +053023def test_software_upgrade(name) {
24 stage('Deploy Voltha - '+ name) {
25 def extraHelmFlags = "${extraHelmFlags} --set global.log_level=DEBUG,onu=1,pon=1 "
Hardik Windlassa67cdbe2021-03-05 15:29:03 +053026 // TODO: ONOS custom image handling
27 // if [ '${onosImg.trim()}' != '' ] && [ '\$GERRIT_PROJECT' != 'voltha-onos' ]; then
28 // IFS=: read -r onosRepo onosTag <<< '${onosImg.trim()}'
29 // extraHelmFlags = extraHelmFlags + "--set onos-classic.images.onos.repository=\$onosRepo,onos-classic.images.onos.tag=\$onosTag "
30 // fi
Hardik Windlass0f9621d2021-02-24 21:23:19 +053031 def localCharts = false
Hardik Windlass0f9621d2021-02-24 21:23:19 +053032 // Currently only testing with ATT workflow
33 // TODO: Support for other workflows
34 volthaDeploy([workflow: "att", extraHelmFlags: extraHelmFlags, localCharts: localCharts])
35 // start logging
36 sh """
37 mkdir -p $WORKSPACE/${name}
38 _TAG=kail-${name} kail -n infra -n voltha > $WORKSPACE/${name}/onos-voltha-combined.log &
39 """
40 // forward ONOS and VOLTHA ports
41 sh """
42 _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8101:8101&
43 _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8181:8181&
44 _TAG=voltha-port-forward kubectl port-forward --address 0.0.0.0 -n voltha svc/voltha-voltha-api 55555:55555&
45 """
46 }
47 stage('Test - '+ name) {
48 sh """
Hardik Windlass25c8ddb2021-03-05 20:26:16 +053049 ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/${name}"
50 mkdir -p \$ROBOT_LOGS_DIR
51 if [[ ${name} == 'onos-app-upgrade' ]]; then
52 export ONOS_APPS_UNDER_TEST+=''
Hardik Windlassb360f6e2021-03-09 17:46:21 +053053 if [ ${aaaVer.trim()} != '' ] && [ ${aaaOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053054 ONOS_APPS_UNDER_TEST+="org.opencord.aaa,${aaaVer.trim()},${aaaOarUrl.trim()}*"
55 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053056 if [ ${oltVer.trim()} != '' ] && [ ${oltOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053057 ONOS_APPS_UNDER_TEST+="org.opencord.olt,${oltVer.trim()},${oltOarUrl.trim()}*"
58 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053059 if [ ${dhcpl2relayVer.trim()} != '' ] && [ ${dhcpl2relayOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053060 ONOS_APPS_UNDER_TEST+="org.opencord.dhcpl2relay,${dhcpl2relayVer.trim()},${dhcpl2relayOarUrl.trim()}*"
61 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053062 if [ ${igmpproxyVer.trim()} != '' ] && [ ${igmpproxyOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053063 ONOS_APPS_UNDER_TEST+="org.opencord.igmpproxy,${igmpproxyVer.trim()},${igmpproxyOarUrl.trim()}*"
64 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053065 if [ ${sadisVer.trim()} != '' ] && [ ${sadisOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053066 ONOS_APPS_UNDER_TEST+="org.opencord.sadis,${sadisVer.trim()},${sadisOarUrl.trim()}*"
67 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053068 if [ ${mcastVer.trim()} != '' ] && [ ${mcastOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053069 ONOS_APPS_UNDER_TEST+="org.opencord.mcast,${mcastVer.trim()},${mcastOarUrl.trim()}*"
70 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053071 if [ ${kafkaVer.trim()} != '' ] && [ ${kafkaOarUrl.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053072 ONOS_APPS_UNDER_TEST+="org.opencord.kafka,${kafkaVer.trim()},${kafkaOarUrl.trim()}*"
Hardik Windlass25c8ddb2021-03-05 20:26:16 +053073 fi
74 export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -v onos_apps_under_test:\$ONOS_APPS_UNDER_TEST -e PowerSwitch"
75 export TARGET=onos-app-upgrade-test
76 fi
77 if [[ ${name} == 'voltha-component-upgrade' ]]; then
78 export VOLTHA_COMPS_UNDER_TEST+=''
Hardik Windlassb360f6e2021-03-09 17:46:21 +053079 if [ ${adapterOpenOltImage.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053080 VOLTHA_COMPS_UNDER_TEST+="adapter-open-olt,adapter-open-olt,${adapterOpenOltImage.trim()}*"
81 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053082 if [ ${adapterOpenOnuImage.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053083 VOLTHA_COMPS_UNDER_TEST+="adapter-open-onu,adapter-open-onu,${adapterOpenOnuImage.trim()}*"
84 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053085 if [ ${rwCoreImage.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053086 VOLTHA_COMPS_UNDER_TEST+="rw-core,voltha,${rwCoreImage.trim()}*"
87 fi
Hardik Windlassb360f6e2021-03-09 17:46:21 +053088 if [ ${ofAgentImage.trim()} != '' ]; then
Hardik Windlass98506e72021-03-09 14:29:17 +053089 VOLTHA_COMPS_UNDER_TEST+="ofagent,ofagent,${ofAgentImage.trim()}*"
Hardik Windlass25c8ddb2021-03-05 20:26:16 +053090 fi
91 export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -v voltha_comps_under_test:\$VOLTHA_COMPS_UNDER_TEST -e PowerSwitch"
92 export TARGET=voltha-comp-upgrade-test
93 fi
94 export VOLTCONFIG=$HOME/.volt/config-minimal
95 export KUBECONFIG=$HOME/.kube/kind-config-voltha-minimal
96 # Run the specified tests
97 make -C $WORKSPACE/voltha-system-tests \$TARGET || true
Hardik Windlass0f9621d2021-02-24 21:23:19 +053098 """
99 // stop logging
100 sh """
101 P_IDS="\$(ps e -ww -A | grep "_TAG=kail-${name}" | grep -v grep | awk '{print \$1}')"
102 if [ -n "\$P_IDS" ]; then
103 echo \$P_IDS
104 for P_ID in \$P_IDS; do
105 kill -9 \$P_ID
106 done
107 fi
108 """
109 // remove port-forwarding
110 sh """
111 # remove orphaned port-forward from different namespaces
112 ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9
113 """
114 // collect pod details
Hardik Windlass428f5132021-03-15 12:17:47 +0530115 get_pods_info("$WORKSPACE/${name}")
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530116 helmTeardown(['infra', 'voltha'])
117 }
118}
Hardik Windlass428f5132021-03-15 12:17:47 +0530119def get_pods_info(dest) {
120 // collect pod details, this is here in case of failure
121 sh """
122 mkdir -p ${dest}
123 kubectl get pods --all-namespaces -o wide > ${dest}/pods.txt || true
124 kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee ${dest}/pod-images.txt || true
125 kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee ${dest}/pod-imagesId.txt || true
126 kubectl describe pods --all-namespaces -l app.kubernetes.io/part-of=voltha > ${dest}/pods-describe.txt
127 helm ls --all-namespaces > ${dest}/helm-charts.txt
128 """
129}
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530130pipeline {
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530131 /* no label, executor is determined by JJB */
132 agent {
133 label "${params.buildNode}"
134 }
135 options {
136 timeout(time: 30, unit: 'MINUTES')
137 }
138 environment {
139 PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Hardik Windlass25c8ddb2021-03-05 20:26:16 +0530140 KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530141 }
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530142 stages{
143 stage('Download Code') {
144 steps {
145 getVolthaCode([
146 branch: "${branch}",
147 volthaSystemTestsChange: "${volthaSystemTestsChange}",
148 volthaHelmChartsChange: "${volthaHelmChartsChange}",
149 ])
150 }
151 }
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530152 stage('Run Test') {
153 steps {
154 test_software_upgrade("onos-app-upgrade")
155 test_software_upgrade("voltha-component-upgrade")
156 }
157 }
158 }
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530159 post {
Hardik Windlass428f5132021-03-15 12:17:47 +0530160 aborted {
161 get_pods_info("$WORKSPACE/failed")
162 }
163 failure {
164 get_pods_info("$WORKSPACE/failed")
165 }
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530166 always {
167 sh '''
168 gzip $WORKSPACE/onos-app-upgrade/onos-voltha-combined.log || true
169 gzip $WORKSPACE/voltha-component-upgrade/onos-voltha-combined.log || true
170 '''
171 step([$class: 'RobotPublisher',
172 disableArchiveOutput: false,
173 logFileName: 'RobotLogs/*/log*.html',
174 otherFiles: '',
175 outputFileName: 'RobotLogs/*/output*.xml',
176 outputPath: '.',
177 passThreshold: 100,
178 reportFileName: 'RobotLogs/*/report*.html',
179 unstableThreshold: 0]);
Hardik Windlass428f5132021-03-15 12:17:47 +0530180 archiveArtifacts artifacts: '*.log,**/*.log,**/*.gz,*.gz,*.txt,**/*.txt'
Hardik Windlass0f9621d2021-02-24 21:23:19 +0530181 }
182 }
183}