Merge ~cgrabowski/maas:backport_deflake_dynamic_update_test_to_3.3 into maas:3.3

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 0a063519fadaaca0c60eb150782e36fa8c2753ea
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:backport_deflake_dynamic_update_test_to_3.3
Merge into: maas:3.3
Diff against target: 90 lines (+44/-13)
2 files modified
src/provisioningserver/dns/config.py (+8/-11)
src/provisioningserver/dns/tests/test_config.py (+36/-2)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Christian Grabowski Approve
Review via email: mp+436466@code.launchpad.net

Commit message

split out reverse update generation tests to glue zones and non-gluezones
(cherry picked from commit b6241874577384ba4b0cb8c4c640ed4b36d9cbfb)

To post a comment you must log in.
Revision history for this message
Christian Grabowski (cgrabowski) wrote :

self-approving backport

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b backport_deflake_dynamic_update_test_to_3.3 lp:~cgrabowski/maas/+git/maas into -b 3.3 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 0a063519fadaaca0c60eb150782e36fa8c2753ea

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
2index 73b8d48..de7aba1 100644
3--- a/src/provisioningserver/dns/config.py
4+++ b/src/provisioningserver/dns/config.py
5@@ -72,17 +72,14 @@ class DynamicDNSUpdate:
6 return None
7 ip = IPAddress(fwd_update.answer)
8 name = ip.reverse_dns
9- if (
10- ip.version == 4 and subnet.prefixlen > 24
11- ) or subnet.prefixlen > 64:
12- name = "in-addr.arpa."
13- addr_split = fwd_update.answer.split(".")
14- idx = len(addr_split) - 1
15- for i, octet in enumerate(addr_split):
16- if i == idx:
17- name = f"{octet}.0-{subnet.prefixlen}.{name}"
18- else:
19- name = f"{octet}.{name}"
20+ if (ip.version == 4 and subnet.prefixlen > 24) or (
21+ ip.version == 6 and subnet.prefixlen > 124
22+ ):
23+ name_split = ip.reverse_dns.split(".")
24+ name_split = (
25+ name_split[:1] + [f"0-{subnet.prefixlen}"] + name_split[1:]
26+ )
27+ name = ".".join(name_split)
28
29 return cls(
30 operation=fwd_update.operation,
31diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
32index ddb9db4..5345f76 100644
33--- a/src/provisioningserver/dns/tests/test_config.py
34+++ b/src/provisioningserver/dns/tests/test_config.py
35@@ -712,7 +712,15 @@ class TestDynamicDNSUpdate(MAASTestCase):
36
37 def test_as_reverse_record_update(self):
38 domain = factory.make_name()
39- subnet = factory.make_ip4_or_6_network()
40+ ip_version = random.choice([4, 6])
41+ host_bits = (
42+ random.randint(8, 24)
43+ if ip_version == 4
44+ else random.randint(8, 124)
45+ )
46+ subnet = factory.make_ip4_or_6_network(
47+ version=ip_version, host_bits=host_bits
48+ )
49 fwd_update = DynamicDNSUpdate(
50 operation="INSERT",
51 zone=domain,
52@@ -736,7 +744,7 @@ class TestDynamicDNSUpdate(MAASTestCase):
53 self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
54 self.assertEqual(expected_rev_update.answer, rev_update.answer)
55
56- def test_as_reverse_record_update_for_glue_zone(self):
57+ def test_as_reverse_record_update_for_glue_zone_v4(self):
58 domain = factory.make_name()
59 subnet = IPNetwork("10.1.1.0/25")
60 fwd_update = DynamicDNSUpdate(
61@@ -761,3 +769,29 @@ class TestDynamicDNSUpdate(MAASTestCase):
62 self.assertEqual(expected_rev_update.name, rev_update.name)
63 self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
64 self.assertEqual(expected_rev_update.answer, rev_update.answer)
65+
66+ def test_as_reverse_record_update_for_glue_zone_v6(self):
67+ domain = factory.make_name()
68+ subnet = IPNetwork("fc55:4c7c:a5ea:57b0:7cad:a076:a844:8000/126")
69+ fwd_update = DynamicDNSUpdate(
70+ operation="INSERT",
71+ zone=domain,
72+ name=f"{factory.make_name()}.{domain}",
73+ rectype="A",
74+ answer="fc55:4c7c:a5ea:57b0:7cad:a076:a844:8001",
75+ )
76+ expected_rev_update = DynamicDNSUpdate(
77+ operation="INSERT",
78+ zone=domain,
79+ 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.",
80+ rectype="PTR",
81+ ttl=fwd_update.ttl,
82+ subnet=str(subnet),
83+ answer=fwd_update.name,
84+ )
85+ rev_update = DynamicDNSUpdate.as_reverse_record_update(
86+ fwd_update, subnet
87+ )
88+ self.assertEqual(expected_rev_update.name, rev_update.name)
89+ self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
90+ self.assertEqual(expected_rev_update.answer, rev_update.answer)

Subscribers

People subscribed via source and target branches