diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/etcd_test.go | 11 | ||||
-rw-r--r-- | test/fail_start_test.go | 21 | ||||
-rw-r--r-- | test/file.go | 20 | ||||
-rw-r--r-- | test/file_test.go | 11 | ||||
-rw-r--r-- | test/helpers.go | 250 | ||||
-rw-r--r-- | test/helpers_test.go | 5 | ||||
-rw-r--r-- | test/kubernetes_test.go | 29 | ||||
-rw-r--r-- | test/middleware_dnssec_test.go | 7 | ||||
-rw-r--r-- | test/middleware_test.go | 8 | ||||
-rw-r--r-- | test/proxy_test.go | 17 | ||||
-rw-r--r-- | test/responsewriter.go | 28 | ||||
-rw-r--r-- | test/server.go | 91 | ||||
-rw-r--r-- | test/server_test.go | 18 | ||||
-rw-r--r-- | test/tests.go | 18 |
14 files changed, 461 insertions, 73 deletions
diff --git a/test/etcd_test.go b/test/etcd_test.go index ceec936e7..6beb4cff2 100644 --- a/test/etcd_test.go +++ b/test/etcd_test.go @@ -46,13 +46,18 @@ func TestEtcdStubAndProxyLookup(t *testing.T) { proxy . 8.8.8.8:53 }` - etc := etcdMiddleware() - ex, _, udp, err := Server(t, corefile) + ex, err := CoreDNSServer(corefile) if err != nil { - t.Fatalf("Could get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance: %s", err) + } + + udp, _ := CoreDNSServerPorts(ex, 0) + if udp == "" { + t.Fatalf("could not get udp listening port") } defer ex.Stop() + etc := etcdMiddleware() log.SetOutput(ioutil.Discard) var ctx = context.TODO() diff --git a/test/fail_start_test.go b/test/fail_start_test.go deleted file mode 100644 index aa1b137af..000000000 --- a/test/fail_start_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package test - -import ( - "testing" - - "github.com/miekg/coredns/core" -) - -// Bind to low port should fail. -func TestFailStartServer(t *testing.T) { - corefile := `.:53 { - chaos CoreDNS-001 miek@miek.nl -} -` - srv, _ := core.TestServer(t, corefile) - err := srv.ListenAndServe() - if err == nil { - srv.Stop() - t.Fatalf("Low port startup should fail") - } -} diff --git a/test/file.go b/test/file.go new file mode 100644 index 000000000..b6068a32b --- /dev/null +++ b/test/file.go @@ -0,0 +1,20 @@ +package test + +import ( + "io/ioutil" + "os" + "testing" +) + +// TempFile will create a temporary file on disk and returns the name and a cleanup function to remove it later. +func TempFile(t *testing.T, dir, content string) (string, func(), error) { + f, err := ioutil.TempFile(dir, "go-test-tmpfile") + if err != nil { + return "", nil, err + } + if err := ioutil.WriteFile(f.Name(), []byte(content), 0644); err != nil { + return "", nil, err + } + rmFunc := func() { os.Remove(f.Name()) } + return f.Name(), rmFunc, nil +} diff --git a/test/file_test.go b/test/file_test.go new file mode 100644 index 000000000..950ea7cff --- /dev/null +++ b/test/file_test.go @@ -0,0 +1,11 @@ +package test + +import "testing" + +func TestTempFile(t *testing.T) { + _, f, e := TempFile(t, ".", "test") + if e != nil { + t.Fatalf("failed to create temp file: %s", e) + } + defer f() +} diff --git a/test/helpers.go b/test/helpers.go new file mode 100644 index 000000000..01a6f156b --- /dev/null +++ b/test/helpers.go @@ -0,0 +1,250 @@ +package test + +import ( + "testing" + + "github.com/miekg/dns" + "golang.org/x/net/context" +) + +type Sect int + +const ( + Answer Sect = iota + Ns + Extra +) + +type RRSet []dns.RR + +func (p RRSet) Len() int { return len(p) } +func (p RRSet) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p RRSet) Less(i, j int) bool { return p[i].String() < p[j].String() } + +// If the TTL of a record is 303 we don't care what the TTL is. +type Case struct { + Qname string + Qtype uint16 + Rcode int + Do bool + Answer []dns.RR + Ns []dns.RR + Extra []dns.RR +} + +func (c Case) Msg() *dns.Msg { + m := new(dns.Msg) + m.SetQuestion(dns.Fqdn(c.Qname), c.Qtype) + if c.Do { + o := new(dns.OPT) + o.Hdr.Name = "." + o.Hdr.Rrtype = dns.TypeOPT + o.SetDo() + o.SetUDPSize(4096) + m.Extra = []dns.RR{o} + } + return m +} + +func A(rr string) *dns.A { r, _ := dns.NewRR(rr); return r.(*dns.A) } +func AAAA(rr string) *dns.AAAA { r, _ := dns.NewRR(rr); return r.(*dns.AAAA) } +func CNAME(rr string) *dns.CNAME { r, _ := dns.NewRR(rr); return r.(*dns.CNAME) } +func SRV(rr string) *dns.SRV { r, _ := dns.NewRR(rr); return r.(*dns.SRV) } +func SOA(rr string) *dns.SOA { r, _ := dns.NewRR(rr); return r.(*dns.SOA) } +func NS(rr string) *dns.NS { r, _ := dns.NewRR(rr); return r.(*dns.NS) } +func PTR(rr string) *dns.PTR { r, _ := dns.NewRR(rr); return r.(*dns.PTR) } +func TXT(rr string) *dns.TXT { r, _ := dns.NewRR(rr); return r.(*dns.TXT) } +func MX(rr string) *dns.MX { r, _ := dns.NewRR(rr); return r.(*dns.MX) } +func RRSIG(rr string) *dns.RRSIG { r, _ := dns.NewRR(rr); return r.(*dns.RRSIG) } +func NSEC(rr string) *dns.NSEC { r, _ := dns.NewRR(rr); return r.(*dns.NSEC) } +func DNSKEY(rr string) *dns.DNSKEY { r, _ := dns.NewRR(rr); return r.(*dns.DNSKEY) } + +func OPT(bufsize int, do bool) *dns.OPT { + o := new(dns.OPT) + o.Hdr.Name = "." + o.Hdr.Rrtype = dns.TypeOPT + o.SetVersion(0) + o.SetUDPSize(uint16(bufsize)) + if do { + o.SetDo() + } + return o +} + +func Header(t *testing.T, tc Case, resp *dns.Msg) bool { + if resp.Rcode != tc.Rcode { + t.Errorf("rcode is %q, expected %q", dns.RcodeToString[resp.Rcode], dns.RcodeToString[tc.Rcode]) + return false + } + + if len(resp.Answer) != len(tc.Answer) { + t.Errorf("answer for %q contained %d results, %d expected", tc.Qname, len(resp.Answer), len(tc.Answer)) + return false + } + if len(resp.Ns) != len(tc.Ns) { + t.Errorf("authority for %q contained %d results, %d expected", tc.Qname, len(resp.Ns), len(tc.Ns)) + return false + } + if len(resp.Extra) != len(tc.Extra) { + t.Errorf("additional for %q contained %d results, %d expected", tc.Qname, len(resp.Extra), len(tc.Extra)) + return false + } + return true +} + +func Section(t *testing.T, tc Case, sect Sect, rr []dns.RR) bool { + section := []dns.RR{} + switch sect { + case 0: + section = tc.Answer + case 1: + section = tc.Ns + case 2: + section = tc.Extra + } + + for i, a := range rr { + if a.Header().Name != section[i].Header().Name { + t.Errorf("rr %d should have a Header Name of %q, but has %q", i, section[i].Header().Name, a.Header().Name) + return false + } + // 303 signals: don't care what the ttl is. + if section[i].Header().Ttl != 303 && a.Header().Ttl != section[i].Header().Ttl { + if _, ok := section[i].(*dns.OPT); !ok { + // we check edns0 bufize on this one + t.Errorf("rr %d should have a Header TTL of %d, but has %d", i, section[i].Header().Ttl, a.Header().Ttl) + return false + } + } + if a.Header().Rrtype != section[i].Header().Rrtype { + t.Errorf("rr %d should have a header rr type of %d, but has %d", i, section[i].Header().Rrtype, a.Header().Rrtype) + return false + } + + switch x := a.(type) { + case *dns.SRV: + if x.Priority != section[i].(*dns.SRV).Priority { + t.Errorf("rr %d should have a Priority of %d, but has %d", i, section[i].(*dns.SRV).Priority, x.Priority) + return false + } + if x.Weight != section[i].(*dns.SRV).Weight { + t.Errorf("rr %d should have a Weight of %d, but has %d", i, section[i].(*dns.SRV).Weight, x.Weight) + return false + } + if x.Port != section[i].(*dns.SRV).Port { + t.Errorf("rr %d should have a Port of %d, but has %d", i, section[i].(*dns.SRV).Port, x.Port) + return false + } + if x.Target != section[i].(*dns.SRV).Target { + t.Errorf("rr %d should have a Target of %q, but has %q", i, section[i].(*dns.SRV).Target, x.Target) + return false + } + case *dns.RRSIG: + if x.TypeCovered != section[i].(*dns.RRSIG).TypeCovered { + t.Errorf("rr %d should have a TypeCovered of %d, but has %d", i, section[i].(*dns.RRSIG).TypeCovered, x.TypeCovered) + return false + } + if x.Labels != section[i].(*dns.RRSIG).Labels { + t.Errorf("rr %d should have a Labels of %d, but has %d", i, section[i].(*dns.RRSIG).Labels, x.Labels) + return false + } + if x.SignerName != section[i].(*dns.RRSIG).SignerName { + t.Errorf("rr %d should have a SignerName of %d, but has %d", i, section[i].(*dns.RRSIG).SignerName, x.SignerName) + return false + } + case *dns.NSEC: + if x.NextDomain != section[i].(*dns.NSEC).NextDomain { + t.Errorf("rr %d should have a NextDomain of %d, but has %d", i, section[i].(*dns.NSEC).NextDomain, x.NextDomain) + return false + } + // TypeBitMap + case *dns.A: + if x.A.String() != section[i].(*dns.A).A.String() { + t.Errorf("rr %d should have a Address of %q, but has %q", i, section[i].(*dns.A).A.String(), x.A.String()) + return false + } + case *dns.AAAA: + if x.AAAA.String() != section[i].(*dns.AAAA).AAAA.String() { + t.Errorf("rr %d should have a Address of %q, but has %q", i, section[i].(*dns.AAAA).AAAA.String(), x.AAAA.String()) + return false + } + case *dns.TXT: + for j, txt := range x.Txt { + if txt != section[i].(*dns.TXT).Txt[j] { + t.Errorf("rr %d should have a Txt of %q, but has %q", i, section[i].(*dns.TXT).Txt[j], txt) + return false + } + } + case *dns.SOA: + tt := section[i].(*dns.SOA) + if x.Ns != tt.Ns { + t.Errorf("SOA nameserver should be %q, but is %q", x.Ns, tt.Ns) + return false + } + case *dns.PTR: + tt := section[i].(*dns.PTR) + if x.Ptr != tt.Ptr { + t.Errorf("PTR ptr should be %q, but is %q", x.Ptr, tt.Ptr) + return false + } + case *dns.CNAME: + tt := section[i].(*dns.CNAME) + if x.Target != tt.Target { + t.Errorf("CNAME target should be %q, but is %q", x.Target, tt.Target) + return false + } + case *dns.MX: + tt := section[i].(*dns.MX) + if x.Mx != tt.Mx { + t.Errorf("MX Mx should be %q, but is %q", x.Mx, tt.Mx) + return false + } + if x.Preference != tt.Preference { + t.Errorf("MX Preference should be %q, but is %q", x.Preference, tt.Preference) + return false + } + case *dns.NS: + tt := section[i].(*dns.NS) + if x.Ns != tt.Ns { + t.Errorf("NS nameserver should be %q, but is %q", x.Ns, tt.Ns) + return false + } + case *dns.OPT: + tt := section[i].(*dns.OPT) + if x.UDPSize() != tt.UDPSize() { + t.Errorf("OPT UDPSize should be %d, but is %d", tt.UDPSize(), x.UDPSize()) + return false + } + if x.Do() != tt.Do() { + t.Errorf("OPT DO should be %t, but is %t", tt.Do(), x.Do()) + return false + } + } + } + return true +} + +func ErrorHandler() Handler { + return HandlerFunc(func(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + m := new(dns.Msg) + m.SetRcode(r, dns.RcodeServerFailure) + w.WriteMsg(m) + return dns.RcodeServerFailure, nil + }) +} + +// Copied here to prevent an import cycle. +type ( + // HandlerFunc is a convenience type like dns.HandlerFunc, except + // ServeDNS returns an rcode and an error. + HandlerFunc func(context.Context, dns.ResponseWriter, *dns.Msg) (int, error) + + Handler interface { + ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error) + } +) + +// ServeDNS implements the Handler interface. +func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + return f(ctx, w, r) +} diff --git a/test/helpers_test.go b/test/helpers_test.go new file mode 100644 index 000000000..2aa1fe106 --- /dev/null +++ b/test/helpers_test.go @@ -0,0 +1,5 @@ +package test + +import "testing" + +func TestA(t *testing.T) { A("miek.nl. IN A 127.0.0.1") } // should not crash diff --git a/test/kubernetes_test.go b/test/kubernetes_test.go index 55939e350..009b50657 100644 --- a/test/kubernetes_test.go +++ b/test/kubernetes_test.go @@ -3,12 +3,12 @@ package test import ( - "fmt" "io/ioutil" "log" "testing" "github.com/miekg/coredns/middleware/kubernetes/k8stest" + "github.com/miekg/dns" ) @@ -64,9 +64,8 @@ var testdataLookupSRV = []struct { } func TestK8sIntegration(t *testing.T) { - t.Log(" === RUN testLookupA") + // subtests here (Go 1.7 feature). testLookupA(t) - t.Log(" === RUN testLookupSRV") testLookupSRV(t) } @@ -75,7 +74,7 @@ func testLookupA(t *testing.T) { t.Skip("Skipping Kubernetes Integration tests. Kubernetes is not running") } - coreFile := + corefile := `.:0 { kubernetes coredns.local { endpoint http://localhost:8080 @@ -83,16 +82,20 @@ func testLookupA(t *testing.T) { } ` - server, _, udp, err := Server(t, coreFile) + server, err := CoreDNSServer(corefile) if err != nil { - t.Fatal("Could not get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance: %s", err) + } + + udp, _ := CoreDNSServerPorts(server, 0) + if udp == "" { + t.Fatalf("could not get udp listening port") } defer server.Stop() log.SetOutput(ioutil.Discard) for _, testData := range testdataLookupA { - t.Logf("[log] Testing query string: '%v'\n", testData.Query) dnsClient := new(dns.Client) dnsMessage := new(dns.Msg) @@ -125,7 +128,7 @@ func testLookupSRV(t *testing.T) { t.Skip("Skipping Kubernetes Integration tests. Kubernetes is not running") } - coreFile := + corefile := `.:0 { kubernetes coredns.local { endpoint http://localhost:8080 @@ -133,9 +136,13 @@ func testLookupSRV(t *testing.T) { } ` - server, _, udp, err := Server(t, coreFile) + server, err := CoreDNSServer(corefile) if err != nil { - t.Fatal("Could not get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance: %s", err) + } + udp, _ := CoreDNSServerPorts(server, 0) + if udp == "" { + t.Fatalf("could not get udp listening port") } defer server.Stop() @@ -144,7 +151,6 @@ func testLookupSRV(t *testing.T) { // TODO: Add checks for A records in additional section for _, testData := range testdataLookupSRV { - t.Logf("[log] Testing query string: '%v'\n", testData.Query) dnsClient := new(dns.Client) dnsMessage := new(dns.Msg) @@ -158,7 +164,6 @@ func testLookupSRV(t *testing.T) { // Count SRV records in the answer section srvRecordCount := 0 for _, a := range res.Answer { - fmt.Printf("RR: %v\n", a) if a.Header().Rrtype == dns.TypeSRV { srvRecordCount++ } diff --git a/test/middleware_dnssec_test.go b/test/middleware_dnssec_test.go index 434e7ad56..afde72a54 100644 --- a/test/middleware_dnssec_test.go +++ b/test/middleware_dnssec_test.go @@ -29,11 +29,12 @@ func TestLookupBalanceRewriteCacheDnssec(t *testing.T) { loadbalance } ` - ex, _, udp, err := Server(t, corefile) + ex, err := CoreDNSServer(corefile) if err != nil { - t.Errorf("Could get server to start: %s", err) - return + t.Fatalf("could not get CoreDNS serving instance: %s", err) } + + udp, _ := CoreDNSServerPorts(ex, 0) defer ex.Stop() log.SetOutput(ioutil.Discard) diff --git a/test/middleware_test.go b/test/middleware_test.go index ec90f0d71..f7fefe78a 100644 --- a/test/middleware_test.go +++ b/test/middleware_test.go @@ -10,7 +10,7 @@ import ( "github.com/miekg/dns" ) -func BenchmarkLookupBalanceRewriteCache(b *testing.B) { +func benchmarkLookupBalanceRewriteCache(b *testing.B) { t := new(testing.T) name, rm, err := test.TempFile(t, ".", exampleOrg) if err != nil { @@ -24,10 +24,12 @@ func BenchmarkLookupBalanceRewriteCache(b *testing.B) { loadbalance } ` - ex, _, udp, err := Server(t, corefile) + + ex, err := CoreDNSServer(corefile) if err != nil { - t.Fatalf("Could get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance: %s", err) } + udp, _ := CoreDNSServerPorts(ex, 0) defer ex.Stop() log.SetOutput(ioutil.Discard) diff --git a/test/proxy_test.go b/test/proxy_test.go index 56ef159fb..ca04e1ae8 100644 --- a/test/proxy_test.go +++ b/test/proxy_test.go @@ -28,14 +28,20 @@ func TestLookupProxy(t *testing.T) { defer rm() corefile := `example.org:0 { - file ` + name + ` + file ` + name + ` } ` - ex, _, udp, err := Server(t, corefile) + + i, err := CoreDNSServer(corefile) if err != nil { - t.Fatalf("Could get server: %s", err) + 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 ex.Stop() + defer i.Stop() log.SetOutput(ioutil.Discard) @@ -43,8 +49,7 @@ func TestLookupProxy(t *testing.T) { state := middleware.State{W: &test.ResponseWriter{}, Req: new(dns.Msg)} resp, err := p.Lookup(state, "example.org.", dns.TypeA) if err != nil { - t.Error("Expected to receive reply, but didn't") - return + t.Fatal("Expected to receive reply, but didn't") } // expect answer section with A record in it if len(resp.Answer) == 0 { diff --git a/test/responsewriter.go b/test/responsewriter.go new file mode 100644 index 000000000..fb70d7e8d --- /dev/null +++ b/test/responsewriter.go @@ -0,0 +1,28 @@ +package test + +import ( + "net" + + "github.com/miekg/dns" +) + +type ResponseWriter struct{} + +func (t *ResponseWriter) LocalAddr() net.Addr { + ip := net.ParseIP("127.0.0.1") + port := 53 + return &net.UDPAddr{IP: ip, Port: port, Zone: ""} +} + +func (t *ResponseWriter) RemoteAddr() net.Addr { + ip := net.ParseIP("10.240.0.1") + port := 40212 + return &net.UDPAddr{IP: ip, Port: port, Zone: ""} +} + +func (t *ResponseWriter) WriteMsg(m *dns.Msg) error { return nil } +func (t *ResponseWriter) Write(buf []byte) (int, error) { return len(buf), nil } +func (t *ResponseWriter) Close() error { return nil } +func (t *ResponseWriter) TsigStatus() error { return nil } +func (t *ResponseWriter) TsigTimersOnly(bool) { return } +func (t *ResponseWriter) Hijack() { return } diff --git a/test/server.go b/test/server.go new file mode 100644 index 000000000..324ffdd8f --- /dev/null +++ b/test/server.go @@ -0,0 +1,91 @@ +package test + +import ( + "net" + "sync" + "testing" + "time" + + _ "github.com/miekg/coredns/core" + + "github.com/mholt/caddy" + "github.com/miekg/dns" +) + +func TCPServer(t *testing.T, laddr string) (*dns.Server, string, error) { + l, err := net.Listen("tcp", laddr) + if err != nil { + return nil, "", err + } + + server := &dns.Server{Listener: l, ReadTimeout: time.Hour, WriteTimeout: time.Hour} + + waitLock := sync.Mutex{} + waitLock.Lock() + server.NotifyStartedFunc = func() { t.Logf("started TCP server on %s", l.Addr()); waitLock.Unlock() } + + go func() { + server.ActivateAndServe() + l.Close() + }() + + waitLock.Lock() + return server, l.Addr().String(), nil +} + +func UDPServer(t *testing.T, laddr string) (*dns.Server, string, error) { + pc, err := net.ListenPacket("udp", laddr) + if err != nil { + return nil, "", err + } + server := &dns.Server{PacketConn: pc, ReadTimeout: time.Hour, WriteTimeout: time.Hour} + + waitLock := sync.Mutex{} + waitLock.Lock() + server.NotifyStartedFunc = func() { t.Logf("started UDP server on %s", pc.LocalAddr()); waitLock.Unlock() } + + go func() { + server.ActivateAndServe() + pc.Close() + }() + + waitLock.Lock() + return server, pc.LocalAddr().String(), nil +} + +// CoreDNSServer returns a test server. It just takes a normal Corefile as input. +func CoreDNSServer(corefile string) (*caddy.Instance, error) { return caddy.Start(NewInput(corefile)) } + +// CoreDNSSserverStop stops a server. +func CoreDNSServerStop(i *caddy.Instance) { i.Stop() } + +// CoreDNSServeRPorts returns the ports the instance is listening on. The integer k indicates +// which ServerListener you want. +func CoreDNSServerPorts(i *caddy.Instance, k int) (udp, tcp string) { + srvs := i.Servers() + if len(srvs) < k+1 { + return "", "" + } + u := srvs[k].LocalAddr() + t := srvs[k].Addr() + + if u != nil { + udp = u.String() + } + if t != nil { + tcp = t.String() + } + return +} + +type Input struct { + corefile []byte +} + +func NewInput(corefile string) *Input { + return &Input{corefile: []byte(corefile)} +} + +func (i *Input) Body() []byte { return i.corefile } +func (i *Input) Path() string { return "Corefile" } +func (i *Input) ServerType() string { return "dns" } diff --git a/test/server_test.go b/test/server_test.go index 6a86d022b..a03285bf3 100644 --- a/test/server_test.go +++ b/test/server_test.go @@ -12,24 +12,28 @@ func TestProxyToChaosServer(t *testing.T) { chaos CoreDNS-001 miek@miek.nl } ` - chaos, tcpCH, udpCH, err := Server(t, corefile) + chaos, err := CoreDNSServer(corefile) if err != nil { - t.Fatalf("Could get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance: %s", err) } + + udpChaos, tcpChaos := CoreDNSServerPorts(chaos, 0) defer chaos.Stop() corefileProxy := `.:0 { - proxy . ` + udpCH + ` + proxy . ` + udpChaos + ` } ` - proxy, _, udp, err := Server(t, corefileProxy) + proxy, err := CoreDNSServer(corefileProxy) if err != nil { - t.Fatalf("Could get server: %s", err) + t.Fatalf("could not get CoreDNS serving instance") } + + udp, _ := CoreDNSServerPorts(proxy, 0) defer proxy.Stop() - chaosTest(t, udpCH, "udp") - chaosTest(t, tcpCH, "tcp") + chaosTest(t, udpChaos, "udp") + chaosTest(t, tcpChaos, "tcp") chaosTest(t, udp, "udp") // chaosTest(t, tcp, "tcp"), commented out because we use the original transport to reach the diff --git a/test/tests.go b/test/tests.go index d38bf955f..0f9d12bae 100644 --- a/test/tests.go +++ b/test/tests.go @@ -1,12 +1,7 @@ package test import ( - "testing" - "time" - - "github.com/miekg/coredns/core" "github.com/miekg/coredns/middleware" - "github.com/miekg/coredns/server" "github.com/miekg/dns" ) @@ -25,16 +20,3 @@ func Exchange(m *dns.Msg, server, net string) (*dns.Msg, error) { c.Net = net return middleware.Exchange(c, m, server) } - -// Server returns a test server and the tcp and udp listeners addresses. -func Server(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) // yeah... I regret nothing - tcp, udp := srv.LocalAddr() - return srv, tcp.String(), udp.String(), nil -} |