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 {
29 connWriteCond := c.messageWriter.writeCond.Signaled()
31 require.True(t, c.pex.IsEnabled(), "should get enabled")
36 testWriter := func(m pp.Message) bool {
42 c.pex.Share(testWriter)
43 require.True(t, writerCalled)
44 require.EqualValues(t, pp.Extended, out.Type)
45 require.EqualValues(t, pexExtendedId, out.ExtendedID)
47 x, err := pp.LoadPexMsg(out.ExtendedPayload)
48 require.NoError(t, err)
50 Added: krpc.CompactIPv4NodeAddrs(nil),
51 AddedFlags: []pp.PexPeerFlags{},
52 Added6: krpc.CompactIPv6NodeAddrs{
55 Added6Flags: []pp.PexPeerFlags{0},
57 require.EqualValues(t, targx, x)