소스 검색

fix(tests): undo faketime shifts (don't accumulate when rerun)

Peter Thomassen 4 년 전
부모
커밋
d90ed7124f
2개의 변경된 파일27개의 추가작업 그리고 19개의 파일을 삭제
  1. 16 7
      test/e2e2/conftest.py
  2. 11 12
      test/e2e2/spec/test_replication.py

+ 16 - 7
test/e2e2/conftest.py

@@ -413,12 +413,21 @@ def faketime_get():
         return '+0d'
 
 
-def faketime_add(days: int):
-    assert days >= 0
+class FaketimeShift:
+    # Note: Time is rolled back when exiting the context. Conceivably, this may cause weird side
+    # effects. So: Watch out for side effects. If any are found, let's rethink this.
 
-    current_faketime = faketime_get()
-    assert current_faketime[0] == '+'
-    assert current_faketime[-1] == 'd'
-    current_days = int(current_faketime[1:-1])
+    def __init__(self, days: int):
+        assert days >= 0
+        self.days = days
 
-    faketime(f'+{current_days + days:n}d')
+    def __enter__(self):
+        self._faketime = faketime_get()
+        assert self._faketime[0] == '+'
+        assert self._faketime[-1] == 'd'
+        current_days = int(self._faketime[1:-1])
+
+        faketime(f'+{current_days + self.days:n}d')
+
+    def __exit__(self, type, value, traceback):
+        faketime(self._faketime)

+ 11 - 12
test/e2e2/spec/test_replication.py

@@ -1,7 +1,7 @@
 import pytest
 
 from conftest import DeSECAPIV1Client, return_eventually, query_replication, random_domainname, assert_eventually, \
-    faketime_add
+    FaketimeShift
 
 
 some_ds_records = [
@@ -15,8 +15,8 @@ def test_signature_rotation(api_user_domain: DeSECAPIV1Client):
     name = random_domainname()
     api_user_domain.domain_create(name)
     rrsig = return_eventually(lambda: query_replication(name, "", 'RRSIG', covers='SOA'), timeout=20)
-    faketime_add(days=7)
-    assert_eventually(lambda: rrsig != query_replication(name, "", 'RRSIG', covers='SOA'), timeout=60)
+    with FaketimeShift(days=7):
+        assert_eventually(lambda: rrsig != query_replication(name, "", 'RRSIG', covers='SOA'), timeout=60)
 
 
 def test_zone_deletion(api_user_domain: DeSECAPIV1Client):
@@ -68,12 +68,11 @@ def test_signature_rotation_performance(api_user_domain: DeSECAPIV1Client):
             soa_rrsig[name] = return_eventually(lambda: query_replication(name, "", 'RRSIG', covers='SOA'), timeout=20)
 
     # rotate signatures
-    faketime_add(7)
-
-    # assert SOA RRSIG has been updated
-    for names in domain_names.values():
-        for name in names:
-            assert_eventually(
-                lambda: soa_rrsig[name] != query_replication(name, "", 'RRSIG', covers='SOA'),
-                timeout=600,  # depending on number of domains in the database, this value requires increase
-            )
+    with FaketimeShift(days=7):
+        # assert SOA RRSIG has been updated
+        for names in domain_names.values():
+            for name in names:
+                assert_eventually(
+                    lambda: soa_rrsig[name] != query_replication(name, "", 'RRSIG', covers='SOA'),
+                    timeout=600,  # depending on number of domains in the database, this value requires increase
+                )