aboutsummaryrefslogtreecommitdiffstats
path: root/test/framework.py
diff options
context:
space:
mode:
authorPaul Vinciguerra <pvinci@vinciconsulting.com>2019-06-20 12:24:12 -0400
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-06-24 16:03:09 +0000
commit496b0dee7f6fe4a0b18c5a5993c11840fd9a1ccc (patch)
tree167dd4fbddfcc41980f175381f719be75b4d8cf5 /test/framework.py
parentb98dbb1f2f94aba78a1b37c70721b562d13e1d7c (diff)
tests: refactor VppDiedError.
- Move Exception into same module as TestCase. - Move the error reporting logic inside the error. - Allows testing of the returncode and signal_name for tests to consume. - Fix the signal reporting code: VppDiedError: VPP subprocess died unexpectedly with returncode -6 [unknown]. displays as: VppDiedError: VPP subprocess died unexpectedly with return code: -6 [SIGABRT]. Type: test Change-Id: I8488ab318a596c9b737308829cedfb7e96e57302 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
Diffstat (limited to 'test/framework.py')
-rw-r--r--test/framework.py34
1 files changed, 27 insertions, 7 deletions
diff --git a/test/framework.py b/test/framework.py
index 26e93e4abd9..00fee86e9b0 100644
--- a/test/framework.py
+++ b/test/framework.py
@@ -5,6 +5,7 @@ import gc
import sys
import os
import select
+import signal
import unittest
import tempfile
import time
@@ -21,7 +22,7 @@ from logging import FileHandler, DEBUG, Formatter
import scapy.compat
from scapy.packet import Raw
-from hook import StepHook, PollHook, VppDiedError
+import hook as hookmodule
from vpp_pg_interface import VppPGInterface
from vpp_sub_interface import VppSubInterface
from vpp_lo_interface import VppLoInterface
@@ -69,6 +70,27 @@ if os.getenv('TEST_DEBUG', "0") == "1":
"""
+class VppDiedError(Exception):
+ """ exception for reporting that the subprocess has died."""
+
+ signals_by_value = {v: k for k, v in signal.__dict__.items() if
+ k.startswith('SIG') and not k.startswith('SIG_')}
+
+ def __init__(self, rv=None):
+ self.rv = rv
+ self.signal_name = None
+ try:
+ self.signal_name = VppDiedError.signals_by_value[-rv]
+ except KeyError:
+ pass
+
+ msg = "VPP subprocess died unexpectedly with return code: %d%s." % (
+ self.rv,
+ ' [%s]' % self.signal_name if
+ self.signal_name is not None else '')
+ super(VppDiedError, self).__init__(msg)
+
+
class _PacketInfo(object):
"""Private class to create packet info object.
@@ -492,9 +514,9 @@ class VppTestCase(unittest.TestCase):
cls.vapi = VppPapiProvider(cls.shm_prefix, cls.shm_prefix, cls,
read_timeout)
if cls.step:
- hook = StepHook(cls)
+ hook = hookmodule.StepHook(cls)
else:
- hook = PollHook(cls)
+ hook = hookmodule.PollHook(cls)
cls.vapi.register_hook(hook)
cls.wait_for_stats_socket()
cls.statistics = VPPStats(socketname=cls.stats_sock)
@@ -519,10 +541,8 @@ class VppTestCase(unittest.TestCase):
"to 'continue' VPP from within gdb?", RED))
raise
except Exception:
- try:
- cls.quit()
- except Exception:
- pass
+
+ cls.quit()
raise
@classmethod