← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~cgrabowski/maas:deflake_dynamic_update_test into maas:master

 

Christian Grabowski has proposed merging ~cgrabowski/maas:deflake_dynamic_update_test into maas:master.

Commit message:
split out reverse update generation tests to glue zones and non-gluezones



Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/436443
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~cgrabowski/maas:deflake_dynamic_update_test into maas:master.
diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
index 73b8d48..de7aba1 100644
--- a/src/provisioningserver/dns/config.py
+++ b/src/provisioningserver/dns/config.py
@@ -72,17 +72,14 @@ class DynamicDNSUpdate:
             return None
         ip = IPAddress(fwd_update.answer)
         name = ip.reverse_dns
-        if (
-            ip.version == 4 and subnet.prefixlen > 24
-        ) or subnet.prefixlen > 64:
-            name = "in-addr.arpa."
-            addr_split = fwd_update.answer.split(".")
-            idx = len(addr_split) - 1
-            for i, octet in enumerate(addr_split):
-                if i == idx:
-                    name = f"{octet}.0-{subnet.prefixlen}.{name}"
-                else:
-                    name = f"{octet}.{name}"
+        if (ip.version == 4 and subnet.prefixlen > 24) or (
+            ip.version == 6 and subnet.prefixlen > 124
+        ):
+            name_split = ip.reverse_dns.split(".")
+            name_split = (
+                name_split[:1] + [f"0-{subnet.prefixlen}"] + name_split[1:]
+            )
+            name = ".".join(name_split)
 
         return cls(
             operation=fwd_update.operation,
diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
index ddb9db4..5345f76 100644
--- a/src/provisioningserver/dns/tests/test_config.py
+++ b/src/provisioningserver/dns/tests/test_config.py
@@ -712,7 +712,15 @@ class TestDynamicDNSUpdate(MAASTestCase):
 
     def test_as_reverse_record_update(self):
         domain = factory.make_name()
-        subnet = factory.make_ip4_or_6_network()
+        ip_version = random.choice([4, 6])
+        host_bits = (
+            random.randint(8, 24)
+            if ip_version == 4
+            else random.randint(8, 124)
+        )
+        subnet = factory.make_ip4_or_6_network(
+            version=ip_version, host_bits=host_bits
+        )
         fwd_update = DynamicDNSUpdate(
             operation="INSERT",
             zone=domain,
@@ -736,7 +744,7 @@ class TestDynamicDNSUpdate(MAASTestCase):
         self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
         self.assertEqual(expected_rev_update.answer, rev_update.answer)
 
-    def test_as_reverse_record_update_for_glue_zone(self):
+    def test_as_reverse_record_update_for_glue_zone_v4(self):
         domain = factory.make_name()
         subnet = IPNetwork("10.1.1.0/25")
         fwd_update = DynamicDNSUpdate(
@@ -761,3 +769,29 @@ class TestDynamicDNSUpdate(MAASTestCase):
         self.assertEqual(expected_rev_update.name, rev_update.name)
         self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
         self.assertEqual(expected_rev_update.answer, rev_update.answer)
+
+    def test_as_reverse_record_update_for_glue_zone_v6(self):
+        domain = factory.make_name()
+        subnet = IPNetwork("fc55:4c7c:a5ea:57b0:7cad:a076:a844:8000/126")
+        fwd_update = DynamicDNSUpdate(
+            operation="INSERT",
+            zone=domain,
+            name=f"{factory.make_name()}.{domain}",
+            rectype="A",
+            answer="fc55:4c7c:a5ea:57b0:7cad:a076:a844:8001",
+        )
+        expected_rev_update = DynamicDNSUpdate(
+            operation="INSERT",
+            zone=domain,
+            name="1.0-126.0.0.8.4.4.8.a.6.7.0.a.d.a.c.7.0.b.7.5.a.e.5.a.c.7.c.4.5.5.c.f.ip6.arpa.",
+            rectype="PTR",
+            ttl=fwd_update.ttl,
+            subnet=str(subnet),
+            answer=fwd_update.name,
+        )
+        rev_update = DynamicDNSUpdate.as_reverse_record_update(
+            fwd_update, subnet
+        )
+        self.assertEqual(expected_rev_update.name, rev_update.name)
+        self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
+        self.assertEqual(expected_rev_update.answer, rev_update.answer)

Follow ups