| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package discover
- import (
- "bytes"
- "reflect"
- "testing"
- )
- var testdata = []struct {
- data []byte
- packet *Packet
- err error
- }{
- {
- []byte{0x20, 0x12, 0x10, 0x25,
- 0x12, 0x34, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x05,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- &Packet{
- Magic: 0x20121025,
- Port: 0x1234,
- ID: "hello",
- },
- nil,
- },
- {
- []byte{0x20, 0x12, 0x10, 0x25,
- 0x34, 0x56, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x21, 0x21,
- 0x00, 0x00, 0x00, 0x04,
- 0x01, 0x02, 0x03, 0x04},
- &Packet{
- Magic: 0x20121025,
- Port: 0x3456,
- ID: "hello!!!",
- IP: []byte{1, 2, 3, 4},
- },
- nil,
- },
- {
- []byte{0x19, 0x76, 0x03, 0x09,
- 0x00, 0x00, 0x00, 0x06,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x00, 0x00},
- &Packet{
- Magic: 0x19760309,
- ID: "hello!",
- },
- nil,
- },
- {
- []byte{0x20, 0x12, 0x10, 0x25,
- 0x12, 0x34, 0x12, 0x34, // reserved bits not set to zero
- 0x00, 0x00, 0x00, 0x06,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- nil,
- errFormat,
- },
- {
- []byte{0x20, 0x12, 0x10, 0x25,
- 0x12, 0x34, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, // missing padding
- 0x00, 0x00, 0x00, 0x00},
- nil,
- errFormat,
- },
- {
- []byte{0x19, 0x77, 0x03, 0x09, // incorrect Magic
- 0x00, 0x00, 0x00, 0x06,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x00, 0x00},
- nil,
- errBadMagic,
- },
- {
- []byte{0x19, 0x76, 0x03, 0x09,
- 0x6c, 0x6c, 0x6c, 0x6c, // length exceeds packet size
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x00, 0x00},
- nil,
- errFormat,
- },
- {
- []byte{0x19, 0x76, 0x03, 0x09,
- 0x00, 0x00, 0x00, 0x06,
- 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x00, 0x00,
- 0x23}, // extra data at the end
- nil,
- errFormat,
- },
- }
- func TestDecodePacket(t *testing.T) {
- for i, test := range testdata {
- p, err := DecodePacket(test.data)
- if err != test.err {
- t.Errorf("%d: unexpected error %v", i, err)
- } else {
- if !reflect.DeepEqual(p, test.packet) {
- t.Errorf("%d: incorrect packet\n%v\n%v", i, test.packet, p)
- }
- }
- }
- }
- func TestEncodePacket(t *testing.T) {
- for i, test := range testdata {
- if test.err != nil {
- continue
- }
- buf := EncodePacket(*test.packet)
- if bytes.Compare(buf, test.data) != 0 {
- t.Errorf("%d: incorrect encoded packet\n% x\n% 0x", i, test.data, buf)
- }
- }
- }
- var ipstrTests = []struct {
- d []byte
- s string
- }{
- {[]byte{192, 168, 34}, ""},
- {[]byte{192, 168, 0, 34}, "192.168.0.34"},
- {[]byte{0x20, 0x01, 0x12, 0x34,
- 0x34, 0x56, 0x56, 0x78,
- 0x78, 0x00, 0x00, 0xdc,
- 0x00, 0x00, 0x43, 0x54}, "2001:1234:3456:5678:7800:00dc:0000:4354"},
- }
- func TestIPStr(t *testing.T) {
- for _, tc := range ipstrTests {
- s1 := ipStr(tc.d)
- if s1 != tc.s {
- t.Errorf("Incorrect ipstr %q != %q", tc.s, s1)
- }
- }
- }
|