MAP: Use explicit address/prefix types in API
[vpp.git] / test / test_jvpp.py
index 664ed2f..36dbdb2 100644 (file)
@@ -1,7 +1,20 @@
-from jvpp_connection import TestJVppConnection
+#!/usr/bin/env python
 
+import os
+import subprocess
+import unittest
 
-class TestJVpp(TestJVppConnection):
+from framework import VppTestCase, running_extended_tests
+
+# Api files path
+API_FILES_PATH = "japi/java"
+
+# Registry jar file name prefix
+REGISTRY_JAR_PREFIX = "jvpp-registry"
+
+
+@unittest.skipUnless(running_extended_tests(), "part of extended tests")
+class TestJVpp(VppTestCase):
     """ JVPP Core Test Case """
 
     def invoke_for_jvpp_core(self, api_jar_name, test_class_name):
@@ -80,3 +93,55 @@ class TestJVpp(TestJVppConnection):
         self.invoke_for_jvpp_core(api_jar_name="jvpp-nat",
                                   test_class_name="io.fd.vpp.jvpp.nat.test."
                                                   "FutureApiTest")
+
+    def full_jar_name(self, install_dir, jar_name, version):
+        return os.path.join(install_dir, API_FILES_PATH,
+                            "{0}-{1}.jar".format(jar_name, version))
+
+    def jvpp_connection_test(self, api_jar_name, test_class_name, timeout):
+        install_dir = os.getenv('VPP_TEST_BUILD_DIR')
+        self.logger.info("Install directory : {0}".format(install_dir))
+
+        version_reply = self.vapi.show_version()
+        version = version_reply.version.split("-")[0]
+        registry_jar_path = self.full_jar_name(install_dir,
+                                               REGISTRY_JAR_PREFIX, version)
+        self.logger.info("JVpp Registry jar path : {0}"
+                         .format(registry_jar_path))
+        if (not os.path.isfile(registry_jar_path)):
+            raise Exception(
+                "JVpp Registry jar has not been found: {0}"
+                .format(registry_jar_path))
+
+        api_jar_path = self.full_jar_name(install_dir, api_jar_name, version)
+        self.logger.info("Api jar path : {0}".format(api_jar_path))
+        if (not os.path.isfile(api_jar_path)):
+            raise Exception(
+                "Api jar has not been found: {0}".format(api_jar_path))
+
+        # passes shm prefix as parameter to create connection with same value
+        command = ["java", "-cp",
+                   "{0}:{1}".format(registry_jar_path, api_jar_path),
+                   test_class_name, "/{0}-vpe-api".format(self.shm_prefix)]
+        self.logger.info("Test Command : {0}, Timeout : {1}".
+                         format(command, timeout))
+
+        self.process = subprocess.Popen(command, shell=False,
+                                        stdout=subprocess.PIPE,
+                                        stderr=subprocess.PIPE, bufsize=1,
+                                        universal_newlines=True)
+
+        out, err = self.process.communicate()
+        self.logger.info("Process output : {0}{1}".format(os.linesep, out))
+
+        if self.process.returncode != 0:
+            raise Exception(
+                "Command {0} failed with return code: {1}.{2}"
+                "Process error output: {2}{3}"
+                .format(command, self.process.returncode, os.linesep, err))
+
+    def tearDown(self):
+        self.logger.info("Tearing down jvpp test")
+        super(TestJVpp, self).tearDown()
+        if hasattr(self, 'process') and self.process.poll() is None:
+            self.process.kill()