(t *testing.T)
| 2008 | } |
| 2009 | |
| 2010 | func TestTrackResourceReplacement(t *testing.T) { |
| 2011 | t.Parallel() |
| 2012 | |
| 2013 | ctx := testutil.Context(t, testutil.WaitSuperLong) |
| 2014 | |
| 2015 | // Setup. |
| 2016 | clock := quartz.NewMock(t) |
| 2017 | logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false}).Leveled(slog.LevelDebug) |
| 2018 | db, ps := dbtestutil.NewDB(t) |
| 2019 | |
| 2020 | fakeEnqueuer := newFakeEnqueuer() |
| 2021 | registry := prometheus.NewRegistry() |
| 2022 | cache := files.New(registry, &coderdtest.FakeAuthorizer{}) |
| 2023 | reconciler := prebuilds.NewStoreReconciler( |
| 2024 | db, ps, cache, codersdk.PrebuildsConfig{}, logger, |
| 2025 | clock, |
| 2026 | registry, |
| 2027 | fakeEnqueuer, |
| 2028 | newNoopUsageCheckerPtr(), |
| 2029 | noop.NewTracerProvider(), |
| 2030 | 10, |
| 2031 | nil, |
| 2032 | ) |
| 2033 | |
| 2034 | // Given: a template admin to receive a notification. |
| 2035 | templateAdmin := dbgen.User(t, db, database.User{ |
| 2036 | RBACRoles: []string{codersdk.RoleTemplateAdmin}, |
| 2037 | }) |
| 2038 | |
| 2039 | // Given: a prebuilt workspace. |
| 2040 | userID := uuid.New() |
| 2041 | dbgen.User(t, db, database.User{ID: userID}) |
| 2042 | org, template := setupTestDBTemplate(t, db, userID, false) |
| 2043 | templateVersionID := setupTestDBTemplateVersion(ctx, t, clock, db, ps, org.ID, userID, template.ID) |
| 2044 | preset := setupTestDBPreset(t, db, templateVersionID, 1, "b0rked") |
| 2045 | prebuiltWorkspace, prebuild := setupTestDBPrebuild(t, clock, db, ps, database.WorkspaceTransitionStart, database.ProvisionerJobStatusSucceeded, org.ID, preset, template.ID, templateVersionID) |
| 2046 | |
| 2047 | // Given: no replacement has been tracked yet, we should not see a metric for it yet. |
| 2048 | require.NoError(t, reconciler.ForceMetricsUpdate(ctx)) |
| 2049 | mf, err := registry.Gather() |
| 2050 | require.NoError(t, err) |
| 2051 | require.Nil(t, findMetric(mf, prebuilds.MetricResourceReplacementsCount, map[string]string{ |
| 2052 | "template_name": template.Name, |
| 2053 | "preset_name": preset.Name, |
| 2054 | "organization_name": org.Name, |
| 2055 | })) |
| 2056 | |
| 2057 | // When: a claim occurred and resource replacements are detected (_how_ is out of scope of this test). |
| 2058 | reconciler.TrackResourceReplacement(ctx, prebuiltWorkspace.ID, prebuild.ID, []*sdkproto.ResourceReplacement{ |
| 2059 | { |
| 2060 | Resource: "docker_container[0]", |
| 2061 | Paths: []string{"env", "image"}, |
| 2062 | }, |
| 2063 | { |
| 2064 | Resource: "docker_volume[0]", |
| 2065 | Paths: []string{"name"}, |
| 2066 | }, |
| 2067 | }) |
nothing calls this directly
no test coverage detected