Skip to content

fix: Match real app-cred id field in route plugin - #1242

Merged
gtema merged 1 commit into
mainfrom
appcred-route-fixture-fix
Sep 16, 2026
Merged

gtema merged 1 commit into
mainfrom
appcred-route-fixture-fix

Conversation

@gtema

@gtema gtema commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

Reference-plugin route() and its test/doc callers looked up a
literal application_credential_id key inside the payload block.
Real clients send {"id": ..., "secret": ...} per the actual
ApplicationCredentialAuth wire shape (PR #1187) - the sibling-key
name only ever existed in this repo's own ADR prose and test
fixtures, never in real traffic, so route-mode plugins configured
to inspect application_credential would silently fall through to
Passthrough for every real request.

Renamed the lookup and every test/doc payload built to match it
(reference-plugin fixture, ADR 0025, contributor auth-plugins doc,
common.rs/create.rs test helpers, auth_plugin_auth.rs,
tests/api auth_plugin.rs) to key on id instead.

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

Reference-plugin route() and its test/doc callers looked up a
literal `application_credential_id` key inside the payload block.
Real clients send `{"id": ..., "secret": ...}` per the actual
ApplicationCredentialAuth wire shape (PR #1187) - the sibling-key
name only ever existed in this repo's own ADR prose and test
fixtures, never in real traffic, so route-mode plugins configured
to inspect application_credential would silently fall through to
Passthrough for every real request.

Renamed the lookup and every test/doc payload built to match it
(reference-plugin fixture, ADR 0025, contributor auth-plugins doc,
common.rs/create.rs test helpers, auth_plugin_auth.rs,
tests/api auth_plugin.rs) to key on `id` instead.

Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@github-actions

Copy link
Copy Markdown

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

rust

Totals
======
Ran: 133 tests in 29.2589 sec.
 - Passed: 66
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 63
Sum of execute time for each test: 25.4815 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_application_credentials.ApplicationCredentialsV3AdminTest.test_create_application_credential_with_roles[id-3b3dd48f-3388-406a-a9e6-4d078a552d0e]
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_domains.DomainsTestJSON.test_create_domain_without_description[id-2abf8764-309a-4fa9-bc58-201b799817ad]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_create_update_delete_domain[id-f2f5b44a-82e8-4dad-8084-0661ea3b18cf,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_domains.DomainsTestJSON.test_domain_delete_cascades_content[id-d8d318b7-d1b3-4c37-94c5-3c5ba0b121ea]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_list_domains_filter_by_enabled[id-3fd19840-65c1-43f8-b48c-51bdd066dff9]
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]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
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_domains_negative.DomainsNegativeTestJSON.test_create_domain_with_name_length_over_64[id-37b1bbf2-d664-4785-9a11-333438586eae,negative]
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_list_projects.ListProjectsStaticTestJSON.test_list_projects[id-1d830662-22ad-427c-8c3e-4ec854b0af44]
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_list_projects.ListProjectsTestJSON.test_list_projects_with_enabled[id-0fe7a334-675a-4509-b00e-1c4b95d5dae8]
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_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
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_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_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
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_projects.ProjectsTestJSON.test_project_get_equals_list[id-d1db68b6-aebe-4fa0-b79d-d724d2e21162]
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_list_users.UsersV3TestJSON.test_list_users_with_not_enabled[id-bff8bf2f-9408-4ef5-b63a-753c8c2124eb]
tempest.api.identity.admin.v3.test_projects_negative.ProjectsNegativeStaticTestJSON.test_create_projects_name_length_over_64[id-502b6ceb-b0c8-4422-bf53-f08fdb21e2f0,negative]
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_users.UsersV3TestJSON.test_list_user_projects[id-a831e70c-e35b-430b-92ed-81ebbc5437b8]
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_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_system[id-c888fe4f-8018-48db-b959-542225c1b4b6]
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_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
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_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
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_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
tempest.api.identity.v3.test_projects.IdentityV3ProjectsTest.test_list_projects_returns_only_authorized_projects[id-86128d46-e170-4644-866a-cc487f699e1d]
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_trust_impersonate[id-5a0a91a4-baef-4a14-baba-59bf4d7fcace]
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.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[id-8080c75c-eddc-4786-941a-c2da7039ae61]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_list_application_credentials[id-ff0cd457-6224-46e7-b79e-0ada4964a8a6]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_query_application_credentials[id-9bb5e5cc-5250-493a-8869-8b665f6aa5f6]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
===== END FAILED TESTS (target=rust) =====

View full run

@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-09-16 12:51:31 26-09-16 12:51:54 00:00:23 0 → 45
Maintaining 26-09-16 12:51:54 26-09-16 12:52:24 00:00:30 45
Decreasing 26-09-16 12:52:24 26-09-16 12:52:24 00:00:00 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 40 0 594.15 86 784 1.33 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 204.00 204 204 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 294.00 294 294 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 245.50 221 270 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 165.00 165 165 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 162.00 162 162 0.03 0.00
GET 540 0 649.66 416 896 18.00 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 1632 1632 18.10 1 907 54.40 54.40
GET GET /v3/auth/tokens (validate new) 39 0 606.77 445 784 1.30 0.00
GET GET /v3/auth/tokens (validate revoked) 41 0 553.39 22 735 1.37 0.00
GET GET /v3/projects/:id 51 0 598.63 468 778 1.70 0.00
GET GET /v3/projects/:id (catalog) 75 0 603.40 457 747 2.50 0.00
GET GET /v3/role_assignments 39 0 638.67 451 796 1.30 0.00
GET GET /v3/role_assignments?role.id 39 0 609.62 517 747 1.30 0.00
GET GET /v3/role_assignments?scope.domain.id 39 0 582.62 431 734 1.30 0.00
GET GET /v3/role_assignments?user.id 36 0 565.97 446 762 1.20 0.00
GET GET /v3/roles 102 0 600.79 390 771 3.40 0.00
GET GET /v3/roles/:id 50 0 610.18 464 776 1.67 0.00
GET GET /v3/users/:id 95 0 637.39 426 857 3.17 0.00
GET GET /v3/users/:id (catalog) 92 0 649.37 463 827 3.07 0.00
GET GET /v4/api-keys 24 0 617.67 440 772 0.80 0.00
GET GET /v4/api-keys/:client_id 24 0 648.88 504 850 0.80 0.00
GET GET /v4/mappings/rulesets 26 0 601.35 406 733 0.87 0.00
GET GET /v4/mappings/rulesets/:mapping_id 25 0 603.36 390 703 0.83 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 847 0 52.92 9 218 28.23 0.00
GET GET /v4/oauth2/:domain_id/clients 26 0 614.96 480 763 0.87 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 25 0 586.92 472 755 0.83 0.00
GET GET /v4/oauth2/:domain_id/jwks 846 0 52.76 8 211 28.20 0.00
GET GET /v4/scim_realms 16 0 592.25 411 817 0.53 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 16 0 620.56 469 726 0.53 0.00
POST POST /v3/auth/tokens 38 0 565.50 406 721 1.27 0.00
POST POST /v3/auth/tokens (password, invalid) 38 0 815.87 477 1309 1.27 0.00
POST POST /v3/auth/tokens (password, project-scoped) 54 0 1223.43 841 1843 1.80 0.00
POST POST /v3/auth/tokens (password, unscoped) 55 0 1062.62 582 1709 1.83 0.00
POST POST /v3/auth/tokens (rescope to system) 89 0 688.30 490 901 2.97 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 54 0 567.24 402 730 1.80 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 50 0 1253.78 739 2214 1.67 0.00
POST POST /v3/users (setup) 1 0 1628.00 1628 1628 0.03 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 387.00 387 387 0.03 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 16 0 695.44 496 850 0.53 0.00
Aggregated 5187 1632 265.43 1 2214 172.90 54.40

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 600 600 700 700 700 700 784 784
DELETE DELETE /v3/projects/:id (teardown) 204 204 204 204 204 204 204 204
DELETE DELETE /v3/roles/:id (teardown) 294 294 294 294 294 294 294 294
DELETE DELETE /v3/users/:id (teardown) 221 221 221 270 270 270 270 270
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 165 165 165 165 165 165 165 165
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 162 162 162 162 162 162 162 162
GET 600 700 700 700 800 800 896 896
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 7 8 10 13 18 24 480 900
GET GET /v3/auth/tokens (validate new) 600 600 600 700 700 700 784 784
GET GET /v3/auth/tokens (validate revoked) 600 600 600 600 700 700 700 700
GET GET /v3/projects/:id 600 600 600 600 700 700 700 778
GET GET /v3/projects/:id (catalog) 600 600 600 700 700 700 700 700
GET GET /v3/role_assignments 600 600 700 700 700 796 796 796
GET GET /v3/role_assignments?role.id 600 600 600 700 700 700 700 700
GET GET /v3/role_assignments?scope.domain.id 600 600 600 600 600 700 700 700
GET GET /v3/role_assignments?user.id 500 600 600 600 700 700 762 762
GET GET /v3/roles 600 600 600 700 700 700 771 771
GET GET /v3/roles/:id 600 600 600 700 700 700 776 776
GET GET /v3/users/:id 600 700 700 700 700 800 800 857
GET GET /v3/users/:id (catalog) 600 700 700 700 700 800 800 800
GET GET /v4/api-keys 600 600 600 700 700 700 772 772
GET GET /v4/api-keys/:client_id 600 700 700 700 700 700 850 850
GET GET /v4/mappings/rulesets 600 600 600 700 700 700 700 700
GET GET /v4/mappings/rulesets/:mapping_id 600 600 700 700 700 700 700 700
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 46 54 61 72 89 110 140 218
GET GET /v4/oauth2/:domain_id/clients 600 700 700 700 700 700 763 763
GET GET /v4/oauth2/:domain_id/clients/:provider_id 600 600 600 600 700 700 755 755
GET GET /v4/oauth2/:domain_id/jwks 46 54 63 74 90 110 140 210
GET GET /v4/scim_realms 600 600 600 700 700 700 800 800
GET GET /v4/scim_realms/:domain_id/:provider_id 600 600 700 700 700 700 700 700
POST POST /v3/auth/tokens 600 600 600 600 700 700 700 700
POST POST /v3/auth/tokens (password, invalid) 800 800 900 900 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, project-scoped) 1,000 1,000 1,000 1,000 1,000 1,000 1,843 1,843
POST POST /v3/auth/tokens (password, unscoped) 1,000 1,000 1,000 1,000 1,000 1,709 1,709 1,709
POST POST /v3/auth/tokens (rescope to system) 700 700 700 700 800 800 900 900
POST POST /v3/auth/tokens (rescope, invalid project) 600 600 600 600 700 700 700 700
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 2,000 2,000 2,000 2,000
POST POST /v3/users (setup) 1,628 1,628 1,628 1,628 1,628 1,628 1,628 1,628
POST POST /v4/api-keys/:client_id/revoke (teardown) 387 387 387 387 387 387 387 387
PUT PUT /v4/scim_realms/:domain_id/:provider_id 700 700 800 800 800 800 850 850
Aggregated 52 87 600 600 700 800 1,000 2,000

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 40 [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 (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 540 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 1,601 [429], 31 [401]
GET GET /v3/auth/tokens (validate new) 39 [200]
GET GET /v3/auth/tokens (validate revoked) 41 [404]
GET GET /v3/projects/:id 51 [200]
GET GET /v3/projects/:id (catalog) 75 [200]
GET GET /v3/role_assignments 39 [200]
GET GET /v3/role_assignments?role.id 39 [200]
GET GET /v3/role_assignments?scope.domain.id 39 [200]
GET GET /v3/role_assignments?user.id 36 [200]
GET GET /v3/roles 102 [200]
GET GET /v3/roles/:id 50 [200]
GET GET /v3/users/:id 95 [200]
GET GET /v3/users/:id (catalog) 92 [200]
GET GET /v4/api-keys 24 [200]
GET GET /v4/api-keys/:client_id 24 [200]
GET GET /v4/mappings/rulesets 26 [200]
GET GET /v4/mappings/rulesets/:mapping_id 25 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 847 [200]
GET GET /v4/oauth2/:domain_id/clients 26 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 25 [200]
GET GET /v4/oauth2/:domain_id/jwks 846 [200]
GET GET /v4/scim_realms 16 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 16 [200]
POST POST /v3/auth/tokens 38 [201]
POST POST /v3/auth/tokens (password, invalid) 38 [401]
POST POST /v3/auth/tokens (password, project-scoped) 54 [201]
POST POST /v3/auth/tokens (password, unscoped) 55 [201]
POST POST /v3/auth/tokens (rescope to system) 89 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 54 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 50 [201]
POST POST /v3/users (setup) 1 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 16 [200]
Aggregated 41 [404], 287 [201], 46 [204], 1,601 [429], 3,089 [200], 123 [401]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 16.00 16 16 0.03 0.00
0.1 96 0 657.83 489 890 3.20 0.00
0.2 96 0 624.92 444 859 3.20 0.00
0.3 95 0 618.25 464 776 3.17 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 41 0 2310.61 1244 2652 1.37 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 85 0 722.20 512 896 2.83 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 1 0 1628.00 1628 1628 0.03 0.00
3.2 95 0 637.43 426 857 3.17 0.00
3.3 2 0 245.50 221 270 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 51 0 598.67 468 778 1.70 0.00
4.3 1 0 204.00 204 204 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 50 0 610.22 464 776 1.67 0.00
5.3 1 0 294.00 294 294 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 102 0 600.85 390 771 3.40 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 39 0 638.67 451 796 1.30 0.00
7.2 36 0 566.08 447 762 1.20 0.00
7.3 39 0 582.62 431 734 1.30 0.00
7.4 39 0 609.74 517 747 1.30 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 94 0 656.23 450 854 3.13 0.00
8.2 92 0 649.41 463 827 3.07 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 74 0 619.97 416 788 2.47 0.00
9.2 75 0 603.45 457 747 2.50 0.00
PasswordAuth
10.0 55 0 1062.69 582 1709 1.83 0.00
10.1 54 0 1223.48 841 1843 1.80 0.00
PasswordAuthNegative
11.0 38 0 815.89 477 1309 1.27 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 89 0 688.35 490 901 2.97 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 54 0 567.33 402 731 1.80 0.00
SystemScopeAuth
14.0 50 0 1253.80 739 2214 1.67 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 24 0 648.96 504 850 0.80 0.00
15.3 24 0 617.71 440 772 0.80 0.00
15.4 1 0 387.00 387 387 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 25 0 603.36 390 703 0.83 0.00
16.3 26 0 601.35 406 733 0.87 0.00
16.4 1 0 165.00 165 165 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 25 0 586.96 472 756 0.83 0.00
17.3 26 0 615.00 480 763 0.87 0.00
17.4 1 0 162.00 162 162 0.03 0.00
OAuth2Discovery
18.0 846 0 52.79 8 211 28.20 0.00
18.1 847 0 52.95 10 218 28.23 0.00
ScimRealmRead
19.0 0 0 0.00 0 0 0.00 0.00
19.1 16 0 620.56 469 726 0.53 0.00
19.2 16 0 592.31 411 817 0.53 0.00
19.3 16 0 695.44 496 850 0.53 0.00
ScimSync
20.0 0 0 0.00 0 0 0.00 0.00
20.1 0 0 0.00 0 0 0.00 0.00
20.2 0 0 0.00 0 0 0.00 0.00
20.3 1632 0 18.11 1 907 54.40 0.00
20.4 1631 0 0.00 0 0 54.37 0.00
20.5 1631 0 0.00 0 0 54.37 0.00
20.6 1 0 0.00 0 0 0.03 0.00
Aggregated 8334 0 165.20 1 2652 277.80 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 6 94 1891.86 1556 2287 3.13 15.67
TokenLifecycle 3 38 2351.39 1994 2652 1.27 12.67
ValidateToken 2 83 726.61 554 896 2.77 41.50
UserCRUD 2 93 636.91 426 857 3.10 46.50
ProjectCRUD 1 50 599.12 468 778 1.67 50.00
RoleCRUD 1 49 608.92 464 776 1.63 49.00
RoleList 2 100 605.01 437 771 3.33 50.00
RoleAssignmentList 3 39 2394.31 2055 2645 1.30 13.00
UserRead 4 91 1305.96 1084 1585 3.03 22.75
ProjectRead 3 74 1219.89 953 1421 2.47 24.67
PasswordAuth 4 53 2309.62 1779 3130 1.77 13.25
PasswordAuthNegative 1 37 823.46 477 1309 1.23 37.00
Rescope 2 87 689.06 490 901 2.90 43.50
RescopeNegative 1 53 568.60 402 731 1.77 53.00
SystemScopeAuth 2 48 1249.96 739 2214 1.60 24.00
ApiKeyCRUD 1 24 1262.79 1032 1490 0.80 24.00
MappingCRUD 1 25 1211.68 1047 1342 0.83 25.00
OAuth2ClientCRUD 1 25 1206.92 968 1410 0.83 25.00
OAuth2Discovery 3 846 106.21 24 340 28.20 282.00
ScimRealmRead 1 15 1894.87 1566 2136 0.50 15.00
ScimSync 1 1631 17.87 1 907 54.37 1631.00
Aggregated 45 3555 379.94 1 3130 118.50 2498.50

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 49 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) 88 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 138 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 140 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 1703 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@gtema
gtema added this pull request to the merge queue Sep 16, 2026
@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchappcred-route-fixture-fix
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
125,560.00 ns
(-50.59%)Baseline: 254,109.69 ns
1,308,077.51 ns
(9.60%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
134,770.00 ns
(-67.40%)Baseline: 413,374.53 ns
3,206,573.02 ns
(4.20%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
124.41 ns
(+5.76%)Baseline: 117.63 ns
155.08 ns
(80.22%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
110.11 ns
(+4.92%)Baseline: 104.94 ns
137.50 ns
(80.08%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
198.82 ns
(+4.16%)Baseline: 190.88 ns
245.85 ns
(80.87%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
109.20 ns
(+4.10%)Baseline: 104.90 ns
137.85 ns
(79.21%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
195.46 ns
(+4.17%)Baseline: 187.64 ns
271.95 ns
(71.87%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
168.34 ns
(+7.48%)Baseline: 156.63 ns
221.38 ns
(76.04%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
286.59 ns
(+8.13%)Baseline: 265.05 ns
366.32 ns
(78.24%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
169.76 ns
(+10.30%)Baseline: 153.91 ns
215.29 ns
(78.85%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
117.72 ns
(+5.61%)Baseline: 111.47 ns
149.85 ns
(78.56%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
197.36 ns
(-0.83%)Baseline: 199.00 ns
266.09 ns
(74.17%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
200.30 ns
(+2.25%)Baseline: 195.89 ns
284.67 ns
(70.36%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
300.59 ns
(+9.81%)Baseline: 273.74 ns
381.83 ns
(78.72%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
2,603,500.00 ns
(-17.68%)Baseline: 3,162,524.05 ns
7,998,754.29 ns
(32.55%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
42,429.00 ns
(+13.11%)Baseline: 37,512.42 ns
52,294.33 ns
(81.13%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
360,530.00 ns
(-68.58%)Baseline: 1,147,283.91 ns
11,473,119.66 ns
(3.14%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
380,820.00 ns
(-60.00%)Baseline: 951,943.12 ns
7,533,582.48 ns
(5.05%)
build_snapshot/default📈 view plot
🚷 view threshold
110,920.00 ns
(-8.89%)Baseline: 121,748.92 ns
266,673.76 ns
(41.59%)
fernet token/project📈 view plot
🚷 view threshold
1,446.00 ns
(+1.76%)Baseline: 1,421.01 ns
1,820.85 ns
(79.41%)
get_data_keyspace📈 view plot
🚷 view threshold
0.31 ns
(-0.71%)Baseline: 0.31 ns
0.39 ns
(80.19%)
get_db📈 view plot
🚷 view threshold
0.31 ns
(-0.94%)Baseline: 0.31 ns
0.39 ns
(79.96%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
144.34 ns
(+3.26%)Baseline: 139.78 ns
181.81 ns
(79.39%)
get_keyspace📈 view plot
🚷 view threshold
4.51 ns
(-20.34%)Baseline: 5.66 ns
12.38 ns
(36.41%)
🐰 View full continuous benchmarking report in Bencher

Merged via the queue into main with commit 0641131 Sep 16, 2026
36 checks passed
@gtema
gtema deleted the appcred-route-fixture-fix branch September 17, 2026 10:53
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