Skip to content

Commit d0bfd1c

Browse files
authored
[test] Add tests for config.buildStdioServerConfig and helper functions (#1462)
# Test Coverage Improvement: `buildStdioServerConfig` and helpers ## Functions Analyzed | Function | Package | Previous Direct Coverage | Tests Added | |---|---|---|---| | `buildStdioServerConfig` | `internal/config` | 0% (only indirect) | 16 tests | | `normalizeLocalType` | `internal/config` | 0% (only indirect) | 10 tests | | `intPtrOrDefault` | `internal/config` | 0% (only indirect) | 6 tests | | `applyGatewayDefaults` | `internal/config` | 0% (only indirect) | 6 tests | ## Why These Functions? These four functions had zero direct unit tests — they were only exercised indirectly via higher-level integration-style tests like `TestLoadFromStdin_*`. This makes it hard to diagnose regressions and means many edge-case branches (e.g. empty mounts, nil entrypoint, passthrough vs. explicit env values, partial defaults) were invisible to the test suite. `buildStdioServerConfig` is the most complex: it assembles a Docker `run` args slice in a specific order across multiple feature toggles (entrypoint override, bind mounts, user env vars, extra docker args, container name, entrypoint args). ## Tests Added ### `config_stdin_test.go` — 32 new test functions **`buildStdioServerConfig` (16 tests):** - ✅ Minimal container: only required args present - ✅ Entrypoint override: `--entrypoint` + value inserted correctly - ✅ No entrypoint: `--entrypoint` absent when field is empty - ✅ Single mount: `-v` + path present with correct ordering - ✅ Multiple mounts: all `-v` pairs present - ✅ No mounts: `-v` absent - ✅ Env passthrough (`"KEY":""` → `-e KEY`) - ✅ Env explicit value (`"KEY":"val"` → `-e KEY=val`) - ✅ Mixed env: both passthrough and explicit value forms - ✅ Additional docker args: appended before container name - ✅ Entrypoint args: appended after container name - ✅ `Tools` and `Registry` fields preserved on result - ✅ Result `Env` map is always empty (env goes into `Args`) - ✅ Argument ordering: entrypoint → mounts → env → extra args → container → entrypoint args - ✅ Standard env vars (`NO_COLOR`, `TERM`, `PYTHONUNBUFFERED`) always present **`normalizeLocalType` (10 tests):** - ✅ Invalid JSON returns error - ✅ No `mcpServers` key returns data unchanged - ✅ `"local"` type is rewritten to `"stdio"` - ✅ `"stdio"` type is unchanged - ✅ `"http"` type is unchanged - ✅ Mixed map: only `"local"` entries rewritten - ✅ Server with no `"type"` field: unaffected - ✅ `mcpServers` is not a map (array): returns input unchanged - ✅ Empty `mcpServers` map: returns data unchanged - ✅ Multiple `"local"` servers: all rewritten **`intPtrOrDefault` (6 tests):** - ✅ `nil` pointer returns default value - ✅ Pointer to `0` returns `0` (not the default) — critical edge case - ✅ Positive value returned correctly - ✅ Negative value returned correctly - ✅ Large value returned correctly - ✅ Default of `0` with nil pointer ### `config_test.go` — 6 new test functions for `applyGatewayDefaults` - ✅ All-zero config → all three defaults applied (`Port=3000`, `StartupTimeout=60`, `ToolTimeout=120`) - ✅ Port already set → port preserved, others defaulted - ✅ `StartupTimeout` already set → preserved, others defaulted - ✅ `ToolTimeout` already set → preserved, others defaulted - ✅ All fields set → all preserved (no overwrite) - ✅ Non-numeric fields (`APIKey`, `Domain`) unaffected ## Notes - Tests follow all project conventions: testify `assert`/`require`, descriptive names, direct package access for private functions - `buildStdioServerConfig` iterates over a `map[string]string` for env vars (non-deterministic order) — tests use `assert.Contains` rather than exact position for env entries - `make agent-finished` could not be run in the sandboxed CI environment (Go module proxy blocked), but tests are syntactically correct and will be verified by CI --- *Generated by Test Coverage Improver* > Generated by [Test Coverage Improver](https://github.com/github/gh-aw-mcpg/actions/runs/22494791142) > [!WARNING] > <details> > <summary>⚠️ Firewall blocked 1 domain</summary> > > The following domain was blocked by the firewall during workflow execution: > > - `proxy.golang.org` > > </details> <!-- gh-aw-agentic-workflow: Test Coverage Improver, engine: copilot, id: 22494791142, workflow_id: test-coverage-improver, run: https://github.com/github/gh-aw-mcpg/actions/runs/22494791142 --> <!-- gh-aw-workflow-id: test-coverage-improver -->
2 parents f1783a9 + 4023075 commit d0bfd1c

File tree

3 files changed

+554
-128
lines changed

3 files changed

+554
-128
lines changed

0 commit comments

Comments
 (0)