HC Test: Workaround for 17.04 jvpp version mismatch
[csit.git] / resources / libraries / python / honeycomb / HoneycombSetup.py
index 06b35db..89e6207 100644 (file)
@@ -296,3 +296,79 @@ class HoneycombSetup(object):
         if ret_code != 0:
             raise HoneycombError("Failed to modify configuration on "
                                  "node {0}, {1}".format(node, stderr))
+
+    @staticmethod
+    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
+        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.
+         """
+
+        disabled_features = {
+            "NSH": "io.fd.hc2vpp.vppnsh.impl.VppNshModule"
+        }
+
+        ssh = SSH()
+        ssh.connect(node)
+
+        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)
+
+                (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 copy JVPP libraries on "
+                                     "node {0}, {1}".format(node, stderr))