9 from framework import VppTestCase, VppTestRunner, running_extended_tests, \
11 from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath, FibPathProto
13 iperf3 = '/usr/bin/iperf3'
18 subprocess.check_output([app, '-v'])
19 except (subprocess.CalledProcessError, OSError):
24 _have_iperf3 = have_app(iperf3)
27 class VCLAppWorker(Worker):
28 """ VCL Test Application Worker """
30 libname = "libvcl_ldpreload.so"
32 class LibraryNotFound(Exception):
35 def __init__(self, build_dir, appname, executable_args, logger, env=None,
36 role=None, *args, **kwargs):
38 vpp_install_path = os.getenv('VPP_INSTALL_PATH')
40 vcl_ldpreload_glob = "{}/**/{}".format(vpp_install_path, self.libname)
41 vcl_ldpreload_so = glob.glob(vcl_ldpreload_glob, recursive=True)
43 if len(vcl_ldpreload_so) < 1:
44 raise LibraryNotFound("cannot locate library: {}".format(
47 vcl_ldpreload_so = vcl_ldpreload_so[0]
51 if "iperf" in appname:
53 env.update({'LD_PRELOAD': vcl_ldpreload_so})
54 elif "sock" in appname:
55 app = "%s/bin/%s" % (build_dir, appname)
56 env.update({'LD_PRELOAD': vcl_ldpreload_so})
58 app = "%s/bin/%s" % (build_dir, appname)
59 self.args = [app] + executable_args
60 super(VCLAppWorker, self).__init__(self.args, logger, env,
64 class VCLTestCase(VppTestCase):
65 """ VCL Test Class """
66 session_startup = ["poll-main"]
70 if cls.session_startup:
71 conf = "session {" + " ".join(cls.session_startup) + "}"
72 cls.extra_vpp_punt_config = [conf]
73 super(VCLTestCase, cls).setUpClass()
76 def tearDownClass(cls):
77 super(VCLTestCase, cls).tearDownClass()
81 self.build_dir = os.getenv(var, None)
82 if self.build_dir is None:
83 raise EnvironmentError("Environment variable `%s' not set" % var)
84 self.vppDebug = 'vpp_debug' in self.build_dir
85 self.server_addr = "127.0.0.1"
86 self.server_port = "22000"
87 self.server_args = [self.server_port]
88 self.server_ipv6_addr = "::1"
89 self.server_ipv6_args = ["-6", self.server_port]
91 self.echo_phrase = "Hello, world! Jenny is a friend of mine."
92 self.pre_test_sleep = 0.3
93 self.post_test_sleep = 0.2
94 self.sapi_client_sock = ""
95 self.sapi_server_sock = ""
97 if os.path.isfile("/tmp/ldp_server_af_unix_socket"):
98 os.remove("/tmp/ldp_server_af_unix_socket")
100 super(VCLTestCase, self).setUp()
102 def update_vcl_app_env(self, ns_id, ns_secret, attach_sock):
104 if 'VCL_APP_NAMESPACE_ID' in self.vcl_app_env:
105 del self.vcl_app_env['VCL_APP_NAMESPACE_ID']
107 self.vcl_app_env['VCL_APP_NAMESPACE_ID'] = ns_id
110 if 'VCL_APP_NAMESPACE_SECRET' in self.vcl_app_env:
111 del self.vcl_app_env['VCL_APP_NAMESPACE_SECRET']
113 self.vcl_app_env['VCL_APP_NAMESPACE_SECRET'] = ns_secret
116 self.vcl_app_env['VCL_VPP_API_SOCKET'] = self.get_api_sock_path()
117 if 'VCL_VPP_SAPI_SOCKET' in self.vcl_app_env:
118 del self.vcl_app_env['VCL_VPP_SAPI_SOCKET']
120 sapi_sock = "%s/app_ns_sockets/%s" % (self.tempdir, attach_sock)
121 self.vcl_app_env['VCL_VPP_SAPI_SOCKET'] = sapi_sock
122 if 'VCL_VPP_API_SOCKET' in self.vcl_app_env:
123 del self.vcl_app_env['VCL_VPP_API_SOCKET']
125 def cut_thru_setup(self):
126 self.vapi.session_enable_disable(is_enable=1)
128 def cut_thru_tear_down(self):
129 self.vapi.session_enable_disable(is_enable=0)
131 def cut_thru_test(self, server_app, server_args, client_app, client_args):
132 self.vcl_app_env = {'VCL_APP_SCOPE_LOCAL': "true"}
134 self.update_vcl_app_env("", "", self.sapi_server_sock)
135 worker_server = VCLAppWorker(self.build_dir, server_app, server_args,
136 self.logger, self.vcl_app_env, "server")
137 worker_server.start()
138 self.sleep(self.pre_test_sleep)
140 self.update_vcl_app_env("", "", self.sapi_client_sock)
141 worker_client = VCLAppWorker(self.build_dir, client_app, client_args,
142 self.logger, self.vcl_app_env, "client")
143 worker_client.start()
144 worker_client.join(self.timeout)
146 self.validateResults(worker_client, worker_server, self.timeout)
147 except Exception as error:
148 self.fail("Failed with %s" % error)
149 self.sleep(self.post_test_sleep)
151 def thru_host_stack_setup(self):
152 self.vapi.session_enable_disable(is_enable=1)
153 self.create_loopback_interfaces(2)
157 for i in self.lo_interfaces:
161 tbl = VppIpTable(self, table_id)
164 i.set_table_ip4(table_id)
168 # Configure namespaces
169 self.vapi.app_namespace_add_del(namespace_id="1", secret=1234,
170 sw_if_index=self.loop0.sw_if_index)
171 self.vapi.app_namespace_add_del(namespace_id="2", secret=5678,
172 sw_if_index=self.loop1.sw_if_index)
174 # Add inter-table routes
175 ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
176 [VppRoutePath("0.0.0.0",
178 nh_table_id=2)], table_id=1)
179 ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
180 [VppRoutePath("0.0.0.0",
182 nh_table_id=1)], table_id=2)
183 ip_t01.add_vpp_config()
184 ip_t10.add_vpp_config()
185 self.logger.debug(self.vapi.cli("show ip fib"))
187 def thru_host_stack_tear_down(self):
188 for i in self.lo_interfaces:
193 def thru_host_stack_ipv6_setup(self):
194 self.vapi.session_enable_disable(is_enable=1)
195 self.create_loopback_interfaces(2)
199 for i in self.lo_interfaces:
202 tbl = VppIpTable(self, table_id, is_ip6=1)
205 i.set_table_ip6(table_id)
209 # Configure namespaces
210 self.vapi.app_namespace_add_del(namespace_id="1", secret=1234,
211 sw_if_index=self.loop0.sw_if_index)
212 self.vapi.app_namespace_add_del(namespace_id="2", secret=5678,
213 sw_if_index=self.loop1.sw_if_index)
215 # Add inter-table routes
216 ip_t01 = VppIpRoute(self, self.loop1.local_ip6, 128,
217 [VppRoutePath("::0", 0xffffffff,
220 ip_t10 = VppIpRoute(self, self.loop0.local_ip6, 128,
221 [VppRoutePath("::0", 0xffffffff,
224 ip_t01.add_vpp_config()
225 ip_t10.add_vpp_config()
226 self.logger.debug(self.vapi.cli("show interface addr"))
227 self.logger.debug(self.vapi.cli("show ip6 fib"))
229 def thru_host_stack_ipv6_tear_down(self):
230 for i in self.lo_interfaces:
235 self.vapi.session_enable_disable(is_enable=0)
237 @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
238 def thru_host_stack_test(self, server_app, server_args,
239 client_app, client_args):
240 self.vcl_app_env = {'VCL_APP_SCOPE_GLOBAL': "true"}
242 self.update_vcl_app_env("1", "1234", self.sapi_server_sock)
243 worker_server = VCLAppWorker(self.build_dir, server_app, server_args,
244 self.logger, self.vcl_app_env, "server")
245 worker_server.start()
246 self.sleep(self.pre_test_sleep)
248 self.update_vcl_app_env("2", "5678", self.sapi_client_sock)
249 worker_client = VCLAppWorker(self.build_dir, client_app, client_args,
250 self.logger, self.vcl_app_env, "client")
251 worker_client.start()
252 worker_client.join(self.timeout)
255 self.validateResults(worker_client, worker_server, self.timeout)
256 except Exception as error:
257 self.fail("Failed with %s" % error)
258 self.sleep(self.post_test_sleep)
260 def validateResults(self, worker_client, worker_server, timeout):
261 if worker_server.process is None:
262 raise RuntimeError('worker_server is not running.')
263 if os.path.isdir('/proc/{}'.format(worker_server.process.pid)):
264 self.logger.info("Killing server worker process (pid %d)" %
265 worker_server.process.pid)
266 os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM)
268 self.logger.info("Client worker result is `%s'" % worker_client.result)
270 if worker_client.result is None:
274 "Timeout: %ss! Killing client worker process (pid %d)" %
275 (timeout, worker_client.process.pid))
276 os.killpg(os.getpgid(worker_client.process.pid),
281 "Couldn't kill client worker process")
285 "Timeout! Client worker did not finish in %ss" % timeout)
286 self.assert_equal(worker_client.result, 0, "Binary test return code")
289 class LDPCutThruTestCase(VCLTestCase):
290 """ LDP Cut Thru Tests """
294 cls.session_startup = ["poll-main", "use-app-socket-api"]
295 super(LDPCutThruTestCase, cls).setUpClass()
298 def tearDownClass(cls):
299 super(LDPCutThruTestCase, cls).tearDownClass()
302 super(LDPCutThruTestCase, self).setUp()
304 self.cut_thru_setup()
305 self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
306 self.server_addr, self.server_port]
307 self.client_iperf3_timeout = 20
308 self.client_iperf3_args = ["-4", "-t 2", "-c", self.server_addr]
309 self.server_iperf3_args = ["-4", "-s"]
310 self.client_uni_dir_nsock_timeout = 20
311 self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
315 self.client_bi_dir_nsock_timeout = 20
316 self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
320 self.sapi_client_sock = "default"
321 self.sapi_server_sock = "default"
324 super(LDPCutThruTestCase, self).tearDown()
325 self.cut_thru_tear_down()
327 def show_commands_at_teardown(self):
328 self.logger.debug(self.vapi.cli("show session verbose 2"))
329 self.logger.debug(self.vapi.cli("show app mq"))
331 @unittest.skipUnless(running_extended_tests, "part of extended tests")
332 def test_ldp_cut_thru_echo(self):
333 """ run LDP cut thru echo test """
335 self.cut_thru_test("sock_test_server", self.server_args,
336 "sock_test_client", self.client_echo_test_args)
338 @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
339 def test_ldp_cut_thru_iperf3(self):
340 """ run LDP cut thru iperf3 test """
342 self.timeout = self.client_iperf3_timeout
343 self.cut_thru_test(iperf3, self.server_iperf3_args,
344 iperf3, self.client_iperf3_args)
346 @unittest.skipUnless(running_extended_tests, "part of extended tests")
347 def test_ldp_cut_thru_uni_dir_nsock(self):
348 """ run LDP cut thru uni-directional (multiple sockets) test """
350 self.timeout = self.client_uni_dir_nsock_timeout
351 self.cut_thru_test("sock_test_server", self.server_args,
353 self.client_uni_dir_nsock_test_args)
355 @unittest.skipUnless(running_extended_tests, "part of extended tests")
356 @unittest.skip("sock test apps need to be improved")
357 def test_ldp_cut_thru_bi_dir_nsock(self):
358 """ run LDP cut thru bi-directional (multiple sockets) test """
360 self.timeout = self.client_bi_dir_nsock_timeout
361 self.cut_thru_test("sock_test_server", self.server_args,
363 self.client_bi_dir_nsock_test_args)
366 class VCLCutThruTestCase(VCLTestCase):
367 """ VCL Cut Thru Tests """
371 super(VCLCutThruTestCase, cls).setUpClass()
374 def tearDownClass(cls):
375 super(VCLCutThruTestCase, cls).tearDownClass()
378 super(VCLCutThruTestCase, self).setUp()
380 self.cut_thru_setup()
381 self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
382 self.server_addr, self.server_port]
384 self.client_uni_dir_nsock_timeout = 20
385 self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
389 self.client_bi_dir_nsock_timeout = 20
390 self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
396 super(VCLCutThruTestCase, self).tearDown()
398 def show_commands_at_teardown(self):
399 self.logger.debug(self.vapi.cli("show session verbose 2"))
400 self.logger.debug(self.vapi.cli("show app mq"))
402 def test_vcl_cut_thru_echo(self):
403 """ run VCL cut thru echo test """
405 self.cut_thru_test("vcl_test_server", self.server_args,
406 "vcl_test_client", self.client_echo_test_args)
408 def test_vcl_cut_thru_uni_dir_nsock(self):
409 """ run VCL cut thru uni-directional (multiple sockets) test """
411 self.timeout = self.client_uni_dir_nsock_timeout
412 self.cut_thru_test("vcl_test_server", self.server_args,
414 self.client_uni_dir_nsock_test_args)
416 def test_vcl_cut_thru_bi_dir_nsock(self):
417 """ run VCL cut thru bi-directional (multiple sockets) test """
419 self.timeout = self.client_bi_dir_nsock_timeout
420 self.cut_thru_test("vcl_test_server", self.server_args,
422 self.client_bi_dir_nsock_test_args)
425 class VCLThruHostStackEcho(VCLTestCase):
426 """ VCL Thru Host Stack Echo """
430 super(VCLThruHostStackEcho, cls).setUpClass()
433 def tearDownClass(cls):
434 super(VCLThruHostStackEcho, cls).tearDownClass()
437 super(VCLThruHostStackEcho, self).setUp()
439 self.thru_host_stack_setup()
440 self.client_bi_dir_nsock_timeout = 20
441 self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
443 self.loop0.local_ip4,
445 self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
446 self.loop0.local_ip4,
450 self.thru_host_stack_tear_down()
451 super(VCLThruHostStackEcho, self).tearDown()
453 def test_vcl_thru_host_stack_echo(self):
454 """ run VCL IPv4 thru host stack echo test """
456 self.thru_host_stack_test("vcl_test_server",
459 self.client_echo_test_args)
461 def show_commands_at_teardown(self):
462 self.logger.debug(self.vapi.cli("show app server"))
463 self.logger.debug(self.vapi.cli("show session verbose"))
464 self.logger.debug(self.vapi.cli("show app mq"))
467 class VCLThruHostStackTLS(VCLTestCase):
468 """ VCL Thru Host Stack TLS """
472 cls.session_startup = ["poll-main", "use-app-socket-api"]
473 super(VCLThruHostStackTLS, cls).setUpClass()
476 def tearDownClass(cls):
477 super(VCLThruHostStackTLS, cls).tearDownClass()
480 super(VCLThruHostStackTLS, self).setUp()
482 self.thru_host_stack_setup()
483 self.client_uni_dir_tls_timeout = 20
484 self.server_tls_args = ["-L", self.server_port]
485 self.client_uni_dir_tls_test_args = ["-N", "1000", "-U", "-X", "-L",
486 self.loop0.local_ip4,
488 self.sapi_server_sock = "1"
489 self.sapi_client_sock = "2"
491 def test_vcl_thru_host_stack_tls_uni_dir(self):
492 """ run VCL thru host stack uni-directional TLS test """
494 self.timeout = self.client_uni_dir_tls_timeout
495 self.thru_host_stack_test("vcl_test_server", self.server_tls_args,
497 self.client_uni_dir_tls_test_args)
500 self.thru_host_stack_tear_down()
501 super(VCLThruHostStackTLS, self).tearDown()
503 def show_commands_at_teardown(self):
504 self.logger.debug(self.vapi.cli("show app server"))
505 self.logger.debug(self.vapi.cli("show session verbose 2"))
506 self.logger.debug(self.vapi.cli("show app mq"))
509 class VCLThruHostStackDTLS(VCLTestCase):
510 """ VCL Thru Host Stack DTLS """
514 super(VCLThruHostStackDTLS, cls).setUpClass()
517 def tearDownClass(cls):
518 super(VCLThruHostStackDTLS, cls).tearDownClass()
521 super(VCLThruHostStackDTLS, self).setUp()
523 self.thru_host_stack_setup()
524 self.client_uni_dir_dtls_timeout = 20
525 self.server_dtls_args = ["-p", "dtls", self.server_port]
526 self.client_uni_dir_dtls_test_args = ["-N", "1000", "-U", "-X",
527 "-p", "dtls", "-T 1400",
528 self.loop0.local_ip4,
531 def test_vcl_thru_host_stack_dtls_uni_dir(self):
532 """ run VCL thru host stack uni-directional DTLS test """
534 self.timeout = self.client_uni_dir_dtls_timeout
535 self.thru_host_stack_test("vcl_test_server", self.server_dtls_args,
537 self.client_uni_dir_dtls_test_args)
540 self.thru_host_stack_tear_down()
541 super(VCLThruHostStackDTLS, self).tearDown()
543 def show_commands_at_teardown(self):
544 self.logger.debug(self.vapi.cli("show app server"))
545 self.logger.debug(self.vapi.cli("show session verbose 2"))
546 self.logger.debug(self.vapi.cli("show app mq"))
549 class VCLThruHostStackQUIC(VCLTestCase):
550 """ VCL Thru Host Stack QUIC """
554 cls.extra_vpp_plugin_config.append("plugin quic_plugin.so { enable }")
555 super(VCLThruHostStackQUIC, cls).setUpClass()
558 def tearDownClass(cls):
559 super(VCLThruHostStackQUIC, cls).tearDownClass()
562 super(VCLThruHostStackQUIC, self).setUp()
564 self.thru_host_stack_setup()
565 self.client_uni_dir_quic_timeout = 20
566 self.server_quic_args = ["-p", "quic", self.server_port]
567 self.client_uni_dir_quic_test_args = ["-N", "1000", "-U", "-X",
569 self.loop0.local_ip4,
572 @unittest.skipUnless(running_extended_tests, "part of extended tests")
573 def test_vcl_thru_host_stack_quic_uni_dir(self):
574 """ run VCL thru host stack uni-directional QUIC test """
576 self.timeout = self.client_uni_dir_quic_timeout
577 self.thru_host_stack_test("vcl_test_server", self.server_quic_args,
579 self.client_uni_dir_quic_test_args)
582 self.thru_host_stack_tear_down()
583 super(VCLThruHostStackQUIC, self).tearDown()
585 def show_commands_at_teardown(self):
586 self.logger.debug(self.vapi.cli("show app server"))
587 self.logger.debug(self.vapi.cli("show session verbose 2"))
588 self.logger.debug(self.vapi.cli("show app mq"))
591 class VCLThruHostStackBidirNsock(VCLTestCase):
592 """ VCL Thru Host Stack Bidir Nsock """
596 super(VCLThruHostStackBidirNsock, cls).setUpClass()
599 def tearDownClass(cls):
600 super(VCLThruHostStackBidirNsock, cls).tearDownClass()
603 super(VCLThruHostStackBidirNsock, self).setUp()
605 self.thru_host_stack_setup()
606 self.client_bi_dir_nsock_timeout = 20
607 self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
609 self.loop0.local_ip4,
611 self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
612 self.loop0.local_ip4,
616 self.thru_host_stack_tear_down()
617 super(VCLThruHostStackBidirNsock, self).tearDown()
619 def show_commands_at_teardown(self):
620 self.logger.debug(self.vapi.cli("show session verbose 2"))
621 self.logger.debug(self.vapi.cli("show app mq"))
623 def test_vcl_thru_host_stack_bi_dir_nsock(self):
624 """ run VCL thru host stack bi-directional (multiple sockets) test """
626 self.timeout = self.client_bi_dir_nsock_timeout
627 self.thru_host_stack_test("vcl_test_server", self.server_args,
629 self.client_bi_dir_nsock_test_args)
632 class LDPThruHostStackBidirNsock(VCLTestCase):
633 """ LDP Thru Host Stack Bidir Nsock """
637 super(LDPThruHostStackBidirNsock, cls).setUpClass()
640 def tearDownClass(cls):
641 super(LDPThruHostStackBidirNsock, cls).tearDownClass()
644 super(LDPThruHostStackBidirNsock, self).setUp()
646 self.thru_host_stack_setup()
647 self.client_bi_dir_nsock_timeout = 20
648 self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
649 # OUCH! Host Stack Bug?
650 # Only fails when running
651 # 'make test TEST_JOBS=auto'
654 self.loop0.local_ip4,
658 self.thru_host_stack_tear_down()
659 super(LDPThruHostStackBidirNsock, self).tearDown()
661 def show_commands_at_teardown(self):
662 self.logger.debug(self.vapi.cli("show session verbose 2"))
663 self.logger.debug(self.vapi.cli("show app mq"))
665 def test_ldp_thru_host_stack_bi_dir_nsock(self):
666 """ run LDP thru host stack bi-directional (multiple sockets) test """
668 self.timeout = self.client_bi_dir_nsock_timeout
669 self.thru_host_stack_test("sock_test_server", self.server_args,
671 self.client_bi_dir_nsock_test_args)
674 class LDPThruHostStackNsock(VCLTestCase):
675 """ LDP Thru Host Stack Nsock """
679 super(LDPThruHostStackNsock, cls).setUpClass()
682 def tearDownClass(cls):
683 super(LDPThruHostStackNsock, cls).tearDownClass()
686 super(LDPThruHostStackNsock, self).setUp()
688 self.thru_host_stack_setup()
690 self.client_uni_dir_nsock_timeout = 20
691 self.numSockets = "2"
693 self.client_uni_dir_nsock_timeout = 20
694 self.numSockets = "5"
696 self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
697 "-I", self.numSockets,
698 self.loop0.local_ip4,
702 self.thru_host_stack_tear_down()
703 super(LDPThruHostStackNsock, self).tearDown()
705 def test_ldp_thru_host_stack_uni_dir_nsock(self):
706 """ run LDP thru host stack uni-directional (multiple sockets) test """
708 self.timeout = self.client_uni_dir_nsock_timeout
709 self.thru_host_stack_test("sock_test_server", self.server_args,
711 self.client_uni_dir_nsock_test_args)
714 class VCLThruHostStackNsock(VCLTestCase):
715 """ VCL Thru Host Stack Nsock """
719 super(VCLThruHostStackNsock, cls).setUpClass()
722 def tearDownClass(cls):
723 super(VCLThruHostStackNsock, cls).tearDownClass()
726 super(VCLThruHostStackNsock, self).setUp()
728 self.thru_host_stack_setup()
730 self.client_uni_dir_nsock_timeout = 20
731 self.numSockets = "2"
733 self.client_uni_dir_nsock_timeout = 20
734 self.numSockets = "5"
736 self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
737 "-I", self.numSockets,
738 self.loop0.local_ip4,
742 self.thru_host_stack_tear_down()
743 super(VCLThruHostStackNsock, self).tearDown()
745 def test_vcl_thru_host_stack_uni_dir_nsock(self):
746 """ run VCL thru host stack uni-directional (multiple sockets) test """
748 self.timeout = self.client_uni_dir_nsock_timeout
749 self.thru_host_stack_test("vcl_test_server", self.server_args,
751 self.client_uni_dir_nsock_test_args)
754 class LDPThruHostStackIperf(VCLTestCase):
755 """ LDP Thru Host Stack Iperf """
759 super(LDPThruHostStackIperf, cls).setUpClass()
762 def tearDownClass(cls):
763 super(LDPThruHostStackIperf, cls).tearDownClass()
766 super(LDPThruHostStackIperf, self).setUp()
768 self.thru_host_stack_setup()
769 self.client_iperf3_timeout = 20
770 self.client_iperf3_args = ["-4", "-t 2", "-c", self.loop0.local_ip4]
771 self.server_iperf3_args = ["-4", "-s"]
774 self.thru_host_stack_tear_down()
775 super(LDPThruHostStackIperf, self).tearDown()
777 def show_commands_at_teardown(self):
778 self.logger.debug(self.vapi.cli("show session verbose 2"))
779 self.logger.debug(self.vapi.cli("show app mq"))
781 @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
782 def test_ldp_thru_host_stack_iperf3(self):
783 """ run LDP thru host stack iperf3 test """
785 self.timeout = self.client_iperf3_timeout
786 self.thru_host_stack_test(iperf3, self.server_iperf3_args,
787 iperf3, self.client_iperf3_args)
790 class LDPThruHostStackIperfUdp(VCLTestCase):
791 """ LDP Thru Host Stack Iperf UDP """
795 super(LDPThruHostStackIperfUdp, cls).setUpClass()
798 def tearDownClass(cls):
799 super(LDPThruHostStackIperfUdp, cls).tearDownClass()
802 super(LDPThruHostStackIperfUdp, self).setUp()
804 self.thru_host_stack_setup()
805 self.client_iperf3_timeout = 20
806 self.client_iperf3_args = ["-4", "-t 2", "-u", "-l 1400",
807 "-c", self.loop0.local_ip4]
808 self.server_iperf3_args = ["-4", "-s"]
811 self.thru_host_stack_tear_down()
812 super(LDPThruHostStackIperfUdp, self).tearDown()
814 def show_commands_at_teardown(self):
815 self.logger.debug(self.vapi.cli("show session verbose 2"))
816 self.logger.debug(self.vapi.cli("show app mq"))
818 @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
819 def test_ldp_thru_host_stack_iperf3_udp(self):
820 """ run LDP thru host stack iperf3 UDP test """
822 self.timeout = self.client_iperf3_timeout
823 self.thru_host_stack_test(iperf3, self.server_iperf3_args,
824 iperf3, self.client_iperf3_args)
827 class LDPIpv6CutThruTestCase(VCLTestCase):
828 """ LDP IPv6 Cut Thru Tests """
832 super(LDPIpv6CutThruTestCase, cls).setUpClass()
835 def tearDownClass(cls):
836 super(LDPIpv6CutThruTestCase, cls).tearDownClass()
838 def show_commands_at_teardown(self):
839 self.logger.debug(self.vapi.cli("show session verbose 2"))
840 self.logger.debug(self.vapi.cli("show app mq"))
843 super(LDPIpv6CutThruTestCase, self).setUp()
845 self.cut_thru_setup()
846 self.client_iperf3_timeout = 20
847 self.client_uni_dir_nsock_timeout = 20
848 self.client_bi_dir_nsock_timeout = 20
849 self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
850 self.server_ipv6_addr,
852 self.client_ipv6_iperf3_args = ["-6", "-t 2", "-c",
853 self.server_ipv6_addr]
854 self.server_ipv6_iperf3_args = ["-6", "-s"]
855 self.client_ipv6_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
858 self.server_ipv6_addr,
860 self.client_ipv6_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
863 self.server_ipv6_addr,
867 super(LDPIpv6CutThruTestCase, self).tearDown()
868 self.cut_thru_tear_down()
870 def test_ldp_ipv6_cut_thru_echo(self):
871 """ run LDP IPv6 cut thru echo test """
873 self.cut_thru_test("sock_test_server",
874 self.server_ipv6_args,
876 self.client_ipv6_echo_test_args)
878 @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
879 @unittest.skipUnless(running_extended_tests, "part of extended tests")
880 def test_ldp_ipv6_cut_thru_iperf3(self):
881 """ run LDP IPv6 cut thru iperf3 test """
883 self.timeout = self.client_iperf3_timeout
884 self.cut_thru_test(iperf3, self.server_ipv6_iperf3_args,
885 iperf3, self.client_ipv6_iperf3_args)
887 @unittest.skipUnless(running_extended_tests, "part of extended tests")
888 def test_ldp_ipv6_cut_thru_uni_dir_nsock(self):
889 """ run LDP IPv6 cut thru uni-directional (multiple sockets) test """
891 self.timeout = self.client_uni_dir_nsock_timeout
892 self.cut_thru_test("sock_test_server", self.server_ipv6_args,
894 self.client_ipv6_uni_dir_nsock_test_args)
896 @unittest.skipUnless(running_extended_tests, "part of extended tests")
897 @unittest.skip("sock test apps need to be improved")
898 def test_ldp_ipv6_cut_thru_bi_dir_nsock(self):
899 """ run LDP IPv6 cut thru bi-directional (multiple sockets) test """
901 self.timeout = self.client_bi_dir_nsock_timeout
902 self.cut_thru_test("sock_test_server", self.server_ipv6_args,
904 self.client_ipv6_bi_dir_nsock_test_args)
907 class VCLIpv6CutThruTestCase(VCLTestCase):
908 """ VCL IPv6 Cut Thru Tests """
912 super(VCLIpv6CutThruTestCase, cls).setUpClass()
915 def tearDownClass(cls):
916 super(VCLIpv6CutThruTestCase, cls).tearDownClass()
918 def show_commands_at_teardown(self):
919 self.logger.debug(self.vapi.cli("show session verbose 2"))
920 self.logger.debug(self.vapi.cli("show app mq"))
923 super(VCLIpv6CutThruTestCase, self).setUp()
925 self.cut_thru_setup()
926 self.client_uni_dir_nsock_timeout = 20
927 self.client_bi_dir_nsock_timeout = 20
928 self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
929 self.server_ipv6_addr,
931 self.client_ipv6_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
934 self.server_ipv6_addr,
936 self.client_ipv6_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
939 self.server_ipv6_addr,
943 super(VCLIpv6CutThruTestCase, self).tearDown()
944 self.cut_thru_tear_down()
946 def show_commands_at_teardown(self):
947 self.logger.debug(self.vapi.cli("show session verbose 2"))
948 self.logger.debug(self.vapi.cli("show app mq"))
950 def test_vcl_ipv6_cut_thru_echo(self):
951 """ run VCL IPv6 cut thru echo test """
953 self.cut_thru_test("vcl_test_server",
954 self.server_ipv6_args,
956 self.client_ipv6_echo_test_args)
958 @unittest.skipUnless(running_extended_tests, "part of extended tests")
959 def test_vcl_ipv6_cut_thru_uni_dir_nsock(self):
960 """ run VCL IPv6 cut thru uni-directional (multiple sockets) test """
962 self.timeout = self.client_uni_dir_nsock_timeout
963 self.cut_thru_test("vcl_test_server", self.server_ipv6_args,
965 self.client_ipv6_uni_dir_nsock_test_args)
967 @unittest.skipUnless(running_extended_tests, "part of extended tests")
968 def test_vcl_ipv6_cut_thru_bi_dir_nsock(self):
969 """ run VCL IPv6 cut thru bi-directional (multiple sockets) test """
971 self.timeout = self.client_bi_dir_nsock_timeout
972 self.cut_thru_test("vcl_test_server", self.server_ipv6_args,
974 self.client_ipv6_bi_dir_nsock_test_args)
977 class VCLIpv6ThruHostStackEcho(VCLTestCase):
978 """ VCL IPv6 Thru Host Stack Echo """
982 super(VCLIpv6ThruHostStackEcho, cls).setUpClass()
985 def tearDownClass(cls):
986 super(VCLIpv6ThruHostStackEcho, cls).tearDownClass()
989 super(VCLIpv6ThruHostStackEcho, self).setUp()
991 self.thru_host_stack_ipv6_setup()
992 self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
993 self.loop0.local_ip6,
997 self.thru_host_stack_ipv6_tear_down()
998 super(VCLIpv6ThruHostStackEcho, self).tearDown()
1000 def test_vcl_ipv6_thru_host_stack_echo(self):
1001 """ run VCL IPv6 thru host stack echo test """
1003 self.thru_host_stack_test("vcl_test_server",
1004 self.server_ipv6_args,
1006 self.client_ipv6_echo_test_args)
1009 if __name__ == '__main__':
1010 unittest.main(testRunner=VppTestRunner)