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 }