Waiting for adapters to communicate with the core before starting tests
Change-Id: I7189458dc59098cceda836d08bf0d2fab096ce26
diff --git a/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index 2887786..6339d0d 100755
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -49,6 +49,8 @@
code-branch: 'master'
volthaHelmChartsChange: refs/changes/69/26569/11
volthaSystemTestsChange: refs/changes/32/27532/5
+ gerritProject: voltctl
+ gerritRefspec: refs/changes/83/26983/4
extraHelmFlags: >
--set global.image_tag=master
--set onos-classic.image.repository=andreacampanella/voltha-onos --set onos-classic.image.tag=meter-fixes-simple
@@ -244,6 +246,8 @@
code-branch: 'master'
volthaHelmChartsChange: refs/changes/69/26569/11
volthaSystemTestsChange: refs/changes/32/27532/5
+ gerritProject: voltctl
+ gerritRefspec: refs/changes/83/26983/4
extraHelmFlags: >
--set global.image_tag=master
--set onos-classic.image.repository=andreacampanella/voltha-onos --set onos-classic.image.tag=meter-fixes-simple
diff --git a/vars/volthaStackDeploy.groovy b/vars/volthaStackDeploy.groovy
index 594be03..a49cd35 100644
--- a/vars/volthaStackDeploy.groovy
+++ b/vars/volthaStackDeploy.groovy
@@ -87,17 +87,61 @@
println "Wait for adapters to be registered"
// guarantee that at least two adapters are registered with VOLTHA before proceeding
- // this is potentially open to issue if we'll run test with multiple adapter pairs (eg: adtran + open)
- // untill then it is safe to assume we'll be ready once we have two adapters in the system
+ // this is potentially prone to issues if we'll run test with multiple adapter pairs (eg: adtran + open)
+ // until then it is safe to assume we'll be ready once we have two adapters in the system
+ sh """
+ set +x
+ _TAG="voltha-voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${cfg.volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
+ """
sh """
set +x
- _TAG="voltha-voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${cfg.volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
adapters=\$(voltctl adapter list -q | wc -l)
while [[ \$adapters -lt 2 ]]; do
sleep 5
adapters=\$(voltctl adapter list -q | wc -l)
done
- ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
+ """
+
+ // NOTE that we need to wait for LastCommunication to be equal or shorter that 5s
+ // as that means the core can talk to the adapters
+ // if voltctl can't read LastCommunication we skip this check
+ def done = false;
+
+ while (!done) {
+ sleep 1
+ def adapters = ""
+ try {
+ adapters = sh (
+ script: 'voltctl adapter list --format "{{gosince .LastCommunication}}"',
+ returnStdout: true,
+ ).trim()
+ } catch (err) {
+ // in some older versions of voltctl the command results in
+ // ERROR: Unexpected error while attempting to format results as table : template: output:1: function "gosince" not defined
+ // if that's the case we won't be able to check the timestamp so it's useless to wait
+ println("voltctl can't parse LastCommunication, skip waiting")
+ done = true
+ break
+ }
+
+ def waitingOn = adapters.split( '\n' ).find{since ->
+ since = since.replaceAll('s','') //remove seconds from the string
+
+ // it has to be a single digit
+ if (since.length() > 1) {
+ return true
+ }
+ if ((since as Integer) > 5) {
+ return true
+ }
+ return false
+ }
+ done = (waitingOn == null || waitingOn.length() == 0)
+ }
+
+ sh """
+ set +x
+ ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
"""
// also make sure that the ONOS config is loaded