• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 24103047720
65%

Build:
DEFAULT BRANCH: main
Ran 07 Apr 2026 08:38PM UTC
Jobs 1
Files 607
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

07 Apr 2026 08:32PM UTC coverage: 65.185% (-0.007%) from 65.192%
24103047720

push

github

web-flow
Add E2E test for MCPServer cross-replica session routing with Redis (#4525)

* Add E2E test for MCPServer cross-replica session routing with Redis

MCPServer supports horizontal scaling with Redis session storage, but
there was no E2E test verifying that a session established on one pod
is accessible from a different pod. This test deploys an MCPServer with
replicas=2 and Redis session storage, initializes an MCP session, then
sends raw JSON-RPC requests directly to each pod IP using the same
Mcp-Session-Id header to prove sessions are shared via Redis.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Use kubectl port-forward instead of pod IPs for cross-replica test

Pod IPs are not reachable from the CI runner host in Kind clusters.
Replace direct pod IP HTTP calls with kubectl port-forward to each
pod, which tunnels through the Kind node's network.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Wire Redis session storage into MCPServer proxy runner

The MCPServer CRD's sessionStorage config was populated by the operator
into RunConfig but the proxy runner never read it — sessions always used
in-memory LocalStorage, making cross-replica routing non-functional.

Add WithSessionStorage transport option and wire ScalingConfig.SessionRedis
from RunConfig into the transport layer so both StdioTransport and
HTTPTransport (transparent proxy) use Redis-backed session storage when
configured.

Rewrite the E2E test to use mcp-go clients throughout, including
transport.WithSession to create a client on pod B that reuses the
session established on pod A.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Move session storage to transport Config, fix codespell

Pass SessionStorage through types.Config instead of a factory option
with interface assertion. The factory now sets the field directly on
each transport type during construction.

Add clientA to codespell ignore list.

Co-Authored-By:... (continued)

1 of 36 new or added lines in 3 files covered. (2.78%)

468 existing lines in 7 files now uncovered.

54823 of 84104 relevant lines covered (65.18%)

63.3 hits per line

Uncovered Changes

Lines Coverage ∆ File
21
37.6
-1.31% pkg/runner/runner.go
12
0.0
0.0% pkg/transport/factory.go
2
55.52
-0.49% pkg/transport/http.go

Coverage Regressions

Lines Coverage ∆ File
430
35.55
-0.68% cmd/thv-operator/api/v1alpha1/zz_generated.deepcopy.go
26
75.17
-1.02% pkg/secrets/encrypted.go
3
71.85
-1.11% pkg/ignore/processor.go
3
83.02
0.21% pkg/vmcp/composer/workflow_engine.go
2
73.63
-0.64% pkg/runner/config.go
2
94.77
-1.31% pkg/vmcp/composer/dag_executor.go
2
71.43
-1.68% pkg/vmcp/k8s/manager.go
Jobs
ID Job ID Ran Files Coverage
1 24103047720.1 07 Apr 2026 08:38PM UTC 607
65.18
GitHub Action Run
Source Files on build 24103047720
  • Tree
  • List 607
  • Changed 17
  • Source Changed 7
  • Coverage Changed 17
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #24103047720
  • d59acf51 on github
  • Prev Build on main (#24100083891)
  • Next Build on main (#24124391614)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc