obsaddr_test.go 2.18 KB
Newer Older
1
2
3
4
5
6
package identify

import (
	"testing"
	"time"

Jeromy's avatar
Jeromy committed
7
	ma "github.com/multiformats/go-multiaddr"
8
9
10
11
12
13
14
15
16
17
18
19
20
)

// TestObsAddrSet
func TestObsAddrSet(t *testing.T) {
	m := func(s string) ma.Multiaddr {
		m, err := ma.NewMultiaddr(s)
		if err != nil {
			t.Error(err)
		}
		return m
	}

	addrsMarch := func(a, b []ma.Multiaddr) bool {
21
22
23
24
		if len(a) != len(b) {
			return false
		}

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
		for _, aa := range a {
			found := false
			for _, bb := range b {
				if aa.Equal(bb) {
					found = true
					break
				}
			}
			if !found {
				return false
			}
		}
		return true
	}

	a1 := m("/ip4/1.2.3.4/tcp/1231")
	a2 := m("/ip4/1.2.3.4/tcp/1232")
	a3 := m("/ip4/1.2.3.4/tcp/1233")
43
44
	a4 := m("/ip4/1.2.3.4/tcp/1234")
	a5 := m("/ip4/1.2.3.4/tcp/1235")
45
46
47
48
49
50

	b1 := m("/ip4/1.2.3.6/tcp/1236")
	b2 := m("/ip4/1.2.3.7/tcp/1237")
	b3 := m("/ip4/1.2.3.8/tcp/1237")
	b4 := m("/ip4/1.2.3.9/tcp/1237")
	b5 := m("/ip4/1.2.3.10/tcp/1237")
51
52
53
54
55
56
57

	oas := ObservedAddrSet{}

	if !addrsMarch(oas.Addrs(), nil) {
		t.Error("addrs should be empty")
	}

58
59
60
	oas.Add(a1, a4)
	oas.Add(a2, a4)
	oas.Add(a3, a4)
61
62
63
64
65
66

	// these are all different so we should not yet get them.
	if !addrsMarch(oas.Addrs(), nil) {
		t.Error("addrs should _still_ be empty (once)")
	}

67
68
69
70
71
72
73
74
	// same observer, so should not yet get them.
	oas.Add(a1, a4)
	oas.Add(a2, a4)
	oas.Add(a3, a4)
	if !addrsMarch(oas.Addrs(), nil) {
		t.Error("addrs should _still_ be empty (same obs)")
	}

75
	// different observer, but same observer group.
76
	oas.Add(a1, a5)
77
78
79
80
81
82
	oas.Add(a2, a5)
	oas.Add(a3, a5)
	if !addrsMarch(oas.Addrs(), nil) {
		t.Error("addrs should _still_ be empty (same obs group)")
	}

83
84
85
	oas.Add(a1, b1)
	oas.Add(a1, b2)
	oas.Add(a1, b3)
86
87
88
89
	if !addrsMarch(oas.Addrs(), []ma.Multiaddr{a1}) {
		t.Error("addrs should only have a1")
	}

90
91
92
	oas.Add(a2, a5)
	oas.Add(a1, a5)
	oas.Add(a1, a5)
93
94
95
96
97
98
99
100
	oas.Add(a2, b1)
	oas.Add(a1, b1)
	oas.Add(a1, b1)
	oas.Add(a2, b2)
	oas.Add(a1, b2)
	oas.Add(a1, b2)
	oas.Add(a2, b4)
	oas.Add(a2, b5)
101
102
103
104
105
106
107
	if !addrsMarch(oas.Addrs(), []ma.Multiaddr{a1, a2}) {
		t.Error("addrs should only have a1, a2")
	}

	// change the timeout constant so we can time it out.
	oas.SetTTL(time.Millisecond * 200)
	<-time.After(time.Millisecond * 210)
108
	if !addrsMarch(oas.Addrs(), nil) {
109
110
111
		t.Error("addrs should have timed out")
	}
}