CheckDNS needs this so domain files with CAA records can be reconciled instead of failing the zone check. Co-authored-by: Cursor <cursoragent@cursor.com>
193 lines
3.8 KiB
Go
193 lines
3.8 KiB
Go
package godns_test
|
|
|
|
import (
|
|
"net"
|
|
"strings"
|
|
"testing"
|
|
|
|
godns "gitea.neitzel.de/konrad/go-dns"
|
|
)
|
|
|
|
func TestABuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.A("www.example.test", 300, net.ParseIP("192.0.2.10"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Owner != "www.example.test." {
|
|
t.Fatalf("owner: %q", rec.Owner)
|
|
}
|
|
if rec.Type != "A" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.TTL != 300 {
|
|
t.Fatalf("ttl: %d", rec.TTL)
|
|
}
|
|
if rec.RData != "192.0.2.10" {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
if rec.Class != "IN" {
|
|
t.Fatalf("class: %q", rec.Class)
|
|
}
|
|
}
|
|
|
|
func TestAAAABuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.AAAA("www.example.test", 300, net.ParseIP("2001:db8::10"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "AAAA" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "2001:db8::10" {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestMXBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.MX("example.test", 3600, 10, "mail.example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "MX" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "10 mail.example.test." {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestTXTBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.TXT("example.test", 3600, "v=spf1 -all")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "TXT" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != `"v=spf1 -all"` {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestCNAMEBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.CNAME("www.example.test", 3600, "example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "CNAME" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "example.test." {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestNSBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.NS("example.test", 3600, "ns.example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "NS" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "ns.example.test." {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestSRVBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.SRV("_sip._tcp.example.test", 3600, 10, 20, 5060, "sip.example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "SRV" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "10 20 5060 sip.example.test." {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestPTRBuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.PTR("1.2.0.192.in-addr.arpa", 3600, "www.example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "PTR" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != "www.example.test." {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestCAABuilder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rec, err := godns.CAA("example.test", 3600, 0, "issue", "letsencrypt.org")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rec.Type != "CAA" {
|
|
t.Fatalf("type: %q", rec.Type)
|
|
}
|
|
if rec.RData != `0 issue "letsencrypt.org"` {
|
|
t.Fatalf("rdata: %q", rec.RData)
|
|
}
|
|
}
|
|
|
|
func TestBuilderRejectsNonASCIIOwner(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
_, err := godns.A("wüw.example.test", 300, net.ParseIP("192.0.2.10"))
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
if !strings.Contains(strings.ToLower(err.Error()), "ascii") {
|
|
t.Fatalf("error should mention ASCII, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestZoneGroupsRRSets(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a1, err := godns.A("www.example.test", 300, net.ParseIP("192.0.2.10"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
a2, err := godns.A("www.example.test", 300, net.ParseIP("192.0.2.11"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
mx, err := godns.MX("example.test", 3600, 10, "mail.example.test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
zone := godns.Zone{
|
|
Origin: "example.test.",
|
|
Serial: 1,
|
|
Records: []godns.Record{a1, a2, mx},
|
|
}
|
|
sets := zone.RRSets()
|
|
if len(sets) != 2 {
|
|
t.Fatalf("expected 2 RRsets, got %d", len(sets))
|
|
}
|
|
}
|