@@ -143,18 +143,26 @@ def test_header(self):
143143 self .assertTrue (ns .header )
144144
145145 def test_randomize (self ):
146- for opt in '-r' , '--randomize' :
146+ for opt in ( '-r' , '--randomize' ) :
147147 with self .subTest (opt = opt ):
148148 ns = self .parse_args ([opt ])
149149 self .assertTrue (ns .randomize )
150150
151151 with os_helper .EnvironmentVarGuard () as env :
152- env [ 'SOURCE_DATE_EPOCH' ] = '1'
153-
152+ # with SOURCE_DATE_EPOCH
153+ env [ 'SOURCE_DATE_EPOCH' ] = '1697839080'
154154 ns = self .parse_args (['--randomize' ])
155155 regrtest = main .Regrtest (ns )
156156 self .assertFalse (regrtest .randomize )
157- self .assertIsNone (regrtest .random_seed )
157+ self .assertIsInstance (regrtest .random_seed , str )
158+ self .assertEqual (regrtest .random_seed , '1697839080' )
159+
160+ # without SOURCE_DATE_EPOCH
161+ del env ['SOURCE_DATE_EPOCH' ]
162+ ns = self .parse_args (['--randomize' ])
163+ regrtest = main .Regrtest (ns )
164+ self .assertTrue (regrtest .randomize )
165+ self .assertIsInstance (regrtest .random_seed , int )
158166
159167 def test_randseed (self ):
160168 ns = self .parse_args (['--randseed' , '12345' ])
@@ -388,7 +396,13 @@ def check_ci_mode(self, args, use_resources, rerun=True):
388396
389397 # Check Regrtest attributes which are more reliable than Namespace
390398 # which has an unclear API
391- regrtest = main .Regrtest (ns )
399+ with os_helper .EnvironmentVarGuard () as env :
400+ # Ignore SOURCE_DATE_EPOCH env var if it's set
401+ if 'SOURCE_DATE_EPOCH' in env :
402+ del env ['SOURCE_DATE_EPOCH' ]
403+
404+ regrtest = main .Regrtest (ns )
405+
392406 self .assertEqual (regrtest .num_workers , - 1 )
393407 self .assertEqual (regrtest .want_rerun , rerun )
394408 self .assertTrue (regrtest .randomize )
@@ -662,21 +676,26 @@ def list_regex(line_format, tests):
662676 state = f'{ state } then { new_state } '
663677 self .check_line (output , f'Result: { state } ' , full = True )
664678
665- def parse_random_seed (self , output ):
666- match = self .regex_search (r'Using random seed ([0-9]+)' , output )
667- randseed = int (match .group (1 ))
668- self .assertTrue (0 <= randseed , randseed )
669- return randseed
679+ def parse_random_seed (self , output : str ) -> str :
680+ match = self .regex_search (r'Using random seed: (.*)' , output )
681+ return match .group (1 )
670682
671683 def run_command (self , args , input = None , exitcode = 0 , ** kw ):
672684 if not input :
673685 input = ''
674686 if 'stderr' not in kw :
675687 kw ['stderr' ] = subprocess .STDOUT
688+
689+ env = kw .pop ('env' , None )
690+ if env is None :
691+ env = dict (os .environ )
692+ env .pop ('SOURCE_DATE_EPOCH' , None )
693+
676694 proc = subprocess .run (args ,
677695 text = True ,
678696 input = input ,
679697 stdout = subprocess .PIPE ,
698+ env = env ,
680699 ** kw )
681700 if proc .returncode != exitcode :
682701 msg = ("Command %s failed with exit code %s, but exit code %s expected!\n "
@@ -752,7 +771,9 @@ def setUp(self):
752771 self .regrtest_args .append ('-n' )
753772
754773 def check_output (self , output ):
755- self .parse_random_seed (output )
774+ randseed = self .parse_random_seed (output )
775+ self .assertTrue (randseed .isdigit (), randseed )
776+
756777 self .check_executed_tests (output , self .tests ,
757778 randomize = True , stats = len (self .tests ))
758779
@@ -943,7 +964,7 @@ def test_random(self):
943964 test_random = int (match .group (1 ))
944965
945966 # try to reproduce with the random seed
946- output = self .run_tests ('-r' , '--randseed=%s' % randseed , test ,
967+ output = self .run_tests ('-r' , f '--randseed={ randseed } ' , test ,
947968 exitcode = EXITCODE_NO_TESTS_RAN )
948969 randseed2 = self .parse_random_seed (output )
949970 self .assertEqual (randseed2 , randseed )
@@ -954,7 +975,32 @@ def test_random(self):
954975
955976 # check that random.seed is used by default
956977 output = self .run_tests (test , exitcode = EXITCODE_NO_TESTS_RAN )
957- self .assertIsInstance (self .parse_random_seed (output ), int )
978+ randseed = self .parse_random_seed (output )
979+ self .assertTrue (randseed .isdigit (), randseed )
980+
981+ # check SOURCE_DATE_EPOCH (integer)
982+ timestamp = '1697839080'
983+ env = dict (os .environ , SOURCE_DATE_EPOCH = timestamp )
984+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
985+ env = env )
986+ randseed = self .parse_random_seed (output )
987+ self .assertEqual (randseed , timestamp )
988+ self .check_line (output , 'TESTRANDOM: 520' )
989+
990+ # check SOURCE_DATE_EPOCH (string)
991+ env = dict (os .environ , SOURCE_DATE_EPOCH = 'XYZ' )
992+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
993+ env = env )
994+ randseed = self .parse_random_seed (output )
995+ self .assertEqual (randseed , 'XYZ' )
996+ self .check_line (output , 'TESTRANDOM: 22' )
997+
998+ # check SOURCE_DATE_EPOCH (empty string): ignore the env var
999+ env = dict (os .environ , SOURCE_DATE_EPOCH = '' )
1000+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
1001+ env = env )
1002+ randseed = self .parse_random_seed (output )
1003+ self .assertTrue (randseed .isdigit (), randseed )
9581004
9591005 def test_fromfile (self ):
9601006 # test --fromfile
0 commit comments