aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/framework.py2
-rw-r--r--test/test_vcl.py73
2 files changed, 75 insertions, 0 deletions
diff --git a/test/framework.py b/test/framework.py
index 288bd955160..5e0308cf54b 100644
--- a/test/framework.py
+++ b/test/framework.py
@@ -1130,12 +1130,14 @@ class Worker(Thread):
self.logger = logger
self.args = args
self.result = None
+ self.env = {}
super(Worker, self).__init__()
def run(self):
executable = self.args[0]
self.logger.debug("Running executable w/args `%s'" % self.args)
env = os.environ.copy()
+ env.update(self.env)
env["CK_LOG_FILE_NAME"] = "-"
self.process = subprocess.Popen(
self.args, shell=False, env=env, preexec_fn=os.setpgrp,
diff --git a/test/test_vcl.py b/test/test_vcl.py
new file mode 100644
index 00000000000..f0d4d86e758
--- /dev/null
+++ b/test/test_vcl.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+""" Vpp VCL tests """
+
+import unittest
+import os
+import signal
+import subprocess
+from threading import Thread
+from log import single_line_delim
+from framework import VppTestCase, running_extended_tests, \
+ running_on_centos, VppTestRunner, Worker
+
+
+class VCLTestCase(VppTestCase):
+ """ VPP Communications Library Test """
+
+ server_addr = "127.0.0.1"
+ server_port = "22000"
+
+ @classmethod
+ def setUpClass(cls):
+ super(VCLTestCase, cls).setUpClass()
+
+ cls.vapi.session_enable_disable(is_enabled=1)
+
+ def setUp(self):
+ super(VCLTestCase, self).setUp()
+
+ def test_vcl_cutthru(self):
+ """ run VCL cut-thru test """
+ timeout = 5
+ var = "VPP_TEST_BUILD_DIR"
+ build_dir = os.getenv(var, None)
+ self.assertIsNotNone(build_dir,
+ "Environment variable `%s' not set" % var)
+ vcl_exe_dir = "%s/vpp/.libs" % build_dir
+ executable = "%s/vcl_test_server" % vcl_exe_dir
+ worker_server = Worker([executable, self.server_port], self.logger)
+ worker_server.env["VCL_API_PREFIX"] = self.shm_prefix
+# worker_server.env["VCL_DEBUG"] = "2"
+ worker_server.env["VCL_APP_SCOPE_LOCAL"] = "true"
+ worker_server.start()
+ executable = "%s/vcl_test_client" % vcl_exe_dir
+ worker_client = Worker(
+ [executable, self.server_addr, self.server_port,
+ "-E", "Hello, world!", "-X"], self.logger)
+ worker_client.env["VCL_API_PREFIX"] = self.shm_prefix
+# worker_client.env["VCL_DEBUG"] = "2"
+ worker_client.env["VCL_APP_SCOPE_LOCAL"] = "true"
+ worker_client.start()
+ worker_client.join(timeout)
+ self.logger.info("Client worker result is `%s'" % worker_client.result)
+ error = False
+ if worker_client.result is None:
+ try:
+ error = True
+ self.logger.error(
+ "Timeout! Client worker did not finish in %ss" % timeout)
+ os.killpg(os.getpgid(worker_client.process.pid),
+ signal.SIGTERM)
+ worker_client.join()
+ except:
+ raise Exception("Couldn't kill client worker-spawned process")
+ if error:
+ os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM)
+ worker_server.join()
+ raise Exception(
+ "Timeout! Client worker did not finish in %ss" % timeout)
+ self.assert_equal(worker_client.result, 0, "Binary test return code")
+
+
+if __name__ == '__main__':
+ unittest.main(testRunner=VppTestRunner)