7 "github.com/hudl/fargo"
9 "github.com/go-kit/kit/sd"
12 var _ sd.Instancer = (*Instancer)(nil) // API check
14 func TestInstancer(t *testing.T) {
15 connection := &testConnection{
16 instances: []*fargo.Instance{instanceTest1, instanceTest2},
20 instancer := NewInstancer(connection, appNameTest, loggerTest)
21 defer instancer.Stop()
23 state := instancer.state()
28 if want, have := 2, len(state.Instances); want != have {
29 t.Errorf("want %d, have %d", want, have)
33 func TestInstancerReceivesUpdates(t *testing.T) {
34 connection := &testConnection{
35 instances: []*fargo.Instance{instanceTest1},
39 instancer := NewInstancer(connection, appNameTest, loggerTest)
40 defer instancer.Stop()
42 verifyCount := func(want int) (have int, converged bool) {
43 const maxPollAttempts = 5
44 const delayPerAttempt = 200 * time.Millisecond
46 state := instancer.state()
47 if have := len(state.Instances); want == have {
49 } else if i == maxPollAttempts {
52 time.Sleep(delayPerAttempt)
56 if have, converged := verifyCount(1); !converged {
57 t.Fatalf("initial: want %d, have %d", 1, have)
60 if err := connection.RegisterInstance(instanceTest2); err != nil {
61 t.Fatalf("failed to register an instance: %v", err)
63 if have, converged := verifyCount(2); !converged {
64 t.Fatalf("after registration: want %d, have %d", 2, have)
67 if err := connection.DeregisterInstance(instanceTest1); err != nil {
68 t.Fatalf("failed to unregister an instance: %v", err)
70 if have, converged := verifyCount(1); !converged {
71 t.Fatalf("after deregistration: want %d, have %d", 1, have)
75 func TestBadInstancerScheduleUpdates(t *testing.T) {
76 connection := &testConnection{
77 instances: []*fargo.Instance{instanceTest1},
78 errApplication: errTest,
81 instancer := NewInstancer(connection, appNameTest, loggerTest)
82 defer instancer.Stop()
84 state := instancer.state()
86 t.Fatal("expecting error")
89 if want, have := 0, len(state.Instances); want != have {
90 t.Errorf("want %d, have %d", want, have)