112 lines
2.2 KiB
Go
112 lines
2.2 KiB
Go
|
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},
|
||
|
&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},
|
||
|
&packet{
|
||
|
magic: 0x20121025,
|
||
|
port: 0x3456,
|
||
|
id: "hello!!!",
|
||
|
},
|
||
|
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},
|
||
|
nil,
|
||
|
errFormat,
|
||
|
},
|
||
|
{
|
||
|
[]byte{0x20, 0x12, 0x10, 0x25,
|
||
|
0x12, 0x34, 0x00, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x06,
|
||
|
0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x21}, // missing padding
|
||
|
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)
|
||
|
}
|
||
|
}
|
||
|
}
|