]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - regression-tests.api/test_Zones.py
Merge pull request #9106 from omoerbeek/release-cycles
[thirdparty/pdns.git] / regression-tests.api / test_Zones.py
index c7fbe2758bb46eff529dd706813a5ebaa87e0a28..ca372f124a5c2026d613988e9d84ae2264628930 100644 (file)
@@ -1298,7 +1298,6 @@ $ORIGIN %NAME%
 
     @parameterized.expand([
         ('CNAME', ),
-        ('DNAME', ),
     ])
     def test_rrset_exclusive_and_other(self, qtype):
         name, payload, zone = self.create_zone()
@@ -1322,7 +1321,6 @@ $ORIGIN %NAME%
 
     @parameterized.expand([
         ('CNAME', ),
-        ('DNAME', ),
     ])
     def test_rrset_other_and_exclusive(self, qtype):
         name, payload, zone = self.create_zone()
@@ -1363,7 +1361,6 @@ $ORIGIN %NAME%
     @parameterized.expand([
         ('SOA', ['ns1.example.org. test@example.org. 10 10800 3600 604800 3600', 'ns2.example.org. test@example.org. 10 10800 3600 604800 3600']),
         ('CNAME', ['01.example.org.', '02.example.org.']),
-        ('DNAME', ['01.example.org.', '02.example.org.']),
     ])
     def test_rrset_single_qtypes(self, qtype, contents):
         name, payload, zone = self.create_zone()
@@ -1389,6 +1386,111 @@ $ORIGIN %NAME%
         self.assertEquals(r.status_code, 422)
         self.assertIn('IN ' + qtype + ' has more than one record', r.json()['error'])
 
+    def test_rrset_zone_apex(self):
+        name, payload, zone = self.create_zone()
+        rrset1 = {
+            'changetype': 'replace',
+            'name': name,
+            'type': 'SOA',
+            'ttl': 3600,
+            'records': [
+                {
+                    "content": 'ns1.example.org. test@example.org. 10 10800 3600 604800 3600',
+                    "disabled": False
+                },
+            ]
+        }
+        rrset2 = {
+            'changetype': 'replace',
+            'name': name,
+            'type': 'DNAME',
+            'ttl': 3600,
+            'records': [
+                {
+                    "content": 'example.com.',
+                    "disabled": False
+                },
+            ]
+        }
+
+        payload = {'rrsets': [rrset1, rrset2]}
+        r = self.session.patch(self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload),
+                               headers={'content-type': 'application/json'})
+        self.assert_success(r)  # user should be able to create DNAME at APEX as per RFC 6672 section 2.3
+
+    def test_rrset_ns_dname_exclude(self):
+        name, payload, zone = self.create_zone()
+        rrset = {
+            'changetype': 'replace',
+            'name': 'delegation.'+name,
+            'type': 'NS',
+            'ttl': 3600,
+            'records': [
+                {
+                    "content": "ns.example.org.",
+                    "disabled": False
+                }
+            ]
+        }
+        payload = {'rrsets': [rrset]}
+        r = self.session.patch(self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload),
+                               headers={'content-type': 'application/json'})
+        self.assert_success(r)
+        rrset = {
+            'changetype': 'replace',
+            'name': 'delegation.'+name,
+            'type': 'DNAME',
+            'ttl': 3600,
+            'records': [
+                {
+                    "content": "example.com.",
+                    "disabled": False
+                }
+            ]
+        }
+        payload = {'rrsets': [rrset]}
+        r = self.session.patch(self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload),
+                               headers={'content-type': 'application/json'})
+        self.assertEquals(r.status_code, 422)
+        self.assertIn('Cannot have both NS and DNAME except in zone apex', r.json()['error'])
+
+## FIXME: Enable this when it's time for it
+#    def test_rrset_dname_nothing_under(self):
+#        name, payload, zone = self.create_zone()
+#        rrset = {
+#            'changetype': 'replace',
+#            'name': 'delegation.'+name,
+#            'type': 'DNAME',
+#            'ttl': 3600,
+#            'records': [
+#                {
+#                    "content": "example.com.",
+#                    "disabled": False
+#                }
+#            ]
+#        }
+#        payload = {'rrsets': [rrset]}
+#        r = self.session.patch(self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload),
+#                               headers={'content-type': 'application/json'})
+#        self.assert_success(r)
+#        rrset = {
+#            'changetype': 'replace',
+#            'name': 'sub.delegation.'+name,
+#            'type': 'A',
+#            'ttl': 3600,
+#            'records': [
+#                {
+#                    "content": "1.2.3.4",
+#                    "disabled": False
+#                }
+#            ]
+#        }
+#        payload = {'rrsets': [rrset]}
+#        r = self.session.patch(self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload),
+#                               headers={'content-type': 'application/json'})
+#        self.assertEquals(r.status_code, 422)
+#        self.assertIn('You cannot have record(s) under CNAME/DNAME', r.json()['error'])
+
     def test_create_zone_with_leading_space(self):
         # Actual regression.
         name, payload, zone = self.create_zone()
@@ -2110,6 +2212,7 @@ class AuthZoneKeys(ApiTestCase, AuthZonesHelperMixin):
             u'type': u'Cryptokey',
             u'keytype': u'csk',
             u'flags': 257,
+            u'published': True,
             u'id': 1}
         self.assertEquals(key0, expected)