chore(coderd/prometheusmetrics): remove dbmem from tests (#18238)

This commit is contained in:
Hugo Dutka
2025-06-05 09:30:27 +02:00
committed by GitHub
parent bb2c19562b
commit 277c2c7ea7
@@ -4,6 +4,7 @@ import (
"context"
"database/sql"
"encoding/json"
"errors"
"fmt"
"os"
"reflect"
@@ -25,7 +26,6 @@ import (
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbgen"
"github.com/coder/coder/v2/coderd/database/dbmem"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/dbtime"
"github.com/coder/coder/v2/coderd/prometheusmetrics"
@@ -51,13 +51,15 @@ func TestActiveUsers(t *testing.T) {
}{{
Name: "None",
Database: func(t *testing.T) database.Store {
return dbmem.New()
db, _ := dbtestutil.NewDB(t)
return db
},
Count: 0,
}, {
Name: "One",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbtestutil.DisableForeignKeysAndTriggers(t, db)
dbgen.APIKey(t, db, database.APIKey{
LastUsed: dbtime.Now(),
})
@@ -67,7 +69,8 @@ func TestActiveUsers(t *testing.T) {
}, {
Name: "OneWithExpired",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbtestutil.DisableForeignKeysAndTriggers(t, db)
dbgen.APIKey(t, db, database.APIKey{
LastUsed: dbtime.Now(),
@@ -84,7 +87,8 @@ func TestActiveUsers(t *testing.T) {
}, {
Name: "Multiple",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbtestutil.DisableForeignKeysAndTriggers(t, db)
dbgen.APIKey(t, db, database.APIKey{
LastUsed: dbtime.Now(),
})
@@ -123,13 +127,14 @@ func TestUsers(t *testing.T) {
}{{
Name: "None",
Database: func(t *testing.T) database.Store {
return dbmem.New()
db, _ := dbtestutil.NewDB(t)
return db
},
Count: map[database.UserStatus]int{},
}, {
Name: "One",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbgen.User(t, db, database.User{Status: database.UserStatusActive})
return db
},
@@ -137,7 +142,7 @@ func TestUsers(t *testing.T) {
}, {
Name: "MultipleStatuses",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbgen.User(t, db, database.User{Status: database.UserStatusActive})
dbgen.User(t, db, database.User{Status: database.UserStatusDormant})
@@ -148,7 +153,7 @@ func TestUsers(t *testing.T) {
}, {
Name: "MultipleActive",
Database: func(t *testing.T) database.Store {
db := dbmem.New()
db, _ := dbtestutil.NewDB(t)
dbgen.User(t, db, database.User{Status: database.UserStatusActive})
dbgen.User(t, db, database.User{Status: database.UserStatusActive})
dbgen.User(t, db, database.User{Status: database.UserStatusActive})
@@ -216,20 +221,25 @@ func TestWorkspaceLatestBuildTotals(t *testing.T) {
Total int
Status map[codersdk.ProvisionerJobStatus]int
}{{
Name: "None",
Database: dbmem.New,
Total: 0,
Name: "None",
Database: func() database.Store {
db, _ := dbtestutil.NewDB(t)
return db
},
Total: 0,
}, {
Name: "Multiple",
Database: func() database.Store {
db := dbmem.New()
insertCanceled(t, db)
insertFailed(t, db)
insertFailed(t, db)
insertSuccess(t, db)
insertSuccess(t, db)
insertSuccess(t, db)
insertRunning(t, db)
db, _ := dbtestutil.NewDB(t)
u := dbgen.User(t, db, database.User{})
org := dbgen.Organization(t, db, database.Organization{})
insertCanceled(t, db, u, org)
insertFailed(t, db, u, org)
insertFailed(t, db, u, org)
insertSuccess(t, db, u, org)
insertSuccess(t, db, u, org)
insertSuccess(t, db, u, org)
insertRunning(t, db, u, org)
return db
},
Total: 7,
@@ -287,21 +297,26 @@ func TestWorkspaceLatestBuildStatuses(t *testing.T) {
ExpectedWorkspaces int
ExpectedStatuses map[codersdk.ProvisionerJobStatus]int
}{{
Name: "None",
Database: dbmem.New,
Name: "None",
Database: func() database.Store {
db, _ := dbtestutil.NewDB(t)
return db
},
ExpectedWorkspaces: 0,
}, {
Name: "Multiple",
Database: func() database.Store {
db := dbmem.New()
insertTemplates(t, db)
insertCanceled(t, db)
insertFailed(t, db)
insertFailed(t, db)
insertSuccess(t, db)
insertSuccess(t, db)
insertSuccess(t, db)
insertRunning(t, db)
db, _ := dbtestutil.NewDB(t)
u := dbgen.User(t, db, database.User{})
org := dbgen.Organization(t, db, database.Organization{})
insertTemplates(t, db, u, org)
insertCanceled(t, db, u, org)
insertFailed(t, db, u, org)
insertFailed(t, db, u, org)
insertSuccess(t, db, u, org)
insertSuccess(t, db, u, org)
insertSuccess(t, db, u, org)
insertRunning(t, db, u, org)
return db
},
ExpectedWorkspaces: 7,
@@ -727,18 +742,24 @@ var (
templateVersionB = uuid.New()
)
func insertTemplates(t *testing.T, db database.Store) {
func insertTemplates(t *testing.T, db database.Store, u database.User, org database.Organization) {
require.NoError(t, db.InsertTemplate(context.Background(), database.InsertTemplateParams{
ID: templateA,
Name: "template-a",
Provisioner: database.ProvisionerTypeTerraform,
MaxPortSharingLevel: database.AppSharingLevelAuthenticated,
CreatedBy: u.ID,
OrganizationID: org.ID,
}))
pj := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{})
require.NoError(t, db.InsertTemplateVersion(context.Background(), database.InsertTemplateVersionParams{
ID: templateVersionA,
TemplateID: uuid.NullUUID{UUID: templateA},
Name: "version-1a",
ID: templateVersionA,
TemplateID: uuid.NullUUID{UUID: templateA},
Name: "version-1a",
JobID: pj.ID,
OrganizationID: org.ID,
CreatedBy: u.ID,
}))
require.NoError(t, db.InsertTemplate(context.Background(), database.InsertTemplateParams{
@@ -746,57 +767,77 @@ func insertTemplates(t *testing.T, db database.Store) {
Name: "template-b",
Provisioner: database.ProvisionerTypeTerraform,
MaxPortSharingLevel: database.AppSharingLevelAuthenticated,
CreatedBy: u.ID,
OrganizationID: org.ID,
}))
require.NoError(t, db.InsertTemplateVersion(context.Background(), database.InsertTemplateVersionParams{
ID: templateVersionB,
TemplateID: uuid.NullUUID{UUID: templateB},
Name: "version-1b",
ID: templateVersionB,
TemplateID: uuid.NullUUID{UUID: templateB},
Name: "version-1b",
JobID: pj.ID,
OrganizationID: org.ID,
CreatedBy: u.ID,
}))
}
func insertUser(t *testing.T, db database.Store) database.User {
username, err := cryptorand.String(8)
require.NoError(t, err)
user, err := db.InsertUser(context.Background(), database.InsertUserParams{
ID: uuid.New(),
Username: username,
LoginType: database.LoginTypeNone,
})
require.NoError(t, err)
return user
}
func insertRunning(t *testing.T, db database.Store) database.ProvisionerJob {
var template, templateVersion uuid.UUID
func insertRunning(t *testing.T, db database.Store, u database.User, org database.Organization) database.ProvisionerJob {
var templateID, templateVersionID uuid.UUID
rnd, err := cryptorand.Intn(10)
require.NoError(t, err)
pairs := []struct {
tplID uuid.UUID
versionID uuid.UUID
}{
{templateA, templateVersionA},
{templateB, templateVersionB},
}
for _, pair := range pairs {
_, err := db.GetTemplateByID(context.Background(), pair.tplID)
if errors.Is(err, sql.ErrNoRows) {
_ = dbgen.Template(t, db, database.Template{
ID: pair.tplID,
OrganizationID: org.ID,
CreatedBy: u.ID,
})
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
ID: pair.versionID,
OrganizationID: org.ID,
CreatedBy: u.ID,
})
} else {
require.NoError(t, err)
}
}
if rnd > 5 {
template = templateB
templateVersion = templateVersionB
templateID = templateB
templateVersionID = templateVersionB
} else {
template = templateA
templateVersion = templateVersionA
templateID = templateA
templateVersionID = templateVersionA
}
workspace, err := db.InsertWorkspace(context.Background(), database.InsertWorkspaceParams{
ID: uuid.New(),
OwnerID: insertUser(t, db).ID,
OwnerID: u.ID,
Name: uuid.NewString(),
TemplateID: template,
TemplateID: templateID,
AutomaticUpdates: database.AutomaticUpdatesNever,
OrganizationID: org.ID,
})
require.NoError(t, err)
job, err := db.InsertProvisionerJob(context.Background(), database.InsertProvisionerJobParams{
ID: uuid.New(),
CreatedAt: dbtime.Now(),
UpdatedAt: dbtime.Now(),
Provisioner: database.ProvisionerTypeEcho,
StorageMethod: database.ProvisionerStorageMethodFile,
Type: database.ProvisionerJobTypeWorkspaceBuild,
ID: uuid.New(),
CreatedAt: dbtime.Now(),
UpdatedAt: dbtime.Now(),
Provisioner: database.ProvisionerTypeEcho,
StorageMethod: database.ProvisionerStorageMethodFile,
Type: database.ProvisionerJobTypeWorkspaceBuild,
Input: json.RawMessage("{}"),
OrganizationID: org.ID,
})
require.NoError(t, err)
err = db.InsertWorkspaceBuild(context.Background(), database.InsertWorkspaceBuildParams{
@@ -806,7 +847,7 @@ func insertRunning(t *testing.T, db database.Store) database.ProvisionerJob {
BuildNumber: 1,
Transition: database.WorkspaceTransitionStart,
Reason: database.BuildReasonInitiator,
TemplateVersionID: templateVersion,
TemplateVersionID: templateVersionID,
})
require.NoError(t, err)
// This marks the job as started.
@@ -816,14 +857,15 @@ func insertRunning(t *testing.T, db database.Store) database.ProvisionerJob {
Time: dbtime.Now(),
Valid: true,
},
Types: []database.ProvisionerType{database.ProvisionerTypeEcho},
Types: []database.ProvisionerType{database.ProvisionerTypeEcho},
ProvisionerTags: must(json.Marshal(job.Tags)),
})
require.NoError(t, err)
return job
}
func insertCanceled(t *testing.T, db database.Store) {
job := insertRunning(t, db)
func insertCanceled(t *testing.T, db database.Store, u database.User, org database.Organization) {
job := insertRunning(t, db, u, org)
err := db.UpdateProvisionerJobWithCancelByID(context.Background(), database.UpdateProvisionerJobWithCancelByIDParams{
ID: job.ID,
CanceledAt: sql.NullTime{
@@ -842,8 +884,8 @@ func insertCanceled(t *testing.T, db database.Store) {
require.NoError(t, err)
}
func insertFailed(t *testing.T, db database.Store) {
job := insertRunning(t, db)
func insertFailed(t *testing.T, db database.Store, u database.User, org database.Organization) {
job := insertRunning(t, db, u, org)
err := db.UpdateProvisionerJobWithCompleteByID(context.Background(), database.UpdateProvisionerJobWithCompleteByIDParams{
ID: job.ID,
CompletedAt: sql.NullTime{
@@ -858,8 +900,8 @@ func insertFailed(t *testing.T, db database.Store) {
require.NoError(t, err)
}
func insertSuccess(t *testing.T, db database.Store) {
job := insertRunning(t, db)
func insertSuccess(t *testing.T, db database.Store, u database.User, org database.Organization) {
job := insertRunning(t, db, u, org)
err := db.UpdateProvisionerJobWithCompleteByID(context.Background(), database.UpdateProvisionerJobWithCompleteByIDParams{
ID: job.ID,
CompletedAt: sql.NullTime{