10 "github.com/anacrolix/dht/v2/krpc"
11 qt "github.com/frankban/quicktest"
12 "github.com/stretchr/testify/require"
15 // Ensure net.IPs are stored big-endian, to match the way they're read from
17 func TestNetIPv4Bytes(t *testing.T) {
18 ip := net.IP([]byte{127, 0, 0, 1})
19 if ip.String() != "127.0.0.1" {
22 if string(ip) != "\x7f\x00\x00\x01" {
27 func TestMarshalAnnounceResponse(t *testing.T) {
28 peers := krpc.CompactIPv4NodeAddrs{
29 {[]byte{127, 0, 0, 1}, 2},
30 {[]byte{255, 0, 0, 3}, 4},
32 b, err := peers.MarshalBinary()
33 require.NoError(t, err)
34 require.EqualValues(t,
35 "\x7f\x00\x00\x01\x00\x02\xff\x00\x00\x03\x00\x04",
37 require.EqualValues(t, 12, binary.Size(AnnounceResponseHeader{}))
40 // Failure to write an entire packet to UDP is expected to given an error.
41 func TestLongWriteUDP(t *testing.T) {
43 l, err := net.ListenUDP("udp4", nil)
44 require.NoError(t, err)
46 c, err := net.DialUDP("udp", nil, l.LocalAddr().(*net.UDPAddr))
51 for msgLen := 1; ; msgLen *= 2 {
52 n, err := c.Write(make([]byte, msgLen))
54 require.Contains(t, err.Error(), "message too long")
63 func TestShortBinaryRead(t *testing.T) {
64 var data ResponseHeader
65 err := binary.Read(bytes.NewBufferString("\x00\x00\x00\x01"), binary.BigEndian, &data)
66 if err != io.ErrUnexpectedEOF {
71 func TestConvertInt16ToInt(t *testing.T) {
73 if int(uint16(int16(i))) != 50000 {
78 func TestConnClientLogDispatchUnknownTransactionId(t *testing.T) {
80 cc, err := NewConnClient(NewConnClientOpts{
84 c.Assert(err, qt.IsNil)
86 pc, err := net.ListenPacket(network, ":0")
87 c.Assert(err, qt.IsNil)
89 ccAddr := *cc.LocalAddr().(*net.UDPAddr)
90 ccAddr.IP = net.IPv6loopback
91 _, err = pc.WriteTo(make([]byte, 30), &ccAddr)
92 c.Assert(err, qt.IsNil)