diff options
author | Klement Sekera <ksekera@cisco.com> | 2016-11-24 01:59:16 +0100 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2016-11-28 11:54:47 +0000 |
commit | 085f5c00661ef00a038d3d54be7be6dafd0a6d89 (patch) | |
tree | 649461c595f1f1e2709bc149b9d8b26a83417c54 | |
parent | 475f055305cf904b1c1c0436654f2f3e1c4f3358 (diff) |
make test: detect early vpp crash
If VPP process dies right at start, do a quick detection instead of being
stuck in the connect timeout (60s).
Change-Id: I41675181635fb81a6a7d93fbf652480a16bf78a0
Signed-off-by: Klement Sekera <ksekera@cisco.com>
-rw-r--r-- | test/framework.py | 31 | ||||
-rw-r--r-- | test/hook.py | 3 |
2 files changed, 18 insertions, 16 deletions
diff --git a/test/framework.py b/test/framework.py index 1375f076..315556a8 100644 --- a/test/framework.py +++ b/test/framework.py @@ -177,6 +177,7 @@ class VppTestCase(unittest.TestCase): cls.pg_streams = [] cls.packet_infos = {} cls.verbose = 0 + cls.vpp_dead = False print(double_line_delim) print(colorize(getdoc(cls).splitlines()[0], YELLOW)) print(double_line_delim) @@ -184,13 +185,22 @@ class VppTestCase(unittest.TestCase): # doesn't get called and we might end with a zombie vpp try: cls.run_vpp() - cls.vpp_dead = False + cls.vpp_stdout_queue = Queue() + cls.vpp_stdout_reader_thread = Thread( + target=pump_output, args=(cls.vpp.stdout, cls.vpp_stdout_queue)) + cls.vpp_stdout_reader_thread.start() + cls.vpp_stderr_queue = Queue() + cls.vpp_stderr_reader_thread = Thread( + target=pump_output, args=(cls.vpp.stderr, cls.vpp_stderr_queue)) + cls.vpp_stderr_reader_thread.start() cls.vapi = VppPapiProvider(cls.shm_prefix, cls.shm_prefix) if cls.step: - cls.vapi.register_hook(StepHook(cls)) + hook = StepHook(cls) else: - cls.vapi.register_hook(PollHook(cls)) + hook = PollHook(cls) + cls.vapi.register_hook(hook) time.sleep(0.1) + hook.poll_vpp() try: cls.vapi.connect() except: @@ -199,18 +209,11 @@ class VppTestCase(unittest.TestCase): "VPP-API connection failed, did you forget " "to 'continue' VPP from within gdb?", RED)) raise - cls.vpp_stdout_queue = Queue() - cls.vpp_stdout_reader_thread = Thread( - target=pump_output, args=(cls.vpp.stdout, cls.vpp_stdout_queue)) - cls.vpp_stdout_reader_thread.start() - cls.vpp_stderr_queue = Queue() - cls.vpp_stderr_reader_thread = Thread( - target=pump_output, args=(cls.vpp.stderr, cls.vpp_stderr_queue)) - cls.vpp_stderr_reader_thread.start() except: - if hasattr(cls, 'vpp'): - cls.vpp.terminate() - del cls.vpp + try: + cls.quit() + except: + pass raise @classmethod diff --git a/test/hook.py b/test/hook.py index f81e5187..90e9bbf5 100644 --- a/test/hook.py +++ b/test/hook.py @@ -57,7 +57,6 @@ class PollHook(Hook): """ Hook which checks if the vpp subprocess is alive """ def __init__(self, testcase): - self.vpp_dead = False self.testcase = testcase self.logger = testcase.logger @@ -92,7 +91,7 @@ class PollHook(Hook): Poll the vpp status and throw an exception if it's not running :raises VppDiedError: exception if VPP is not running anymore """ - if self.vpp_dead: + if self.testcase.vpp_dead: # already dead, nothing to do return |