@@ -143,18 +143,26 @@ def test_header(self):
143
143
self .assertTrue (ns .header )
144
144
145
145
def test_randomize (self ):
146
- for opt in '-r' , '--randomize' :
146
+ for opt in ( '-r' , '--randomize' ) :
147
147
with self .subTest (opt = opt ):
148
148
ns = self .parse_args ([opt ])
149
149
self .assertTrue (ns .randomize )
150
150
151
151
with os_helper .EnvironmentVarGuard () as env :
152
- env [ 'SOURCE_DATE_EPOCH' ] = '1'
153
-
152
+ # with SOURCE_DATE_EPOCH
153
+ env [ 'SOURCE_DATE_EPOCH' ] = '1697839080'
154
154
ns = self .parse_args (['--randomize' ])
155
155
regrtest = main .Regrtest (ns )
156
156
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 )
158
166
159
167
def test_randseed (self ):
160
168
ns = self .parse_args (['--randseed' , '12345' ])
@@ -388,7 +396,13 @@ def check_ci_mode(self, args, use_resources, rerun=True):
388
396
389
397
# Check Regrtest attributes which are more reliable than Namespace
390
398
# 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
+
392
406
self .assertEqual (regrtest .num_workers , - 1 )
393
407
self .assertEqual (regrtest .want_rerun , rerun )
394
408
self .assertTrue (regrtest .randomize )
@@ -661,21 +675,26 @@ def list_regex(line_format, tests):
661
675
state = f'{ state } then { new_state } '
662
676
self .check_line (output , f'Result: { state } ' , full = True )
663
677
664
- def parse_random_seed (self , output ):
665
- match = self .regex_search (r'Using random seed ([0-9]+)' , output )
666
- randseed = int (match .group (1 ))
667
- self .assertTrue (0 <= randseed , randseed )
668
- return randseed
678
+ def parse_random_seed (self , output : str ) -> str :
679
+ match = self .regex_search (r'Using random seed: (.*)' , output )
680
+ return match .group (1 )
669
681
670
682
def run_command (self , args , input = None , exitcode = 0 , ** kw ):
671
683
if not input :
672
684
input = ''
673
685
if 'stderr' not in kw :
674
686
kw ['stderr' ] = subprocess .STDOUT
687
+
688
+ env = kw .pop ('env' , None )
689
+ if env is None :
690
+ env = dict (os .environ )
691
+ env .pop ('SOURCE_DATE_EPOCH' , None )
692
+
675
693
proc = subprocess .run (args ,
676
694
text = True ,
677
695
input = input ,
678
696
stdout = subprocess .PIPE ,
697
+ env = env ,
679
698
** kw )
680
699
if proc .returncode != exitcode :
681
700
msg = ("Command %s failed with exit code %s, but exit code %s expected!\n "
@@ -751,7 +770,9 @@ def setUp(self):
751
770
self .regrtest_args .append ('-n' )
752
771
753
772
def check_output (self , output ):
754
- self .parse_random_seed (output )
773
+ randseed = self .parse_random_seed (output )
774
+ self .assertTrue (randseed .isdigit (), randseed )
775
+
755
776
self .check_executed_tests (output , self .tests ,
756
777
randomize = True , stats = len (self .tests ))
757
778
@@ -942,7 +963,7 @@ def test_random(self):
942
963
test_random = int (match .group (1 ))
943
964
944
965
# try to reproduce with the random seed
945
- output = self .run_tests ('-r' , '--randseed=%s' % randseed , test ,
966
+ output = self .run_tests ('-r' , f '--randseed={ randseed } ' , test ,
946
967
exitcode = EXITCODE_NO_TESTS_RAN )
947
968
randseed2 = self .parse_random_seed (output )
948
969
self .assertEqual (randseed2 , randseed )
@@ -953,7 +974,32 @@ def test_random(self):
953
974
954
975
# check that random.seed is used by default
955
976
output = self .run_tests (test , exitcode = EXITCODE_NO_TESTS_RAN )
956
- self .assertIsInstance (self .parse_random_seed (output ), int )
977
+ randseed = self .parse_random_seed (output )
978
+ self .assertTrue (randseed .isdigit (), randseed )
979
+
980
+ # check SOURCE_DATE_EPOCH (integer)
981
+ timestamp = '1697839080'
982
+ env = dict (os .environ , SOURCE_DATE_EPOCH = timestamp )
983
+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
984
+ env = env )
985
+ randseed = self .parse_random_seed (output )
986
+ self .assertEqual (randseed , timestamp )
987
+ self .check_line (output , 'TESTRANDOM: 520' )
988
+
989
+ # check SOURCE_DATE_EPOCH (string)
990
+ env = dict (os .environ , SOURCE_DATE_EPOCH = 'XYZ' )
991
+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
992
+ env = env )
993
+ randseed = self .parse_random_seed (output )
994
+ self .assertEqual (randseed , 'XYZ' )
995
+ self .check_line (output , 'TESTRANDOM: 22' )
996
+
997
+ # check SOURCE_DATE_EPOCH (empty string): ignore the env var
998
+ env = dict (os .environ , SOURCE_DATE_EPOCH = '' )
999
+ output = self .run_tests ('-r' , test , exitcode = EXITCODE_NO_TESTS_RAN ,
1000
+ env = env )
1001
+ randseed = self .parse_random_seed (output )
1002
+ self .assertTrue (randseed .isdigit (), randseed )
957
1003
958
1004
def test_fromfile (self ):
959
1005
# test --fromfile
0 commit comments