github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/p2p/peer/addr/addrsrcs_test.go (about) 1 package addr 2 3 import ( 4 "fmt" 5 "testing" 6 7 ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" 8 ) 9 10 func newAddrOrFatal(t *testing.T, s string) ma.Multiaddr { 11 a, err := ma.NewMultiaddr(s) 12 if err != nil { 13 t.Fatal("error parsing multiaddr", err) 14 } 15 return a 16 } 17 18 func newAddrs(t *testing.T, n int) []ma.Multiaddr { 19 addrs := make([]ma.Multiaddr, n) 20 for i := 0; i < n; i++ { 21 s := fmt.Sprintf("/ip4/1.2.3.4/tcp/%d", i) 22 addrs[i] = newAddrOrFatal(t, s) 23 } 24 return addrs 25 } 26 27 func addrSetsSame(a, b []ma.Multiaddr) bool { 28 if len(a) != len(b) { 29 return false 30 } 31 for i, aa := range a { 32 bb := b[i] 33 if !aa.Equal(bb) { 34 return false 35 } 36 } 37 return true 38 } 39 40 func addrSourcesSame(a, b Source) bool { 41 return addrSetsSame(a.Addrs(), b.Addrs()) 42 } 43 44 func TestAddrCombine(t *testing.T) { 45 addrs := newAddrs(t, 30) 46 a := Slice(addrs[0:10]) 47 b := Slice(addrs[10:20]) 48 c := Slice(addrs[20:30]) 49 d := CombineSources(a, b, c) 50 if !addrSetsSame(addrs, d.Addrs()) { 51 t.Error("addrs differ") 52 } 53 if !addrSourcesSame(Slice(addrs), d) { 54 t.Error("addrs differ") 55 } 56 } 57 58 func TestAddrUnique(t *testing.T) { 59 60 addrs := newAddrs(t, 40) 61 a := Slice(addrs[0:20]) 62 b := Slice(addrs[10:30]) 63 c := Slice(addrs[20:40]) 64 d := CombineSources(a, b, c) 65 e := UniqueSource(a, b, c) 66 if addrSetsSame(addrs, d.Addrs()) { 67 t.Error("addrs same") 68 } 69 if addrSourcesSame(Slice(addrs), d) { 70 t.Error("addrs same") 71 } 72 if !addrSetsSame(addrs, e.Addrs()) { 73 t.Error("addrs differ", addrs, "\n\n", e.Addrs(), "\n\n") 74 } 75 if !addrSourcesSame(Slice(addrs), e) { 76 t.Error("addrs differ", addrs, "\n\n", e.Addrs(), "\n\n") 77 } 78 }