diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/etcd_test.go | 11 | ||||
-rw-r--r-- | test/server_test.go | 53 | ||||
-rw-r--r-- | test/tests.go | 40 |
3 files changed, 104 insertions, 0 deletions
diff --git a/test/etcd_test.go b/test/etcd_test.go new file mode 100644 index 000000000..96be524e4 --- /dev/null +++ b/test/etcd_test.go @@ -0,0 +1,11 @@ +// +build etcd + +package test + +import "testing" + +// This test starts two coredns servers (and needs etcd). Configure a stubzones in both (that will loop) and +// will then test if we detect this loop. +func TestEtcdStubForwarding(t *testing.T) { + // TODO(miek) +} diff --git a/test/server_test.go b/test/server_test.go new file mode 100644 index 000000000..6020e76d3 --- /dev/null +++ b/test/server_test.go @@ -0,0 +1,53 @@ +package test + +import ( + "testing" + + "github.com/miekg/dns" +) + +// Start 2 tests server, server A will proxy to B, server B is an CH server. +func TestProxyToChaosServer(t *testing.T) { + corefile := `.:0 { + chaos CoreDNS-001 miek@miek.nl +} +` + chaos, tcpCH, udpCH, err := testServer(t, corefile) + if err != nil { + t.Fatalf("Could get server: %s", err) + } + defer chaos.Stop() + + corefileProxy := `.:0 { + proxy . ` + udpCH + ` +} +` + proxy, _, udp, err := testServer(t, corefileProxy) + if err != nil { + t.Fatalf("Could get server: %s", err) + } + defer proxy.Stop() + + chaosTest(t, udpCH, "udp") + chaosTest(t, tcpCH, "tcp") + + chaosTest(t, udp, "udp") + // chaosTest(t, tcp, "tcp"), commented out because we use the original transport to reach the + // proxy and we only forward to the udp port. +} + +func chaosTest(t *testing.T, server, net string) { + m := testMsg("version.bind.", dns.TypeTXT, nil) + m.Question[0].Qclass = dns.ClassCHAOS + + r, err := testExchange(m, server, net) + if err != nil { + t.Fatalf("Could not send message: %s", err) + } + if r.Rcode != dns.RcodeSuccess || len(r.Answer) == 0 { + t.Fatalf("Expected successful reply on %s, got %s", net, dns.RcodeToString[r.Rcode]) + } + if r.Answer[0].String() != `version.bind. 0 CH TXT "CoreDNS-001"` { + t.Fatalf("Expected version.bind. reply, got %s", r.Answer[0].String()) + } +} diff --git a/test/tests.go b/test/tests.go new file mode 100644 index 000000000..2b11a5ac9 --- /dev/null +++ b/test/tests.go @@ -0,0 +1,40 @@ +package test + +import ( + "testing" + "time" + + "github.com/miekg/coredns/core" + "github.com/miekg/coredns/middleware" + "github.com/miekg/coredns/server" + + "github.com/miekg/dns" +) + +func testMsg(zone string, typ uint16, o *dns.OPT) *dns.Msg { + m := new(dns.Msg) + m.SetQuestion(zone, typ) + if o != nil { + m.Extra = []dns.RR{o} + } + return m +} + +func testExchange(m *dns.Msg, server, net string) (*dns.Msg, error) { + c := new(dns.Client) + c.Net = net + return middleware.Exchange(c, m, server) +} + +// testServer returns a test server and the tcp and udp listeners addresses. +func testServer(t *testing.T, corefile string) (*server.Server, string, string, error) { + srv, err := core.TestServer(t, corefile) + if err != nil { + return nil, "", "", err + } + go srv.ListenAndServe() + + time.Sleep(1 * time.Second) + tcp, udp := srv.LocalAddr() + return srv, tcp.String(), udp.String(), nil +} |