From bf88ed8d9653024bb5cfa790c550825c20840827 Mon Sep 17 00:00:00 2001 From: Alvaro Saurin Date: Wed, 11 Feb 2015 11:46:18 +0100 Subject: [PATCH] zettio/weave#362 - unit test for TCP requests to our DNS server --- nameserver/server_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/nameserver/server_test.go b/nameserver/server_test.go index eeb98016..a5cb356d 100644 --- a/nameserver/server_test.go +++ b/nameserver/server_test.go @@ -46,11 +46,16 @@ func TestDNSServer(t *testing.T) { go srv.Start() time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start + // Create a regular UDP client and a TCP client c := new(dns.Client) c.UDPSize = UDPBufSize + tc := new(dns.Client) + tc.Net = "tcp" + m := new(dns.Msg) m.SetQuestion(successTestName, dns.TypeA) m.RecursionDesired = true + r, _, err := c.Exchange(m, dnsAddr) wt.AssertNoErr(t, err) wt.AssertStatus(t, r.Rcode, dns.RcodeSuccess, "DNS response code") @@ -58,6 +63,16 @@ func TestDNSServer(t *testing.T) { wt.AssertType(t, r.Answer[0], (*dns.A)(nil), "DNS record") wt.AssertEqualString(t, r.Answer[0].(*dns.A).A.String(), testAddr1, "IP address") + // Retry the query with the TCP client + tr, _, err := tc.Exchange(m, dnsAddr) + wt.AssertNoErr(t, err) + wt.AssertStatus(t, tr.Rcode, dns.RcodeSuccess, "DNS response code (TCP)") + wt.AssertEqualInt(t, len(tr.Answer), 1, "Number of answers (TCP)") + wt.AssertType(t, tr.Answer[0], (*dns.A)(nil), "DNS record (TCP)") + wt.AssertEqualString(t, tr.Answer[0].(*dns.A).A.String(), testAddr1, "IP address (TCP)") + // TODO: look for some way of testing the TCP fallback for truncated responses: it seems there is + // TODO: no client lib in Go that can do that... + m.SetQuestion(failTestName, dns.TypeA) r, _, err = c.Exchange(m, dnsAddr) wt.AssertNoErr(t, err)