HC Test: Workaround for 17.04 jvpp version mismatch 83/4683/3
authorselias <samelias@cisco.com>
Fri, 13 Jan 2017 16:40:57 +0000 (17:40 +0100)
committerselias <samelias@cisco.com>
Fri, 27 Jan 2017 09:42:08 +0000 (10:42 +0100)
 - add workaround for mismatched jvpp versions in deb packages
 - disable NSH_SFC madule and test suite, it depends on outdated jvpp
 - cleanup package download script used in hc2vpp-csit-verify job

Change-Id: I98526baa4de08bbbab2339c9e81f49cd189b57ac
Signed-off-by: selias <samelias@cisco.com>
resources/libraries/python/honeycomb/HoneycombSetup.py
resources/tools/download_hc_build_pkgs.sh
resources/tools/download_hc_pkgs.sh
tests/func/honeycomb/__init__.robot
tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot

index bee27ab..89e6207 100644 (file)
@@ -298,14 +298,16 @@ class HoneycombSetup(object):
                                  "node {0}, {1}".format(node, stderr))
 
     @staticmethod
-    def enable_module_features(node):
+    def enable_module_features(node, *features):
         """Configure Honeycomb to use VPP modules that are disabled by default.
 
-        Note: If the module is not enabled in VPP, Honeycomb will
+        ..Note:: If the module is not enabled in VPP, Honeycomb will
         be unable to establish VPP connection.
 
         :param node: Honeycomb node.
+        :param features: Features to enable.
         :type node: dict
+        :type features: string
         :raises HoneycombError: If the configuration could not be changed.
          """
 
@@ -316,16 +318,57 @@ class HoneycombSetup(object):
         ssh = SSH()
         ssh.connect(node)
 
-        for feature in disabled_features.keys():
-            # uncomment by replacing the entire line
-            find = replace = "{0}".format(disabled_features[feature])
+        for feature in features:
+            if feature in disabled_features.keys():
+                # uncomment by replacing the entire line
+                find = replace = "{0}".format(disabled_features[feature])
 
-            argument = '"/{0}/c\\ {1}"'.format(find, replace)
-            path = "{0}/modules/*module-config"\
-                .format(Const.REMOTE_HC_DIR)
-            command = "sed -i {0} {1}".format(argument, path)
+                argument = '"/{0}/c\\ {1}"'.format(find, replace)
+                path = "{0}/modules/*module-config"\
+                    .format(Const.REMOTE_HC_DIR)
+                command = "sed -i {0} {1}".format(argument, path)
 
-            (ret_code, _, stderr) = ssh.exec_command_sudo(command)
+                (ret_code, _, stderr) = ssh.exec_command_sudo(command)
+                if ret_code != 0:
+                    raise HoneycombError("Failed to modify configuration on "
+                                         "node {0}, {1}".format(node, stderr))
+            else:
+                raise HoneycombError(
+                    "Unrecognized feature {0}.".format(feature))
+
+    @staticmethod
+    def copy_java_libraries(node):
+        """Copy Java libraries installed by vpp-api-java package to honeycomb
+        lib folder.
+
+        This is a (temporary?) workaround for jvpp version mismatches.
+
+        :param node: Honeycomb node
+        :type node: dict
+        """
+
+        ssh = SSH()
+        ssh.connect(node)
+        (_, stdout, _) = ssh.exec_command_sudo(
+            "ls /usr/share/java | grep ^jvpp-*")
+
+        files = stdout.split("\n")[:-1]
+        for item in files:
+            # example filenames:
+            # jvpp-registry-17.04.jar
+            # jvpp-core-17.04.jar
+
+            parts = item.split("-")
+            version = "{0}-SNAPSHOT".format(parts[2][:5])
+            artifact_id = "{0}-{1}".format(parts[0], parts[1])
+
+            directory = "{0}/lib/io/fd/vpp/{1}/{2}".format(
+                Const.REMOTE_HC_DIR, artifact_id, version)
+            cmd = "sudo mkdir -p {0}; " \
+                  "sudo cp /usr/share/java/{0} {1}/{2}-{3}.jar".format(
+                    item, directory, artifact_id, version)
+
+            (ret_code, _, stderr) = ssh.exec_command(cmd)
             if ret_code != 0:
-                raise HoneycombError("Failed to modify configuration on "
+                raise HoneycombError("Failed to copy JVPP libraries on "
                                      "node {0}, {1}".format(node, stderr))
index 4dc49f9..71a2efe 100755 (executable)
@@ -18,20 +18,15 @@ set -ex
 trap 'rm -f *.deb.md5; exit' EXIT
 trap 'rm -f *.deb.md5;rm -f *.deb; exit' ERR
 
-# Download the latest VPP .deb packages, their matching JVPP .jar and VPP plugin .deb packages
+# Download the latest VPP and VPP plugin .deb packages
 URL="https://nexus.fd.io/service/local/artifact/maven/content"
 VER="LATEST"
 REPO='fd.io.master.ubuntu.trusty.main'
-JVPP_REPO='fd.io.snapshot'
 VPP_GROUP="io.fd.vpp"
-HC_GROUP="io.fd.hc2vpp"
 NSH_GROUP="io.fd.nsh_sfc"
-VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib vpp-plugins"
-JVPP_ARTIFACTS="jvpp-core jvpp-registry jvpp-acl jvpp-snat jvpp-ioam-pot jvpp-ioam-trace"
-HC_ARTIFACTS="honeycomb"
+VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib vpp-plugins vpp-api-java"
 NSH_ARTIFACTS="vpp-nsh-plugin"
 PACKAGE="deb deb.md5"
-JVPP_PACKAGE="jar jar.md5"
 CLASS="deb"
 
 for ART in ${VPP_ARTIFACTS}; do
@@ -40,18 +35,6 @@ for ART in ${VPP_ARTIFACTS}; do
     done
 done
 
-for ART in ${JVPP_ARTIFACTS}; do
-    for PAC in $JVPP_PACKAGE; do
-        curl "${URL}?r=${JVPP_REPO}&g=${VPP_GROUP}&a=${ART}&p=${PAC}&v=${VER}" -O -J || exit
-    done
-done
-
-for ART in ${HC_ARTIFACTS}; do
-    for PAC in $PACKAGE; do
-        curl "${URL}?r=${REPO}&g=${HC_GROUP}&a=${ART}&p=${PAC}&v=${VER}&c=${CLASS}" -O -J || exit
-    done
-done
-
 for ART in ${NSH_ARTIFACTS}; do
     for PAC in $PACKAGE; do
         curl "${URL}?r=${REPO}&g=${NSH_GROUP}&a=${ART}&p=${PAC}&v=${VER}&c=${CLASS}" -O -J || exit
@@ -62,22 +45,6 @@ for FILE in *.deb; do
     echo " "${FILE} >> ${FILE}.md5
 done
 
-for FILE in *.jar; do
-    echo " "${FILE} >> ${FILE}.md5
-done
-
 for MD5FILE in *.md5; do
     md5sum -c ${MD5FILE} || exit
 done
-
-# Install JVPP to maven local repo, to be used in HC2VPP build
-JVPP_JARS=$(find . -type f -iname '*.jar')
-for item in jvpp*.jar; do
-    # Example filename: jvpp-registry-17.01-20161206.125556-1.jar
-    # ArtifactId = jvpp-registry
-    # Version = 17.01
-    basefile=$(basename -s .jar "$item")
-    artifactId=$(echo "$basefile" | cut -d '-' -f 1-2)
-    version=$(echo "$basefile" | cut -d '-' -f 3)
-    mvn install:install-file -Dfile=${item} -DgroupId=io.fd.vpp -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
-done
index 8533db0..d52e246 100755 (executable)
@@ -24,7 +24,7 @@ REPO='fd.io.master.ubuntu.trusty.main'
 GROUP="io.fd.vpp"
 HC_GROUP="io.fd.hc2vpp"
 NSH_GROUP="io.fd.nsh_sfc"
-VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib vpp-plugins"
+VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib vpp-plugins vpp-api-java"
 HC_ARTIFACTS="honeycomb"
 NSH_ARTIFACTS="vpp-nsh-plugin"
 PACKAGE="deb deb.md5"
index 701ccc2..1b129d9 100644 (file)
@@ -21,6 +21,7 @@
 | Resource | resources/libraries/robot/honeycomb/honeycomb.robot
 | Suite Setup | Run Keywords | Setup All DUTs Before Test | AND
 | ... | Clear Persisted Honeycomb Configuration | ${node} | AND
+| ... | Copy Java Libraries | ${node} | AND
 | ... | Configure Unsecured Access | ${node} | AND
 | ... | Enable Module Features | ${node} | AND
 | ... | Configure Log Level | ${node} | TRACE | AND
index f7e2622..aade075 100644 (file)
@@ -24,7 +24,8 @@
 | Documentation | *Honeycomb NSH test suite.*
 | Suite Teardown | Run Keyword If Any Tests Failed
 | ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node}
-| Force Tags | honeycomb_sanity
+# disabled pending NSH version 17.04
+#| Force Tags | honeycomb_sanity
 
 *** Test Cases ***
 | TC01: Honeycomb can configure NSH entry

©2016 FD.io a Linux Foundation Collaborative Project. All Rights Reserved.
Linux Foundation is a registered trademark of The Linux Foundation. Linux is a registered trademark of Linus Torvalds.
Please see our privacy policy and terms of use.