github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/p2p/protocol/identify/obsaddr_test.go (about)

     1  package identify
     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  // TestObsAddrSet
    11  func TestObsAddrSet(t *testing.T) {
    12  	m := func(s string) ma.Multiaddr {
    13  		m, err := ma.NewMultiaddr(s)
    14  		if err != nil {
    15  			t.Error(err)
    16  		}
    17  		return m
    18  	}
    19  
    20  	addrsMarch := func(a, b []ma.Multiaddr) bool {
    21  		for _, aa := range a {
    22  			found := false
    23  			for _, bb := range b {
    24  				if aa.Equal(bb) {
    25  					found = true
    26  					break
    27  				}
    28  			}
    29  			if !found {
    30  				return false
    31  			}
    32  		}
    33  		return true
    34  	}
    35  
    36  	a1 := m("/ip4/1.2.3.4/tcp/1231")
    37  	a2 := m("/ip4/1.2.3.4/tcp/1232")
    38  	a3 := m("/ip4/1.2.3.4/tcp/1233")
    39  	a4 := m("/ip4/1.2.3.4/tcp/1234")
    40  	a5 := m("/ip4/1.2.3.4/tcp/1235")
    41  	a6 := m("/ip4/1.2.3.6/tcp/1236")
    42  	a7 := m("/ip4/1.2.3.7/tcp/1237")
    43  
    44  	oas := ObservedAddrSet{}
    45  
    46  	if !addrsMarch(oas.Addrs(), nil) {
    47  		t.Error("addrs should be empty")
    48  	}
    49  
    50  	oas.Add(a1, a4)
    51  	oas.Add(a2, a4)
    52  	oas.Add(a3, a4)
    53  
    54  	// these are all different so we should not yet get them.
    55  	if !addrsMarch(oas.Addrs(), nil) {
    56  		t.Error("addrs should _still_ be empty (once)")
    57  	}
    58  
    59  	// same observer, so should not yet get them.
    60  	oas.Add(a1, a4)
    61  	oas.Add(a2, a4)
    62  	oas.Add(a3, a4)
    63  	if !addrsMarch(oas.Addrs(), nil) {
    64  		t.Error("addrs should _still_ be empty (same obs)")
    65  	}
    66  
    67  	// different observer, but same observer group.
    68  	oas.Add(a1, a5)
    69  	oas.Add(a2, a5)
    70  	oas.Add(a3, a5)
    71  	if !addrsMarch(oas.Addrs(), nil) {
    72  		t.Error("addrs should _still_ be empty (same obs group)")
    73  	}
    74  
    75  	oas.Add(a1, a6)
    76  	if !addrsMarch(oas.Addrs(), []ma.Multiaddr{a1}) {
    77  		t.Error("addrs should only have a1")
    78  	}
    79  
    80  	oas.Add(a2, a5)
    81  	oas.Add(a1, a5)
    82  	oas.Add(a1, a5)
    83  	oas.Add(a2, a6)
    84  	oas.Add(a1, a6)
    85  	oas.Add(a1, a6)
    86  	oas.Add(a2, a7)
    87  	oas.Add(a1, a7)
    88  	oas.Add(a1, a7)
    89  	if !addrsMarch(oas.Addrs(), []ma.Multiaddr{a1, a2}) {
    90  		t.Error("addrs should only have a1, a2")
    91  	}
    92  
    93  	// change the timeout constant so we can time it out.
    94  	oas.SetTTL(time.Millisecond * 200)
    95  	<-time.After(time.Millisecond * 210)
    96  	if !addrsMarch(oas.Addrs(), []ma.Multiaddr{nil}) {
    97  		t.Error("addrs should have timed out")
    98  	}
    99  }