(t *testing.T)
| 269 | } |
| 270 | |
| 271 | func TestBasicLifecycler_KeepInTheRingOnStop(t *testing.T) { |
| 272 | ctx := context.Background() |
| 273 | cfg := prepareBasicLifecyclerConfig() |
| 274 | cfg.KeepInstanceInTheRingOnShutdown = true |
| 275 | |
| 276 | lifecycler, delegate, store, err := prepareBasicLifecycler(t, cfg) |
| 277 | require.NoError(t, err) |
| 278 | require.Equal(t, cfg.KeepInstanceInTheRingOnShutdown, lifecycler.ShouldKeepInstanceInTheRingOnShutdown()) |
| 279 | |
| 280 | delegate.onRegister = func(_ *BasicLifecycler, _ Desc, _ bool, _ string, _ InstanceDesc) (InstanceState, Tokens) { |
| 281 | return ACTIVE, Tokens{1, 2, 3, 4, 5} |
| 282 | } |
| 283 | delegate.onStopping = func(lifecycler *BasicLifecycler) { |
| 284 | require.NoError(t, lifecycler.changeState(context.Background(), LEAVING)) |
| 285 | } |
| 286 | |
| 287 | require.NoError(t, services.StartAndAwaitRunning(ctx, lifecycler)) |
| 288 | assert.Equal(t, ACTIVE, lifecycler.GetState()) |
| 289 | assert.Equal(t, Tokens{1, 2, 3, 4, 5}, lifecycler.GetTokens()) |
| 290 | assert.True(t, lifecycler.IsRegistered()) |
| 291 | assert.NotZero(t, lifecycler.GetRegisteredAt()) |
| 292 | assert.Equal(t, float64(cfg.NumTokens), testutil.ToFloat64(lifecycler.metrics.tokensOwned)) |
| 293 | assert.Equal(t, float64(cfg.NumTokens), testutil.ToFloat64(lifecycler.metrics.tokensToOwn)) |
| 294 | |
| 295 | require.NoError(t, services.StopAndAwaitTerminated(ctx, lifecycler)) |
| 296 | assert.Equal(t, LEAVING, lifecycler.GetState()) |
| 297 | assert.Equal(t, Tokens{1, 2, 3, 4, 5}, lifecycler.GetTokens()) |
| 298 | assert.True(t, lifecycler.IsRegistered()) |
| 299 | assert.NotZero(t, lifecycler.GetRegisteredAt()) |
| 300 | assert.Equal(t, float64(cfg.NumTokens), testutil.ToFloat64(lifecycler.metrics.tokensOwned)) |
| 301 | assert.Equal(t, float64(cfg.NumTokens), testutil.ToFloat64(lifecycler.metrics.tokensToOwn)) |
| 302 | |
| 303 | // Assert on the instance is in the ring. |
| 304 | inst, ok := getInstanceFromStore(t, store, testInstanceID) |
| 305 | assert.True(t, ok) |
| 306 | assert.Equal(t, cfg.ID, inst.GetId()) |
| 307 | assert.Equal(t, cfg.Addr, inst.GetAddr()) |
| 308 | assert.Equal(t, LEAVING, inst.GetState()) |
| 309 | assert.Equal(t, Tokens{1, 2, 3, 4, 5}, Tokens(inst.GetTokens())) |
| 310 | assert.Equal(t, cfg.Zone, inst.GetZone()) |
| 311 | } |
| 312 | |
| 313 | func TestBasicLifecycler_UnregisterFromTheRingOnStop(t *testing.T) { |
| 314 | ctx := context.Background() |
nothing calls this directly
no test coverage detected