aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKlement Sekera <ksekera@cisco.com>2019-11-05 11:18:25 +0000
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-11-18 13:17:57 +0000
commitfc000f0e1d61a9361e364a8f757e416fad7883b7 (patch)
treec579b945cd990f477d9c55c66c24893da6205e1a
parent329c884aa27398523377736f51a2694ec2c4820d (diff)
tests: support setting random seed
Log the random seed used when running tests and provide means to re-use it in a later run. Type: feature Change-Id: I18d2a36ee802b901d4cca5577df41cec07f09cc0 Signed-off-by: Klement Sekera <ksekera@cisco.com> (cherry picked from commit 45a95dd782b91e9ae5665b5f95be4b6d7f99b879)
-rw-r--r--test/Makefile2
-rw-r--r--test/framework.py4
-rw-r--r--test/run_tests.py5
-rw-r--r--test/sanity_run_vpp.py3
4 files changed, 13 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index abc611c44d9..2a09bcc6d24 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -341,6 +341,8 @@ help:
@echo ""
@echo " SOCKET=1 - Communicate with VPP over Unix domain socket instead of SHM"
@echo ""
+ @echo " RND_SEED=seed - Seed RND with given seed"
+ @echo ""
@echo "Creating test documentation"
@echo " test-doc - generate documentation for test framework"
@echo " test-wipe-doc - wipe documentation for test framework"
diff --git a/test/framework.py b/test/framework.py
index 4e43224c302..046a601e3e3 100644
--- a/test/framework.py
+++ b/test/framework.py
@@ -500,8 +500,9 @@ class VppTestCase(unittest.TestCase):
"""
super(VppTestCase, cls).setUpClass()
gc.collect() # run garbage collection first
- random.seed()
cls.logger = get_logger(cls.__name__)
+ seed = os.environ["RND_SEED"]
+ random.seed(seed)
if hasattr(cls, 'parallel_handler'):
cls.logger.addHandler(cls.parallel_handler)
cls.logger.propagate = False
@@ -522,6 +523,7 @@ class VppTestCase(unittest.TestCase):
os.chdir(cls.tempdir)
cls.logger.info("Temporary dir is %s, shm prefix is %s",
cls.tempdir, cls.shm_prefix)
+ cls.logger.debug("Random seed is %s" % seed)
cls.setUpConstants()
cls.reset_packet_infos()
cls._captures = []
diff --git a/test/run_tests.py b/test/run_tests.py
index c9c5bdb8a6e..8b9ff907296 100644
--- a/test/run_tests.py
+++ b/test/run_tests.py
@@ -732,6 +732,11 @@ def parse_digit_env(env_var, default):
if __name__ == '__main__':
+ if "RND_SEED" not in os.environ:
+ os.environ["RND_SEED"] = str(time.time())
+ print("Setting RND_SEED=%s" % os.environ["RND_SEED"])
+ else:
+ print("Using provided RND_SEED=%s" % os.environ["RND_SEED"])
verbose = parse_digit_env("V", 0)
test_timeout = parse_digit_env("TIMEOUT", 600) # default = 10 minutes
diff --git a/test/sanity_run_vpp.py b/test/sanity_run_vpp.py
index 92f250b2a6b..2ee7d310a35 100644
--- a/test/sanity_run_vpp.py
+++ b/test/sanity_run_vpp.py
@@ -3,6 +3,7 @@
from __future__ import print_function
from multiprocessing import Pipe
from sys import exit
+import os
from framework import VppDiedError, VppTestCase, KeepAliveReporter
@@ -10,7 +11,9 @@ class SanityTestCase(VppTestCase):
""" Sanity test case - verify whether VPP is able to start """
pass
+
if __name__ == '__main__':
+ os.environ["RND_SEED"] = "1"
rc = 0
tc = SanityTestCase
x, y = Pipe()