7 "github.com/anacrolix/dht/v2/krpc"
8 "github.com/stretchr/testify/require"
10 "github.com/anacrolix/torrent/metainfo"
11 pp "github.com/anacrolix/torrent/peer_protocol"
14 func TestPexConnState(t *testing.T) {
16 cl.init(TestingConfig(t))
18 torrent := cl.newTorrent(metainfo.Hash{}, nil)
19 addr := &net.TCPAddr{IP: net.IPv6loopback, Port: 4747}
20 c := cl.newConnection(nil, false, addr, addr.Network(), "")
21 c.PeerExtensionIDs = make(map[pp.ExtensionName]pp.ExtensionNumber)
22 c.PeerExtensionIDs[pp.ExtensionNamePex] = pexExtendedId
23 c.messageWriter.mu.Lock()
25 if err := torrent.addPeerConn(c); err != nil {
30 require.True(t, c.pex.IsEnabled(), "should get enabled")
35 testWriter := func(m pp.Message) bool {
40 <-c.messageWriter.writeCond.Signaled()
41 c.pex.Share(testWriter)
42 require.True(t, writerCalled)
43 require.EqualValues(t, pp.Extended, out.Type)
44 require.EqualValues(t, pexExtendedId, out.ExtendedID)
46 x, err := pp.LoadPexMsg(out.ExtendedPayload)
47 require.NoError(t, err)
49 Added: krpc.CompactIPv4NodeAddrs(nil),
50 AddedFlags: []pp.PexPeerFlags{},
51 Added6: krpc.CompactIPv6NodeAddrs{
54 Added6Flags: []pp.PexPeerFlags{0},
56 require.EqualValues(t, targx, x)