MCPcopy Create free account
hub / github.com/coder/coder / TestTrackResourceReplacement

Function TestTrackResourceReplacement

enterprise/coderd/prebuilds/reconcile_test.go:2010–2102  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2008}
2009
2010func 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 })

Callers

nothing calls this directly

Calls 15

ForceMetricsUpdateMethod · 0.95
ContextFunction · 0.92
NewDBFunction · 0.92
NewFunction · 0.92
NewStoreReconcilerFunction · 0.92
UserFunction · 0.92
newFakeEnqueuerFunction · 0.85
newNoopUsageCheckerPtrFunction · 0.85
setupTestDBTemplateFunction · 0.85
setupTestDBPrebuildFunction · 0.85

Tested by

no test coverage detected