mirror of
https://gh-proxy.org/https://github.com/klinsmaya/multica.git
synced 2026-11-08 09:26:50 +08:00
* fix(test): isolate test home on Windows across config-writing packages
Tests that only redirect HOME still resolve ~/.multica against the real
home on Windows: os.UserHomeDir reads USERPROFILE, not HOME. SaveCLIConfig
then writes test fixtures over a real default-profile config.json.
Reproduced on a Windows host by running `go test ./internal/cli ./cmd/multica`
on an unmodified tree: the real ~/.multica/config.json was replaced with the
test fixture {"token": "mul_owner_pat"}, dropping server_url, app_url and
workspace_id. The running daemon keeps its in-memory config, so the damage
only surfaces on the next restart as an auth failure.
Redirect both home variables process-wide in TestMain for the packages that
resolve ~/.multica (cmd/multica, internal/cli, internal/daemon), and route
per-test home redirects through a redirectTestHome helper that sets HOME and
USERPROFILE together. Per-test t.Setenv overrides still win.
Comparison on the same host, same packages:
without this change: 6 internal/cli + 10 cmd/multica failures, real config overwritten
with this change: 1 + 5 failures (all pre-existing Windows cases), config intact
Co-authored-by: multica-agent <[email protected]>
* fix(test): fail closed when isolating test homes
Co-authored-by: multica-agent <[email protected]>
* test(ghsnapshot): isolate cursor fixture from other packages
Co-authored-by: multica-agent <[email protected]>
---------
Co-authored-by: ZhangRui <[email protected]>
Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Yushen <[email protected]>
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
// Copyright 2026 Multica. All rights reserved.
|
|
|
|
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/multica-ai/multica/server/internal/testutil"
|
|
)
|
|
|
|
// TestMain redirects both home environment variables to one scratch directory
|
|
// for the whole binary before any test runs. This package owns SaveCLIConfig,
|
|
// which resolves ~/.multica through os.UserHomeDir — USERPROFILE on Windows,
|
|
// HOME elsewhere. Tests that only redirect HOME therefore split the fixture's
|
|
// write path from the code's read path on Windows: SaveCLIConfig writes test
|
|
// fixtures over a real default-profile config.json. Process-wide redirection
|
|
// isolates tests that forget their own redirect on every platform; per-test
|
|
// t.Setenv overrides still take precedence.
|
|
func TestMain(m *testing.M) {
|
|
for _, key := range []string{
|
|
"MULTICA_AGENT_ID",
|
|
"MULTICA_TASK_ID",
|
|
"MULTICA_TOKEN",
|
|
"MULTICA_DAEMON_PORT",
|
|
"MULTICA_WORKSPACE_ID",
|
|
"MULTICA_SERVER_URL",
|
|
"MULTICA_TASK_CONFIG_ROOT",
|
|
} {
|
|
os.Unsetenv(key)
|
|
}
|
|
|
|
scratchHome, err := testutil.IsolateUserHome("multica-cli-config-tests-home-")
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "isolate internal/cli test home: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
code := m.Run()
|
|
_ = os.RemoveAll(scratchHome)
|
|
os.Exit(code)
|
|
}
|
|
|
|
var redirectTestHome = testutil.RedirectUserHome
|