Skip to content

Commit 02ac38e

Browse files
iangudgercixtor
authored andcommitted
dns/dnsmessage: improve test coverage of skipping
Updates golang/go#16218 Change-Id: I613cf0a65d40a9823c83e0a547fbd48b2236d16e Reviewed-on: https://go-review.googlesource.com/49630 Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com> Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
1 parent aa7a5b9 commit 02ac38e

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

dns/dnsmessage/message_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,69 @@ func TestSkipAll(t *testing.T) {
277277
}
278278
}
279279

280+
func TestSkipEach(t *testing.T) {
281+
msg := smallTestMsg()
282+
283+
buf, err := msg.Pack()
284+
if err != nil {
285+
t.Fatal("Packing test message:", err)
286+
}
287+
var p Parser
288+
if _, err := p.Start(buf); err != nil {
289+
t.Fatal(err)
290+
}
291+
292+
tests := []struct {
293+
name string
294+
f func() error
295+
}{
296+
{"SkipQuestion", p.SkipQuestion},
297+
{"SkipAnswer", p.SkipAnswer},
298+
{"SkipAuthority", p.SkipAuthority},
299+
{"SkipAdditional", p.SkipAdditional},
300+
}
301+
for _, test := range tests {
302+
if err := test.f(); err != nil {
303+
t.Errorf("First call: got %s() = %v, want = %v", test.name, err, nil)
304+
}
305+
if err := test.f(); err != ErrSectionDone {
306+
t.Errorf("Second call: got %s() = %v, want = %v", test.name, err, ErrSectionDone)
307+
}
308+
}
309+
}
310+
311+
func TestSkipAfterRead(t *testing.T) {
312+
msg := smallTestMsg()
313+
314+
buf, err := msg.Pack()
315+
if err != nil {
316+
t.Fatal("Packing test message:", err)
317+
}
318+
var p Parser
319+
if _, err := p.Start(buf); err != nil {
320+
t.Fatal(err)
321+
}
322+
323+
tests := []struct {
324+
name string
325+
skip func() error
326+
read func() error
327+
}{
328+
{"Question", p.SkipQuestion, func() error { _, err := p.Question(); return err }},
329+
{"Answer", p.SkipAnswer, func() error { _, err := p.Answer(); return err }},
330+
{"Authority", p.SkipAuthority, func() error { _, err := p.Authority(); return err }},
331+
{"Additional", p.SkipAdditional, func() error { _, err := p.Additional(); return err }},
332+
}
333+
for _, test := range tests {
334+
if err := test.read(); err != nil {
335+
t.Errorf("Got %s() = _, %v, want = _, %v", test.name, err, nil)
336+
}
337+
if err := test.skip(); err != ErrSectionDone {
338+
t.Errorf("Got Skip%s() = %v, want = %v", test.name, err, ErrSectionDone)
339+
}
340+
}
341+
}
342+
280343
func TestSkipNotStarted(t *testing.T) {
281344
var p Parser
282345

@@ -745,6 +808,50 @@ func BenchmarkBuilding(b *testing.B) {
745808
}
746809
}
747810

811+
func smallTestMsg() Message {
812+
name := mustNewName("example.com.")
813+
return Message{
814+
Header: Header{Response: true, Authoritative: true},
815+
Questions: []Question{
816+
{
817+
Name: name,
818+
Type: TypeA,
819+
Class: ClassINET,
820+
},
821+
},
822+
Answers: []Resource{
823+
{
824+
ResourceHeader{
825+
Name: name,
826+
Type: TypeA,
827+
Class: ClassINET,
828+
},
829+
&AResource{[4]byte{127, 0, 0, 1}},
830+
},
831+
},
832+
Authorities: []Resource{
833+
{
834+
ResourceHeader{
835+
Name: name,
836+
Type: TypeA,
837+
Class: ClassINET,
838+
},
839+
&AResource{[4]byte{127, 0, 0, 1}},
840+
},
841+
},
842+
Additionals: []Resource{
843+
{
844+
ResourceHeader{
845+
Name: name,
846+
Type: TypeA,
847+
Class: ClassINET,
848+
},
849+
&AResource{[4]byte{127, 0, 0, 1}},
850+
},
851+
},
852+
}
853+
}
854+
748855
func largeTestMsg() Message {
749856
name := mustNewName("foo.bar.example.com.")
750857
return Message{

0 commit comments

Comments
 (0)