(t *testing.T)
| 1051 | } |
| 1052 | |
| 1053 | func TestWorkspaceBuildUsageChecker(t *testing.T) { |
| 1054 | t.Parallel() |
| 1055 | |
| 1056 | t.Run("Permitted", func(t *testing.T) { |
| 1057 | t.Parallel() |
| 1058 | |
| 1059 | ctx, cancel := context.WithCancel(context.Background()) |
| 1060 | defer cancel() |
| 1061 | |
| 1062 | var calls atomic.Int64 |
| 1063 | fakeUsageChecker := &fakeUsageChecker{ |
| 1064 | checkBuildUsageFunc: func(_ context.Context, _ database.Store, _ *database.TemplateVersion, _ *database.Task, _ database.WorkspaceTransition) (wsbuilder.UsageCheckResponse, error) { |
| 1065 | calls.Add(1) |
| 1066 | return wsbuilder.UsageCheckResponse{Permitted: true}, nil |
| 1067 | }, |
| 1068 | } |
| 1069 | |
| 1070 | mDB := expectDB(t, |
| 1071 | // Inputs |
| 1072 | withTemplate, |
| 1073 | withInactiveVersion(nil), |
| 1074 | withLastBuildFound, |
| 1075 | withLastBuildState, |
| 1076 | withTemplateVersionVariables(inactiveVersionID, nil), |
| 1077 | withRichParameters(nil), |
| 1078 | withParameterSchemas(inactiveJobID, nil), |
| 1079 | withWorkspaceTags(inactiveVersionID, nil), |
| 1080 | withProvisionerDaemons([]database.GetEligibleProvisionerDaemonsByProvisionerJobIDsRow{}), |
| 1081 | |
| 1082 | // Outputs |
| 1083 | expectProvisionerJob(func(job database.InsertProvisionerJobParams) {}), |
| 1084 | withInTx, |
| 1085 | expectFindMatchingPresetID(uuid.Nil, sql.ErrNoRows), |
| 1086 | expectBuild(func(bld database.InsertWorkspaceBuildParams) {}), |
| 1087 | withBuild, |
| 1088 | withNoTask, |
| 1089 | expectBuildParameters(func(params database.InsertWorkspaceBuildParametersParams) {}), |
| 1090 | ) |
| 1091 | fc := files.New(prometheus.NewRegistry(), &coderdtest.FakeAuthorizer{}) |
| 1092 | |
| 1093 | ws := database.Workspace{ID: workspaceID, TemplateID: templateID, OwnerID: userID} |
| 1094 | uut := wsbuilder.New(ws, database.WorkspaceTransitionStart, fakeUsageChecker) |
| 1095 | // nolint: dogsled |
| 1096 | _, _, _, err := uut.Build(ctx, mDB, fc, nil, audit.WorkspaceBuildBaggage{}) |
| 1097 | require.NoError(t, err) |
| 1098 | require.EqualValues(t, 1, calls.Load()) |
| 1099 | }) |
| 1100 | |
| 1101 | // The failure cases are mostly identical from a test perspective. |
| 1102 | const message = "fake test message" |
| 1103 | cases := []struct { |
| 1104 | name string |
| 1105 | response wsbuilder.UsageCheckResponse |
| 1106 | responseErr error |
| 1107 | assertions func(t *testing.T, err error) |
| 1108 | }{ |
| 1109 | { |
| 1110 | name: "NotPermitted", |
nothing calls this directly
no test coverage detected