Skip to content

test: Stop integration tests bypassing providers - #1638

Merged
gtema merged 1 commit into
mainfrom
integration-tests
Nov 12, 2026
Merged

gtema merged 1 commit into
mainfrom
integration-tests

Conversation

@gtema

@gtema gtema commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

Integration tests wrote to the database directly where the providers
could be used instead.

Create trusts through the trust provider rather than inserting trust
rows. Add an optional last_verified argument to
add_user_to_group_expiring and add_users_to_groups_expiring so tests
can create an expired membership through the identity provider. None
keeps the previous behaviour of stamping the current time. The LDAP
driver ignores it.

Drop the raw project_tag count from the integration test. Cover tag
purging on project deletion with driver unit tests instead: a SQLite
test with foreign keys enabled and a check that the schema of every
backend carries ON DELETE CASCADE.

Signed-off-by: Artem Goncharov artem.goncharov@gmail.com

Integration tests wrote to the database directly where the providers
could be used instead.

Create trusts through the trust provider rather than inserting trust
rows. Add an optional last_verified argument to
add_user_to_group_expiring and add_users_to_groups_expiring so tests
can create an expired membership through the identity provider. None
keeps the previous behaviour of stamping the current time. The LDAP
driver ignores it.

Drop the raw project_tag count from the integration test. Cover tag
purging on project deletion with driver unit tests instead: a SQLite
test with foreign keys enabled and a check that the schema of every
backend carries ON DELETE CASCADE.

Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@gtema gtema linked an issue Nov 12, 2026 that may be closed by this pull request
@gtema
gtema enabled auto-merge November 12, 2026 17:43
@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-11-12 18:11:28 26-11-12 18:11:51 00:00:23 0 → 45
Maintaining 26-11-12 18:11:51 26-11-12 18:12:21 00:00:30 45
Decreasing 26-11-12 18:12:21 26-11-12 18:12:22 00:00:01 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /SCIM/v2/:domain_id/Users/:id (sync offboard) 1 0 131 131 131 0.03 0.00
DELETE DELETE /v3/OS-TRUST/trusts/:id 26 0 195 11 422 0.87 0.00
DELETE DELETE /v3/auth/tokens 121 0 147 85 329 4.03 0.00
DELETE DELETE /v3/auth/tokens (churn) 27 0 177 5.79 321 0.90 0.00
DELETE DELETE /v3/credentials/:id 27 0 134 3.59 207 0.90 0.00
DELETE DELETE /v3/endpoints/:id 44 0 140 49 283 1.47 0.00
DELETE DELETE /v3/groups/:id 50 0 169 12 333 1.67 0.00
DELETE DELETE /v3/groups/:id/users/:id 50 0 184 20 342 1.67 0.00
DELETE DELETE /v3/projects/:id (churn) 27 0 228 10 497 0.90 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 155 155 155 0.03 0.00
DELETE DELETE /v3/projects/:id/users/:id/roles/:id (churn) 27 0 143 5.42 229 0.90 0.00
DELETE DELETE /v3/regions/:id 44 0 131 15 233 1.47 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 142 142 142 0.03 0.00
DELETE DELETE /v3/services/:id 44 0 148 69 315 1.47 0.00
DELETE DELETE /v3/users/:id (churn) 53 0 216 5.93 342 1.77 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 209 168 249 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 0 18 18 18 0.03 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 341 341 341 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 0 29 29 29 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 342 342 342 0.03 0.00
GET 143 0 124 60 280 4.77 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 16 0 267 1.54 711 0.53 0.00
└─ 200 (62.5%) 10 423 274 711
└─ 429 (37.5%) 6 7.85 1.54 24
GET GET /SCIM/v2/:domain_id/Users/:id (sync reconcile show) 16 0 218 1.94 494 0.53 0.00
└─ 200 (56.2%) 9 384 271 494
└─ 429 (43.8%) 7 5.69 1.94 22
GET GET /v3/OS-TRUST/trusts (by trustor) 26 0 135 16 297 0.87 0.00
GET GET /v3/OS-TRUST/trusts/:id 26 0 145 32 264 0.87 0.00
GET GET /v3/auth/tokens (churn validate) 26 0 159 5.98 249 0.87 0.00
GET GET /v3/auth/tokens (trustor) 25 0 150 85 232 0.83 0.00
GET GET /v3/auth/tokens (validate new) 121 0 127 65 293 4.03 0.00
GET GET /v3/auth/tokens (validate revoked) 121 0 126 16 226 4.03 0.00
GET GET /v3/auth/tokens (validate token) 377 0 158 64 368 12.57 0.00
GET GET /v3/credentials (by user) 27 0 99 3.24 183 0.90 0.00
GET GET /v3/credentials/:id 27 0 106 3.01 200 0.90 0.00
GET GET /v3/endpoints (by service) 42 0 100 58 151 1.40 0.00
GET GET /v3/endpoints/:id 42 0 102 59 169 1.40 0.00
GET GET /v3/groups 49 0 98 15 209 1.63 0.00
GET GET /v3/groups/:id 48 0 102 4.45 174 1.60 0.00
GET GET /v3/groups/:id/users 48 0 159 9.17 254 1.60 0.00
GET GET /v3/projects/:id 278 0 108 47 237 9.27 0.00
GET GET /v3/projects/:id (catalog) 247 0 106 43 263 8.23 0.00
GET GET /v3/projects?domain_id 391 0 138 70 365 13.03 0.00
GET GET /v3/regions/:id 42 0 102 57 191 1.40 0.00
GET GET /v3/role_assignments 138 0 114 57 232 4.60 0.00
GET GET /v3/role_assignments?role.id 137 0 110 49 249 4.57 0.00
GET GET /v3/role_assignments?scope.domain.id 138 0 103 52 219 4.60 0.00
GET GET /v3/role_assignments?user.id 137 0 112 59 236 4.57 0.00
GET GET /v3/roles 496 0 122 51 285 16.53 0.00
GET GET /v3/roles/:id 339 0 89 41 210 11.30 0.00
GET GET /v3/services 42 0 105 70 175 1.40 0.00
GET GET /v3/services/:id 42 0 107 49 206 1.40 0.00
GET GET /v3/users/:id 543 0 107 44 244 18.10 0.00
GET GET /v3/users/:id (catalog) 242 0 108 52 245 8.07 0.00
GET GET /v3/users?domain_id 387 0 143 57 295 12.90 0.00
GET GET /v4/api-keys 136 0 111 61 296 4.53 0.00
GET GET /v4/api-keys/:client_id 136 0 112 54 259 4.53 0.00
GET GET /v4/mappings/rulesets 136 0 113 63 297 4.53 0.00
GET GET /v4/mappings/rulesets/:mapping_id 137 0 109 59 302 4.57 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 3197 0 9.36 1.44 208 106.57 0.00
GET GET /v4/oauth2/:domain_id/clients 135 0 113 60 296 4.50 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 135 0 112 61 250 4.50 0.00
GET GET /v4/oauth2/:domain_id/jwks 3198 0 9.52 1.54 203 106.60 0.00
GET GET /v4/scim_realms 86 0 110 61 294 2.87 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 86 0 115 63 262 2.87 0.00
HEAD HEAD /v3/groups/:id/users/:id 48 0 142 19 237 1.60 0.00
PATCH PATCH /SCIM/v2/:domain_id/Users/:id (sync attribute drift) 16 0 413 1.81 758 0.53 0.00
└─ 200 (75.0%) 12 549 364 758
└─ 429 (25.0%) 4 3.03 1.81 4.26
PATCH PATCH /v3/credentials/:id 27 0 182 6.51 257 0.90 0.00
PATCH PATCH /v3/groups/:id 48 0 133 61 227 1.60 0.00
PATCH PATCH /v3/services/:id 44 0 162 77 360 1.47 0.00
POST POST /v3/OS-TRUST/trusts 26 0 200 81 274 0.87 0.00
POST POST /v3/auth/tokens 121 0 92 43 228 4.03 0.00
POST POST /v3/auth/tokens (churn user) 26 0 1444 1095 2217 0.87 0.00
POST POST /v3/auth/tokens (password, invalid) 23 0 1373 969 2093 0.77 0.00
POST POST /v3/auth/tokens (password, project-scoped) 22 0 1498 1226 1996 0.73 0.00
POST POST /v3/auth/tokens (password, unscoped) 23 0 1430 1064 2182 0.77 0.00
POST POST /v3/auth/tokens (rescope to system) 495 0 122 53 273 16.50 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 280 0 108 40 237 9.33 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 44 0 1412 1114 2024 1.47 0.00
POST POST /v3/credentials 27 0 110 4.4 228 0.90 0.00
POST POST /v3/endpoints 42 0 120 81 191 1.40 0.00
POST POST /v3/groups 48 0 127 61 242 1.60 0.00
POST POST /v3/projects (churn) 25 0 128 50 217 0.83 0.00
POST POST /v3/projects (setup) 1 0 55 55 55 0.03 0.00
POST POST /v3/regions 42 0 105 64 216 1.40 0.00
POST POST /v3/services 42 0 110 67 199 1.40 0.00
POST POST /v3/users (churn) 52 0 1439 1020 2209 1.73 0.00
POST POST /v3/users (setup) 1 0 2062 2062 2062 0.03 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 336 336 336 0.03 0.00
POST POST /v4/oauth2/:domain_id/device_authorization 1318 0 23 5.26 242 43.93 0.00
POST POST /v4/oauth2/:domain_id/token (client_credentials) 16 0 398 275 544 0.53 0.00
PUT PUT /v3/groups/:id/users/:id 48 0 157 81 317 1.60 0.00
PUT PUT /v3/projects/:id/users/:id/roles/:id (churn) 26 0 131 83 198 0.87 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 86 0 129 69 432 2.87 0.00
Aggregated 15728 0 85 1.44 2217 524.27 0.00

Response Time Metrics

Method Name 50%ile (ms) 60%ile (ms) 70%ile (ms) 80%ile (ms) 90%ile (ms) 95%ile (ms) 99%ile (ms) 100%ile (ms)
DELETE DELETE /SCIM/v2/:domain_id/Users/:id (sync offboard) 131 131 131 131 131 131 131 131
DELETE DELETE /v3/OS-TRUST/trusts/:id 183 200 206 220 281 322 422 422
DELETE DELETE /v3/auth/tokens 138 144 161 173 208 218 281 329
DELETE DELETE /v3/auth/tokens (churn) 179 181 191 210 247 264 321 321
DELETE DELETE /v3/credentials/:id 132 134 148 161 169 198 207 207
DELETE DELETE /v3/endpoints/:id 126 136 153 179 212 226 283 283
DELETE DELETE /v3/groups/:id 171 173 183 200 232 257 333 333
DELETE DELETE /v3/groups/:id/users/:id 181 194 204 224 237 272 342 342
DELETE DELETE /v3/projects/:id (churn) 218 226 257 268 313 322 497 497
DELETE DELETE /v3/projects/:id (teardown) 155 155 155 155 155 155 155 155
DELETE DELETE /v3/projects/:id/users/:id/roles/:id (churn) 146 153 165 185 214 228 229 229
DELETE DELETE /v3/regions/:id 113 124 142 171 198 204 233 233
DELETE DELETE /v3/roles/:id (teardown) 142 142 142 142 142 142 142 142
DELETE DELETE /v3/services/:id 131 142 171 185 204 241 315 315
DELETE DELETE /v3/users/:id (churn) 220 228 245 272 289 305 317 342
DELETE DELETE /v3/users/:id (teardown) 168 168 168 249 249 249 249 249
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 18 18 18 18 18 18 18 18
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 341 341 341 341 341 341 341 341
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 29 29 29 29 29 29 29 29
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 342 342 342 342 342 342 342 342
GET 118 126 134 144 175 198 216 280
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 326 350 375 391 518 553 711 711
GET GET /SCIM/v2/:domain_id/Users/:id (sync reconcile show) 272 317 350 399 457 485 494 494
GET GET /v3/OS-TRUST/trusts (by trustor) 122 131 165 181 189 226 297 297
GET GET /v3/OS-TRUST/trusts/:id 130 140 155 204 218 237 264 264
GET GET /v3/auth/tokens (churn validate) 157 171 173 189 241 249 249 249
GET GET /v3/auth/tokens (trustor) 151 159 165 179 202 206 232 232
GET GET /v3/auth/tokens (validate new) 121 129 146 159 173 191 281 293
GET GET /v3/auth/tokens (validate revoked) 120 127 138 159 171 196 222 226
GET GET /v3/auth/tokens (validate token) 153 159 171 189 212 239 293 368
GET GET /v3/credentials (by user) 106 109 111 122 123 144 183 183
GET GET /v3/credentials/:id 104 113 119 124 161 179 200 200
GET GET /v3/endpoints (by service) 101 105 111 118 127 136 151 151
GET GET /v3/endpoints/:id 103 106 113 121 134 144 169 169
GET GET /v3/groups 92 98 104 122 140 161 209 209
GET GET /v3/groups/:id 102 106 111 119 153 165 174 174
GET GET /v3/groups/:id/users 157 163 185 194 228 245 254 254
GET GET /v3/projects/:id 104 109 118 127 146 169 200 237
GET GET /v3/projects/:id (catalog) 101 109 117 127 144 163 202 263
GET GET /v3/projects?domain_id 134 140 153 167 191 208 243 365
GET GET /v3/regions/:id 100 107 111 126 157 167 191 191
GET GET /v3/role_assignments 109 114 126 136 155 167 222 232
GET GET /v3/role_assignments?role.id 108 114 120 131 153 167 216 249
GET GET /v3/role_assignments?scope.domain.id 99 106 114 122 134 159 208 219
GET GET /v3/role_assignments?user.id 105 114 119 136 157 173 208 236
GET GET /v3/roles 116 124 134 146 165 189 218 285
GET GET /v3/roles/:id 84 90 100 108 121 138 167 210
GET GET /v3/services 99 102 111 121 138 155 175 175
GET GET /v3/services/:id 108 112 117 132 144 165 206 206
GET GET /v3/users/:id 103 109 118 130 151 167 198 244
GET GET /v3/users/:id (catalog) 104 110 116 126 148 167 191 245
GET GET /v3/users?domain_id 136 146 159 171 202 216 247 295
GET GET /v4/api-keys 100 107 118 126 167 200 247 296
GET GET /v4/api-keys/:client_id 102 107 118 134 163 212 251 259
GET GET /v4/mappings/rulesets 103 113 119 130 151 214 253 297
GET GET /v4/mappings/rulesets/:mapping_id 101 110 117 127 142 175 245 302
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 6.56 7.33 8.51 10 14 19 78 208
GET GET /v4/oauth2/:domain_id/clients 100 106 119 134 169 198 251 296
GET GET /v4/oauth2/:domain_id/clients/:provider_id 107 110 121 129 153 183 232 250
GET GET /v4/oauth2/:domain_id/jwks 6.37 7.2 8.38 10 14 20 77 203
GET GET /v4/scim_realms 98 103 115 130 167 183 245 294
GET GET /v4/scim_realms/:domain_id/:provider_id 98 111 120 140 169 206 241 262
HEAD HEAD /v3/groups/:id/users/:id 142 157 161 165 179 194 237 237
PATCH PATCH /SCIM/v2/:domain_id/Users/:id (sync attribute drift) 494 522 537 602 659 684 758 758
PATCH PATCH /v3/credentials/:id 185 200 208 224 230 255 257 257
PATCH PATCH /v3/groups/:id 132 136 144 153 177 206 227 227
PATCH PATCH /v3/services/:id 157 161 169 202 228 259 360 360
POST POST /v3/OS-TRUST/trusts 204 214 218 228 234 272 274 274
POST POST /v3/auth/tokens 89 93 102 111 127 146 179 228
POST POST /v3/auth/tokens (churn user) 1,384 1,434 1,466 1,548 1,761 2,179 2,217 2,217
POST POST /v3/auth/tokens (password, invalid) 1,319 1,368 1,417 1,450 1,614 1,663 2,093 2,093
POST POST /v3/auth/tokens (password, project-scoped) 1,450 1,466 1,499 1,597 1,925 1,925 1,996 1,996
POST POST /v3/auth/tokens (password, unscoped) 1,368 1,450 1,499 1,532 1,991 2,179 2,182 2,182
POST POST /v3/auth/tokens (rescope to system) 117 124 134 146 171 185 232 273
POST POST /v3/auth/tokens (rescope, invalid project) 103 108 119 131 148 163 202 237
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,368 1,401 1,466 1,548 1,679 1,761 2,024 2,024
POST POST /v3/credentials 105 110 116 132 140 218 228 228
POST POST /v3/endpoints 113 116 131 155 163 167 191 191
POST POST /v3/groups 119 126 134 140 191 228 242 242
POST POST /v3/projects (churn) 117 125 142 151 198 216 217 217
POST POST /v3/projects (setup) 55 55 55 55 55 55 55 55
POST POST /v3/regions 104 106 113 117 134 134 216 216
POST POST /v3/services 106 115 121 134 155 173 199 199
POST POST /v3/users (churn) 1,401 1,434 1,532 1,581 1,745 2,040 2,146 2,209
POST POST /v3/users (setup) 2,062 2,062 2,062 2,062 2,062 2,062 2,062 2,062
POST POST /v4/api-keys/:client_id/revoke (teardown) 336 336 336 336 336 336 336 336
POST POST /v4/oauth2/:domain_id/device_authorization 17 19 21 25 36 64 163 242
POST POST /v4/oauth2/:domain_id/token (client_credentials) 403 408 428 473 489 502 544 544
PUT PUT /v3/groups/:id/users/:id 148 157 183 194 224 228 317 317
PUT PUT /v3/projects/:id/users/:id/roles/:id (churn) 122 136 142 151 173 179 198 198
PUT PUT /v4/scim_realms/:domain_id/:provider_id 116 129 134 148 173 237 317 432
Aggregated 65 90 107 127 161 198 1,237 2,217

Status Code Metrics

Method Name Status Codes
DELETE DELETE /SCIM/v2/:domain_id/Users/:id (sync offboard) 1 [204]
DELETE DELETE /v3/OS-TRUST/trusts/:id 26 [204]
DELETE DELETE /v3/auth/tokens 121 [204]
DELETE DELETE /v3/auth/tokens (churn) 27 [204]
DELETE DELETE /v3/credentials/:id 27 [204]
DELETE DELETE /v3/endpoints/:id 44 [204]
DELETE DELETE /v3/groups/:id 50 [204]
DELETE DELETE /v3/groups/:id/users/:id 50 [204]
DELETE DELETE /v3/projects/:id (churn) 27 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/projects/:id/users/:id/roles/:id (churn) 27 [204]
DELETE DELETE /v3/regions/:id 44 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [204]
DELETE DELETE /v3/services/:id 44 [204]
DELETE DELETE /v3/users/:id (churn) 53 [204]
DELETE DELETE /v3/users/:id (teardown) 2 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 143 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 6 [429], 10 [200]
GET GET /SCIM/v2/:domain_id/Users/:id (sync reconcile show) 9 [200], 7 [429]
GET GET /v3/OS-TRUST/trusts (by trustor) 26 [200]
GET GET /v3/OS-TRUST/trusts/:id 26 [200]
GET GET /v3/auth/tokens (churn validate) 26 [200]
GET GET /v3/auth/tokens (trustor) 25 [200]
GET GET /v3/auth/tokens (validate new) 121 [200]
GET GET /v3/auth/tokens (validate revoked) 121 [404]
GET GET /v3/auth/tokens (validate token) 377 [200]
GET GET /v3/credentials (by user) 27 [200]
GET GET /v3/credentials/:id 27 [200]
GET GET /v3/endpoints (by service) 42 [200]
GET GET /v3/endpoints/:id 42 [200]
GET GET /v3/groups 49 [200]
GET GET /v3/groups/:id 48 [200]
GET GET /v3/groups/:id/users 48 [200]
GET GET /v3/projects/:id 278 [200]
GET GET /v3/projects/:id (catalog) 247 [200]
GET GET /v3/projects?domain_id 391 [200]
GET GET /v3/regions/:id 42 [200]
GET GET /v3/role_assignments 138 [200]
GET GET /v3/role_assignments?role.id 137 [200]
GET GET /v3/role_assignments?scope.domain.id 138 [200]
GET GET /v3/role_assignments?user.id 137 [200]
GET GET /v3/roles 496 [200]
GET GET /v3/roles/:id 339 [200]
GET GET /v3/services 42 [200]
GET GET /v3/services/:id 42 [200]
GET GET /v3/users/:id 543 [200]
GET GET /v3/users/:id (catalog) 242 [200]
GET GET /v3/users?domain_id 387 [200]
GET GET /v4/api-keys 136 [200]
GET GET /v4/api-keys/:client_id 136 [200]
GET GET /v4/mappings/rulesets 136 [200]
GET GET /v4/mappings/rulesets/:mapping_id 137 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 3,197 [200]
GET GET /v4/oauth2/:domain_id/clients 135 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 135 [200]
GET GET /v4/oauth2/:domain_id/jwks 3,198 [200]
GET GET /v4/scim_realms 86 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 86 [200]
HEAD HEAD /v3/groups/:id/users/:id 48 [204]
PATCH PATCH /SCIM/v2/:domain_id/Users/:id (sync attribute drift) 4 [429], 12 [200]
PATCH PATCH /v3/credentials/:id 27 [200]
PATCH PATCH /v3/groups/:id 48 [200]
PATCH PATCH /v3/services/:id 44 [200]
POST POST /v3/OS-TRUST/trusts 26 [201]
POST POST /v3/auth/tokens 121 [201]
POST POST /v3/auth/tokens (churn user) 26 [201]
POST POST /v3/auth/tokens (password, invalid) 23 [401]
POST POST /v3/auth/tokens (password, project-scoped) 22 [201]
POST POST /v3/auth/tokens (password, unscoped) 23 [201]
POST POST /v3/auth/tokens (rescope to system) 495 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 280 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 44 [201]
POST POST /v3/credentials 27 [201]
POST POST /v3/endpoints 42 [201]
POST POST /v3/groups 48 [201]
POST POST /v3/projects (churn) 25 [201]
POST POST /v3/projects (setup) 1 [201]
POST POST /v3/regions 42 [201]
POST POST /v3/services 42 [201]
POST POST /v3/users (churn) 52 [201]
POST POST /v3/users (setup) 1 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
POST POST /v4/oauth2/:domain_id/device_authorization 1,318 [200]
POST POST /v4/oauth2/:domain_id/token (client_credentials) 16 [200]
PUT PUT /v3/groups/:id/users/:id 48 [204]
PUT PUT /v3/projects/:id/users/:id/roles/:id (churn) 26 [204]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 86 [200]
Aggregated 17 [429], 671 [204], 1,037 [201], 121 [404], 303 [401], 13,579 [200]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 2267 2267 2267 0.03 0.00
0.1 144 0 146 66 251 4.80 0.00
0.2 144 0 137 70 301 4.80 0.00
0.3 143 0 124 60 280 4.77 0.00
TokenLifecycle
1.0 1 0 2067 2067 2067 0.03 0.00
1.1 121 0 492 315 947 4.03 0.00
ValidateToken
2.0 1 0 2192 2192 2192 0.03 0.00
2.1 377 0 158 64 368 12.57 0.00
UserCRUD
3.0 1 0 2156 2156 2156 0.03 0.00
3.1 1 0 2062 2062 2062 0.03 0.00
3.2 543 0 107 44 244 18.10 0.00
3.3 2 0 209 168 249 0.07 0.00
ProjectCRUD
4.0 1 0 2635 2635 2635 0.03 0.00
4.1 1 0 55 55 55 0.03 0.00
4.2 278 0 108 47 237 9.27 0.00
4.3 1 0 155 155 155 0.03 0.00
RoleCRUD
5.0 0 0 0 0 0 0.00 0.00
5.1 0 0 0 0 0 0.00 0.00
5.2 339 0 89 41 210 11.30 0.00
5.3 1 0 142 142 142 0.03 0.00
RoleList
6.0 0 0 0 0 0 0.00 0.00
6.1 496 0 122 51 285 16.53 0.00
RoleAssignmentList
7.0 0 0 0 0 0 0.00 0.00
7.1 137 0 114 57 232 4.57 0.00
7.2 137 0 112 59 236 4.57 0.00
7.3 137 0 103 52 219 4.57 0.00
7.4 137 0 110 49 249 4.57 0.00
UserRead
8.0 0 0 0 0 0 0.00 0.00
8.1 243 0 142 57 295 8.10 0.00
8.2 242 0 108 52 245 8.07 0.00
ProjectRead
9.0 0 0 0 0 0 0.00 0.00
9.1 247 0 138 71 366 8.23 0.00
9.2 247 0 106 43 263 8.23 0.00
PasswordAuth
10.0 22 0 1404 1064 2182 0.73 0.00
10.1 22 0 1498 1226 1996 0.73 0.00
PasswordAuthNegative
11.0 23 0 1373 969 2093 0.77 0.00
Rescope
12.0 0 0 0 0 0 0.00 0.00
12.1 495 0 122 53 273 16.50 0.00
RescopeNegative
13.0 0 0 0 0 0 0.00 0.00
13.1 280 0 108 40 238 9.33 0.00
SystemScopeAuth
14.0 44 0 1412 1114 2024 1.47 0.00
GroupChurn
15.0 0 0 0 0 0 0.00 0.00
15.1 50 0 1275 602 1510 1.67 0.00
CatalogChurn
16.0 0 0 0 0 0 0.00 0.00
16.1 44 0 1442 1150 1894 1.47 0.00
CredentialChurn
17.0 0 0 0 0 0 0.00 0.00
17.1 27 0 2291 1138 3035 0.90 0.00
TrustChurn
18.0 0 0 0 0 0 0.00 0.00
18.1 26 0 2505 1253 3769 0.87 0.00
IdentityChurn
19.0 0 0 0 0 0 0.00 0.00
19.1 27 0 2435 1465 3426 0.90 0.00
ApiKeyCRUD
20.0 0 0 0 0 0 0.00 0.00
20.1 0 0 0 0 0 0.00 0.00
20.2 135 0 112 54 259 4.50 0.00
20.3 136 0 111 61 296 4.53 0.00
20.4 1 0 336 336 336 0.03 0.00
MappingCRUD
21.0 0 0 0 0 0 0.00 0.00
21.1 0 0 0 0 0 0.00 0.00
21.2 136 0 109 59 302 4.53 0.00
21.3 136 0 113 63 297 4.53 0.00
21.4 1 0 341 341 341 0.03 0.00
OAuth2ClientCRUD
22.0 0 0 0 0 0 0.00 0.00
22.1 0 0 0 0 0 0.00 0.00
22.2 135 0 112 61 250 4.50 0.00
22.3 135 0 113 60 296 4.50 0.00
22.4 1 0 342 342 342 0.03 0.00
OAuth2ClientCredentials
23.0 0 0 0 0 0 0.00 0.00
23.1 0 0 0 0 0 0.00 0.00
23.2 16 0 398 275 544 0.53 0.00
23.3 1 0 47 47 47 0.03 0.00
OAuth2DeviceAuthorization
24.0 1318 0 23 5.29 242 43.93 0.00
OAuth2Discovery
25.0 3196 0 9.53 1.54 203 106.53 0.00
25.1 3197 0 9.37 1.45 208 106.57 0.00
ScimRealmRead
26.0 0 0 0 0 0 0.00 0.00
26.1 85 0 115 63 262 2.83 0.00
26.2 86 0 110 61 294 2.87 0.00
26.3 86 0 129 69 432 2.87 0.00
ScimSync
27.0 0 0 0 0 0 0.00 0.00
27.1 0 0 0 0 0 0.00 0.00
27.2 0 0 0 0 0 0.00 0.00
27.3 16 0 643 274 1025 0.53 0.00
27.4 16 0 656 271 1023 0.53 0.00
27.5 16 0 663 364 1005 0.53 0.00
27.6 1 0 131 131 131 0.03 0.00
Aggregated 14033 0 98 1.45 3769 467.77 0.00

Scenario Metrics

Scenario # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 2 142 408 262 756 4.73 71.00
TokenLifecycle 2 119 494 315 947 3.97 59.50
ValidateToken 2 375 158 71 368 12.50 187.50
UserCRUD 2 541 107 44 244 18.03 270.50
ProjectCRUD 1 277 108 47 237 9.23 277.00
RoleCRUD 1 338 89 41 210 11.27 338.00
RoleList 2 494 122 51 285 16.47 247.00
RoleAssignmentList 2 137 442 293 757 4.57 68.50
UserRead 2 241 250 122 535 8.03 120.50
ProjectRead 2 245 245 116 628 8.17 122.50
PasswordAuth 2 21 2944 2400 4103 0.70 10.50
PasswordAuthNegative 1 22 1392 1109 2093 0.73 22.00
Rescope 2 493 122 53 273 16.43 246.50
RescopeNegative 1 279 108 40 238 9.30 279.00
SystemScopeAuth 2 42 1426 1123 2024 1.40 21.00
GroupChurn 2 48 1299 1017 1510 1.60 24.00
CatalogChurn 2 42 1441 1150 1894 1.40 21.00
CredentialChurn 2 25 2336 1994 3035 0.83 12.50
TrustChurn 2 24 2554 2139 3769 0.80 12.00
IdentityChurn 2 25 2488 2065 3426 0.83 12.50
ApiKeyCRUD 1 135 221 118 520 4.50 135.00
MappingCRUD 1 136 222 132 517 4.53 136.00
OAuth2ClientCRUD 1 134 223 128 523 4.47 134.00
OAuth2ClientCredentials 1 15 1925 1614 2283 0.50 15.00
OAuth2DeviceAuthorization 1 1317 23 5.3 242 43.90 1317.00
OAuth2Discovery 2 3196 19 3.67 246 106.53 1598.00
ScimRealmRead 1 85 349 211 738 2.83 85.00
ScimSync 1 15 1945 1642 2470 0.50 15.00
Aggregated 45 8963 151 3.67 4103 298.77 199.18

Error Metrics

Method Name # Error
POST POST /v3/auth/tokens (password, invalid) 46 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 560 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 242 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 12 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
GET GET /SCIM/v2/:domain_id/Users/:id (sync reconcile show) 14 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users/:id (sync reconcile show)
PATCH PATCH /SCIM/v2/:domain_id/Users/:id (sync attribute drift) 8 429 Too Many Requests: PATCH /SCIM/v2/:domain_id/Users/:id (sync attribute drift)

View full report

@github-actions

Copy link
Copy Markdown

🧪 Tempest Identity Compatibility Results (advisory, non-blocking)

rust

Totals
======
Ran: 133 tests in 33.0934 sec.
 - Passed: 89
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 40
Sum of execute time for each test: 29.7488 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_domain_config_and_show_config_groups_and_options[id-9e3ff13c-f597-4f01-9377-d6c06c2a1477]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_delete_active_domain[gate,id-1f3fbff5-4e44-400d-9ca1-d953f05f609b,negative]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config_groups_and_opts[id-c7510fa2-6661-4170-9c6b-4783a80651e9]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_show_default_group_config_and_options[id-11a02bf0-6f94-4380-b3b0-c8dc18fc0d22]
tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_parent[id-6edc66f5-2941-4a17-9526-4073311c1fac]
tempest.api.identity.admin.v3.test_default_project_id.TestDefaultProjectId.test_default_project_id[id-d6110661-6a71-49a7-a453-b5e26640ff6d]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_create_is_domain_project[id-a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_create_with_parent[id-1854f9c0-70bc-4d11-a08a-1c789d339e3d]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_group[id-26021436-d5a4-4256-943c-ded01e0d4b45]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_user[id-18b70e45-7687-4b72-8277-b8f1a47d7591]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_group[id-c7a8dda2-be50-4fb4-9a9c-e830771078b1]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_user[id-4e6f0366-97c8-423c-b2be-41eae6ac91c8]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_domain[id-3acf666e-5354-42ac-8e17-8b68893bcd36]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_project_tree[id-9f02ccd9-9b57-46b4-8f77-dd5a736f3a06]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_domain_roles[id-3859df7e-5b78-4e4d-b10e-214c8953842a]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_implied_roles_create_delete[id-c8828027-df48-4021-95df-b65b92c7429e]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_domain_roles[id-eb1e1c24-1bc4-4d47-9748-e127a1852c82]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_roles_create_check_show_delete[id-c90c316c-d706-4728-bcba-eb1912081b69]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_role_create_update_show_list[id-18afc6c0-46cf-4911-824e-9989cc056c3a,smoke]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_get_available_domain_scopes[id-ec5ecb05-af64-4c04-ac86-4d9f6f12f185]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_create_and_show_consumer[id-c8307ea6-a86c-47fd-ae7b-5b3b2caca76d]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_delete_consumer[id-fdfa1b7f-2a31-4354-b2c7-f6ae20554f93]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_list_consumers[id-09ca50de-78f2-4ffb-ac71-f2254036b2b8]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_update_consumer[id-080a9b1a-c009-47c0-9979-5305bf72e3dc]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types[id-657c1970-4722-4189-8831-7325f3bc4265,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources[id-b9232f5e-d9e5-4d97-b96c-28d3db4de1bd,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_identity_v3_existence[id-79aec9ae-710f-4c54-a4fc-3aa25b4feac3]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_list_api_versions[id-721f480f-35b6-46c7-846e-047e6acea0dc,smoke]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
tempest.api.identity.v3.test_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_impersonate[id-5a0a91a4-baef-4a14-baba-59bf4d7fcace]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_noimpersonate[id-ed2a8779-a7ac-49dc-afd7-30f32f936ed2]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest.test_create_user_for_non_existent_domain[id-e75f006c-89cc-477b-874d-588e4eab4b17,negative]
===== END FAILED TESTS (target=rust) =====

View full run

@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchintegration-tests
Testbedubuntu-latest

🚨 1 Alert

BenchmarkMeasure
Units
ViewBenchmark Result
(Result Δ%)
Upper Boundary
(Limit %)
load all policiesLatency
milliseconds (ms)
📈 plot
🚷 threshold
🚨 alert (🔔)
454.52 ms
(+2.68%)Baseline: 442.66 ms
451.17 ms
(100.74%)

Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
122,680.00 ns
(-1.87%)Baseline: 125,019.52 ns
203,352.60 ns
(60.33%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
132,920.00 ns
(+1.30%)Baseline: 131,219.89 ns
199,874.46 ns
(66.50%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
131.44 ns
(+14.18%)Baseline: 115.11 ns
166.35 ns
(79.01%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
115.45 ns
(+11.82%)Baseline: 103.25 ns
145.58 ns
(79.30%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
217.08 ns
(+14.89%)Baseline: 188.95 ns
276.17 ns
(78.60%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
115.06 ns
(+11.48%)Baseline: 103.21 ns
145.47 ns
(79.10%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
172.04 ns
(+20.04%)Baseline: 143.32 ns
217.11 ns
(79.24%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
146.29 ns
(+20.46%)Baseline: 121.44 ns
182.29 ns
(80.25%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
271.06 ns
(+21.73%)Baseline: 222.66 ns
343.38 ns
(78.94%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
141.96 ns
(+17.59%)Baseline: 120.72 ns
179.46 ns
(79.10%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
128.45 ns
(+20.05%)Baseline: 107.00 ns
161.11 ns
(79.73%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
211.80 ns
(+9.34%)Baseline: 193.71 ns
297.76 ns
(71.13%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
169.69 ns
(+16.77%)Baseline: 145.32 ns
218.12 ns
(77.80%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
295.43 ns
(+30.07%)Baseline: 227.12 ns
350.59 ns
(84.27%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
3,356,500.00 ns
(-5.20%)Baseline: 3,540,720.47 ns
7,290,325.18 ns
(46.04%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
35,238.00 ns
(+7.68%)Baseline: 32,725.06 ns
50,501.33 ns
(69.78%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
339,480.00 ns
(-2.72%)Baseline: 348,967.50 ns
646,795.51 ns
(52.49%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
370,970.00 ns
(+2.34%)Baseline: 362,495.47 ns
597,082.01 ns
(62.13%)
build_snapshot/default📈 view plot
🚷 view threshold
2,108.80 ns
(+0.32%)Baseline: 2,102.07 ns
2,831.33 ns
(74.48%)
evaluate allow (identity/role/show)📈 view plot
🚷 view threshold
96,799.00 ns
(+1.21%)Baseline: 95,642.71 ns
105,909.09 ns
(91.40%)
evaluate deny (identity/role/show)📈 view plot
🚷 view threshold
12,083.00 ns
(-1.61%)Baseline: 12,280.29 ns
13,645.96 ns
(88.55%)
fernet token/project📈 view plot
🚷 view threshold
1,414.00 ns
(+12.12%)Baseline: 1,261.12 ns
1,756.67 ns
(80.49%)
get_data_keyspace📈 view plot
🚷 view threshold
0.31 ns
(+6.05%)Baseline: 0.29 ns
0.38 ns
(83.02%)
get_db📈 view plot
🚷 view threshold
0.31 ns
(+6.81%)Baseline: 0.29 ns
0.38 ns
(83.83%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
146.66 ns
(+12.17%)Baseline: 130.75 ns
181.09 ns
(80.99%)
get_keyspace📈 view plot
🚷 view threshold
4.15 ns
(-41.23%)Baseline: 7.07 ns
16.34 ns
(25.41%)
load all policies📈 view plot
🚷 view threshold
🚨 view alert (🔔)
454,520,000.00 ns
(+2.68%)Baseline: 442,664,285.71 ns
451,173,629.83 ns
(100.74%)

🐰 View full continuous benchmarking report in Bencher

@gtema
gtema added this pull request to the merge queue Nov 12, 2026
Merged via the queue into main with commit ad81956 Nov 12, 2026
43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Switch all integration tests not to use DB directly

1 participant