mirror of
https://github.com/coredns/coredns.git
synced 2025-10-28 00:34:24 -04:00
127 lines
3.1 KiB
Go
127 lines
3.1 KiB
Go
|
|
// +build net
|
||
|
|
|
||
|
|
package test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/miekg/dns"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestSecondaryZoneTransfer(t *testing.T) {
|
||
|
|
/*
|
||
|
|
Test will only work when there is a CoreDNS running on part 32054
|
||
|
|
with example.com and willing to transfer
|
||
|
|
coredns -conf Corefile -dns.port 32054
|
||
|
|
Corefile:
|
||
|
|
example.com {
|
||
|
|
file example.com {
|
||
|
|
transfer to 127.0.0.1:32053
|
||
|
|
}
|
||
|
|
}
|
||
|
|
example.com:
|
||
|
|
example.com. 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. 2017042730 7200 3600 1209600 3600
|
||
|
|
|
||
|
|
example.com. 65118 IN NS a.iana-servers.net.
|
||
|
|
example.com. 65118 IN NS b.iana-servers.net.
|
||
|
|
cname.example.com. 434334 IN CNAME a.miek.nl.
|
||
|
|
*/
|
||
|
|
|
||
|
|
corefile := `example.com:32053 {
|
||
|
|
secondary {
|
||
|
|
transfer from 127.0.0.1:32054
|
||
|
|
}
|
||
|
|
}
|
||
|
|
`
|
||
|
|
|
||
|
|
sec, err := CoreDNSServer(corefile)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Could not get CoreDNS serving instance: %s", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
defer sec.Stop()
|
||
|
|
|
||
|
|
m := new(dns.Msg)
|
||
|
|
m.SetQuestion("cname.example.com.", dns.TypeCNAME)
|
||
|
|
|
||
|
|
r, err := dns.Exchange(m, "127.0.0.1:32053")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected to receive reply, but didn't: %s", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(r.Answer) == 0 {
|
||
|
|
t.Fatalf("Expected answer section")
|
||
|
|
}
|
||
|
|
|
||
|
|
if r.Answer[0].(*dns.CNAME).Target != "a.miek.nl." {
|
||
|
|
t.Fatalf("Expected target of %s, got %s", "a.miek.nl.", r.Answer[0].(*dns.CNAME).Target)
|
||
|
|
}
|
||
|
|
|
||
|
|
m = new(dns.Msg)
|
||
|
|
m.SetQuestion("example.com.", dns.TypeSOA)
|
||
|
|
r, err = dns.Exchange(m, "127.0.0.1:32053")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected to receive reply, but didn't: %s", err)
|
||
|
|
}
|
||
|
|
if len(r.Answer) == 0 {
|
||
|
|
t.Fatalf("Expected answer section")
|
||
|
|
}
|
||
|
|
if r.Answer[0].(*dns.SOA).Serial != 2017042730 {
|
||
|
|
t.Fatalf("Expected serial of %d, got %d", 2017042730, r.Answer[0].(*dns.SOA).Serial)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSecondaryZoneTransferUpstream(t *testing.T) {
|
||
|
|
/*
|
||
|
|
Test will only work when there is a CoreDNS running on part 32054
|
||
|
|
with example.com and willing to transfer
|
||
|
|
coredns -conf Corefile -dns.port 32054
|
||
|
|
Corefile:
|
||
|
|
example.com {
|
||
|
|
file example.com {
|
||
|
|
transfer to 127.0.0.1:32053
|
||
|
|
}
|
||
|
|
}
|
||
|
|
example.com:
|
||
|
|
example.com. 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. 2017042730 7200 3600 1209600 3600
|
||
|
|
|
||
|
|
example.com. 65118 IN NS a.iana-servers.net.
|
||
|
|
example.com. 65118 IN NS b.iana-servers.net.
|
||
|
|
cname.example.com. 434334 IN CNAME a.miek.nl.
|
||
|
|
*/
|
||
|
|
|
||
|
|
corefile := `example.com:32053 {
|
||
|
|
secondary {
|
||
|
|
transfer from 127.0.0.1:32054
|
||
|
|
upstream 8.8.8.8
|
||
|
|
}
|
||
|
|
}
|
||
|
|
`
|
||
|
|
|
||
|
|
sec, err := CoreDNSServer(corefile)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Could not get CoreDNS serving instance: %s", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
defer sec.Stop()
|
||
|
|
|
||
|
|
m := new(dns.Msg)
|
||
|
|
m.SetQuestion("cname.example.com.", dns.TypeA)
|
||
|
|
|
||
|
|
r, err := dns.Exchange(m, "127.0.0.1:32053")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Expected to receive reply, but didn't: %s", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(r.Answer) != 2 {
|
||
|
|
t.Fatalf("Expected answer section, with 2 records, got %d", len(r.Answer))
|
||
|
|
}
|
||
|
|
|
||
|
|
if r.Answer[0].(*dns.CNAME).Target != "a.miek.nl." {
|
||
|
|
t.Fatalf("Expected target of %s, got %s", "a.miek.nl.", r.Answer[0].(*dns.CNAME).Target)
|
||
|
|
}
|
||
|
|
if r.Answer[1].Header().Name != "a.miek.nl." {
|
||
|
|
t.Fatalf("Expected name of %s, got %s", "a.miek.nl.", r.Answer[1].Header().Name)
|
||
|
|
}
|
||
|
|
}
|