github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/exchange/bitswap/strategy/strategy_test.go (about) 1 package strategy 2 3 import ( 4 "strings" 5 "testing" 6 7 blocks "github.com/jbenet/go-ipfs/blocks" 8 message "github.com/jbenet/go-ipfs/exchange/bitswap/message" 9 peer "github.com/jbenet/go-ipfs/peer" 10 ) 11 12 type peerAndStrategist struct { 13 peer.Peer 14 Strategy 15 } 16 17 func newPeerAndStrategist(idStr string) peerAndStrategist { 18 return peerAndStrategist{ 19 Peer: peer.WithIDString(idStr), 20 Strategy: New(true), 21 } 22 } 23 24 func TestConsistentAccounting(t *testing.T) { 25 sender := newPeerAndStrategist("Ernie") 26 receiver := newPeerAndStrategist("Bert") 27 28 // Send messages from Ernie to Bert 29 for i := 0; i < 1000; i++ { 30 31 m := message.New() 32 content := []string{"this", "is", "message", "i"} 33 m.AddBlock(*blocks.NewBlock([]byte(strings.Join(content, " ")))) 34 35 sender.MessageSent(receiver.Peer, m) 36 receiver.MessageReceived(sender.Peer, m) 37 } 38 39 // Ensure sender records the change 40 if sender.NumBytesSentTo(receiver.Peer) == 0 { 41 t.Fatal("Sent bytes were not recorded") 42 } 43 44 // Ensure sender and receiver have the same values 45 if sender.NumBytesSentTo(receiver.Peer) != receiver.NumBytesReceivedFrom(sender.Peer) { 46 t.Fatal("Inconsistent book-keeping. Strategies don't agree") 47 } 48 49 // Ensure sender didn't record receving anything. And that the receiver 50 // didn't record sending anything 51 if receiver.NumBytesSentTo(sender.Peer) != 0 || sender.NumBytesReceivedFrom(receiver.Peer) != 0 { 52 t.Fatal("Bert didn't send bytes to Ernie") 53 } 54 } 55 56 func TestBlockRecordedAsWantedAfterMessageReceived(t *testing.T) { 57 beggar := newPeerAndStrategist("can't be chooser") 58 chooser := newPeerAndStrategist("chooses JIF") 59 60 block := blocks.NewBlock([]byte("data wanted by beggar")) 61 62 messageFromBeggarToChooser := message.New() 63 messageFromBeggarToChooser.AddWanted(block.Key()) 64 65 chooser.MessageReceived(beggar.Peer, messageFromBeggarToChooser) 66 // for this test, doesn't matter if you record that beggar sent 67 68 if !chooser.BlockIsWantedByPeer(block.Key(), beggar.Peer) { 69 t.Fatal("chooser failed to record that beggar wants block") 70 } 71 } 72 73 func TestPeerIsAddedToPeersWhenMessageReceivedOrSent(t *testing.T) { 74 75 sanfrancisco := newPeerAndStrategist("sf") 76 seattle := newPeerAndStrategist("sea") 77 78 m := message.New() 79 80 sanfrancisco.MessageSent(seattle.Peer, m) 81 seattle.MessageReceived(sanfrancisco.Peer, m) 82 83 if seattle.Peer.Key() == sanfrancisco.Peer.Key() { 84 t.Fatal("Sanity Check: Peers have same Key!") 85 } 86 87 if !peerIsPartner(seattle.Peer, sanfrancisco.Strategy) { 88 t.Fatal("Peer wasn't added as a Partner") 89 } 90 91 if !peerIsPartner(sanfrancisco.Peer, seattle.Strategy) { 92 t.Fatal("Peer wasn't added as a Partner") 93 } 94 } 95 96 func peerIsPartner(p peer.Peer, s Strategy) bool { 97 for _, partner := range s.Peers() { 98 if partner.Key() == p.Key() { 99 return true 100 } 101 } 102 return false 103 }