From 6a6f4f7fe777dc77f8496fae1fc1075372ad16b6 Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Thu, 9 Nov 2017 09:16:39 +0100 Subject: make test: automatically seed random generator Change-Id: I286b61d41cc2b557de3eb8801ff95c643f680acd Signed-off-by: Klement Sekera --- test/framework.py | 44 ++++++++++++++++++++++++++++++++++---------- test/test_acl_plugin.py | 2 -- test/test_nat.py | 2 -- 3 files changed, 34 insertions(+), 14 deletions(-) (limited to 'test') diff --git a/test/framework.py b/test/framework.py index 00f55ad893e..3386c201e33 100644 --- a/test/framework.py +++ b/test/framework.py @@ -10,6 +10,7 @@ import tempfile import time import resource import faulthandler +import random from collections import deque from threading import Thread, Event from inspect import getdoc, isclass @@ -68,23 +69,45 @@ class _PacketInfo(object): def pump_output(testclass): """ pump output from vpp stdout/stderr to proper queues """ + stdout_fragment = "" + stderr_fragment = "" while not testclass.pump_thread_stop_flag.wait(0): readable = select.select([testclass.vpp.stdout.fileno(), testclass.vpp.stderr.fileno(), testclass.pump_thread_wakeup_pipe[0]], [], [])[0] if testclass.vpp.stdout.fileno() in readable: - read = os.read(testclass.vpp.stdout.fileno(), 1024) - testclass.vpp_stdout_deque.append(read) - if not testclass.cache_vpp_output: - for line in read.splitlines(): - testclass.logger.debug("VPP STDOUT: %s" % line) + read = os.read(testclass.vpp.stdout.fileno(), 102400) + if len(read) > 0: + split = read.splitlines(True) + if len(stdout_fragment) > 0: + split[0] = "%s%s" % (stdout_fragment, split[0]) + if len(split) > 0 and split[-1].endswith("\n"): + limit = None + else: + limit = -1 + stdout_fragment = split[-1] + testclass.vpp_stdout_deque.extend(split[:limit]) + if not testclass.cache_vpp_output: + for line in split[:limit]: + testclass.logger.debug( + "VPP STDOUT: %s" % line.rstrip("\n")) if testclass.vpp.stderr.fileno() in readable: - read = os.read(testclass.vpp.stderr.fileno(), 1024) - testclass.vpp_stderr_deque.append(read) - if not testclass.cache_vpp_output: - for line in read.splitlines(): - testclass.logger.debug("VPP STDERR: %s" % line) + read = os.read(testclass.vpp.stderr.fileno(), 102400) + if len(read) > 0: + split = read.splitlines(True) + if len(stderr_fragment) > 0: + split[0] = "%s%s" % (stderr_fragment, split[0]) + if len(split) > 0 and split[-1].endswith("\n"): + limit = None + else: + limit = -1 + stderr_fragment = split[-1] + testclass.vpp_stderr_deque.extend(split[:limit]) + if not testclass.cache_vpp_output: + for line in split[:limit]: + testclass.logger.debug( + "VPP STDERR: %s" % line.rstrip("\n")) # ignoring the dummy pipe here intentionally - the flag will take care # of properly terminating the loop @@ -294,6 +317,7 @@ class VppTestCase(unittest.TestCase): Remove shared memory files, start vpp and connect the vpp-api """ gc.collect() # run garbage collection first + random.seed() cls.logger = getLogger(cls.__name__) cls.tempdir = tempfile.mkdtemp( prefix='vpp-unittest-%s-' % cls.__name__) diff --git a/test/test_acl_plugin.py b/test/test_acl_plugin.py index cd375a2cea7..4d748921aaf 100644 --- a/test/test_acl_plugin.py +++ b/test/test_acl_plugin.py @@ -85,8 +85,6 @@ class TestACLplugin(VppTestCase): """ super(TestACLplugin, cls).setUpClass() - random.seed() - try: # Create 2 pg interfaces cls.create_pg_interfaces(range(2)) diff --git a/test/test_nat.py b/test/test_nat.py index b01fe076754..6eb54dda2e7 100644 --- a/test/test_nat.py +++ b/test/test_nat.py @@ -704,8 +704,6 @@ class TestNAT44(MethodHolder): cls.pg4._remote_ip4 = cls.pg9._remote_hosts[0]._ip4 = "10.0.0.2" cls.pg9.resolve_arp() - random.seed() - except Exception: super(TestNAT44, cls).tearDownClass() raise -- cgit 1.2.3-korg