dns/dnsmessage: tweak the error value on nil resource body
Change-Id: I17444d1cc3ce03b6947aaae18d4cecdf9c36193f
Reviewed-on: https://go-review.googlesource.com/47110
Reviewed-by: Ian Gudger <igudger@google.com>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/dns/dnsmessage/message.go b/dns/dnsmessage/message.go
index 3826c62..19b260d 100644
--- a/dns/dnsmessage/message.go
+++ b/dns/dnsmessage/message.go
@@ -80,6 +80,7 @@
errReserved = errors.New("segment prefix is reserved")
errTooManyPtr = errors.New("too many pointers (>10)")
errInvalidPtr = errors.New("invalid pointer")
+ errNilResouceBody = errors.New("nil resource body")
errResourceLen = errors.New("insufficient data for resource body length")
errSegTooLong = errors.New("segment length too long")
errZeroSegLen = errors.New("zero length segment")
@@ -281,7 +282,7 @@
func (r *Resource) pack(msg []byte, compression map[string]int) ([]byte, error) {
if r.Body == nil {
- return msg, &nestedError{"Resource", errors.New("nil resource body")}
+ return msg, errNilResouceBody
}
oldMsg := msg
r.Header.Type = r.Body.realType()
diff --git a/dns/dnsmessage/message_test.go b/dns/dnsmessage/message_test.go
index 2b2c8f1..0f98daa 100644
--- a/dns/dnsmessage/message_test.go
+++ b/dns/dnsmessage/message_test.go
@@ -535,40 +535,57 @@
}
func TestResourcePack(t *testing.T) {
- for _, m := range []Message{
+ for _, tt := range []struct {
+ m Message
+ err error
+ }{
{
- Questions: []Question{
- {
- Name: mustNewName("."),
- Type: TypeAAAA,
- Class: ClassINET,
+ Message{
+ Questions: []Question{
+ {
+ Name: mustNewName("."),
+ Type: TypeAAAA,
+ Class: ClassINET,
+ },
},
+ Answers: []Resource{{ResourceHeader{}, nil}},
},
- Answers: []Resource{{ResourceHeader{}, nil}},
+ &nestedError{"packing Answer", errNilResouceBody},
},
{
- Questions: []Question{
- {
- Name: mustNewName("."),
- Type: TypeAAAA,
- Class: ClassINET,
+ Message{
+ Questions: []Question{
+ {
+ Name: mustNewName("."),
+ Type: TypeAAAA,
+ Class: ClassINET,
+ },
+ },
+ Authorities: []Resource{{ResourceHeader{}, (*NSResource)(nil)}},
+ },
+ &nestedError{"packing Authority",
+ &nestedError{"ResourceHeader",
+ &nestedError{"Name", errNonCanonicalName},
},
},
- Authorities: []Resource{{ResourceHeader{}, (*NSResource)(nil)}},
},
{
- Questions: []Question{
- {
- Name: mustNewName("."),
- Type: TypeA,
- Class: ClassINET,
+ Message{
+ Questions: []Question{
+ {
+ Name: mustNewName("."),
+ Type: TypeA,
+ Class: ClassINET,
+ },
},
+ Additionals: []Resource{{ResourceHeader{}, nil}},
},
- Additionals: []Resource{{ResourceHeader{}, nil}},
+ &nestedError{"packing Additional", errNilResouceBody},
},
} {
- if _, err := m.Pack(); err == nil {
- t.Errorf("should fail: %v", m)
+ _, err := tt.m.Pack()
+ if !reflect.DeepEqual(err, tt.err) {
+ t.Errorf("got %v for %v; want %v", err, tt.m, tt.err)
}
}
}