From d85075e6e43097e536ab0c8ce9290a81d5a40f81 Mon Sep 17 00:00:00 2001 From: Dave Wallace Date: Fri, 2 Mar 2018 13:19:30 -0500 Subject: make test: VCL extended test cases - Add VCL cut thru uni-direction test over multiple sockets - Add VCL cut thru bi-direction test over multiple sockets - Add LDP cut thru uni-directional test over multiple sockets - Add LDP cut thru bi-directional test over multiple sockets - Add VCL thru host stack uni-direction test over multiple sockets - Add VCL thru host stack bi-direction test over multiple sockets - Add LDP thru host stack uni-directional test over multiple sockets - Add LDP thru host stack bi-directional test over multiple sockets - Fix validateResults to ensure worker_server process is killed if it still exists after running the test. Change-Id: I77ea9acef172667558dbcec23af1e4c72b29f376 Signed-off-by: Dave Wallace --- test/test_vcl.py | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 194 insertions(+), 16 deletions(-) (limited to 'test/test_vcl.py') diff --git a/test/test_vcl.py b/test/test_vcl.py index 3e50921cddb..d5bbccd26aa 100644 --- a/test/test_vcl.py +++ b/test/test_vcl.py @@ -4,18 +4,15 @@ import unittest import os import signal -from framework import VppTestCase, VppTestRunner, Worker +from framework import VppTestCase, VppTestRunner, running_extended_tests, \ + Worker from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath class VclAppWorker(Worker): """ VCL Test Application Worker """ - def __init__(self, appname, args, logger, env={}): - var = "VPP_TEST_BUILD_DIR" - build_dir = os.getenv(var, None) - if build_dir is None: - raise Exception("Environment variable `%s' not set" % var) + def __init__(self, build_dir, appname, args, logger, env={}): vcl_lib_dir = "%s/vpp/.libs" % build_dir app = "%s/%s" % (vcl_lib_dir, appname) if not os.path.isfile(app): @@ -30,6 +27,11 @@ class VclTestCase(VppTestCase): """ VCL Test Class """ def __init__(self, methodName): + var = "VPP_TEST_BUILD_DIR" + self.build_dir = os.getenv(var, None) + if self.build_dir is None: + raise Exception("Environment variable `%s' not set" % var) + self.vppDebug = 'vpp_debug' in self.build_dir self.server_addr = "127.0.0.1" self.server_port = "22000" self.timeout = 3 @@ -47,11 +49,12 @@ class VclTestCase(VppTestCase): self.env = {'VCL_API_PREFIX': self.shm_prefix, 'VCL_APP_SCOPE_LOCAL': "true"} - worker_server = VclAppWorker(server_app, [self.server_port], + worker_server = VclAppWorker(self.build_dir, server_app, + [self.server_port], self.logger, self.env) worker_server.start() self.sleep(0.2) - worker_client = VclAppWorker(client_app, client_args, + worker_client = VclAppWorker(self.build_dir, client_app, client_args, self.logger, self.env) worker_client.start() worker_client.join(self.timeout) @@ -106,14 +109,15 @@ class VclTestCase(VppTestCase): 'VCL_APP_NAMESPACE_ID': "0", 'VCL_APP_NAMESPACE_SECRET': "1234"} - worker_server = VclAppWorker(server_app, [self.server_port], + worker_server = VclAppWorker(self.build_dir, server_app, + [self.server_port], self.logger, self.env) worker_server.start() self.sleep(0.2) self.env.update({'VCL_APP_NAMESPACE_ID': "1", 'VCL_APP_NAMESPACE_SECRET': "5678"}) - worker_client = VclAppWorker(client_app, client_args, + worker_client = VclAppWorker(self.build_dir, client_app, client_args, self.logger, self.env) worker_client.start() worker_client.join(self.timeout) @@ -121,13 +125,19 @@ class VclTestCase(VppTestCase): self.validateResults(worker_client, worker_server, self.timeout) def validateResults(self, worker_client, worker_server, timeout): + if os.path.isdir('/proc/{}'.format(worker_server.process.pid)): + self.logger.info("Killing server worker process (pid %d)" % + worker_server.process.pid) + os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM) + worker_server.join() 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 (%ss)! Killing client worker process" % timeout) + "Timeout: %ss! Killing client worker process (pid %d)" % + (timeout, worker_client.process.pid)) os.killpg(os.getpgid(worker_client.process.pid), signal.SIGTERM) worker_client.join() @@ -136,8 +146,6 @@ class VclTestCase(VppTestCase): "Couldn't kill client worker process") raise 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") @@ -152,6 +160,14 @@ class VCLCutThruTestCase(VclTestCase): self.cut_thru_setup() self.client_echo_test_args = [self.server_addr, self.server_port, "-E", self.echo_phrase, "-X"] + self.client_uni_dir_nsock_timeout = 60 + self.client_uni_dir_nsock_test_args = [self.server_addr, + self.server_port, + "-I", "5", "-U", "-X"] + self.client_bi_dir_nsock_timeout = 120 + self.client_bi_dir_nsock_test_args = [self.server_addr, + self.server_port, + "-I", "2", "-B", "-X"] def tearDown(self): self.cut_thru_tear_down() @@ -164,12 +180,44 @@ class VCLCutThruTestCase(VclTestCase): self.cut_thru_test("sock_test_server", "sock_test_client", self.client_echo_test_args) + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_ldp_cut_thru_uni_dir_nsock(self): + """ run LDP cut thru uni-directional (multiple sockets) test """ + + self.timeout = self.client_uni_dir_nsock_timeout + self.cut_thru_test("sock_test_server", "sock_test_client", + self.client_uni_dir_nsock_test_args) + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_ldp_cut_thru_bi_dir_nsock(self): + """ run LDP cut thru bi-directional (multiple sockets) test """ + + self.timeout = self.client_bi_dir_nsock_timeout + self.cut_thru_test("sock_test_server", "sock_test_client", + self.client_bi_dir_nsock_test_args) + def test_vcl_cut_thru_echo(self): """ run VCL cut thru echo test """ self.cut_thru_test("vcl_test_server", "vcl_test_client", self.client_echo_test_args) + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_vcl_cut_thru_uni_dir_nsock(self): + """ run VCL cut thru uni-directional (multiple sockets) test """ + + self.timeout = self.client_uni_dir_nsock_timeout + self.cut_thru_test("vcl_test_server", "vcl_test_client", + self.client_uni_dir_nsock_test_args) + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_vcl_cut_thru_bi_dir_nsock(self): + """ run VCL cut thru bi-directional (multiple sockets) test """ + + self.timeout = self.client_bi_dir_nsock_timeout + self.cut_thru_test("vcl_test_server", "vcl_test_client", + self.client_bi_dir_nsock_test_args) + class VCLThruHostStackTestCase(VclTestCase): """ VCL Thru Host Stack Tests """ @@ -178,7 +226,8 @@ class VCLThruHostStackTestCase(VclTestCase): super(VCLThruHostStackTestCase, self).setUp() self.thru_host_stack_setup() - self.client_echo_test_args = [self.loop0.local_ip4, self.server_port, + self.client_echo_test_args = [self.loop0.local_ip4, + self.server_port, "-E", self.echo_phrase, "-X"] def tearDown(self): @@ -191,16 +240,145 @@ class VCLThruHostStackTestCase(VclTestCase): self.thru_host_stack_test("sock_test_server", "sock_test_client", self.client_echo_test_args) - # TBD: Remove this when VPP crash is fixed. + # TBD: Remove these when VPP thru host teardown config bug is fixed. self.thru_host_stack_test("vcl_test_server", "vcl_test_client", self.client_echo_test_args) def test_vcl_thru_host_stack_echo(self): """ run VCL thru host stack echo test """ - # TBD: Enable this when VPP crash is fixed. + # TBD: Enable this when VPP thru host teardown config bug is fixed. # self.thru_host_stack_test("vcl_test_server", "vcl_test_client", # self.client_echo_test_args) + # TBD: Remove VCLThruHostStackExtended*TestCase classes and move + # tests here when VPP thru host teardown/setup config bug + # is fixed. + + +class VCLThruHostStackExtendedATestCase(VclTestCase): + """ VCL Thru Host Stack Extended Tests """ + + def setUp(self): + super(VCLThruHostStackExtendedATestCase, self).setUp() + + self.thru_host_stack_setup() + if self.vppDebug: + self.client_bi_dir_nsock_timeout = 120 + else: + self.client_bi_dir_nsock_timeout = 60 + self.client_bi_dir_nsock_test_args = [self.loop0.local_ip4, + self.server_port, + "-I", "2", "-B", "-X"] + + def tearDown(self): + self.thru_host_stack_tear_down() + + super(VCLThruHostStackExtendedATestCase, self).tearDown() + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_vcl_thru_host_stack_bi_dir_nsock(self): + """ run VCL thru host stack bi-directional (multiple sockets) test """ + + self.timeout = self.client_bi_dir_nsock_timeout + self.thru_host_stack_test("vcl_test_server", "vcl_test_client", + self.client_bi_dir_nsock_test_args) + + +class VCLThruHostStackExtendedBTestCase(VclTestCase): + """ VCL Thru Host Stack Extended Tests """ + + def setUp(self): + super(VCLThruHostStackExtendedBTestCase, self).setUp() + + self.thru_host_stack_setup() + if self.vppDebug: + self.client_bi_dir_nsock_timeout = 120 + else: + self.client_bi_dir_nsock_timeout = 60 + self.client_bi_dir_nsock_test_args = [self.loop0.local_ip4, + self.server_port, + "-I", "2", "-B", "-X"] + + def tearDown(self): + self.thru_host_stack_tear_down() + + super(VCLThruHostStackExtendedBTestCase, self).tearDown() + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_ldp_thru_host_stack_bi_dir_nsock(self): + """ run LDP thru host stack bi-directional (multiple sockets) test """ + + self.timeout = self.client_bi_dir_nsock_timeout + self.thru_host_stack_test("sock_test_server", "sock_test_client", + self.client_bi_dir_nsock_test_args) + + +class VCLThruHostStackExtendedCTestCase(VclTestCase): + """ VCL Thru Host Stack Extended Tests """ + + def setUp(self): + super(VCLThruHostStackExtendedCTestCase, self).setUp() + + self.thru_host_stack_setup() + if self.vppDebug: + self.client_uni_dir_nsock_timeout = 120 + self.numSockets = "2" + else: + self.client_uni_dir_nsock_timeout = 120 + self.numSockets = "5" + + self.client_uni_dir_nsock_test_args = [self.loop0.local_ip4, + self.server_port, + "-I", self.numSockets, + "-U", "-X"] + + def tearDown(self): + self.thru_host_stack_tear_down() + + super(VCLThruHostStackExtendedCTestCase, self).tearDown() + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_ldp_thru_host_stack_uni_dir_nsock(self): + """ run LDP thru host stack uni-directional (multiple sockets) test """ + + self.timeout = self.client_uni_dir_nsock_timeout + self.thru_host_stack_test("sock_test_server", "sock_test_client", + self.client_uni_dir_nsock_test_args) + + +class VCLThruHostStackExtendedDTestCase(VclTestCase): + """ VCL Thru Host Stack Extended Tests """ + + def setUp(self): + super(VCLThruHostStackExtendedDTestCase, self).setUp() + + self.thru_host_stack_setup() + if self.vppDebug: + self.client_uni_dir_nsock_timeout = 120 + self.numSockets = "2" + else: + self.client_uni_dir_nsock_timeout = 120 + self.numSockets = "5" + + self.client_uni_dir_nsock_test_args = [self.loop0.local_ip4, + self.server_port, + "-I", self.numSockets, + "-U", "-X"] + + def tearDown(self): + self.thru_host_stack_tear_down() + + super(VCLThruHostStackExtendedDTestCase, self).tearDown() + + @unittest.skipUnless(running_extended_tests(), "part of extended tests") + def test_vcl_thru_host_stack_uni_dir_nsock(self): + """ run VCL thru host stack uni-directional (multiple sockets) test """ + + self.timeout = self.client_uni_dir_nsock_timeout + self.thru_host_stack_test("vcl_test_server", "vcl_test_client", + self.client_uni_dir_nsock_test_args) + + if __name__ == '__main__': unittest.main(testRunner=VppTestRunner) -- cgit 1.2.3-korg