MCPcopy Index your code
hub / github.com/coder/coder / TestExpireOldAPIKeys

Function TestExpireOldAPIKeys

coderd/database/dbpurge/dbpurge_test.go:1116–1179  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1114}
1115
1116func TestExpireOldAPIKeys(t *testing.T) {
1117 t.Parallel()
1118
1119 // Given: a number of workspaces and API keys owned by a regular user and the prebuilds system user.
1120 var (
1121 ctx = testutil.Context(t, testutil.WaitShort)
1122 now = dbtime.Now()
1123 db, _ = dbtestutil.NewDB(t, dbtestutil.WithDumpOnFailure())
1124 org = dbgen.Organization(t, db, database.Organization{})
1125 user = dbgen.User(t, db, database.User{})
1126 tpl = dbgen.Template(t, db, database.Template{OrganizationID: org.ID, CreatedBy: user.ID})
1127 userWs = dbgen.Workspace(t, db, database.WorkspaceTable{
1128 OwnerID: user.ID,
1129 TemplateID: tpl.ID,
1130 })
1131 prebuildsWs = dbgen.Workspace(t, db, database.WorkspaceTable{
1132 OwnerID: database.PrebuildsSystemUserID,
1133 TemplateID: tpl.ID,
1134 })
1135 createAPIKey = func(userID uuid.UUID, name string) database.APIKey {
1136 k, _ := dbgen.APIKey(t, db, database.APIKey{UserID: userID, TokenName: name, ExpiresAt: now.Add(time.Hour)}, func(iap *database.InsertAPIKeyParams) {
1137 iap.TokenName = name
1138 })
1139 return k
1140 }
1141 assertKeyActive = func(kid string) {
1142 k, err := db.GetAPIKeyByID(ctx, kid)
1143 require.NoError(t, err)
1144 assert.True(t, k.ExpiresAt.After(now))
1145 }
1146 assertKeyExpired = func(kid string) {
1147 k, err := db.GetAPIKeyByID(ctx, kid)
1148 require.NoError(t, err)
1149 assert.True(t, k.ExpiresAt.Equal(now))
1150 }
1151 unnamedUserAPIKey = createAPIKey(user.ID, "")
1152 unnamedPrebuildsAPIKey = createAPIKey(database.PrebuildsSystemUserID, "")
1153 namedUserAPIKey = createAPIKey(user.ID, "my-token")
1154 namedPrebuildsAPIKey = createAPIKey(database.PrebuildsSystemUserID, "also-my-token")
1155 userWorkspaceAPIKey1 = createAPIKey(user.ID, provisionerdserver.WorkspaceSessionTokenName(user.ID, userWs.ID))
1156 userWorkspaceAPIKey2 = createAPIKey(user.ID, provisionerdserver.WorkspaceSessionTokenName(user.ID, prebuildsWs.ID))
1157 prebuildsWorkspaceAPIKey1 = createAPIKey(database.PrebuildsSystemUserID, provisionerdserver.WorkspaceSessionTokenName(database.PrebuildsSystemUserID, prebuildsWs.ID))
1158 prebuildsWorkspaceAPIKey2 = createAPIKey(database.PrebuildsSystemUserID, provisionerdserver.WorkspaceSessionTokenName(database.PrebuildsSystemUserID, userWs.ID))
1159 )
1160
1161 // When: we call ExpirePrebuildsAPIKeys
1162 err := db.ExpirePrebuildsAPIKeys(ctx, now)
1163 // Then: no errors is reported.
1164 require.NoError(t, err)
1165
1166 // We do not touch user API keys.
1167 assertKeyActive(unnamedUserAPIKey.ID)
1168 assertKeyActive(namedUserAPIKey.ID)
1169 assertKeyActive(userWorkspaceAPIKey1.ID)
1170 assertKeyActive(userWorkspaceAPIKey2.ID)
1171 // Unnamed prebuilds API keys get expired.
1172 assertKeyExpired(unnamedPrebuildsAPIKey.ID)
1173 // API keys for workspaces still owned by prebuilds user remain active until claimed.

Callers

nothing calls this directly

Calls 14

ContextFunction · 0.92
NowFunction · 0.92
NewDBFunction · 0.92
WithDumpOnFailureFunction · 0.92
OrganizationFunction · 0.92
UserFunction · 0.92
TemplateFunction · 0.92
WorkspaceFunction · 0.92
APIKeyFunction · 0.92
AddMethod · 0.65
GetAPIKeyByIDMethod · 0.65

Tested by

no test coverage detected