github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/p2p/peer/addr_manager_test.go (about) 1 package peer 2 3 import ( 4 "testing" 5 "time" 6 7 ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" 8 ) 9 10 func IDS(t *testing.T, ids string) ID { 11 id, err := IDB58Decode(ids) 12 if err != nil { 13 t.Fatal(err) 14 } 15 return id 16 } 17 18 func MA(t *testing.T, m string) ma.Multiaddr { 19 maddr, err := ma.NewMultiaddr(m) 20 if err != nil { 21 t.Fatal(err) 22 } 23 return maddr 24 } 25 26 func testHas(t *testing.T, exp, act []ma.Multiaddr) { 27 if len(exp) != len(act) { 28 t.Fatal("lengths not the same") 29 } 30 31 for _, a := range exp { 32 found := false 33 34 for _, b := range act { 35 if a.Equal(b) { 36 found = true 37 break 38 } 39 } 40 41 if !found { 42 t.Fatal("expected address %s not found", a) 43 } 44 } 45 } 46 47 func TestAddresses(t *testing.T) { 48 49 id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") 50 id2 := IDS(t, "QmRmPL3FDZKE3Qiwv1RosLdwdvbvg17b2hB39QPScgWKKZ") 51 id3 := IDS(t, "QmPhi7vBsChP7sjRoZGgg7bcKqF6MmCcQwvRbDte8aJ6Kn") 52 id4 := IDS(t, "QmPhi7vBsChP7sjRoZGgg7bcKqF6MmCcQwvRbDte8aJ5Kn") 53 id5 := IDS(t, "QmPhi7vBsChP7sjRoZGgg7bcKqF6MmCcQwvRbDte8aJ5Km") 54 55 ma11 := MA(t, "/ip4/1.2.3.1/tcp/1111") 56 ma21 := MA(t, "/ip4/2.2.3.2/tcp/1111") 57 ma22 := MA(t, "/ip4/2.2.3.2/tcp/2222") 58 ma31 := MA(t, "/ip4/3.2.3.3/tcp/1111") 59 ma32 := MA(t, "/ip4/3.2.3.3/tcp/2222") 60 ma33 := MA(t, "/ip4/3.2.3.3/tcp/3333") 61 ma41 := MA(t, "/ip4/4.2.3.3/tcp/1111") 62 ma42 := MA(t, "/ip4/4.2.3.3/tcp/2222") 63 ma43 := MA(t, "/ip4/4.2.3.3/tcp/3333") 64 ma44 := MA(t, "/ip4/4.2.3.3/tcp/4444") 65 ma51 := MA(t, "/ip4/5.2.3.3/tcp/1111") 66 ma52 := MA(t, "/ip4/5.2.3.3/tcp/2222") 67 ma53 := MA(t, "/ip4/5.2.3.3/tcp/3333") 68 ma54 := MA(t, "/ip4/5.2.3.3/tcp/4444") 69 ma55 := MA(t, "/ip4/5.2.3.3/tcp/5555") 70 71 ttl := time.Hour 72 m := AddrManager{} 73 m.AddAddr(id1, ma11, ttl) 74 75 m.AddAddrs(id2, []ma.Multiaddr{ma21, ma22}, ttl) 76 m.AddAddrs(id2, []ma.Multiaddr{ma21, ma22}, ttl) // idempotency 77 78 m.AddAddr(id3, ma31, ttl) 79 m.AddAddr(id3, ma32, ttl) 80 m.AddAddr(id3, ma33, ttl) 81 m.AddAddr(id3, ma33, ttl) // idempotency 82 m.AddAddr(id3, ma33, ttl) 83 84 m.AddAddrs(id4, []ma.Multiaddr{ma41, ma42, ma43, ma44}, ttl) // multiple 85 86 m.AddAddrs(id5, []ma.Multiaddr{ma21, ma22}, ttl) // clearing 87 m.AddAddrs(id5, []ma.Multiaddr{ma41, ma42, ma43, ma44}, ttl) // clearing 88 m.ClearAddrs(id5) 89 m.AddAddrs(id5, []ma.Multiaddr{ma51, ma52, ma53, ma54, ma55}, ttl) // clearing 90 91 // test the Addresses return value 92 testHas(t, []ma.Multiaddr{ma11}, m.Addrs(id1)) 93 testHas(t, []ma.Multiaddr{ma21, ma22}, m.Addrs(id2)) 94 testHas(t, []ma.Multiaddr{ma31, ma32, ma33}, m.Addrs(id3)) 95 testHas(t, []ma.Multiaddr{ma41, ma42, ma43, ma44}, m.Addrs(id4)) 96 testHas(t, []ma.Multiaddr{ma51, ma52, ma53, ma54, ma55}, m.Addrs(id5)) 97 98 } 99 100 func TestAddressesExpire(t *testing.T) { 101 102 id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") 103 id2 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQM") 104 ma11 := MA(t, "/ip4/1.2.3.1/tcp/1111") 105 ma12 := MA(t, "/ip4/2.2.3.2/tcp/2222") 106 ma13 := MA(t, "/ip4/3.2.3.3/tcp/3333") 107 ma24 := MA(t, "/ip4/4.2.3.3/tcp/4444") 108 ma25 := MA(t, "/ip4/5.2.3.3/tcp/5555") 109 110 m := AddrManager{} 111 m.AddAddr(id1, ma11, time.Hour) 112 m.AddAddr(id1, ma12, time.Hour) 113 m.AddAddr(id1, ma13, time.Hour) 114 m.AddAddr(id2, ma24, time.Hour) 115 m.AddAddr(id2, ma25, time.Hour) 116 117 testHas(t, []ma.Multiaddr{ma11, ma12, ma13}, m.Addrs(id1)) 118 testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) 119 120 m.SetAddr(id1, ma11, 2*time.Hour) 121 m.SetAddr(id1, ma12, 2*time.Hour) 122 m.SetAddr(id1, ma13, 2*time.Hour) 123 m.SetAddr(id2, ma24, 2*time.Hour) 124 m.SetAddr(id2, ma25, 2*time.Hour) 125 126 testHas(t, []ma.Multiaddr{ma11, ma12, ma13}, m.Addrs(id1)) 127 testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) 128 129 m.SetAddr(id1, ma11, time.Millisecond) 130 <-time.After(time.Millisecond) 131 testHas(t, []ma.Multiaddr{ma12, ma13}, m.Addrs(id1)) 132 testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) 133 134 m.SetAddr(id1, ma13, time.Millisecond) 135 <-time.After(time.Millisecond) 136 testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) 137 testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) 138 139 m.SetAddr(id2, ma24, time.Millisecond) 140 <-time.After(time.Millisecond) 141 testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) 142 testHas(t, []ma.Multiaddr{ma25}, m.Addrs(id2)) 143 144 m.SetAddr(id2, ma25, time.Millisecond) 145 <-time.After(time.Millisecond) 146 testHas(t, []ma.Multiaddr{ma12}, m.Addrs(id1)) 147 testHas(t, nil, m.Addrs(id2)) 148 149 m.SetAddr(id1, ma12, time.Millisecond) 150 <-time.After(time.Millisecond) 151 testHas(t, nil, m.Addrs(id1)) 152 testHas(t, nil, m.Addrs(id2)) 153 } 154 155 func TestClearWorks(t *testing.T) { 156 157 id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") 158 id2 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQM") 159 ma11 := MA(t, "/ip4/1.2.3.1/tcp/1111") 160 ma12 := MA(t, "/ip4/2.2.3.2/tcp/2222") 161 ma13 := MA(t, "/ip4/3.2.3.3/tcp/3333") 162 ma24 := MA(t, "/ip4/4.2.3.3/tcp/4444") 163 ma25 := MA(t, "/ip4/5.2.3.3/tcp/5555") 164 165 m := AddrManager{} 166 m.AddAddr(id1, ma11, time.Hour) 167 m.AddAddr(id1, ma12, time.Hour) 168 m.AddAddr(id1, ma13, time.Hour) 169 m.AddAddr(id2, ma24, time.Hour) 170 m.AddAddr(id2, ma25, time.Hour) 171 172 testHas(t, []ma.Multiaddr{ma11, ma12, ma13}, m.Addrs(id1)) 173 testHas(t, []ma.Multiaddr{ma24, ma25}, m.Addrs(id2)) 174 175 m.ClearAddrs(id1) 176 m.ClearAddrs(id2) 177 178 testHas(t, nil, m.Addrs(id1)) 179 testHas(t, nil, m.Addrs(id2)) 180 }