package eureka import ( "testing" "time" "github.com/hudl/fargo" "github.com/go-kit/kit/sd" ) var _ sd.Instancer = (*Instancer)(nil) // API check func TestInstancer(t *testing.T) { connection := &testConnection{ instances: []*fargo.Instance{instanceTest1, instanceTest2}, errApplication: nil, } instancer := NewInstancer(connection, appNameTest, loggerTest) defer instancer.Stop() state := instancer.state() if state.Err != nil { t.Fatal(state.Err) } if want, have := 2, len(state.Instances); want != have { t.Errorf("want %d, have %d", want, have) } } func TestInstancerReceivesUpdates(t *testing.T) { connection := &testConnection{ instances: []*fargo.Instance{instanceTest1}, errApplication: nil, } instancer := NewInstancer(connection, appNameTest, loggerTest) defer instancer.Stop() verifyCount := func(want int) (have int, converged bool) { const maxPollAttempts = 5 const delayPerAttempt = 200 * time.Millisecond for i := 1; ; i++ { state := instancer.state() if have := len(state.Instances); want == have { return have, true } else if i == maxPollAttempts { return have, false } time.Sleep(delayPerAttempt) } } if have, converged := verifyCount(1); !converged { t.Fatalf("initial: want %d, have %d", 1, have) } if err := connection.RegisterInstance(instanceTest2); err != nil { t.Fatalf("failed to register an instance: %v", err) } if have, converged := verifyCount(2); !converged { t.Fatalf("after registration: want %d, have %d", 2, have) } if err := connection.DeregisterInstance(instanceTest1); err != nil { t.Fatalf("failed to unregister an instance: %v", err) } if have, converged := verifyCount(1); !converged { t.Fatalf("after deregistration: want %d, have %d", 1, have) } } func TestBadInstancerScheduleUpdates(t *testing.T) { connection := &testConnection{ instances: []*fargo.Instance{instanceTest1}, errApplication: errTest, } instancer := NewInstancer(connection, appNameTest, loggerTest) defer instancer.Stop() state := instancer.state() if state.Err == nil { t.Fatal("expecting error") } if want, have := 0, len(state.Instances); want != have { t.Errorf("want %d, have %d", want, have) } }