diff options
| author | Claude <noreply@anthropic.com> | 2026-05-03 08:00:20 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-05-03 08:00:20 +0000 |
| commit | e7b382bf177cbe518af3d86c3ee6c49344d225f4 (patch) | |
| tree | 4dc822097b7f32a37ad655a550da1abada79ce85 /internal/api/server_test.go | |
| parent | 1ec3f87c392145580a62858110d9fd10638203db (diff) | |
chore: close deferred work — real GeminiRunner, Local UI option, db.go cleanup
Closes the three items left on the deferred queue after the post-epic
cleanup.
GeminiRunner.execOnce now actually executes the gemini binary instead
of writing hardcoded stream data. Mirrors ClaudeRunner.execOnce:
- exec.CommandContext with the same env vars (CLAUDOMATOR_API_URL etc.)
- process group SIGKILL on context cancel
- stdout piped through parseGeminiStream → stdoutFile
- stderr to file
- exit codes captured, stderr tail surfaced on failure
Test infrastructure bug uncovered in passing: testServerWithGeminiMockRunner's
mock script used double-quoted echo with literal triple-backticks, which
bash interpreted as command substitution. The script always produced
empty output. The bug was invisible until now because GeminiRunner
ignored the script entirely. Switched to a single-quoted heredoc.
Frontend: index.html dropdown gains a "Local" option. No JS branching
needed — the value flows through to agent.type verbatim and downstream
display reads the type string as-is.
storage/db.go: removed stale debug-comment scaffolding (the "TODO:
Replace with proper logger" block) that was tracking a dead
`fmt.Printf` call. The path it commented on is fine without logging —
unmarshal errors are returned wrapped.
Test status: `go test -race ./...` green across every package, zero
skips, zero excluded tests.
https://claude.ai/code/session_017Edeq947TpSm1vQTxMhi1J
Diffstat (limited to 'internal/api/server_test.go')
| -rw-r--r-- | internal/api/server_test.go | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/internal/api/server_test.go b/internal/api/server_test.go index 516e289..2139e36 100644 --- a/internal/api/server_test.go +++ b/internal/api/server_test.go @@ -143,20 +143,21 @@ func testServerWithGeminiMockRunner(t *testing.T) (*Server, *storage.DB) { logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug})) - // Create the mock gemini binary script. + // Create the mock gemini binary script. Use single-quoted heredoc so + // bash does not try to evaluate the literal backticks as command + // substitution. mockBinDir := t.TempDir() mockGeminiPath := filepath.Join(mockBinDir, "mock-gemini-binary.sh") mockScriptContent := `#!/bin/bash -OUTPUT_FILE=$(mktemp) -echo "` + "```json" + `" > "$OUTPUT_FILE" -echo "{\"type\":\"content_block_start\",\"content_block\":{\"text\":\"Hello, Gemini!\",\"type\":\"text\"}}" >> "$OUTPUT_FILE" -echo "{\"type\":\"content_block_delta\",\"content_block\":{\"text\":\" How are you?\"}}" >> "$OUTPUT_FILE" -echo "{\"type\":\"content_block_end\"}" >> "$OUTPUT_FILE" -echo "{\"type\":\"message_delta\",\"message\":{\"role\":\"model\"}}" >> "$OUTPUT_FILE" -echo "{\"type\":\"message_end\"}" >> "$OUTPUT_FILE" -echo "` + "```" + `" >> "$OUTPUT_FILE" -cat "$OUTPUT_FILE" -rm "$OUTPUT_FILE" +cat <<'EOF' +` + "```json" + ` +{"type":"content_block_start","content_block":{"text":"Hello, Gemini!","type":"text"}} +{"type":"content_block_delta","content_block":{"text":" How are you?"}} +{"type":"content_block_end"} +{"type":"message_delta","message":{"role":"model"}} +{"type":"message_end"} +` + "```" + ` +EOF exit 0 ` if err := os.WriteFile(mockGeminiPath, []byte(mockScriptContent), 0755); err != nil { |
