fix(dns): ignore non-MX preference placeholders

This commit is contained in:
jwinterm
2026-08-01 14:30:31 -04:00
parent 3fe9c472ef
commit 71addc0c64
2 changed files with 31 additions and 3 deletions
+7 -2
View File
@@ -1023,13 +1023,18 @@ class NamecheapDNSProvider:
for element in root.iter():
if _xml_localname(element.tag) != "host":
continue
record_type = (element.get("Type") or "").upper()
records.append(
ProviderDNSRecord(
name=element.get("Name") or "@",
type=(element.get("Type") or "").upper(),
type=record_type,
value=element.get("Address") or "",
ttl=int(element.get("TTL") or DEFAULT_TTL),
mx_pref=_optional_int(element.get("MXPref")),
mx_pref=(
_optional_int(element.get("MXPref"))
if record_type == "MX"
else None
),
)
)
return DNSZoneSnapshot(
+24 -1
View File
@@ -5,7 +5,7 @@ from pathlib import Path
import tempfile
import unittest
from ampg.dns import DNSZoneSnapshot, ProviderDNSRecord
from ampg.dns import DNSZoneSnapshot, NamecheapDNSProvider, ProviderDNSRecord
from ampg.dns_manifest import (
load_dns_manifest,
merge_dns_manifest_records,
@@ -60,6 +60,29 @@ class FakeProvider:
self.records = tuple(records)
class NamecheapProviderTests(unittest.TestCase):
def test_non_mx_preference_placeholder_is_ignored(self):
response = """\
<ApiResponse Status="OK">
<CommandResponse>
<DomainDNSGetHostsResult>
<host Name="shop" Type="A" Address="192.0.2.1" TTL="300" MXPref="10" />
<host Name="@" Type="MX" Address="mx.example" TTL="300" MXPref="20" />
</DomainDNSGetHostsResult>
</CommandResponse>
</ApiResponse>
"""
provider = NamecheapDNSProvider.__new__(NamecheapDNSProvider)
provider._request = lambda _command, _params: response
provider._domain_params = lambda _domain: {"SLD": "example", "TLD": "test"}
snapshot = provider.get_hosts("example.test")
self.assertEqual("ok", snapshot.status)
self.assertIsNone(snapshot.records[0].mx_pref)
self.assertEqual(20, snapshot.records[1].mx_pref)
class DNSManifestTests(unittest.TestCase):
def setUp(self):
self.temporary = tempfile.TemporaryDirectory()