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, newConnectionOpts{
22 network: addr.Network(),
24 c.PeerExtensionIDs = make(map[pp.ExtensionName]pp.ExtensionNumber)
25 c.PeerExtensionIDs[pp.ExtensionNamePex] = pexExtendedId
26 c.messageWriter.mu.Lock()
28 if err := torrent.addPeerConn(c); err != nil {
32 connWriteCond := c.messageWriter.writeCond.Signaled()
34 require.True(t, c.pex.IsEnabled(), "should get enabled")
39 testWriter := func(m pp.Message) bool {
45 c.pex.Share(testWriter)
46 require.True(t, writerCalled)
47 require.EqualValues(t, pp.Extended, out.Type)
48 require.EqualValues(t, pexExtendedId, 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{
58 Added6Flags: []pp.PexPeerFlags{0},
60 require.EqualValues(t, targx, x)