sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #04890
[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