@@ -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+
280343func TestSkipNotStarted (t * testing.T ) {
281344var 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+
748855func largeTestMsg () Message {
749856name := mustNewName ("foo.bar.example.com." )
750857return Message {
0 commit comments