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