7 "github.com/anacrolix/dht/v2/krpc"
8 "github.com/stretchr/testify/require"
10 pp "github.com/anacrolix/torrent/peer_protocol"
13 func TestPexConnState(t *testing.T) {
15 cl.init(TestingConfig(t))
17 torrent := cl.newTorrentForTesting()
18 addr := &net.TCPAddr{IP: net.IPv6loopback, Port: 4747}
19 c := cl.newConnection(nil, newConnectionOpts{
21 network: addr.Network(),
23 c.PeerExtensionIDs = make(map[pp.ExtensionName]pp.ExtensionNumber)
24 c.PeerExtensionIDs[pp.ExtensionNamePex] = 1
25 c.messageWriter.mu.Lock()
27 if err := torrent.addPeerConn(c); err != nil {
31 connWriteCond := c.messageWriter.writeCond.Signaled()
33 require.True(t, c.pex.IsEnabled(), "should get enabled")
38 testWriter := func(m pp.Message) bool {
44 c.pex.Share(testWriter)
45 require.True(t, writerCalled)
46 require.EqualValues(t, pp.Extended, out.Type)
47 require.NotEqualValues(t, out.ExtendedID, 0)
48 require.EqualValues(t, c.PeerExtensionIDs[pp.ExtensionNamePex], out.ExtendedID)
50 x, err := pp.LoadPexMsg(out.ExtendedPayload)
51 require.NoError(t, err)
53 Added: krpc.CompactIPv4NodeAddrs(nil),
54 AddedFlags: []pp.PexPeerFlags{},
55 Added6: krpc.CompactIPv6NodeAddrs{
56 krpcNodeAddrFromNetAddr(addr),
58 Added6Flags: []pp.PexPeerFlags{0},
60 require.EqualValues(t, targx, x)