(t *testing.T)
| 2953 | } |
| 2954 | |
| 2955 | func TestReconciliationStats(t *testing.T) { |
| 2956 | t.Parallel() |
| 2957 | |
| 2958 | // Setup |
| 2959 | clock := quartz.NewReal() |
| 2960 | db, ps := dbtestutil.NewDB(t) |
| 2961 | client, _, _ := coderdtest.NewWithAPI(t, &coderdtest.Options{ |
| 2962 | Database: db, |
| 2963 | Pubsub: ps, |
| 2964 | Clock: clock, |
| 2965 | }) |
| 2966 | fakeEnqueuer := newFakeEnqueuer() |
| 2967 | registry := prometheus.NewRegistry() |
| 2968 | cache := files.New(registry, &coderdtest.FakeAuthorizer{}) |
| 2969 | logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false}).Leveled(slog.LevelDebug) |
| 2970 | reconciler := prebuilds.NewStoreReconciler( |
| 2971 | db, ps, cache, codersdk.PrebuildsConfig{}, logger, |
| 2972 | clock, |
| 2973 | registry, |
| 2974 | fakeEnqueuer, |
| 2975 | newNoopUsageCheckerPtr(), |
| 2976 | noop.NewTracerProvider(), |
| 2977 | 10, |
| 2978 | nil, |
| 2979 | ) |
| 2980 | owner := coderdtest.CreateFirstUser(t, client) |
| 2981 | |
| 2982 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) |
| 2983 | defer cancel() |
| 2984 | |
| 2985 | // Create a template version with a preset |
| 2986 | dbfake.TemplateVersion(t, db).Seed(database.TemplateVersion{ |
| 2987 | OrganizationID: owner.OrganizationID, |
| 2988 | CreatedBy: owner.UserID, |
| 2989 | }).Preset(database.TemplateVersionPreset{ |
| 2990 | DesiredInstances: sql.NullInt32{ |
| 2991 | Int32: 1, |
| 2992 | Valid: true, |
| 2993 | }, |
| 2994 | }).Do() |
| 2995 | |
| 2996 | // Verify that ReconcileAll tracks and returns elapsed time |
| 2997 | start := time.Now() |
| 2998 | stats, err := reconciler.ReconcileAll(ctx) |
| 2999 | actualElapsed := time.Since(start) |
| 3000 | require.NoError(t, err) |
| 3001 | require.Greater(t, stats.Elapsed, time.Duration(0)) |
| 3002 | |
| 3003 | // Verify stats.Elapsed matches actual execution time |
| 3004 | require.InDelta(t, actualElapsed.Milliseconds(), stats.Elapsed.Milliseconds(), 100) |
| 3005 | // Verify reconciliation loop is not unexpectedly slow |
| 3006 | require.Less(t, stats.Elapsed, 5*time.Second) |
| 3007 | } |
| 3008 | |
| 3009 | func newNoopEnqueuer() *notifications.NoopEnqueuer { |
| 3010 | return notifications.NewNoopEnqueuer() |
nothing calls this directly
no test coverage detected