@@ -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 )
@@ -662,21 +676,26 @@ def list_regex(line_format, tests):
662
676
state = f'{ state } then { new_state } '
663
677
self .check_line (output , f'Result: { state } ' , full = True )
664
678
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 )
670
682
671
683
def run_command (self , args , input = None , exitcode = 0 , ** kw ):
672
684
if not input :
673
685
input = ''
674
686
if 'stderr' not in kw :
675
687
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
+
676
694
proc = subprocess .run (args ,
677
695
text = True ,
678
696
input = input ,
679
697
stdout = subprocess .PIPE ,
698
+ env = env ,
680
699
** kw )
681
700
if proc .returncode != exitcode :
682
701
msg = ("Command %s failed with exit code %s, but exit code %s expected!\n "
@@ -752,7 +771,9 @@ def setUp(self):
752
771
self .regrtest_args .append ('-n' )
753
772
754
773
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
+
756
777
self .check_executed_tests (output , self .tests ,
757
778
randomize = True , stats = len (self .tests ))
758
779
@@ -943,7 +964,7 @@ def test_random(self):
943
964
test_random = int (match .group (1 ))
944
965
945
966
# 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 ,
947
968
exitcode = EXITCODE_NO_TESTS_RAN )
948
969
randseed2 = self .parse_random_seed (output )
949
970
self .assertEqual (randseed2 , randseed )
@@ -954,7 +975,32 @@ def test_random(self):
954
975
955
976
# check that random.seed is used by default
956
977
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 )
958
1004
959
1005
def test_fromfile (self ):
960
1006
# test --fromfile
0 commit comments