github.com/anacrolix/torrent@v1.61.0/prioritized-peers_test.go (about)

     1  package torrent
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/google/btree"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestPrioritizedPeers(t *testing.T) {
    12  	pp := prioritizedPeers{
    13  		om: btree.New(3),
    14  		getPrio: func(p PeerInfo) peerPriority {
    15  			return bep40PriorityIgnoreError(p.addr(), IpPort{IP: net.ParseIP("0.0.0.0")})
    16  		},
    17  	}
    18  	_, ok := pp.DeleteMin()
    19  	assert.Panics(t, func() { pp.PopMax() })
    20  	assert.False(t, ok)
    21  	ps := []PeerInfo{
    22  		{Addr: ipPortAddr{IP: net.ParseIP("1.2.3.4")}},
    23  		{Addr: ipPortAddr{IP: net.ParseIP("1::2")}},
    24  		{Addr: ipPortAddr{IP: net.ParseIP("")}},
    25  		{Addr: ipPortAddr{IP: net.ParseIP("")}, Trusted: true},
    26  	}
    27  	for i, p := range ps {
    28  		t.Logf("peer %d priority: %08x trusted: %t\n", i, pp.getPrio(p), p.Trusted)
    29  		assert.False(t, pp.Add(p))
    30  		assert.True(t, pp.Add(p))
    31  		assert.Equal(t, i+1, pp.Len())
    32  	}
    33  	pop := func(expected *PeerInfo) {
    34  		if expected == nil {
    35  			assert.Panics(t, func() { pp.PopMax() })
    36  		} else {
    37  			assert.Equal(t, *expected, pp.PopMax())
    38  		}
    39  	}
    40  	min := func(expected *PeerInfo) {
    41  		i, ok := pp.DeleteMin()
    42  		if expected == nil {
    43  			assert.False(t, ok)
    44  		} else {
    45  			assert.True(t, ok)
    46  			assert.Equal(t, *expected, i.p)
    47  		}
    48  	}
    49  	pop(&ps[3])
    50  	pop(&ps[1])
    51  	min(&ps[2])
    52  	pop(&ps[0])
    53  	min(nil)
    54  	pop(nil)
    55  }