From f0ab0fa18fa9d072d1ab6cf657cffc9e191b194c Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Thu, 4 Jul 2024 19:08:30 +0200 Subject: [PATCH] test heap --- certexchange/polling/peerTracker_test.go | 47 ++++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/certexchange/polling/peerTracker_test.go b/certexchange/polling/peerTracker_test.go index 454671b9..19186d8a 100644 --- a/certexchange/polling/peerTracker_test.go +++ b/certexchange/polling/peerTracker_test.go @@ -136,19 +136,50 @@ func TestPeerTracker(t *testing.T) { // Now ensure we select that peer. It should be first because it's the best. pt.recordHit(peers[0]) + pt.recordHit(peers[0]) + + pt.recordHit(peers[1]) + pt.recordMiss(peers[1]) // needs to be worse than peer 1 + require.Equal(t, pt.suggestPeers()[0], peers[0]) // Now check to make sure we backoff that peer. - pt.recordFailure(peers[0]) - require.NotContains(t, pt.suggestPeers(), peers[0]) - // Should only last one round the first time. - require.Equal(t, pt.suggestPeers()[0], peers[0]) + { + pt.recordFailure(peers[0]) + pt.recordMiss(peers[1]) + suggested := pt.suggestPeers() + require.Equal(t, 1, pt.backoff.Len()) + require.NotContains(t, suggested, peers[0]) + require.Equal(t, suggested[0], peers[1]) + + // Peer 0 should be back on-top after one round absent. + suggested = pt.suggestPeers() + require.Empty(t, pt.backoff) + require.Equal(t, suggested[0], peers[0]) + } // Should last two rounds the second time (exponential). - pt.recordFailure(peers[0]) - require.NotContains(t, pt.suggestPeers(), peers[0]) - require.NotContains(t, pt.suggestPeers(), peers[0]) - require.Equal(t, pt.suggestPeers()[0], peers[0]) + + { + pt.recordFailure(peers[0]) + pt.recordFailure(peers[1]) + + suggested := pt.suggestPeers() + require.Equal(t, 2, pt.backoff.Len()) + require.NotContains(t, suggested, peers[0]) + require.NotContains(t, suggested, peers[1]) + + suggested = pt.suggestPeers() + require.Equal(t, 1, pt.backoff.Len()) + require.Contains(t, suggested, peers[1]) + require.NotContains(t, suggested, peers[0]) + + suggested = pt.suggestPeers() + require.Len(t, pt.backoff, 0) + require.Contains(t, pt.active, peers[0]) + require.Contains(t, suggested, peers[0]) + require.Contains(t, suggested, peers[1]) + } // Then four rounds. pt.recordFailure(peers[0])