10 "github.com/anacrolix/dht/v2/krpc"
11 "github.com/stretchr/testify/require"
14 // Ensure net.IPs are stored big-endian, to match the way they're read from
16 func TestNetIPv4Bytes(t *testing.T) {
17 ip := net.IP([]byte{127, 0, 0, 1})
18 if ip.String() != "127.0.0.1" {
21 if string(ip) != "\x7f\x00\x00\x01" {
26 func TestMarshalAnnounceResponse(t *testing.T) {
27 peers := krpc.CompactIPv4NodeAddrs{
28 {[]byte{127, 0, 0, 1}, 2},
29 {[]byte{255, 0, 0, 3}, 4},
31 b, err := peers.MarshalBinary()
32 require.NoError(t, err)
33 require.EqualValues(t,
34 "\x7f\x00\x00\x01\x00\x02\xff\x00\x00\x03\x00\x04",
36 require.EqualValues(t, 12, binary.Size(AnnounceResponseHeader{}))
39 // Failure to write an entire packet to UDP is expected to given an error.
40 func TestLongWriteUDP(t *testing.T) {
42 l, err := net.ListenUDP("udp4", nil)
43 require.NoError(t, err)
45 c, err := net.DialUDP("udp", nil, l.LocalAddr().(*net.UDPAddr))
50 for msgLen := 1; ; msgLen *= 2 {
51 n, err := c.Write(make([]byte, msgLen))
53 require.Contains(t, err.Error(), "message too long")
62 func TestShortBinaryRead(t *testing.T) {
63 var data ResponseHeader
64 err := binary.Read(bytes.NewBufferString("\x00\x00\x00\x01"), binary.BigEndian, &data)
65 if err != io.ErrUnexpectedEOF {
70 func TestConvertInt16ToInt(t *testing.T) {
72 if int(uint16(int16(i))) != 50000 {