From c2210c058ccf34e12f56249d7afc71bfe08e0da4 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 16 Apr 2020 14:09:45 +1000 Subject: [PATCH] Fix pending peer counts in transfer tests Also expose number of peers successfully added in some method returns. --- t.go | 4 ++-- test/transfer_test.go | 4 ++-- torrent.go | 21 ++++++++++++++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/t.go b/t.go index ccd30096..f517ab68 100644 --- a/t.go +++ b/t.go @@ -221,11 +221,11 @@ func (t *Torrent) Files() []*File { return *t.files } -func (t *Torrent) AddPeers(pp []Peer) { +func (t *Torrent) AddPeers(pp []Peer) int { cl := t.cl cl.lock() defer cl.unlock() - t.addPeers(pp) + return t.addPeers(pp) } // Marks the entire torrent for download. Requires the info first, see diff --git a/test/transfer_test.go b/test/transfer_test.go index 4fe9d562..74dd656e 100644 --- a/test/transfer_test.go +++ b/test/transfer_test.go @@ -117,11 +117,11 @@ func testClientTransfer(t *testing.T, ps testClientTransferParams) { //logPieceStateChanges(leecherTorrent) // Now do some things with leecher and seeder. - leecherTorrent.AddClientPeer(seeder) + added := leecherTorrent.AddClientPeer(seeder) // The Torrent should not be interested in obtaining peers, so the one we // just added should be the only one. assert.False(t, leecherTorrent.Seeding()) - assert.EqualValues(t, 1, leecherTorrent.Stats().PendingPeers) + assert.EqualValues(t, added, leecherTorrent.Stats().PendingPeers) r := leecherTorrent.NewReader() defer r.Close() if ps.Responsive { diff --git a/torrent.go b/torrent.go index d81437ad..1bf2211a 100644 --- a/torrent.go +++ b/torrent.go @@ -254,24 +254,27 @@ func (t *Torrent) unclosedConnsAsSlice() (ret []*PeerConn) { return } -func (t *Torrent) addPeer(p Peer) { +func (t *Torrent) addPeer(p Peer) (added bool) { cl := t.cl torrent.Add(fmt.Sprintf("peers added by source %q", p.Source), 1) if t.closed.IsSet() { - return + return false } if ipAddr, ok := tryIpPortFromNetAddr(p.Addr); ok { if cl.badPeerIPPort(ipAddr.IP, ipAddr.Port) { torrent.Add("peers not added because of bad addr", 1) // cl.logger.Printf("peers not added because of bad addr: %v", p) - return + return false } } if replaced, ok := t.peers.AddReturningReplacedPeer(p); ok { torrent.Add("peers replaced", 1) if !replaced.Equal(p) { t.logger.Printf("added %v replacing %v", p, replaced) + added = true } + } else { + added = true } t.openNewConns() for t.peers.Len() > cl.config.TorrentPeersHighWater { @@ -280,6 +283,7 @@ func (t *Torrent) addPeer(p Peer) { torrent.Add("excess reserve peers discarded", 1) } } + return } func (t *Torrent) invalidateMetadata() { @@ -1473,10 +1477,13 @@ func (t *Torrent) dhtAnnouncer(s DhtServer) { } } -func (t *Torrent) addPeers(peers []Peer) { +func (t *Torrent) addPeers(peers []Peer) (added int) { for _, p := range peers { - t.addPeer(p) + if t.addPeer(p) { + added++ + } } + return } // The returned TorrentStats may require alignment in memory. See @@ -1841,8 +1848,8 @@ func (t *Torrent) initiateConn(peer Peer) { // Adds a trusted, pending peer for each of the given Client's addresses. Typically used in tests to // quickly make one Client visible to the Torrent of another Client. -func (t *Torrent) AddClientPeer(cl *Client) { - t.AddPeers(func() (ps []Peer) { +func (t *Torrent) AddClientPeer(cl *Client) int { + return t.AddPeers(func() (ps []Peer) { for _, la := range cl.ListenAddrs() { ps = append(ps, Peer{ Addr: la, -- 2.48.1