aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-01-19 20:24:35 +0100
committerMartin Polden <mpolden@mpolden.no>2020-01-19 20:24:35 +0100
commita52a88479bd3837da9d1036f8e00ffa43a9cdbe1 (patch)
tree63557b22a9691c793735ec46d1833657937e344b
parentac5ac8dfb47ddedd829501af4ce9d190b7e959ad (diff)
Simplify
-rw-r--r--dns/dnsutil/dnsutil.go15
-rw-r--r--dns/dnsutil/dnsutil_test.go21
2 files changed, 23 insertions, 13 deletions
diff --git a/dns/dnsutil/dnsutil.go b/dns/dnsutil/dnsutil.go
index 8f2fd1e..9cf75b6 100644
--- a/dns/dnsutil/dnsutil.go
+++ b/dns/dnsutil/dnsutil.go
@@ -79,19 +79,8 @@ func (c *Client) Exchange(msg *dns.Msg) (*dns.Msg, error) {
func Answers(msg *dns.Msg) []string {
var answers []string
for _, answer := range msg.Answer {
- switch v := answer.(type) {
- case *dns.A:
- answers = append(answers, v.A.String())
- case *dns.AAAA:
- answers = append(answers, v.AAAA.String())
- case *dns.MX:
- answers = append(answers, v.Mx)
- case *dns.PTR:
- answers = append(answers, v.Ptr)
- case *dns.NS:
- answers = append(answers, v.Ns)
- case *dns.CNAME:
- answers = append(answers, v.Target)
+ for i := 1; i <= dns.NumField(answer); i++ {
+ answers = append(answers, dns.Field(answer, i))
}
}
return answers
diff --git a/dns/dnsutil/dnsutil_test.go b/dns/dnsutil/dnsutil_test.go
index f23389a..3ece7f3 100644
--- a/dns/dnsutil/dnsutil_test.go
+++ b/dns/dnsutil/dnsutil_test.go
@@ -3,6 +3,7 @@ package dnsutil
import (
"errors"
"net"
+ "reflect"
"sync"
"testing"
"time"
@@ -108,6 +109,26 @@ func TestMinTTL(t *testing.T) {
}
}
+func TestAnswers(t *testing.T) {
+ var tests = []struct {
+ rr []dns.RR
+ out []string
+ }{
+ {[]dns.RR{&dns.A{A: net.ParseIP("192.0.2.1")}}, []string{"192.0.2.1"}},
+ {[]dns.RR{
+ &dns.A{A: net.ParseIP("192.0.2.1")},
+ &dns.A{A: net.ParseIP("192.0.2.2")},
+ }, []string{"192.0.2.1", "192.0.2.2"}},
+ {[]dns.RR{&dns.AAAA{AAAA: net.ParseIP("2001:db8::1")}}, []string{"2001:db8::1"}},
+ }
+ for i, tt := range tests {
+ msg := dns.Msg{Answer: tt.rr}
+ if got, want := Answers(&msg), tt.out; !reflect.DeepEqual(got, want) {
+ t.Errorf("#%d: Answers(%+v) = %+v, want %+v", i, tt.rr, got, want)
+ }
+ }
+}
+
func TestExchange(t *testing.T) {
addresses := []string{"addr1", "addr2"}
exchanger := newTestExchanger()