tests: support setting random seed 49/23449/2
authorKlement Sekera <ksekera@cisco.com>
Tue, 5 Nov 2019 11:18:25 +0000 (11:18 +0000)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Mon, 18 Nov 2019 13:17:57 +0000 (13:17 +0000)
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)

test/Makefile
test/framework.py
test/run_tests.py
test/sanity_run_vpp.py

index abc611c..2a09bcc 100644 (file)
@@ -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"
index 4e43224..046a601 100644 (file)
@@ -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 = []
index c9c5bdb..8b9ff90 100644 (file)
@@ -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
index 92f250b..2ee7d31 100644 (file)
@@ -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()