76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""Tests for deployment DNS record generation."""
|
|
|
|
from app.services.domain_provisioning import (
|
|
build_deployment_dns_records,
|
|
build_dns_records,
|
|
build_spf_value,
|
|
namecheap_host,
|
|
)
|
|
|
|
|
|
def test_namecheap_host_strips_zone_suffix():
|
|
assert namecheap_host("mail.gentic.email", "gentic.email") == "mail"
|
|
assert namecheap_host("@", "gentic.email") == "@"
|
|
assert (
|
|
namecheap_host("agmail._domainkey.gentic.email", "gentic.email")
|
|
== "agmail._domainkey"
|
|
)
|
|
|
|
|
|
def test_build_dns_records_uses_namecheap_hosts_and_ip():
|
|
records = build_dns_records(
|
|
"gentic.email",
|
|
"mail.gentic.email",
|
|
"agmail",
|
|
"abc123",
|
|
mail_server_ip="203.0.113.10",
|
|
)
|
|
mx = next(record for record in records if record["purpose"] == "mx")
|
|
a_record = next(record for record in records if record["purpose"] == "mail_host")
|
|
spf = next(record for record in records if record["purpose"] == "spf")
|
|
|
|
assert mx["host"] == "@"
|
|
assert mx["value"] == "mail.gentic.email"
|
|
assert mx["priority"] == 10
|
|
assert a_record["host"] == "mail"
|
|
assert a_record["value"] == "203.0.113.10"
|
|
assert spf["value"] == "v=spf1 mx a ip4:203.0.113.10 ~all"
|
|
assert "amazonses" not in spf["value"]
|
|
|
|
|
|
def test_build_spf_value_supports_ipv6():
|
|
assert build_spf_value("2001:db8::1") == "v=spf1 mx a ip6:2001:db8::1 ~all"
|
|
|
|
|
|
def test_deployment_sections_split_inbound_and_outbound():
|
|
sections = build_deployment_dns_records(
|
|
domain_name="gentic.email",
|
|
mail_server_ip="203.0.113.10",
|
|
dkim_selector="agmail",
|
|
dkim_public_key="test-public-key",
|
|
app_public_host="gentic.email",
|
|
)
|
|
|
|
inbound_purposes = [record["purpose"] for record in sections["inbound"]]
|
|
outbound_purposes = [record["purpose"] for record in sections["outbound"]]
|
|
|
|
assert inbound_purposes == ["mx", "mail_host", "app_host"]
|
|
assert outbound_purposes == ["platform_spf", "spf", "dkim", "dmarc"]
|
|
assert "ses_outbound" not in sections
|
|
|
|
app_host = next(
|
|
record for record in sections["inbound"] if record["purpose"] == "app_host"
|
|
)
|
|
assert app_host["host"] == "email"
|
|
assert app_host["value"] == "203.0.113.10"
|
|
|
|
dmarc = next(
|
|
record for record in sections["outbound"] if record["purpose"] == "dmarc"
|
|
)
|
|
assert dmarc["value"] == "v=DMARC1; p=quarantine; rua=mailto:dmarc@gentic.email"
|
|
|
|
dkim = next(
|
|
record for record in sections["outbound"] if record["purpose"] == "dkim"
|
|
)
|
|
assert dkim["host"] == "agmail._domainkey"
|
|
assert "test-public-key" in dkim["value"]
|