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  }