From f0fb44f6d45f90b3d0674e310f8d74dcdd4ce841 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Mon, 2 Nov 2015 13:19:20 +0000 Subject: [PATCH 1/2] Update unit test for miekg DNS API change --- nameserver/dns_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nameserver/dns_test.go b/nameserver/dns_test.go index 74768715..ae67eda4 100644 --- a/nameserver/dns_test.go +++ b/nameserver/dns_test.go @@ -42,17 +42,17 @@ func TestTruncation(t *testing.T) { nameserver.AddEntry("foo.weave.local.", "", router.UnknownPeerName, i) } - doRequest := func(client *dns.Client, request *dns.Msg, port int) *dns.Msg { + doRequest := func(client *dns.Client, request *dns.Msg, port int, expectedErr error) *dns.Msg { request.SetQuestion("foo.weave.local.", dns.TypeA) response, _, err := client.Exchange(request, fmt.Sprintf("127.0.0.1:%d", port)) - require.Nil(t, err) + require.Equal(t, expectedErr, err) return response } // do a udp query, ensure we get a truncated response { udpClient := dns.Client{Net: "udp", UDPSize: minUDPSize} - response := doRequest(&udpClient, &dns.Msg{}, udpPort) + response := doRequest(&udpClient, &dns.Msg{}, udpPort, dns.ErrTruncated) require.True(t, response.MsgHdr.Truncated) require.True(t, len(response.Answer) < 100) } @@ -62,7 +62,7 @@ func TestTruncation(t *testing.T) { udpClient := dns.Client{Net: "udp", UDPSize: 65535} request := &dns.Msg{} request.SetEdns0(65535, false) - response := doRequest(&udpClient, request, udpPort) + response := doRequest(&udpClient, request, udpPort, nil) require.False(t, response.MsgHdr.Truncated) require.Equal(t, len(response.Answer), 100) } @@ -70,7 +70,7 @@ func TestTruncation(t *testing.T) { // do a tcp query, ensure we don't get a truncated response { tcpClient := dns.Client{Net: "tcp"} - response := doRequest(&tcpClient, &dns.Msg{}, tcpPort) + response := doRequest(&tcpClient, &dns.Msg{}, tcpPort, nil) require.False(t, response.MsgHdr.Truncated) require.Equal(t, len(response.Answer), 100) } From f64f63f6751f6c20fe25cd752d6ad5db3be17876 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Mon, 2 Nov 2015 15:00:02 +0000 Subject: [PATCH 2/2] Handle truncated responses from upstream servers --- nameserver/dns.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nameserver/dns.go b/nameserver/dns.go index 9db9de20..461cdfed 100644 --- a/nameserver/dns.go +++ b/nameserver/dns.go @@ -216,7 +216,7 @@ func (h *handler) handleRecursive(w dns.ResponseWriter, req *dns.Msg) { reqCopy := req.Copy() reqCopy.Id = dns.Id() response, _, err := h.client.Exchange(reqCopy, fmt.Sprintf("%s:%s", server, h.upstream.Port)) - if err != nil || response == nil { + if (err != nil && err != dns.ErrTruncated) || response == nil { h.ns.debugf("error trying %s: %v", server, err) continue }