tracker/expvar.go | 1 - tracker/peer.go | 1 - tracker/server_test.go => tracker/udp-server_test.go | 0 tracker/udp/udp_test.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tracker/udp_test.go | 65 ----------------------------------------------------- diff --git a/tracker/expvar.go b/tracker/expvar.go deleted file mode 100644 index bf0317392f4909c58d38e2bdc4fb9c5be51fd635..0000000000000000000000000000000000000000 --- a/tracker/expvar.go +++ /dev/null @@ -1 +0,0 @@ -package tracker diff --git a/tracker/peer.go b/tracker/peer.go deleted file mode 100644 index bf0317392f4909c58d38e2bdc4fb9c5be51fd635..0000000000000000000000000000000000000000 --- a/tracker/peer.go +++ /dev/null @@ -1 +0,0 @@ -package tracker diff --git a/tracker/server_test.go b/tracker/udp-server_test.go rename from tracker/server_test.go rename to tracker/udp-server_test.go diff --git a/tracker/udp/udp_test.go b/tracker/udp/udp_test.go new file mode 100644 index 0000000000000000000000000000000000000000..862aec73d572d0ebd0e360a674ed7b6c033e04a8 --- /dev/null +++ b/tracker/udp/udp_test.go @@ -0,0 +1,75 @@ +package udp + +import ( + "bytes" + "encoding/binary" + "io" + "net" + "testing" + + "github.com/anacrolix/dht/v2/krpc" + "github.com/stretchr/testify/require" +) + +// Ensure net.IPs are stored big-endian, to match the way they're read from +// the wire. +func TestNetIPv4Bytes(t *testing.T) { + ip := net.IP([]byte{127, 0, 0, 1}) + if ip.String() != "127.0.0.1" { + t.FailNow() + } + if string(ip) != "\x7f\x00\x00\x01" { + t.Fatal([]byte(ip)) + } +} + +func TestMarshalAnnounceResponse(t *testing.T) { + peers := krpc.CompactIPv4NodeAddrs{ + {[]byte{127, 0, 0, 1}, 2}, + {[]byte{255, 0, 0, 3}, 4}, + } + b, err := peers.MarshalBinary() + require.NoError(t, err) + require.EqualValues(t, + "\x7f\x00\x00\x01\x00\x02\xff\x00\x00\x03\x00\x04", + b) + require.EqualValues(t, 12, binary.Size(AnnounceResponseHeader{})) +} + +// Failure to write an entire packet to UDP is expected to given an error. +func TestLongWriteUDP(t *testing.T) { + t.Parallel() + l, err := net.ListenUDP("udp4", nil) + require.NoError(t, err) + defer l.Close() + c, err := net.DialUDP("udp", nil, l.LocalAddr().(*net.UDPAddr)) + if err != nil { + t.Fatal(err) + } + defer c.Close() + for msgLen := 1; ; msgLen *= 2 { + n, err := c.Write(make([]byte, msgLen)) + if err != nil { + require.Contains(t, err.Error(), "message too long") + return + } + if n < msgLen { + t.FailNow() + } + } +} + +func TestShortBinaryRead(t *testing.T) { + var data ResponseHeader + err := binary.Read(bytes.NewBufferString("\x00\x00\x00\x01"), binary.BigEndian, &data) + if err != io.ErrUnexpectedEOF { + t.FailNow() + } +} + +func TestConvertInt16ToInt(t *testing.T) { + i := 50000 + if int(uint16(int16(i))) != 50000 { + t.FailNow() + } +} diff --git a/tracker/udp_test.go b/tracker/udp_test.go index 639eede6a15d683ed02a6f222188b350ea1fe96f..323047306f02c6f7ac60cfc1b6e698b712de5f79 100644 --- a/tracker/udp_test.go +++ b/tracker/udp_test.go @@ -4,10 +4,8 @@ import ( "bytes" "context" "crypto/rand" - "encoding/binary" "errors" "fmt" - "io" "io/ioutil" "net" "net/url" @@ -25,69 +23,6 @@ var trackers = []string{ "udp://tracker.opentrackr.org:1337/announce", "udp://tracker.openbittorrent.com:6969/announce", -} - -// Ensure net.IPs are stored big-endian, to match the way they're read from -// the wire. -func TestNetIPv4Bytes(t *testing.T) { - ip := net.IP([]byte{127, 0, 0, 1}) - if ip.String() != "127.0.0.1" { - t.FailNow() - } - if string(ip) != "\x7f\x00\x00\x01" { - t.Fatal([]byte(ip)) - } -} - -func TestMarshalAnnounceResponse(t *testing.T) { - peers := krpc.CompactIPv4NodeAddrs{ - {[]byte{127, 0, 0, 1}, 2}, - {[]byte{255, 0, 0, 3}, 4}, - } - b, err := peers.MarshalBinary() - require.NoError(t, err) - require.EqualValues(t, - "\x7f\x00\x00\x01\x00\x02\xff\x00\x00\x03\x00\x04", - b) - require.EqualValues(t, 12, binary.Size(udp.AnnounceResponseHeader{})) -} - -// Failure to write an entire packet to UDP is expected to given an error. -func TestLongWriteUDP(t *testing.T) { - t.Parallel() - l, err := net.ListenUDP("udp4", nil) - require.NoError(t, err) - defer l.Close() - c, err := net.DialUDP("udp", nil, l.LocalAddr().(*net.UDPAddr)) - if err != nil { - t.Fatal(err) - } - defer c.Close() - for msgLen := 1; ; msgLen *= 2 { - n, err := c.Write(make([]byte, msgLen)) - if err != nil { - require.Contains(t, err.Error(), "message too long") - return - } - if n < msgLen { - t.FailNow() - } - } -} - -func TestShortBinaryRead(t *testing.T) { - var data udp.ResponseHeader - err := binary.Read(bytes.NewBufferString("\x00\x00\x00\x01"), binary.BigEndian, &data) - if err != io.ErrUnexpectedEOF { - t.FailNow() - } -} - -func TestConvertInt16ToInt(t *testing.T) { - i := 50000 - if int(uint16(int16(i))) != 50000 { - t.FailNow() - } } func TestAnnounceLocalhost(t *testing.T) {