forked from bsm/grpclb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresolver_test.go
57 lines (47 loc) · 1.25 KB
/
resolver_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package grpclb
import (
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"google.golang.org/grpc/naming"
)
var _ = Describe("Watcher", func() {
var subject naming.Watcher
var client *mockClient
BeforeEach(func() {
client = &mockClient{S: []string{"10.0.0.1:80", "10.0.0.2:80"}}
subject = &watcher{
target: "testapp",
cc: nopCloser{},
lb: client,
check: 100 * time.Millisecond,
}
})
AfterEach(func() {
subject.Close()
})
It("should retrieve all on first Next call", func() {
ups, err := subject.Next()
Expect(err).NotTo(HaveOccurred())
Expect(ups).To(Equal([]*naming.Update{
{Op: naming.Add, Addr: "10.0.0.1:80"},
{Op: naming.Add, Addr: "10.0.0.2:80"},
}))
})
It("should block on subsequent calls", func() {
_, err := subject.Next()
Expect(err).NotTo(HaveOccurred())
go func() {
time.Sleep(time.Millisecond * 50)
client.S = []string{"10.0.0.3:80", "10.0.0.2:80"}
}()
start := time.Now()
ups, err := subject.Next()
Expect(err).NotTo(HaveOccurred())
Expect(ups).To(Equal([]*naming.Update{
{Op: naming.Add, Addr: "10.0.0.3:80"},
{Op: naming.Delete, Addr: "10.0.0.1:80"},
}))
Expect(time.Since(start)).To(BeNumerically("~", 100*time.Millisecond, 20*time.Millisecond))
})
})