@@ -310,43 +310,66 @@ def test_new_timestamp_unsigned(self) -> None:
310
310
311
311
@patch .object (datetime , "datetime" , wraps = datetime .datetime )
312
312
def test_expired_timestamp_version_rollback (self , mock_time : Mock ) -> None :
313
+
314
+ now = datetime .datetime .utcnow ()
315
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
316
+ days = 7
317
+ )
318
+ self .sim .timestamp .version = 2
319
+
320
+ # Make a successful update of valid metadata which stores it in cache
313
321
self ._run_refresh ()
314
322
315
- mock_time .utcnow .return_value = (
316
- datetime .datetime .utcnow () + datetime .timedelta (seconds = 1 )
323
+ self .sim .timestamp .version = 1
324
+
325
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
326
+ days = 21
317
327
)
318
- with patch ("datetime.datetime" , mock_time ):
319
- # Check for a rollback attack
320
- self .sim .timestamp .version = 2
321
- self ._run_refresh ()
322
328
323
- self .sim .timestamp .version = 1
329
+ mock_time .utcnow .return_value = (
330
+ datetime .datetime .utcnow () + datetime .timedelta (
331
+ days = 18
332
+ ))
333
+ with patch ("datetime.datetime" , mock_time ):
334
+ # Check that a rollback protection is performed even if
335
+ # local timestamp has expired
324
336
with self .assertRaises (BadVersionNumberError ):
325
337
self ._run_refresh ()
326
338
327
- self ._assert_version_equals (Timestamp .type , 2 )
339
+ self ._assert_version_equals (Timestamp .type , 2 )
328
340
329
341
@patch .object (datetime , "datetime" , wraps = datetime .datetime )
330
342
def test_expired_timestamp_snapshot_rollback (self , mock_time : Mock ) -> None :
331
- self ._run_refresh ()
332
343
333
- mock_time .utcnow .return_value = (
334
- datetime .datetime .utcnow () + datetime .timedelta (seconds = 1 )
344
+ now = datetime .datetime .utcnow ()
345
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
346
+ days = 7
335
347
)
336
- with patch ("datetime.datetime" , mock_time ):
337
- # Check for a rollback attack.
338
- self .sim .snapshot .version = 2
339
- self .sim .update_timestamp () # timestamp v2
340
- self ._run_refresh ()
348
+ # Bump the snapshot version number to 3
349
+ self .sim .update_snapshot ()
350
+ self .sim .update_snapshot ()
341
351
342
- # Snapshot meta version is smaller than previous
343
- self .sim .timestamp .snapshot_meta .version = 1
344
- self .sim .timestamp .version += 1 # timestamp v3
352
+ # Make a successful update of valid metadata which stores it in cache
353
+ self ._run_refresh ()
345
354
355
+ self .sim .snapshot .version = 1
356
+ # Snapshot version number is set to 2, which is still less than 3
357
+ self .sim .update_snapshot ()
358
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
359
+ days = 21
360
+ )
361
+
362
+ mock_time .utcnow .return_value = (
363
+ datetime .datetime .utcnow () + datetime .timedelta (
364
+ days = 18
365
+ ))
366
+ with patch ("datetime.datetime" , mock_time ):
367
+ # Assert that rollback protection is done even if
368
+ # local timestamp has expired
346
369
with self .assertRaises (BadVersionNumberError ):
347
370
self ._run_refresh ()
348
371
349
- self ._assert_version_equals (Timestamp .type , 2 )
372
+ self ._assert_version_equals (Timestamp .type , 3 )
350
373
351
374
def test_new_timestamp_version_rollback (self ) -> None :
352
375
# Check for a rollback attack
@@ -709,19 +732,26 @@ def test_expired_metadata(self, mock_time: Mock) -> None:
709
732
# Test that expired local timestamp/snapshot can be used for updating
710
733
# from remote
711
734
735
+ now = datetime .datetime .utcnow ()
736
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
737
+ days = 7
738
+ )
712
739
# Make a successful update of valid metadata which stores it in cache
713
740
self ._run_refresh ()
714
741
715
- # Simulate expired local metadata by mocking system time one second ahead
742
+ self .sim .targets .version += 1
743
+ self .sim .update_snapshot ()
744
+ self .sim .timestamp .expires = now .replace (microsecond = 0 ) + datetime .timedelta (
745
+ days = 21
746
+ )
747
+
748
+ # Mocking time so that local timestam has expired
749
+ # but the new timestamp has not
716
750
mock_time .utcnow .return_value = (
717
- datetime .datetime .utcnow () + datetime .timedelta (seconds = 1 )
751
+ datetime .datetime .utcnow () + datetime .timedelta (days = 18 )
718
752
)
719
753
with patch ("datetime.datetime" , mock_time ):
720
- self .sim .targets .version += 1
721
- self .sim .update_snapshot ()
722
- # Create a new updater and perform a second update while
723
- # the metadata is already stored in cache (metadata dir)
724
- self ._run_refresh ()
754
+ self ._run_refresh ()
725
755
726
756
# Assert that the final version of timestamp/snapshot is version 2
727
757
# which means a successful refresh is performed
0 commit comments