Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: notifications: report failed workspace builds#14571

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
mtojek merged 126 commits intomainfrom40-failure-summary
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
126 commits
Select commitHold shift + click to select a range
9d71a83
just the template
mtojekSep 5, 2024
7fc0b02
Bobby
mtojekSep 5, 2024
1ff2a24
golden
mtojekSep 5, 2024
15ede21
WIP
mtojekSep 5, 2024
380c81d
generator
mtojekSep 6, 2024
8aa1d9a
lock
mtojekSep 6, 2024
fcd6d61
notif data
mtojekSep 6, 2024
1a941f8
fix
mtojekSep 6, 2024
be24cbd
fixmes
mtojekSep 6, 2024
2fc383e
NoopEnqueuer
mtojekSep 6, 2024
96c4062
fixme helpers
mtojekSep 6, 2024
b89f484
Run generator
mtojekSep 6, 2024
c9f99c5
fix
mtojekSep 6, 2024
a4f4868
TODO
mtojekSep 6, 2024
630c024
naming
mtojekSep 6, 2024
9a414f0
fix lint
mtojekSep 6, 2024
aef1287
TODO
mtojekSep 9, 2024
f0f6df2
fix dbmock
mtojekSep 9, 2024
f4e34a7
WIP
mtojekSep 9, 2024
968bd24
TODOs
mtojekSep 9, 2024
e771c05
WIP
mtojekSep 10, 2024
33b1e99
fix
mtojekSep 10, 2024
f614080
WIP
mtojekSep 10, 2024
4d7a304
WIP
mtojekSep 10, 2024
d5c212e
WIP
mtojekSep 10, 2024
0ab35f1
WIP
mtojekSep 10, 2024
fc804bd
another WIP
mtojekSep 10, 2024
c25155d
WIP
mtojekSep 10, 2024
6eb6794
WIP
mtojekSep 10, 2024
0afbd56
WIP
mtojekSep 10, 2024
d0331af
before input data
mtojekSep 10, 2024
3d65010
Last TODO
mtojekSep 10, 2024
3490c57
WIP
mtojekSep 10, 2024
aafed7c
rebuild model
mtojekSep 10, 2024
78ecccf
Merge branch 'main' into 40-failure-summary
mtojekSep 10, 2024
2d0299a
WIP
mtojekSep 10, 2024
38a3a50
WIP
mtojekSep 10, 2024
4c65295
WIP
mtojekSep 10, 2024
ef51c9a
WIP
mtojekSep 10, 2024
007bad6
Fixed
mtojekSep 10, 2024
73bb5bd
dbauthz
mtojekSep 11, 2024
7a7bb85
fix
mtojekSep 11, 2024
e02d271
fix
mtojekSep 11, 2024
0b21a95
excluded
mtojekSep 11, 2024
34c44b5
makegen
mtojekSep 11, 2024
f63a06b
wIP
mtojekSep 11, 2024
3b60a27
fix
mtojekSep 11, 2024
774c4b0
fix
mtojekSep 11, 2024
5d56c4d
makegen
mtojekSep 11, 2024
e8214e9
dbmem
mtojekSep 11, 2024
6ba2c29
makegen
mtojekSep 11, 2024
2962735
last dbmem
mtojekSep 11, 2024
d48a8ba
fix
mtojekSep 11, 2024
0bf4748
fix
mtojekSep 11, 2024
29d4a15
fix
mtojekSep 11, 2024
a9580a5
wip
mtojekSep 11, 2024
cf4609d
fix
mtojekSep 11, 2024
8e8ab49
stub internal test
mtojekSep 12, 2024
afad1c1
WIP
mtojekSep 12, 2024
8b49d55
makegen
mtojekSep 12, 2024
87d40cb
WIP
mtojekSep 12, 2024
c352822
WIP: tests
mtojekSep 12, 2024
22b1482
cleanup
mtojekSep 12, 2024
44b1bba
InitialState_NoBuilds_NoReport
mtojekSep 12, 2024
121eef5
first semi test
mtojekSep 12, 2024
bc92fc4
fix: created_by
mtojekSep 12, 2024
ccc6803
fix: created_by tv
mtojekSep 12, 2024
f7826d6
fix: build number
mtojekSep 12, 2024
36644b2
expanding
mtojekSep 13, 2024
52aafac
fix: snapshot
mtojekSep 13, 2024
8909bb6
test done
mtojekSep 13, 2024
0cceede
more tests
mtojekSep 13, 2024
1f06b86
WIP
mtojekSep 13, 2024
a1c89ec
tests done
mtojekSep 13, 2024
34cc4c3
cleanup
mtojekSep 13, 2024
159e6c7
Merge branch 'main' into 40-failure-summary
mtojekSep 13, 2024
5911ca9
fix: LockIDNotificationsReportGenerator
mtojekSep 13, 2024
dda9bf5
Address Mathias' feedback
mtojekSep 16, 2024
15f83c0
makegen
mtojekSep 16, 2024
6306407
fmt
mtojekSep 16, 2024
e258035
more
mtojekSep 16, 2024
48da1cd
reports
mtojekSep 16, 2024
309c600
payload
mtojekSep 16, 2024
8211ee6
nil-omitted
mtojekSep 16, 2024
a8aea9f
failed-lock
mtojekSep 16, 2024
da6b0a3
xerrors
mtojekSep 16, 2024
4afc23b
c=0
mtojekSep 16, 2024
bf7737d
log-debug
mtojekSep 16, 2024
102a245
enqueue with data
mtojekSep 16, 2024
2c9fc46
remove logger
mtojekSep 16, 2024
cb7ca0e
makegen
mtojekSep 16, 2024
6582a48
sort
mtojekSep 16, 2024
c933511
makegen
mtojekSep 16, 2024
0cdf3ea
GetFailedWorkspaceBuildsByTemplateID
mtojekSep 16, 2024
6126e6b
usersByIDs
mtojekSep 16, 2024
1000a50
makegen
mtojekSep 16, 2024
314f080
fix
mtojekSep 16, 2024
498b89b
processedUsers
mtojekSep 17, 2024
f115973
comment
mtojekSep 17, 2024
01409ca
WIP
mtojekSep 17, 2024
832bf38
notifications
mtojekSep 17, 2024
4cacf4d
WIP
mtojekSep 17, 2024
f23e837
WIP
mtojekSep 17, 2024
359416c
notifications
mtojekSep 17, 2024
68ed60f
fmt
mtojekSep 17, 2024
fdad745
rephrase
mtojekSep 17, 2024
9ba4c04
WIP
mtojekSep 17, 2024
8f634a4
WIP
mtojekSep 17, 2024
5215c92
WIP
mtojekSep 17, 2024
2edc7d5
fix
mtojekSep 17, 2024
53f6c63
refactored
mtojekSep 17, 2024
6405f3c
WIP
mtojekSep 17, 2024
d96a34a
refactored
mtojekSep 17, 2024
06a79f4
adjust tests
mtojekSep 17, 2024
3e60198
Merge branch 'main' into 40-failure-summary
mtojekSep 17, 2024
0a05a40
duplicate migration
mtojekSep 17, 2024
65cf4a8
dbauthz
mtojekSep 17, 2024
898856d
fix
mtojekSep 17, 2024
a5e42da
makegen
mtojekSep 17, 2024
72724b3
fix
mtojekSep 17, 2024
20abd69
fix: migration down
mtojekSep 17, 2024
b2df714
xerrors.Is
mtojekSep 17, 2024
65992f6
limit builds
mtojekSep 17, 2024
af67873
context cancelled
mtojekSep 17, 2024
6436489
Merge branch 'main' into 40-failure-summary
mtojekSep 18, 2024
6bd772c
fix migration
mtojekSep 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
first semi test
  • Loading branch information
@mtojek
mtojek committedSep 12, 2024
commit121eef5e7e63f50fa7c83c9987cf40c236c38314
17 changes: 11 additions & 6 deletionscoderd/notifications/reports/generator.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -101,10 +101,13 @@ func (i *reportGenerator) Close() error {
const failedWorkspaceBuildsReportFrequencyDays = 7

func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db database.Store, enqueuer notifications.Enqueuer, clk quartz.Clock) error {
statsRows, err := db.GetWorkspaceBuildStatsByTemplates(ctx, dbtime.Time(clk.Now()).UTC())
statsRows, err := db.GetWorkspaceBuildStatsByTemplates(ctx, dbtime.Time(clk.Now().Add(-failedWorkspaceBuildsReportFrequencyDays*24*time.Hour)).UTC())
if err != nil {
return xerrors.Errorf("unable to fetch failed workspace builds: %w", err)
}
sort.Slice(statsRows, func(i, j int) bool {
return statsRows[i].TemplateName < statsRows[j].TemplateName
})

for _, stats := range statsRows {
var failedBuilds []database.GetFailedWorkspaceBuildsByTemplateIDRow
Expand DownExpand Up@@ -161,8 +164,8 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
})
if err != nil {
logger.Error(ctx, "unable to update report generator logs", slog.F("template_id", stats.TemplateID), slog.F("user_id", templateAdmin.ID), slog.F("failed_builds", len(failedBuilds)), slog.Error(err))
continue
}
continue
}

templateDisplayName := stats.TemplateDisplayName
Expand DownExpand Up@@ -234,10 +237,12 @@ func buildDataForReportFailedWorkspaceBuilds(frequencyDays int, stats database.G
templateVersions = append(templateVersions, map[string]any{
"template_version_name": failedBuild.TemplateVersionName,
"failed_count": 1,
"failed_builds": map[string]any{
"workspace_owner_username": failedBuild.WorkspaceOwnerUsername,
"workspace_name": failedBuild.WorkspaceName,
"build_number": failedBuild.WorkspaceBuildNumber,
"failed_builds": []map[string]any{
{
"workspace_owner_username": failedBuild.WorkspaceOwnerUsername,
"workspace_name": failedBuild.WorkspaceName,
"build_number": failedBuild.WorkspaceBuildNumber,
},
},
})
continue
Expand Down
140 changes: 130 additions & 10 deletionscoderd/notifications/reports/generator_internal_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,34 +2,42 @@ package reports

import (
"context"
"database/sql"
"testing"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/google/uuid"
"github.com/stretchr/testify/require"

"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/quartz"

"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbauthz"
"github.com/coder/coder/v2/coderd/database/dbgen"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/pubsub"
"github.com/coder/coder/v2/coderd/notifications"
"github.com/coder/coder/v2/coderd/rbac"
"github.com/coder/coder/v2/testutil"
)

const dayDuration = 24 * time.Hour

var (
jobError = sql.NullString{String: "badness", Valid: true}
jobErrorCode = sql.NullString{String: "ERR-42", Valid: true}
)

func TestReportFailedWorkspaceBuilds(t *testing.T) {
t.Parallel()

t.Run("InitialState_NoBuilds_NoReport", func(t *testing.T) {
t.Parallel()

// Setup
logger, db, notifEnq, clk := setup(t)
// nolint:gocritic // reportFailedWorkspaceBuilds is called by system.
ctx := dbauthz.AsSystemRestricted(context.Background())
ctx, logger, db, _, notifEnq, clk := setup(t)

// When
err := reportFailedWorkspaceBuilds(ctx, logger, db, notifEnq, clk)
Expand All@@ -40,7 +48,116 @@ func TestReportFailedWorkspaceBuilds(t *testing.T) {

t.Run("FailedBuilds_TemplateAdminOptIn_FirstRun_Report_SecondRunTooEarly_NoReport_ThirdRun_Report", func(t *testing.T) {
t.Parallel()
// TODO

// Setup
ctx, logger, db, ps, notifEnq, clk := setup(t)

// Given
// Organization
org := dbgen.Organization(t, db, database.Organization{})

// Template admins
templateAdmin1 := dbgen.User(t, db, database.User{Username: "template-admin-1", RBACRoles: []string{rbac.RoleTemplateAdmin().Name}})
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{UserID: templateAdmin1.ID, OrganizationID: org.ID})
templateAdmin2 := dbgen.User(t, db, database.User{Username: "template-admin-2", RBACRoles: []string{rbac.RoleTemplateAdmin().Name}})
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{UserID: templateAdmin2.ID, OrganizationID: org.ID})
_ = dbgen.User(t, db, database.User{Name: "template-admin-3", RBACRoles: []string{rbac.RoleTemplateAdmin().Name}})
// template admin in some other org

// Regular users
user1 := dbgen.User(t, db, database.User{})
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{UserID: user1.ID, OrganizationID: org.ID})
user2 := dbgen.User(t, db, database.User{})
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{UserID: user2.ID, OrganizationID: org.ID})
user3 := dbgen.User(t, db, database.User{})
// user in some other org

// Templates
t1 := dbgen.Template(t, db, database.Template{Name: "template-1", DisplayName: "First Template", OrganizationID: org.ID})
t2 := dbgen.Template(t, db, database.Template{Name: "template-2", OrganizationID: org.ID})

// Template versions
t1v1 := dbgen.TemplateVersion(t, db, database.TemplateVersion{Name: "template-1-version-1", OrganizationID: org.ID, TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true}, JobID: uuid.New()})
t1v2 := dbgen.TemplateVersion(t, db, database.TemplateVersion{Name: "template-1-version-2", OrganizationID: org.ID, TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true}, JobID: uuid.New()})
t2v1 := dbgen.TemplateVersion(t, db, database.TemplateVersion{Name: "template-2-version-1", OrganizationID: org.ID, TemplateID: uuid.NullUUID{UUID: t2.ID, Valid: true}, JobID: uuid.New()})
t2v2 := dbgen.TemplateVersion(t, db, database.TemplateVersion{Name: "template-1-version-1", OrganizationID: org.ID, TemplateID: uuid.NullUUID{UUID: t2.ID, Valid: true}, JobID: uuid.New()})

// Workspaces
w1 := dbgen.Workspace(t, db, database.Workspace{TemplateID: t1.ID, OwnerID: user1.ID, OrganizationID: org.ID})
w2 := dbgen.Workspace(t, db, database.Workspace{TemplateID: t2.ID, OwnerID: user2.ID, OrganizationID: org.ID})
w3 := dbgen.Workspace(t, db, database.Workspace{TemplateID: t1.ID, OwnerID: user3.ID, OrganizationID: org.ID})
w4 := dbgen.Workspace(t, db, database.Workspace{TemplateID: t2.ID, OwnerID: user2.ID, OrganizationID: org.ID})

now := clk.Now()

// Workspace builds
w1wb1pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-6 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w1.ID, TemplateVersionID: t1v1.ID, JobID: w1wb1pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})
w1wb2pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, CompletedAt: sql.NullTime{Time: now.Add(-5 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w1.ID, TemplateVersionID: t1v2.ID, JobID: w1wb2pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})
w1wb3pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-4 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w1.ID, TemplateVersionID: t1v2.ID, JobID: w1wb3pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})

w2wb1pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, CompletedAt: sql.NullTime{Time: now.Add(-5 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w2.ID, TemplateVersionID: t2v1.ID, JobID: w2wb1pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})
w2wb2pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-4 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w2.ID, TemplateVersionID: t2v2.ID, JobID: w2wb2pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})
w2wb3pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-3 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w2.ID, TemplateVersionID: t2v2.ID, JobID: w2wb3pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})

w3wb1pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-3 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w3.ID, TemplateVersionID: t1v1.ID, JobID: w3wb1pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})

w4wb1pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, Error: jobError, ErrorCode: jobErrorCode, CompletedAt: sql.NullTime{Time: now.Add(-6 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w4.ID, TemplateVersionID: t2v1.ID, JobID: w4wb1pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})
w4wb2pj := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID, CompletedAt: sql.NullTime{Time: now.Add(-1 * dayDuration), Valid: true}})
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: w4.ID, TemplateVersionID: t2v2.ID, JobID: w4wb2pj.ID, Transition: database.WorkspaceTransitionStart, Reason: database.BuildReasonInitiator})

// Database is ready, so we can clear notifications queue
notifEnq.Clear()

// When
err := reportFailedWorkspaceBuilds(ctx, logger, db, notifEnq, clk)

// Then
require.NoError(t, err)

require.Len(t, notifEnq.Sent, 4) // 2 templates, 2 template admins
require.Equal(t, notifEnq.Sent[0].UserID, templateAdmin1.ID)
require.Equal(t, notifEnq.Sent[0].TemplateID, notifications.TemplateWorkspaceBuildsFailedReport)
require.Equal(t, notifEnq.Sent[0].Labels["template_name"], t1.Name)
require.Equal(t, notifEnq.Sent[0].Labels["template_display_name"], t1.DisplayName)
require.Equal(t, notifEnq.Sent[0].Data["failed_builds"], int64(3))
require.Equal(t, notifEnq.Sent[0].Data["total_builds"], int64(4))
require.Equal(t, notifEnq.Sent[0].Data["report_frequency"], "week")
// require.Contains(t, notifEnq.Sent[0].Data["template_versions"], "?")

require.Equal(t, notifEnq.Sent[1].UserID, templateAdmin2.ID)
require.Equal(t, notifEnq.Sent[1].TemplateID, notifications.TemplateWorkspaceBuildsFailedReport)
require.Equal(t, notifEnq.Sent[1].Labels["template_name"], t1.Name)
require.Equal(t, notifEnq.Sent[1].Labels["template_display_name"], t1.DisplayName)
require.Equal(t, notifEnq.Sent[1].Data["failed_builds"], int64(3))
require.Equal(t, notifEnq.Sent[1].Data["total_builds"], int64(4))
require.Equal(t, notifEnq.Sent[1].Data["report_frequency"], "week")
// require.Contains(t, notifEnq.Sent[1].Data["template_versions"], "?")

require.Equal(t, notifEnq.Sent[2].UserID, templateAdmin1.ID)
require.Equal(t, notifEnq.Sent[2].TemplateID, notifications.TemplateWorkspaceBuildsFailedReport)
require.Equal(t, notifEnq.Sent[2].Labels["template_name"], t2.Name)
require.Equal(t, notifEnq.Sent[2].Labels["template_display_name"], t2.DisplayName)
require.Equal(t, notifEnq.Sent[2].Data["failed_builds"], int64(3))
require.Equal(t, notifEnq.Sent[2].Data["total_builds"], int64(5))
require.Equal(t, notifEnq.Sent[2].Data["report_frequency"], "week")
// require.Contains(t, notifEnq.Sent[0].Data["template_versions"], "?")

require.Equal(t, notifEnq.Sent[3].UserID, templateAdmin2.ID)
require.Equal(t, notifEnq.Sent[3].TemplateID, notifications.TemplateWorkspaceBuildsFailedReport)
require.Equal(t, notifEnq.Sent[3].Labels["template_name"], t2.Name)
require.Equal(t, notifEnq.Sent[3].Labels["template_display_name"], t2.DisplayName)
require.Equal(t, notifEnq.Sent[3].Data["failed_builds"], int64(3))
require.Equal(t, notifEnq.Sent[3].Data["total_builds"], int64(5))
require.Equal(t, notifEnq.Sent[3].Data["report_frequency"], "week")
// require.Contains(t, notifEnq.Sent[0].Data["template_versions"], "?")
})

t.Run("NoFailedBuilds_TemplateAdminIn_NoReport", func(t *testing.T) {
Expand All@@ -59,13 +176,16 @@ func TestReportFailedWorkspaceBuilds(t *testing.T) {
})
}

func setup(t *testing.T) (slog.Logger, database.Store,notifications.Enqueuer, quartz.Clock) {
func setup(t *testing.T) (context.Context,slog.Logger, database.Store,pubsub.Pubsub, *testutil.FakeNotificationsEnqueuer, quartz.Clock) {
t.Helper()

// nolint:gocritic // reportFailedWorkspaceBuilds is called by system.
ctx := dbauthz.AsSystemRestricted(context.Background())
logger := slogtest.Make(t, &slogtest.Options{})
rdb, _ := dbtestutil.NewDB(t)
db := dbauthz.New(rdb, rbac.NewAuthorizer(prometheus.NewRegistry()), logger, coderdtest.AccessControlStorePointer())
db, ps := dbtestutil.NewDB(t)
// does not work with works
// db := dbauthz.New(rdb, rbac.NewAuthorizer(prometheus.NewRegistry()), logger, coderdtest.AccessControlStorePointer())
notifyEnq := &testutil.FakeNotificationsEnqueuer{}
clk := quartz.NewMock(t)
return logger, db, notifyEnq, clk
returnctx,logger, db, ps, notifyEnq, clk
}

[8]ページ先頭

©2009-2025 Movatter.jp