فهرست منبع

refactor(e2e2): restructure domain management and RRset tests

Peter Thomassen 4 سال پیش
والد
کامیت
9a1fa77253
3فایلهای تغییر یافته به همراه39 افزوده شده و 21 حذف شده
  1. 19 11
      test/e2e2/conftest.py
  2. 5 3
      test/e2e2/spec/test_api_domains.py
  3. 15 7
      test/e2e2/spec/test_api_rr_validation.py

+ 19 - 11
test/e2e2/conftest.py

@@ -76,7 +76,7 @@ class DeSECAPIV1Client:
         super().__init__()
         self.email = None
         self.password = None
-        self.domains = []
+        self.domains = {}
 
         # We support two certificate verification methods
         # (1) against self-signed certificates, if /autocert path is present
@@ -97,6 +97,13 @@ class DeSECAPIV1Client:
             pass
         return output
 
+    @property
+    def domain(self):
+        try:
+            return next(iter(self.domains))
+        except StopIteration:
+            return None
+
     def _do_request(self, *args, **kwargs):
         verify_list = [self.verify] + self.verify_alt
         exc = None
@@ -179,20 +186,21 @@ class DeSECAPIV1Client:
         return response
 
     def domain_list(self) -> requests.Response:
-        return self.get("/domains/")
+        return self.get("/domains/").json()
 
     def domain_create(self, name) -> requests.Response:
-        self.domains.append(name)
-        return self.post(
-            "/domains/",
-            data={
-                "name": name,
-            }
-        )
+        if name in self.domains:
+            raise ValueError
+        response = self.post("/domains/", data={"name": name})
+        self.domains[name] = response.json()
+        return response
 
     def domain_destroy(self, name) -> requests.Response:
-        self.domains.remove(name)
-        return self.delete(f"/domains/{name}/")
+        if name not in self.domains:
+            raise ValueError
+        response = self.delete(f"/domains/{name}/")
+        self.domains.pop(name)
+        return response
 
     def rr_set_create(self, domain_name: str, rr_type: str, records: Iterable[str], subname: str = '',
                       ttl: int = 3600) -> requests.Response:

+ 5 - 3
test/e2e2/spec/test_api_domains.py

@@ -2,10 +2,12 @@ from conftest import DeSECAPIV1Client
 
 
 def test_create(api_user: DeSECAPIV1Client, random_domainname):
+    assert len(api_user.domain_list()) == 0
     assert api_user.domain_create(random_domainname()).status_code == 201
+    assert len(api_user.domain_list()) == 1
 
 
 def test_destroy(api_user_domain: DeSECAPIV1Client):
-    n = len(api_user_domain.domain_list().json())
-    assert api_user_domain.domain_destroy(api_user_domain.domains[0]).status_code == 204
-    assert len(api_user_domain.domain_list().json()) == n - 1
+    n = len(api_user_domain.domain_list())
+    assert api_user_domain.domain_destroy(api_user_domain.domain).status_code == 204
+    assert len(api_user_domain.domain_list()) == n - 1

+ 15 - 7
test/e2e2/spec/test_api_rr_validation.py

@@ -313,21 +313,29 @@ def test_soundness():
 
 @pytest.mark.parametrize("rr_type,value", generate_params(VALID_RECORDS_CANONICAL))
 def test_create_valid_canonical(api_user_domain: DeSECAPIV1Client, ns_lord: NSClient, rr_type: str, value: str):
-    assert api_user_domain.rr_set_create(api_user_domain.domains[0], rr_type, [value], subname="a").status_code == 201
-    assert ns_lord.query(f"a.{api_user_domain.domains[0]}", rr_type) == {value}
+    domain_name = api_user_domain.domain
+    expected = set()
+    assert api_user_domain.rr_set_create(domain_name, rr_type, [value], subname='a').status_code == 201
+    expected.add(value)
+    rrset = ns_lord.query(f'a.{domain_name}'.strip('.'), rr_type)
+    assert rrset == expected
 
 
 @pytest.mark.parametrize("rr_type,value", generate_params(VALID_RECORDS_NON_CANONICAL))
 def test_create_valid_non_canonical(api_user_domain: DeSECAPIV1Client, ns_lord: NSClient, rr_type: str, value: str):
-    assert api_user_domain.rr_set_create(api_user_domain.domains[0], rr_type, [value], subname="a").status_code == 201
-    assert len(ns_lord.query(f"a.{api_user_domain.domains[0]}", rr_type)) == 1
+    domain_name = api_user_domain.domain
+    expected = set()
+    assert api_user_domain.rr_set_create(domain_name, rr_type, [value], subname='a').status_code == 201
+    expected.add(value)
+    rrset = ns_lord.query(f'a.{domain_name}'.strip('.'), rr_type)
+    assert len(rrset) == len(expected)
 
 
 @pytest.mark.parametrize("rr_type,value", INVALID_RECORDS_PARAMS)
 def test_create_invalid(api_user_domain: DeSECAPIV1Client, rr_type: str, value: str):
-    assert api_user_domain.rr_set_create(api_user_domain.domains[0], rr_type, [value]).status_code == 400
+    assert api_user_domain.rr_set_create(api_user_domain.domain, rr_type, [value]).status_code == 400
 
 
 def test_create_long_subname(api_user_domain: DeSECAPIV1Client, ns_lord: NSClient):
-    assert api_user_domain.rr_set_create(api_user_domain.domains[0], "AAAA", ["::1"], subname="a"*63).status_code == 201
-    assert ns_lord.query(f"{'a'*63}.{api_user_domain.domains[0]}", "AAAA") == {"::1"}
+    assert api_user_domain.rr_set_create(api_user_domain.domain, "AAAA", ["::1"], subname="a"*63).status_code == 201
+    assert ns_lord.query(f"{'a'*63}.{api_user_domain.domain}", "AAAA") == {"::1"}