(t *testing.T)
| 21 | func (s *staticTenantLister) Tenants() []string { return s.tenants } |
| 22 | |
| 23 | func TestRetentionProvider(t *testing.T) { |
| 24 | ctx, cancel := context.WithTimeout(context.Background(), time.Second) |
| 25 | defer cancel() |
| 26 | |
| 27 | cfg := RetentionConfig{} |
| 28 | cfg.RegisterFlagsAndApplyDefaults("", &flag.FlagSet{}) |
| 29 | cfg.Interval = 10 * time.Millisecond |
| 30 | |
| 31 | workCfg := work.Config{} |
| 32 | workCfg.RegisterFlagsAndApplyDefaults("", &flag.FlagSet{}) |
| 33 | w := work.New(workCfg) |
| 34 | |
| 35 | tenants := &staticTenantLister{tenants: []string{"tenant-a", "tenant-b"}} |
| 36 | |
| 37 | logger := log.NewLogfmtLogger(os.Stderr) |
| 38 | |
| 39 | limits, err := overrides.NewOverrides(overrides.Config{Defaults: overrides.Overrides{}}, nil, prometheus.NewRegistry()) |
| 40 | require.NoError(t, err) |
| 41 | p := NewRetentionProvider(cfg, logger, tenants, limits, w) |
| 42 | |
| 43 | jobChan := p.Start(ctx) |
| 44 | |
| 45 | seen := make(map[string]bool) |
| 46 | for job := range jobChan { |
| 47 | require.NotNil(t, job) |
| 48 | require.Equal(t, tempopb.JobType_JOB_TYPE_RETENTION, job.Type) |
| 49 | require.NotEmpty(t, job.Tenant(), "retention jobs must have a tenant set") |
| 50 | seen[job.Tenant()] = true |
| 51 | |
| 52 | err := w.AddJob(job) |
| 53 | require.NoError(t, err) |
| 54 | job.Start() // mark running so the provider skips this tenant next tick |
| 55 | } |
| 56 | |
| 57 | // Every tenant should have received exactly one retention job before the |
| 58 | // context deadline. |
| 59 | for _, tenantID := range tenants.tenants { |
| 60 | require.True(t, seen[tenantID], "expected retention job for tenant %s", tenantID) |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | func TestRetentionProviderSkipsRedactionPending(t *testing.T) { |
| 65 | ctx, cancel := context.WithTimeout(context.Background(), time.Second) |
nothing calls this directly
no test coverage detected