dns_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. )
  7. func allPackets(buf []byte) ([][]byte, error) {
  8. var packets [][]byte
  9. r := bytes.NewReader(buf)
  10. for {
  11. p, err := nextPacket(r)
  12. if err != nil {
  13. return packets, err
  14. }
  15. packets = append(packets, p)
  16. }
  17. }
  18. func packetsEqual(a, b [][]byte) bool {
  19. if len(a) != len(b) {
  20. return false
  21. }
  22. for i := range a {
  23. if !bytes.Equal(a[i], b[i]) {
  24. return false
  25. }
  26. }
  27. return true
  28. }
  29. func TestNextPacket(t *testing.T) {
  30. for _, test := range []struct {
  31. input string
  32. packets [][]byte
  33. err error
  34. }{
  35. {"", [][]byte{}, io.EOF},
  36. {"\x00", [][]byte{}, io.ErrUnexpectedEOF},
  37. {"\x00\x00", [][]byte{{}}, io.EOF},
  38. {"\x00\x00\x00", [][]byte{{}}, io.ErrUnexpectedEOF},
  39. {"\x00\x01", [][]byte{}, io.ErrUnexpectedEOF},
  40. {"\x00\x05hello\x00\x05world", [][]byte{[]byte("hello"), []byte("world")}, io.EOF},
  41. } {
  42. packets, err := allPackets([]byte(test.input))
  43. if !packetsEqual(packets, test.packets) || err != test.err {
  44. t.Errorf("%x\nreturned %x %v\nexpected %x %v",
  45. test.input, packets, err, test.packets, test.err)
  46. }
  47. }
  48. }