2013-09-29 06:11:24 +08:00
|
|
|
package peer_protocol
|
2013-09-26 11:43:46 +08:00
|
|
|
|
|
|
|
import (
|
2014-03-17 22:44:22 +08:00
|
|
|
"bytes"
|
2013-09-26 11:43:46 +08:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2014-03-17 22:44:22 +08:00
|
|
|
func TestBinaryReadSliceOfPointers(t *testing.T) {
|
|
|
|
var msg Message
|
|
|
|
r := bytes.NewBufferString("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00")
|
|
|
|
if r.Len() != 12 {
|
|
|
|
t.Fatalf("expected 12 bytes left, but there %d", r.Len())
|
|
|
|
}
|
|
|
|
for _, data := range []*Integer{&msg.Index, &msg.Begin, &msg.Length} {
|
|
|
|
err := data.Read(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if r.Len() != 0 {
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-09-26 11:43:46 +08:00
|
|
|
func TestConstants(t *testing.T) {
|
|
|
|
// check that iota works as expected in the const block
|
|
|
|
if NotInterested != 3 {
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
}
|
2013-10-01 16:43:18 +08:00
|
|
|
|
2013-09-30 19:51:08 +08:00
|
|
|
func TestBitfieldEncode(t *testing.T) {
|
2013-10-01 16:43:18 +08:00
|
|
|
bf := make([]bool, 37)
|
|
|
|
bf[2] = true
|
|
|
|
bf[7] = true
|
|
|
|
bf[32] = true
|
|
|
|
s := string(marshalBitfield(bf))
|
2013-09-30 19:51:08 +08:00
|
|
|
const expected = "\x21\x00\x00\x00\x80"
|
|
|
|
if s != expected {
|
|
|
|
t.Fatalf("got %#v, expected %#v", s, expected)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-10-01 16:43:18 +08:00
|
|
|
func TestBitfieldUnmarshal(t *testing.T) {
|
|
|
|
bf := unmarshalBitfield([]byte("\x81\x06"))
|
|
|
|
expected := make([]bool, 16)
|
|
|
|
expected[0] = true
|
|
|
|
expected[7] = true
|
|
|
|
expected[13] = true
|
|
|
|
expected[14] = true
|
|
|
|
if len(bf) != len(expected) {
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
for i := range expected {
|
|
|
|
if bf[i] != expected[i] {
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-09-30 19:51:08 +08:00
|
|
|
func TestHaveEncode(t *testing.T) {
|
2013-10-01 16:43:18 +08:00
|
|
|
actualBytes, err := Message{
|
|
|
|
Type: Have,
|
|
|
|
Index: 42,
|
|
|
|
}.MarshalBinary()
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
actualString := string(actualBytes)
|
2013-10-06 13:05:03 +08:00
|
|
|
expected := "\x00\x00\x00\x05\x04\x00\x00\x00\x2a"
|
2013-10-01 16:43:18 +08:00
|
|
|
if actualString != expected {
|
|
|
|
t.Fatalf("expected %#v, got %#v", expected, actualString)
|
2013-09-30 19:51:08 +08:00
|
|
|
}
|
|
|
|
}
|