wantinfo_test.go 1.66 KB
Newer Older
dirkmc's avatar
dirkmc committed
1 2 3 4 5
package session

import (
	"testing"

6
	"gitlab.dms3.io/dms3/go-bitswap/internal/testutil"
dirkmc's avatar
dirkmc committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
)

func TestEmptyWantInfo(t *testing.T) {
	wp := newWantInfo(newPeerResponseTracker())

	if wp.bestPeer != "" {
		t.Fatal("expected no best peer")
	}
}

func TestSetPeerBlockPresence(t *testing.T) {
	peers := testutil.GeneratePeers(2)
	wp := newWantInfo(newPeerResponseTracker())

	wp.setPeerBlockPresence(peers[0], BPUnknown)
	if wp.bestPeer != peers[0] {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[1], BPHave)
	if wp.bestPeer != peers[1] {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[0], BPDontHave)
	if wp.bestPeer != peers[1] {
		t.Fatal("wrong best peer")
	}
}

func TestSetPeerBlockPresenceBestLower(t *testing.T) {
	peers := testutil.GeneratePeers(2)
	wp := newWantInfo(newPeerResponseTracker())

	wp.setPeerBlockPresence(peers[0], BPHave)
	if wp.bestPeer != peers[0] {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[1], BPUnknown)
	if wp.bestPeer != peers[0] {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[0], BPDontHave)
	if wp.bestPeer != peers[1] {
		t.Fatal("wrong best peer")
	}
}

func TestRemoveThenSetDontHave(t *testing.T) {
	peers := testutil.GeneratePeers(2)
	wp := newWantInfo(newPeerResponseTracker())

	wp.setPeerBlockPresence(peers[0], BPUnknown)
	if wp.bestPeer != peers[0] {
		t.Fatal("wrong best peer")
	}

	wp.removePeer(peers[0])
	if wp.bestPeer != "" {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[1], BPUnknown)
	if wp.bestPeer != peers[1] {
		t.Fatal("wrong best peer")
	}

	wp.setPeerBlockPresence(peers[0], BPDontHave)
	if wp.bestPeer != peers[1] {
		t.Fatal("wrong best peer")
	}
}