diff options
author | 2017-05-03 16:36:41 +0100 | |
---|---|---|
committer | 2017-05-03 16:36:41 +0100 | |
commit | 8eda6c7b9c6554116f3fa8e9b12311a2e95f675d (patch) | |
tree | be80b41e71f618ea929ea4a37fda1d87dd6bb1c3 /test | |
parent | 4fc1318e28b21c85c117f1821c3fb34790679f0f (diff) | |
download | coredns-8eda6c7b9c6554116f3fa8e9b12311a2e95f675d.tar.gz coredns-8eda6c7b9c6554116f3fa8e9b12311a2e95f675d.tar.zst coredns-8eda6c7b9c6554116f3fa8e9b12311a2e95f675d.zip |
middleware/file: correctly parse the stanza (#658)
* middleware/file: correctly parse the stanza
Parsing the file stanza would give precedence to 'transfer' and ignore
other bits if it wasn't specified.
This change fixes the parsing. The actually external CNAME retrieval is
working fine (once the upstream is correctly parsed).
This wasn't caught in tests, because we lack a parsing test for this.
Fixes #657
* Add tests
Diffstat (limited to 'test')
-rw-r--r-- | test/file_cname_proxy_test.go | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/test/file_cname_proxy_test.go b/test/file_cname_proxy_test.go index 61bd8764e..a6ab8e59e 100644 --- a/test/file_cname_proxy_test.go +++ b/test/file_cname_proxy_test.go @@ -12,7 +12,7 @@ import ( "github.com/miekg/dns" ) -func TestZoneExternalCNAMELookup(t *testing.T) { +func TestZoneExternalCNAMELookupWithoutProxy(t *testing.T) { t.Parallel() log.SetOutput(ioutil.Discard) @@ -50,3 +50,45 @@ func TestZoneExternalCNAMELookup(t *testing.T) { t.Fatalf("Expected 1 RR in answer section got %d", len(resp.Answer)) } } + +func TestZoneExternalCNAMELookupWithProxy(t *testing.T) { + t.Parallel() + log.SetOutput(ioutil.Discard) + + name, rm, err := TempFile(".", exampleOrg) + if err != nil { + t.Fatalf("Failed to create zone: %s", err) + } + defer rm() + + // Corefile with for example without proxy section. + corefile := `example.org:0 { + file ` + name + ` { + upstream 8.8.8.8 + } +} +` + i, err := CoreDNSServer(corefile) + if err != nil { + t.Fatalf("Could not get CoreDNS serving instance: %s", err) + } + + udp, _ := CoreDNSServerPorts(i, 0) + if udp == "" { + t.Fatalf("Could not get UDP listening port") + } + defer i.Stop() + + p := proxy.NewLookup([]string{udp}) + state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)} + + resp, err := p.Lookup(state, "cname.example.org.", dns.TypeA) + if err != nil { + t.Fatalf("Expected to receive reply, but didn't: %s", err) + } + // There should be a CNAME *and* an IP address in the answer section. + // For now, just check that we have 2 RRs + if len(resp.Answer) != 2 { + t.Fatalf("Expected 2 RRs in answer section got %d", len(resp.Answer)) + } +} |