瀏覽代碼

fix(api): fix pdns A/AAAA record sync for new domains, add test

- Only sync records to pdns for new domains if records are set
- Test that POSTing a new domain with records causes a pdns PATCH

fixes #24
Peter Thomassen 8 年之前
父節點
當前提交
8641cad93d
共有 2 個文件被更改,包括 21 次插入3 次删除
  1. 5 3
      api/desecapi/models.py
  2. 16 0
      api/desecapi/tests/testdomains.py

+ 5 - 3
api/desecapi/models.py

@@ -128,13 +128,15 @@ class Domain(models.Model):
         if new_domain:
         if new_domain:
             pdns.create_zone(self.name)
             pdns.create_zone(self.name)
 
 
-        # for existing domains, see if records are changed
-        if not new_domain:
+        # check if current A and AAAA record values require updating pdns
+        if new_domain:
+            changes_required = bool(self.arecord) or bool(self.aaaarecord)
+        else:
             orig_domain = Domain.objects.get(id=self.id)
             orig_domain = Domain.objects.get(id=self.id)
             changes_required = self.arecord != orig_domain.arecord or self.aaaarecord != orig_domain.aaaarecord
             changes_required = self.arecord != orig_domain.arecord or self.aaaarecord != orig_domain.aaaarecord
 
 
         # make changes if necessary
         # make changes if necessary
-        if changes_required or new_domain:
+        if changes_required:
             pdns.set_dyn_records(self.name, self.arecord, self.aaaarecord)
             pdns.set_dyn_records(self.name, self.arecord, self.aaaarecord)
 
 
     def save(self, *args, **kwargs):
     def save(self, *args, **kwargs):

+ 16 - 0
api/desecapi/tests/testdomains.py

@@ -145,6 +145,22 @@ class AuthenticatedDomainTests(APITestCase):
         self.assertTrue(data['name'] in httpretty.last_request().parsed_body)
         self.assertTrue(data['name'] in httpretty.last_request().parsed_body)
         self.assertTrue('ns1.desec.io' in httpretty.last_request().parsed_body)
         self.assertTrue('ns1.desec.io' in httpretty.last_request().parsed_body)
 
 
+    def testPostingWithRecordsCausesPdnsAPIPatch(self):
+        name = utils.generateDomainname()
+
+        httpretty.enable()
+        httpretty.register_uri(httpretty.POST, settings.POWERDNS_API + '/zones')
+        httpretty.register_uri(httpretty.PATCH, settings.POWERDNS_API + '/zones/' + name + '.')
+
+        url = reverse('domain-list')
+        data = {'name': name, 'dyn': True, 'arecord': '1.3.3.7', 'aaaarecord': 'dead::beef'}
+        response = self.client.post(url, data)
+
+        self.assertEqual(httpretty.last_request().method, 'PATCH')
+        self.assertTrue(data['name'] in httpretty.last_request().parsed_body)
+        self.assertTrue('1.3.3.7' in httpretty.last_request().parsed_body)
+        self.assertTrue('dead::beef' in httpretty.last_request().parsed_body)
+
     def testUpdateingCausesPdnsAPICall(self):
     def testUpdateingCausesPdnsAPICall(self):
         url = reverse('domain-detail', args=(self.ownedDomains[1].pk,))
         url = reverse('domain-detail', args=(self.ownedDomains[1].pk,))
         response = self.client.get(url)
         response = self.client.get(url)