/
router_client_test.go
116 lines (82 loc) · 2.57 KB
/
router_client_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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package basil
import (
"github.com/cloudfoundry/go_cfmessagebus/mock_cfmessagebus"
. "launchpad.net/gocheck"
"time"
)
type RSuite struct{}
func init() {
Suite(&RSuite{})
}
func (s *RSuite) TestRouterClientRegistering(c *C) {
mbus := mock_cfmessagebus.NewMockMessageBus()
routerClient := NewRouterClient("1.2.3.4", mbus)
registered := make(chan []byte)
mbus.Subscribe("router.register", func(msg []byte) {
registered <- msg
})
routerClient.Register(123, []string{"abc"})
select {
case msg := <-registered:
c.Assert(string(msg), Equals, `{"uris":["abc"],"host":"1.2.3.4","port":123}`)
case <-time.After(500 * time.Millisecond):
c.Error("did not receive a router.register!")
}
}
func (s *RSuite) TestRouterClientUnregistering(c *C) {
mbus := mock_cfmessagebus.NewMockMessageBus()
routerClient := NewRouterClient("1.2.3.4", mbus)
registered := make(chan []byte)
mbus.Subscribe("router.unregister", func(msg []byte) {
registered <- msg
})
routerClient.Unregister(123, []string{"abc"})
select {
case msg := <-registered:
c.Assert(string(msg), Equals, `{"uris":["abc"],"host":"1.2.3.4","port":123}`)
case <-time.After(500 * time.Millisecond):
c.Error("did not receive a router.unregister!")
}
}
func (s *RSuite) TestRouterClientRouterStartHandling(c *C) {
mbus := mock_cfmessagebus.NewMockMessageBus()
routerClient := NewRouterClient("1.2.3.4", mbus)
times := make(chan time.Time)
routerClient.Periodically(func() {
times <- time.Now()
})
err := routerClient.Greet()
c.Assert(err, IsNil)
mbus.Publish("router.start", []byte(`{"minimumRegisterIntervalInSeconds":1}`))
time1 := timedReceive(times, 2*time.Second)
c.Assert(time1, NotNil)
time2 := timedReceive(times, 2*time.Second)
c.Assert(time2, NotNil)
c.Assert((*time2).Sub(*time1) >= 1*time.Second, Equals, true)
}
func (s *RSuite) TestRouterClientGreeting(c *C) {
mbus := mock_cfmessagebus.NewMockMessageBus()
routerClient := NewRouterClient("1.2.3.4", mbus)
times := make(chan time.Time)
routerClient.Periodically(func() {
times <- time.Now()
})
mbus.RespondToChannel("router.greet", func([]byte) []byte {
return []byte(`{"minimumRegisterIntervalInSeconds":1}`)
})
err := routerClient.Greet()
c.Assert(err, IsNil)
time1 := timedReceive(times, 2*time.Second)
c.Assert(time1, NotNil)
time2 := timedReceive(times, 2*time.Second)
c.Assert(time2, NotNil)
c.Assert((*time2).Sub(*time1) >= 1*time.Second, Equals, true)
}
func timedReceive(from chan time.Time, giveup time.Duration) *time.Time {
select {
case val := <-from:
return &val
case <-time.After(giveup):
return nil
}
}