Skip to content

feat(testing): expand Locust load test coverage to 113 endpoints#2610

Merged
crivetimihai merged 5 commits intomainfrom
locust-improvements
Jan 31, 2026
Merged

feat(testing): expand Locust load test coverage to 113 endpoints#2610
crivetimihai merged 5 commits intomainfrom
locust-improvements

Conversation

@crivetimihai
Copy link
Copy Markdown
Member

Summary

Expands Locust load test coverage from ~50 endpoints to 113 unique endpoints across 6 batches of new user classes.

New User Classes Added

Batch User Classes Endpoints
1 VersionMetaUser, ExportImportUser, A2AFullCRUDUser ~12
2 ResourcesExtendedUser, ServerExtendedUser ~4
3 TokensUser, RBACUser ~5
4 AuthUser, OAuthUser ~4
5 LogSearchUser, MetricsUser, ObservabilityUser ~10
6 LLMUser, ReverseProxyUser ~5

Endpoints Covered

  • Version/Health: /version, /health/security
  • Export/Import: /export, /import/status, /import/cleanup
  • A2A Agents: Full CRUD cycle with cleanup
  • Resources: /resources/templates/list, /resources/{id}/info
  • Servers: /servers/{id}/prompts
  • Tokens: /tokens listing
  • RBAC: /rbac/roles, /rbac/my/roles, /rbac/my/permissions, /rbac/permissions/available
  • Auth: /auth/email/events, /auth/email/admin/events, /auth/email/admin/users
  • OAuth: /oauth/registered-clients
  • Logs: /api/logs/security-events, /api/logs/audit-trails, /api/logs/performance-metrics
  • Metrics: /metrics, /api/metrics/stats, /api/metrics/config, /metrics/prometheus
  • Observability: /admin/observability/tools/usage, /admin/observability/tools/performance, /admin/observability/metrics/top-volume
  • LLM: /llm/gateway/models, /llmchat/gateway/models, /admin/llm/provider-configs, /admin/llm/provider-defaults
  • Reverse Proxy: /reverse-proxy/sessions

Bugs Discovered

Load Test Results

Under 4000 concurrent users:

  • 113 unique endpoints tested
  • 0.05% failure rate (all 502s under load)
  • 1,760 RPS sustained
  • All new endpoints verified with 0 failures

Future Work

Tracked in #2609 for achieving 100% coverage:

  • Fix application bugs blocking teams/tags/export endpoints
  • Add CRUD cycles for tools, resources, prompts, servers
  • Mock MCP servers for gateway testing
  • SSE/streaming endpoint support

Test Plan

  • Verified all 6 batches under load (4000 users)
  • Confirmed 0 failures on new endpoints
  • Syntax validation passed
  • All user classes have descriptive docstrings

Closes #2609

…I coverage

Add new Locust user classes to improve API endpoint coverage:

Batch 1 - High Priority:
- VersionMetaUser: /version, /health/security
- ExportImportUser: /export, /import/status, /import/cleanup
- A2AFullCRUDUser: A2A agent CRUD operations

Batch 2 - Extended APIs:
- ResourcesExtendedUser: /resources/templates/list, /resources/[id]/info
- ServerExtendedUser: /servers/[id]/prompts

Removed (caused instability):
- GatewayFullCRUDUser: Gateway CRUD triggers slow MCP network calls
- TagsExtendedUser: App bug with json_extract on PostgreSQL (#2607)
- AdvancedProtocolUser: Complex payload validation issues

Disabled (app bug):
- /export/selective: Server object missing is_active attribute (#2606)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Add TokensUser and RBACUser classes for improved API coverage:
- TokensUser: GET /tokens endpoint for token listing
- RBACUser: GET /rbac/roles, /rbac/my/roles, /rbac/my/permissions,
  /rbac/permissions/available endpoints

TeamsUser was removed due to app bug #2608 (current_user_ctx["db"]
returns None causing 500 errors on /teams endpoint).

Closes #2608

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Add authentication and OAuth user classes for improved API coverage:
- AuthUser: GET /auth/email/events, /auth/email/admin/events,
  /auth/email/admin/users endpoints
- OAuthUser: GET /oauth/registered-clients endpoint

SSO endpoints were not added as they return 404 (not available).
Write operations (login, register) were skipped intentionally.

Total unique endpoints now tested: 99

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
…ricsUser, ObservabilityUser)

Add logging, metrics, and observability user classes for improved API coverage:
- LogSearchUser: GET /api/logs/security-events, /api/logs/audit-trails,
  /api/logs/performance-metrics endpoints
- MetricsUser: GET /metrics, /api/metrics/stats, /api/metrics/config,
  /metrics/prometheus endpoints
- ObservabilityUser: GET /admin/observability/tools/usage,
  /admin/observability/tools/performance,
  /admin/observability/metrics/top-volume endpoints

Total unique endpoints now tested: 108

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
…oxyUser)

Add LLM and reverse proxy user classes for final API coverage:
- LLMUser: GET /llm/gateway/models, /llmchat/gateway/models,
  /admin/llm/provider-configs, /admin/llm/provider-defaults endpoints
- ReverseProxyUser: GET /reverse-proxy/sessions endpoint

Toolops and well-known endpoints were not added (404 - not available).
Cancellation endpoints skipped (require valid request IDs).

Total unique endpoints now tested: 113
All 6 batches complete.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
@crivetimihai crivetimihai self-assigned this Jan 31, 2026
@crivetimihai crivetimihai merged commit 8913b1a into main Jan 31, 2026
35 checks passed
@crivetimihai crivetimihai deleted the locust-improvements branch January 31, 2026 15:09
@crivetimihai crivetimihai added this to the Release 1.0.0-RC1 milestone Jan 31, 2026
hughhennelly pushed a commit to hughhennelly/mcp-context-forge that referenced this pull request Feb 8, 2026
…#2610)

* feat(testing): add Batch 1 & 2 load test user classes for extended API coverage

Add new Locust user classes to improve API endpoint coverage:

Batch 1 - High Priority:
- VersionMetaUser: /version, /health/security
- ExportImportUser: /export, /import/status, /import/cleanup
- A2AFullCRUDUser: A2A agent CRUD operations

Batch 2 - Extended APIs:
- ResourcesExtendedUser: /resources/templates/list, /resources/[id]/info
- ServerExtendedUser: /servers/[id]/prompts

Removed (caused instability):
- GatewayFullCRUDUser: Gateway CRUD triggers slow MCP network calls
- TagsExtendedUser: App bug with json_extract on PostgreSQL (IBM#2607)
- AdvancedProtocolUser: Complex payload validation issues

Disabled (app bug):
- /export/selective: Server object missing is_active attribute (IBM#2606)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 3 load test user classes (TokensUser, RBACUser)

Add TokensUser and RBACUser classes for improved API coverage:
- TokensUser: GET /tokens endpoint for token listing
- RBACUser: GET /rbac/roles, /rbac/my/roles, /rbac/my/permissions,
  /rbac/permissions/available endpoints

TeamsUser was removed due to app bug IBM#2608 (current_user_ctx["db"]
returns None causing 500 errors on /teams endpoint).

Closes IBM#2608

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 4 load test user classes (AuthUser, OAuthUser)

Add authentication and OAuth user classes for improved API coverage:
- AuthUser: GET /auth/email/events, /auth/email/admin/events,
  /auth/email/admin/users endpoints
- OAuthUser: GET /oauth/registered-clients endpoint

SSO endpoints were not added as they return 404 (not available).
Write operations (login, register) were skipped intentionally.

Total unique endpoints now tested: 99

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 5 load test user classes (LogSearchUser, MetricsUser, ObservabilityUser)

Add logging, metrics, and observability user classes for improved API coverage:
- LogSearchUser: GET /api/logs/security-events, /api/logs/audit-trails,
  /api/logs/performance-metrics endpoints
- MetricsUser: GET /metrics, /api/metrics/stats, /api/metrics/config,
  /metrics/prometheus endpoints
- ObservabilityUser: GET /admin/observability/tools/usage,
  /admin/observability/tools/performance,
  /admin/observability/metrics/top-volume endpoints

Total unique endpoints now tested: 108

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 6 load test user classes (LLMUser, ReverseProxyUser)

Add LLM and reverse proxy user classes for final API coverage:
- LLMUser: GET /llm/gateway/models, /llmchat/gateway/models,
  /admin/llm/provider-configs, /admin/llm/provider-defaults endpoints
- ReverseProxyUser: GET /reverse-proxy/sessions endpoint

Toolops and well-known endpoints were not added (404 - not available).
Cancellation endpoints skipped (require valid request IDs).

Total unique endpoints now tested: 113
All 6 batches complete.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: hughhennnelly <hughhennelly06@gmail.com>
kcostell06 pushed a commit to kcostell06/mcp-context-forge that referenced this pull request Feb 24, 2026
…#2610)

* feat(testing): add Batch 1 & 2 load test user classes for extended API coverage

Add new Locust user classes to improve API endpoint coverage:

Batch 1 - High Priority:
- VersionMetaUser: /version, /health/security
- ExportImportUser: /export, /import/status, /import/cleanup
- A2AFullCRUDUser: A2A agent CRUD operations

Batch 2 - Extended APIs:
- ResourcesExtendedUser: /resources/templates/list, /resources/[id]/info
- ServerExtendedUser: /servers/[id]/prompts

Removed (caused instability):
- GatewayFullCRUDUser: Gateway CRUD triggers slow MCP network calls
- TagsExtendedUser: App bug with json_extract on PostgreSQL (IBM#2607)
- AdvancedProtocolUser: Complex payload validation issues

Disabled (app bug):
- /export/selective: Server object missing is_active attribute (IBM#2606)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 3 load test user classes (TokensUser, RBACUser)

Add TokensUser and RBACUser classes for improved API coverage:
- TokensUser: GET /tokens endpoint for token listing
- RBACUser: GET /rbac/roles, /rbac/my/roles, /rbac/my/permissions,
  /rbac/permissions/available endpoints

TeamsUser was removed due to app bug IBM#2608 (current_user_ctx["db"]
returns None causing 500 errors on /teams endpoint).

Closes IBM#2608

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 4 load test user classes (AuthUser, OAuthUser)

Add authentication and OAuth user classes for improved API coverage:
- AuthUser: GET /auth/email/events, /auth/email/admin/events,
  /auth/email/admin/users endpoints
- OAuthUser: GET /oauth/registered-clients endpoint

SSO endpoints were not added as they return 404 (not available).
Write operations (login, register) were skipped intentionally.

Total unique endpoints now tested: 99

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 5 load test user classes (LogSearchUser, MetricsUser, ObservabilityUser)

Add logging, metrics, and observability user classes for improved API coverage:
- LogSearchUser: GET /api/logs/security-events, /api/logs/audit-trails,
  /api/logs/performance-metrics endpoints
- MetricsUser: GET /metrics, /api/metrics/stats, /api/metrics/config,
  /metrics/prometheus endpoints
- ObservabilityUser: GET /admin/observability/tools/usage,
  /admin/observability/tools/performance,
  /admin/observability/metrics/top-volume endpoints

Total unique endpoints now tested: 108

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 6 load test user classes (LLMUser, ReverseProxyUser)

Add LLM and reverse proxy user classes for final API coverage:
- LLMUser: GET /llm/gateway/models, /llmchat/gateway/models,
  /admin/llm/provider-configs, /admin/llm/provider-defaults endpoints
- ReverseProxyUser: GET /reverse-proxy/sessions endpoint

Toolops and well-known endpoints were not added (404 - not available).
Cancellation endpoints skipped (require valid request IDs).

Total unique endpoints now tested: 113
All 6 batches complete.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
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.

[ENHANCEMENT][TESTING]: Achieve 100% REST API coverage in Locust load tests

1 participant