Skip to content

feat(oauth2): Add per-domain DPoP settings - #1579

Merged
gtema merged 1 commit into
mainfrom
dpop
Oct 21, 2026
Merged

gtema merged 1 commit into
mainfrom
dpop

Conversation

@gtema

@gtema gtema commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

Store the DPoP enforcement mode of a domain in a settings record
keyed by domain, with get, update and delete on the OAuth2 client
backend and provider, as described in ADR 0043 section 1.

A domain without a record uses the defaults, so nothing has to be
created or migrated. An update that changes nothing is not written.

The record is created and removed with revision-guarded mutations,
so concurrent changes surface as a conflict instead of a lost
update. Updates are audited and only accepted for existing domains,
and a hook removes the record when its domain is deleted.

Assisted-by: Claude noreply@anthropic.com
Signed-off-by: Artem Goncharov artem.goncharov@gmail.com

Store the DPoP enforcement mode of a domain in a settings record
keyed by domain, with get, update and delete on the OAuth2 client
backend and provider, as described in ADR 0043 section 1.

A domain without a record uses the defaults, so nothing has to be
created or migrated. An update that changes nothing is not written.

The record is created and removed with revision-guarded mutations,
so concurrent changes surface as a conflict instead of a lost
update. Updates are audited and only accepted for existing domains,
and a hook removes the record when its domain is deleted.

Assisted-by: Claude <noreply@anthropic.com>
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@gtema
gtema enabled auto-merge October 21, 2026 18:24
@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchdpop
Testbedubuntu-latest
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
117,540.00 ns
(-13.71%)Baseline: 136,222.50 ns
261,882.76 ns
(44.88%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
118,910.00 ns
(-15.79%)Baseline: 141,214.80 ns
246,977.63 ns
(48.15%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
77.35 ns
(-33.08%)Baseline: 115.59 ns
164.73 ns
(46.95%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
72.52 ns
(-30.20%)Baseline: 103.89 ns
144.94 ns
(50.04%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
130.47 ns
(-30.17%)Baseline: 186.83 ns
271.10 ns
(48.13%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
71.98 ns
(-31.00%)Baseline: 104.31 ns
146.84 ns
(49.02%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
96.02 ns
(-34.18%)Baseline: 145.88 ns
216.96 ns
(44.26%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
82.95 ns
(-32.91%)Baseline: 123.63 ns
182.83 ns
(45.37%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
153.89 ns
(-31.86%)Baseline: 225.84 ns
345.29 ns
(44.57%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
80.58 ns
(-34.50%)Baseline: 123.02 ns
180.55 ns
(44.63%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
65.61 ns
(-39.02%)Baseline: 107.59 ns
159.74 ns
(41.07%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
123.95 ns
(-36.00%)Baseline: 193.67 ns
294.70 ns
(42.06%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
104.47 ns
(-29.44%)Baseline: 148.05 ns
218.06 ns
(47.91%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
139.72 ns
(-39.20%)Baseline: 229.79 ns
350.31 ns
(39.89%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
2,743,300.00 ns
(-24.28%)Baseline: 3,622,812.66 ns
8,719,270.53 ns
(31.46%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
20,605.00 ns
(-40.20%)Baseline: 34,458.30 ns
52,560.25 ns
(39.20%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
284,340.00 ns
(-19.81%)Baseline: 354,596.09 ns
597,099.26 ns
(47.62%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
287,640.00 ns
(-26.32%)Baseline: 390,384.69 ns
769,990.69 ns
(37.36%)
build_snapshot/default📈 view plot
🚷 view threshold
1,787.50 ns
(-13.47%)Baseline: 2,065.74 ns
2,769.52 ns
(64.54%)
fernet token/project📈 view plot
🚷 view threshold
885.88 ns
(-30.36%)Baseline: 1,272.02 ns
1,752.75 ns
(50.54%)
get_data_keyspace📈 view plot
🚷 view threshold
0.24 ns
(-19.24%)Baseline: 0.29 ns
0.38 ns
(62.77%)
get_db📈 view plot
🚷 view threshold
0.23 ns
(-20.34%)Baseline: 0.29 ns
0.38 ns
(62.08%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
97.29 ns
(-26.00%)Baseline: 131.47 ns
182.96 ns
(53.17%)
get_keyspace📈 view plot
🚷 view threshold
9.55 ns
(+49.39%)Baseline: 6.39 ns
15.03 ns
(63.52%)
🐰 View full continuous benchmarking report in Bencher

@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-10-21 19:24:22 26-10-21 19:24:45 00:00:23 0 → 45
Maintaining 26-10-21 19:24:45 26-10-21 19:25:15 00:00:30 45
Decreasing 26-10-21 19:25:15 26-10-21 19:25:16 00:00:01 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 80 0 301.36 69 573 2.67 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 117.00 117 117 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 135.00 135 135 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 78.50 76 81 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 0 202.00 202 202 0.03 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 90.00 90 90 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 0 34.00 34 34 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 117.00 117 117 0.03 0.00
GET 902 0 323.58 147 536 30.07 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 51 31 190.59 1 591 1.70 1.03
GET GET /v3/auth/tokens (validate new) 79 0 295.78 124 422 2.63 0.00
GET GET /v3/auth/tokens (validate revoked) 80 0 270.02 53 417 2.67 0.00
GET GET /v3/projects/:id 100 0 301.56 164 460 3.33 0.00
GET GET /v3/projects/:id (catalog) 150 0 296.25 182 458 5.00 0.00
GET GET /v3/role_assignments 77 0 314.31 200 419 2.57 0.00
GET GET /v3/role_assignments?role.id 77 0 290.95 177 461 2.57 0.00
GET GET /v3/role_assignments?scope.domain.id 77 0 290.96 183 410 2.57 0.00
GET GET /v3/role_assignments?user.id 77 0 278.30 176 402 2.57 0.00
GET GET /v3/roles 202 0 299.47 182 473 6.73 0.00
GET GET /v3/roles/:id 102 0 295.24 183 461 3.40 0.00
GET GET /v3/users/:id 193 0 313.26 179 444 6.43 0.00
GET GET /v3/users/:id (catalog) 187 0 306.53 158 450 6.23 0.00
GET GET /v4/api-keys 53 0 284.36 195 428 1.77 0.00
GET GET /v4/api-keys/:client_id 54 0 279.19 195 385 1.80 0.00
GET GET /v4/mappings/rulesets 54 0 280.41 200 393 1.80 0.00
GET GET /v4/mappings/rulesets/:mapping_id 54 0 278.24 178 397 1.80 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 3319 0 13.07 2 119 110.63 0.00
GET GET /v4/oauth2/:domain_id/clients 54 0 280.74 180 389 1.80 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 54 0 278.83 203 391 1.80 0.00
GET GET /v4/oauth2/:domain_id/jwks 3319 0 13.05 1 122 110.63 0.00
GET GET /v4/scim_realms 35 0 270.29 186 423 1.17 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 35 0 280.37 178 391 1.17 0.00
POST POST /v3/auth/tokens 78 0 280.81 190 416 2.60 0.00
POST POST /v3/auth/tokens (password, invalid) 47 0 646.96 354 1108 1.57 0.00
POST POST /v3/auth/tokens (password, project-scoped) 91 0 731.33 395 1240 3.03 0.00
POST POST /v3/auth/tokens (password, unscoped) 93 0 608.23 335 1004 3.10 0.00
POST POST /v3/auth/tokens (rescope to system) 181 0 335.27 207 499 6.03 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 107 0 281.11 182 408 3.57 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 83 0 743.90 459 1153 2.77 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 110.00 110 110 0.03 0.00
POST POST /v4/oauth2/:domain_id/device_authorization 918 0 32.24 9 184 30.60 0.00
POST POST /v4/oauth2/:domain_id/token (client_credentials) 14 0 448.07 224 843 0.47 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 35 0 316.23 198 487 1.17 0.00
Aggregated 11121 31 118.37 1 1240 370.70 1.03

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 /v3/auth/tokens 290 310 320 360 380 390 410 573
DELETE DELETE /v3/projects/:id (teardown) 117 117 117 117 117 117 117 117
DELETE DELETE /v3/roles/:id (teardown) 135 135 135 135 135 135 135 135
DELETE DELETE /v3/users/:id (teardown) 76 76 76 81 81 81 81 81
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 202 202 202 202 202 202 202 202
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 90 90 90 90 90 90 90 90
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 34 34 34 34 34 34 34 34
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 117 117 117 117 117 117 117 117
GET 320 330 350 380 410 420 470 500
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 150 240 320 390 450 460 490 591
GET GET /v3/auth/tokens (validate new) 290 300 320 340 370 400 410 420
GET GET /v3/auth/tokens (validate revoked) 260 280 290 310 360 370 410 417
GET GET /v3/projects/:id 290 300 330 350 380 410 440 460
GET GET /v3/projects/:id (catalog) 290 310 320 330 380 390 440 458
GET GET /v3/role_assignments 310 320 340 370 390 400 410 419
GET GET /v3/role_assignments?role.id 290 290 310 340 370 390 410 460
GET GET /v3/role_assignments?scope.domain.id 280 300 320 340 370 380 400 410
GET GET /v3/role_assignments?user.id 270 280 310 320 350 370 400 400
GET GET /v3/roles 290 310 320 350 380 400 440 470
GET GET /v3/roles/:id 290 300 320 350 370 380 420 460
GET GET /v3/users/:id 310 320 340 360 400 410 430 440
GET GET /v3/users/:id (catalog) 310 320 330 350 370 400 430 450
GET GET /v4/api-keys 280 290 310 310 350 370 420 428
GET GET /v4/api-keys/:client_id 280 290 310 330 350 360 380 385
GET GET /v4/mappings/rulesets 270 290 300 310 350 360 390 390
GET GET /v4/mappings/rulesets/:mapping_id 270 280 290 330 350 380 397 397
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 11 12 15 18 23 29 49 119
GET GET /v4/oauth2/:domain_id/clients 270 280 310 310 350 360 389 389
GET GET /v4/oauth2/:domain_id/clients/:provider_id 270 270 300 300 340 350 390 390
GET GET /v4/oauth2/:domain_id/jwks 11 12 15 18 23 29 48 120
GET GET /v4/scim_realms 260 270 290 300 330 340 420 420
GET GET /v4/scim_realms/:domain_id/:provider_id 280 290 300 310 350 370 390 390
POST POST /v3/auth/tokens 270 290 300 320 350 370 410 416
POST POST /v3/auth/tokens (password, invalid) 600 700 700 800 900 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, project-scoped) 700 700 800 800 900 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, unscoped) 600 600 700 700 800 800 900 1,000
POST POST /v3/auth/tokens (rescope to system) 330 340 360 380 410 420 480 499
POST POST /v3/auth/tokens (rescope, invalid project) 280 290 300 320 350 380 380 408
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 700 800 800 900 900 1,000 1,000 1,000
POST POST /v4/api-keys/:client_id/revoke (teardown) 110 110 110 110 110 110 110 110
POST POST /v4/oauth2/:domain_id/device_authorization 28 32 36 41 51 60 92 180
POST POST /v4/oauth2/:domain_id/token (client_credentials) 410 410 500 500 800 800 800 800
PUT PUT /v4/scim_realms/:domain_id/:provider_id 300 320 330 360 380 400 487 487
Aggregated 18 27 220 290 350 400 700 1,000

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 80 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [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 902 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 31 [401], 20 [429]
GET GET /v3/auth/tokens (validate new) 79 [200]
GET GET /v3/auth/tokens (validate revoked) 80 [404]
GET GET /v3/projects/:id 100 [200]
GET GET /v3/projects/:id (catalog) 150 [200]
GET GET /v3/role_assignments 77 [200]
GET GET /v3/role_assignments?role.id 77 [200]
GET GET /v3/role_assignments?scope.domain.id 77 [200]
GET GET /v3/role_assignments?user.id 77 [200]
GET GET /v3/roles 202 [200]
GET GET /v3/roles/:id 102 [200]
GET GET /v3/users/:id 193 [200]
GET GET /v3/users/:id (catalog) 187 [200]
GET GET /v4/api-keys 53 [200]
GET GET /v4/api-keys/:client_id 54 [200]
GET GET /v4/mappings/rulesets 54 [200]
GET GET /v4/mappings/rulesets/:mapping_id 54 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 3,319 [200]
GET GET /v4/oauth2/:domain_id/clients 54 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 54 [200]
GET GET /v4/oauth2/:domain_id/jwks 3,319 [200]
GET GET /v4/scim_realms 35 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 35 [200]
POST POST /v3/auth/tokens 78 [201]
POST POST /v3/auth/tokens (password, invalid) 47 [401]
POST POST /v3/auth/tokens (password, project-scoped) 91 [201]
POST POST /v3/auth/tokens (password, unscoped) 93 [201]
POST POST /v3/auth/tokens (rescope to system) 181 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 107 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 83 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
POST POST /v4/oauth2/:domain_id/device_authorization 918 [200]
POST POST /v4/oauth2/:domain_id/token (client_credentials) 14 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 35 [200]
Aggregated 88 [204], 10,222 [200], 185 [401], 80 [404], 526 [201], 20 [429]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 10.00 10 10 0.03 0.00
0.1 130 0 328.77 198 517 4.33 0.00
0.2 130 0 301.97 190 421 4.33 0.00
0.3 130 0 301.00 208 440 4.33 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 80 0 1150.11 603 1428 2.67 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 170 0 357.34 206 536 5.67 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 0 0 0.00 0 0 0.00 0.00
3.2 193 0 313.33 179 444 6.43 0.00
3.3 2 0 78.50 76 81 0.07 0.00
ProjectCRUD
4.0 0 0 0.00 0 0 0.00 0.00
4.1 0 0 0.00 0 0 0.00 0.00
4.2 100 0 301.60 164 460 3.33 0.00
4.3 1 0 117.00 117 117 0.03 0.00
RoleCRUD
5.0 0 0 0.00 0 0 0.00 0.00
5.1 0 0 0.00 0 0 0.00 0.00
5.2 102 0 295.29 183 461 3.40 0.00
5.3 1 0 135.00 135 135 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 202 0 299.49 182 473 6.73 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 77 0 314.35 200 419 2.57 0.00
7.2 77 0 278.36 176 402 2.57 0.00
7.3 77 0 290.97 183 410 2.57 0.00
7.4 77 0 290.99 177 461 2.57 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 191 0 334.58 231 473 6.37 0.00
8.2 187 0 306.60 158 450 6.23 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 151 0 305.46 147 471 5.03 0.00
9.2 150 0 296.29 182 458 5.00 0.00
PasswordAuth
10.0 93 0 608.29 335 1004 3.10 0.00
10.1 91 0 731.36 396 1240 3.03 0.00
PasswordAuthNegative
11.0 47 0 646.98 354 1108 1.57 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 181 0 335.30 207 499 6.03 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 107 0 281.14 182 408 3.57 0.00
SystemScopeAuth
14.0 83 0 743.95 459 1153 2.77 0.00
ApiKeyCRUD
15.0 0 0 0.00 0 0 0.00 0.00
15.1 0 0 0.00 0 0 0.00 0.00
15.2 54 0 279.19 195 385 1.80 0.00
15.3 53 0 284.36 195 428 1.77 0.00
15.4 1 0 110.00 110 110 0.03 0.00
MappingCRUD
16.0 0 0 0.00 0 0 0.00 0.00
16.1 0 0 0.00 0 0 0.00 0.00
16.2 54 0 278.30 178 397 1.80 0.00
16.3 54 0 280.43 200 393 1.80 0.00
16.4 1 0 91.00 91 91 0.03 0.00
OAuth2ClientCRUD
17.0 0 0 0.00 0 0 0.00 0.00
17.1 0 0 0.00 0 0 0.00 0.00
17.2 54 0 278.85 203 391 1.80 0.00
17.3 54 0 280.80 180 389 1.80 0.00
17.4 1 0 117.00 117 117 0.03 0.00
OAuth2ClientCredentials
18.0 0 0 0.00 0 0 0.00 0.00
18.1 0 0 0.00 0 0 0.00 0.00
18.2 14 0 448.07 224 843 0.47 0.00
18.3 1 0 237.00 237 237 0.03 0.00
OAuth2DeviceAuthorization
19.0 918 0 32.28 9 184 30.60 0.00
OAuth2Discovery
20.0 3319 0 13.08 1 122 110.63 0.00
20.1 3319 0 13.11 2 119 110.63 0.00
ScimRealmRead
21.0 0 0 0.00 0 0 0.00 0.00
21.1 35 0 280.37 178 391 1.17 0.00
21.2 35 0 270.34 186 423 1.17 0.00
21.3 35 0 316.26 198 487 1.17 0.00
ScimSync
22.0 0 0 0.00 0 0 0.00 0.00
22.1 0 0 0.00 0 0 0.00 0.00
22.2 0 0 0.00 0 0 0.00 0.00
22.3 52 0 591.33 124 1086 1.73 0.00
22.4 51 0 0.00 0 0 1.70 0.00
22.5 51 0 0.00 0 0 1.70 0.00
22.6 1 0 0.00 0 0 0.03 0.00
Aggregated 10988 0 119.81 1 1428 366.27 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 4 129 932.98 760 1146 4.30 32.25
TokenLifecycle 3 77 1158.78 932 1428 2.57 25.67
ValidateToken 2 168 357.15 206 536 5.60 84.00
UserCRUD 2 191 313.95 179 444 6.37 95.50
ProjectCRUD 1 99 301.42 164 460 3.30 99.00
RoleCRUD 1 101 294.61 183 461 3.37 101.00
RoleList 2 200 299.68 182 473 6.67 100.00
RoleAssignmentList 3 77 1175.78 941 1416 2.57 25.67
UserRead 4 187 642.41 446 885 6.23 46.75
ProjectRead 3 150 602.66 465 808 5.00 50.00
PasswordAuth 4 90 1348.06 855 1838 3.00 22.50
PasswordAuthNegative 1 46 648.65 354 1108 1.53 46.00
Rescope 2 179 334.96 207 499 5.97 89.50
RescopeNegative 1 106 280.42 182 408 3.53 106.00
SystemScopeAuth 2 81 744.89 459 1153 2.70 40.50
ApiKeyCRUD 1 53 564.98 425 762 1.77 53.00
MappingCRUD 1 54 560.19 459 785 1.80 54.00
OAuth2ClientCRUD 1 53 560.45 452 729 1.77 53.00
OAuth2ClientCredentials 1 14 2090.21 1385 2694 0.47 14.00
OAuth2DeviceAuthorization 1 917 32.29 9 184 30.57 917.00
OAuth2Discovery 3 3318 26.69 4 151 110.60 1106.00
ScimRealmRead 1 35 868.09 738 1083 1.17 35.00
ScimSync 1 51 599.98 124 1086 1.70 51.00
Aggregated 45 6376 211.67 4 2694 212.53 3247.33

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 50 401 Unauthorized: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
POST POST /SCIM/v2/:domain_id/Users (sync provision) 1 401 Unauthorized: POST /SCIM/v2/:domain_id/Users (sync provision)
POST POST /v3/auth/tokens (password, invalid) 114 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 270 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 298 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 54 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

Copy link
Copy Markdown

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

rust

Totals
======
Ran: 133 tests in 25.4536 sec.
 - Passed: 83
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 46
Sum of execute time for each test: 22.5447 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
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_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
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_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_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_groups.GroupsV3TestJSON.test_group_users_add_list_delete[id-1598521a-2f36-4606-8df9-30772bd51339,smoke]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
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_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.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_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
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.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.admin.v3.test_projects.ProjectsTestJSON.test_create_is_domain_project[id-a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5]
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_grant_list_revoke_role_to_group_on_domain[id-4bf8a70b-e785-413a-ad53-9f91ce02faa7]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_project[id-cbf11737-1904-4690-9613-97bcbb3df1c4]
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_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_user_on_domain[id-6c9a2940-3625-43a3-ac02-5dcec62ef3bd]
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.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_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
tempest.api.identity.v3.test_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest.test_create_user_for_non_existent_domain[id-e75f006c-89cc-477b-874d-588e4eab4b17,negative]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
===== END FAILED TESTS (target=rust) =====

View full run

@gtema
gtema added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit b9dd65e Oct 21, 2026
42 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.

1 participant