TestDelegatesChain tests chaining all provided delegates together.
(t *testing.T)
| 187 | |
| 188 | // TestDelegatesChain tests chaining all provided delegates together. |
| 189 | func TestDelegatesChain(t *testing.T) { |
| 190 | onStoppingCalled := false |
| 191 | |
| 192 | // Create a temporary file and immediately delete it. |
| 193 | tokensFile, err := os.CreateTemp("", "tokens-*") |
| 194 | require.NoError(t, err) |
| 195 | require.NoError(t, os.Remove(tokensFile.Name())) |
| 196 | |
| 197 | // Chain delegates together. |
| 198 | var chain BasicLifecyclerDelegate |
| 199 | chain = &mockDelegate{ |
| 200 | onRegister: func(_ *BasicLifecycler, _ Desc, instanceExists bool, _ string, _ InstanceDesc) (InstanceState, Tokens) { |
| 201 | assert.False(t, instanceExists) |
| 202 | return JOINING, Tokens{1, 2, 3, 4, 5} |
| 203 | }, |
| 204 | onStopping: func(l *BasicLifecycler) { |
| 205 | assert.Equal(t, LEAVING, l.GetState()) |
| 206 | onStoppingCalled = true |
| 207 | }, |
| 208 | } |
| 209 | |
| 210 | chain = NewTokensPersistencyDelegate(tokensFile.Name(), ACTIVE, chain, log.NewNopLogger()) |
| 211 | chain = NewLeaveOnStoppingDelegate(chain, log.NewNopLogger()) |
| 212 | chain = NewAutoForgetDelegate(time.Minute, chain, log.NewNopLogger()) |
| 213 | |
| 214 | ctx := context.Background() |
| 215 | cfg := prepareBasicLifecyclerConfig() |
| 216 | lifecycler, _, err := prepareBasicLifecyclerWithDelegate(t, cfg, chain) |
| 217 | require.NoError(t, err) |
| 218 | defer services.StopAndAwaitTerminated(ctx, lifecycler) //nolint:errcheck |
| 219 | |
| 220 | require.NoError(t, services.StartAndAwaitRunning(ctx, lifecycler)) |
| 221 | assert.Equal(t, JOINING, lifecycler.GetState()) |
| 222 | assert.Equal(t, Tokens{1, 2, 3, 4, 5}, lifecycler.GetTokens()) |
| 223 | assert.True(t, lifecycler.IsRegistered()) |
| 224 | |
| 225 | require.NoError(t, services.StopAndAwaitTerminated(ctx, lifecycler)) |
| 226 | assert.True(t, onStoppingCalled) |
| 227 | |
| 228 | // Ensure tokens have been stored. |
| 229 | actualTokens, err := LoadTokensFromFile(tokensFile.Name()) |
| 230 | require.NoError(t, err) |
| 231 | assert.Equal(t, Tokens{1, 2, 3, 4, 5}, actualTokens) |
| 232 | } |
| 233 | |
| 234 | func TestAutoForgetDelegate(t *testing.T) { |
| 235 | const forgetPeriod = time.Minute |
nothing calls this directly
no test coverage detected