aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/file_upstream_test.go62
1 files changed, 60 insertions, 2 deletions
diff --git a/test/file_upstream_test.go b/test/file_upstream_test.go
index dc4cbc45f..36f2bbc56 100644
--- a/test/file_upstream_test.go
+++ b/test/file_upstream_test.go
@@ -6,8 +6,6 @@ import (
"github.com/miekg/dns"
)
-// TODO(miek): this test needs to be fleshed out.
-
func TestFileUpstream(t *testing.T) {
name, rm, err := TempFile(".", `$ORIGIN example.org.
@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. (
@@ -59,3 +57,63 @@ www 3600 IN CNAME www.example.net.
t.Errorf("Failed to get address for CNAME, expected 10.0.0.1 got %s", x)
}
}
+
+// TestFileUpstreamAdditional runs two CoreDNS servers that serve example.org and foo.example.org.
+// example.org contains a cname to foo.example.org; this should be resolved via upstream.Self.
+func TestFileUpstreamAdditional(t *testing.T) {
+ name, rm, err := TempFile(".", `$ORIGIN example.org.
+@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. 2017042745 7200 3600 1209600 3600
+
+ 3600 IN NS b.iana-servers.net.
+
+www 3600 IN CNAME www.foo
+`)
+ if err != nil {
+ t.Fatalf("Failed to create zone: %s", err)
+ }
+ defer rm()
+
+ name2, rm2, err2 := TempFile(".", `$ORIGIN foo.example.org.
+@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. 2017042745 7200 3600 1209600 3600
+
+ 3600 IN NS b.iana-servers.net.
+
+www 3600 IN A 127.0.0.53
+`)
+ if err2 != nil {
+ t.Fatalf("Failed to create zone: %s", err2)
+ }
+ defer rm2()
+
+ corefile := `.:0 {
+ file ` + name + ` example.org {
+ upstream
+ }
+ file ` + name2 + ` foo.example.org {
+ upstream
+ }
+}
+`
+ i, udp, _, err := CoreDNSServerAndPorts(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+ defer i.Stop()
+
+ m := new(dns.Msg)
+ m.SetQuestion("www.example.org.", dns.TypeA)
+
+ r, err := dns.Exchange(m, udp)
+ if err != nil {
+ t.Fatalf("Could not exchange msg: %s", err)
+ }
+ if r.Rcode == dns.RcodeServerFailure {
+ t.Fatalf("Rcode should not be dns.RcodeServerFailure")
+ }
+ if x := len(r.Answer); x != 2 {
+ t.Errorf("Expected 2 RR in reply, got %d", x)
+ }
+ if x := r.Answer[1].(*dns.A).A.String(); x != "127.0.0.53" {
+ t.Errorf("Failed to get address for CNAME, expected 127.0.0.53, got %s", x)
+ }
+}