diff --git a/exchange/bitswap/bitswap_test.go b/exchange/bitswap/bitswap_test.go index 383c1f44c772c9d639a0034ca3143a7f03e8c4a6..a68f0667f7d5118be12f1026c67c627b05f9aa08 100644 --- a/exchange/bitswap/bitswap_test.go +++ b/exchange/bitswap/bitswap_test.go @@ -12,17 +12,18 @@ import ( exchange "github.com/jbenet/go-ipfs/exchange" notifications "github.com/jbenet/go-ipfs/exchange/bitswap/notifications" strategy "github.com/jbenet/go-ipfs/exchange/bitswap/strategy" - testnet "github.com/jbenet/go-ipfs/exchange/bitswap/testnet" + tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet" peer "github.com/jbenet/go-ipfs/peer" testutil "github.com/jbenet/go-ipfs/util/testutil" ) func TestGetBlockTimeout(t *testing.T) { - net := testnet.VirtualNetwork() - rs := testnet.VirtualRoutingServer() + net := tn.VirtualNetwork() + rs := tn.VirtualRoutingServer() + g := NewSessionGenerator(net, rs) - self := session(net, rs, []byte("peer id")) + self := g.Next() ctx, _ := context.WithTimeout(context.Background(), time.Nanosecond) block := testutil.NewBlockOrFail(t, "block") @@ -35,13 +36,14 @@ func TestGetBlockTimeout(t *testing.T) { func TestProviderForKeyButNetworkCannotFind(t *testing.T) { - net := testnet.VirtualNetwork() - rs := testnet.VirtualRoutingServer() + net := tn.VirtualNetwork() + rs := tn.VirtualRoutingServer() + g := NewSessionGenerator(net, rs) block := testutil.NewBlockOrFail(t, "block") rs.Announce(&peer.Peer{}, block.Key()) // but not on network - solo := session(net, rs, []byte("peer id")) + solo := g.Next() ctx, _ := context.WithTimeout(context.Background(), time.Nanosecond) _, err := solo.exchange.Block(ctx, block.Key()) @@ -55,11 +57,12 @@ func TestProviderForKeyButNetworkCannotFind(t *testing.T) { func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) { - net := testnet.VirtualNetwork() - rs := testnet.VirtualRoutingServer() + net := tn.VirtualNetwork() + rs := tn.VirtualRoutingServer() block := testutil.NewBlockOrFail(t, "block") + g := NewSessionGenerator(net, rs) - hasBlock := session(net, rs, []byte("hasBlock")) + hasBlock := g.Next() if err := hasBlock.blockstore.Put(block); err != nil { t.Fatal(err) @@ -68,7 +71,7 @@ func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) { t.Fatal(err) } - wantsBlock := session(net, rs, []byte("wantsBlock")) + wantsBlock := g.Next() ctx, _ := context.WithTimeout(context.Background(), time.Second) received, err := wantsBlock.exchange.Block(ctx, block.Key()) @@ -82,13 +85,45 @@ func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) { } } +func TestSendToWantingPeer(t *testing.T) { + t.Log("I get a file from peer |w|. In this message, I receive |w|'s wants") + t.Log("Peer |w| tells me it wants file |f|, but I don't have it") + t.Log("Later, peer |o| sends |f| to me") + t.Log("After receiving |f| from |o|, I send it to the wanting peer |w|") +} + +func NewSessionGenerator( + net tn.Network, rs tn.RoutingServer) SessionGenerator { + return SessionGenerator{ + net: net, + rs: rs, + seq: 0, + } +} + +type SessionGenerator struct { + seq int + net tn.Network + rs tn.RoutingServer +} + +func (g *SessionGenerator) Next() testnetBitSwap { + g.seq++ + return session(g.net, g.rs, []byte(string(g.seq))) +} + type testnetBitSwap struct { peer *peer.Peer exchange exchange.Interface blockstore bstore.Blockstore } -func session(net testnet.Network, rs testnet.RoutingServer, id peer.ID) testnetBitSwap { +// session creates a test bitswap session. +// +// NB: It's easy make mistakes by providing the same peer ID to two different +// sessions. To safeguard, use the SessionGenerator to generate sessions. It's +// just a much better idea. +func session(net tn.Network, rs tn.RoutingServer, id peer.ID) testnetBitSwap { p := &peer.Peer{ID: id} adapter := net.Adapter(p) @@ -109,9 +144,3 @@ func session(net testnet.Network, rs testnet.RoutingServer, id peer.ID) testnetB blockstore: blockstore, } } - -func TestSendToWantingPeer(t *testing.T) { - t.Log("Peer |w| tells me it wants file, but I don't have it") - t.Log("Then another peer |o| sends it to me") - t.Log("After receiving the file from |o|, I send it to the wanting peer |w|") -}