(t *testing.T)
| 1114 | } |
| 1115 | |
| 1116 | func 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. |
nothing calls this directly
no test coverage detected