Files
tutti/services/tuttid/service/browser/command_autoconnect_test.go
T
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

108 lines
3.3 KiB
Go

package browser
import (
"os"
"path/filepath"
"runtime"
"strings"
"testing"
)
func testStableChromeProfileDir(home string) string {
switch runtime.GOOS {
case "darwin":
return filepath.Join(home, "Library", "Application Support", "Google", "Chrome")
case "linux":
return filepath.Join(home, ".config", "google-chrome")
case "windows":
return filepath.Join(home, "Google", "Chrome", "User Data")
default:
return ""
}
}
func writeTestDevToolsActivePort(t *testing.T, home string, content string) {
t.Helper()
if runtime.GOOS == "windows" {
t.Setenv("LOCALAPPDATA", home)
}
chromeDir := testStableChromeProfileDir(home)
if chromeDir == "" {
t.Skip("stable Chrome profile path is unavailable on this platform")
}
if err := os.MkdirAll(chromeDir, 0o755); err != nil {
t.Fatal(err)
}
portFile := filepath.Join(chromeDir, "DevToolsActivePort")
if err := os.WriteFile(portFile, []byte(content), 0o644); err != nil {
t.Fatal(err)
}
}
func TestParseDevToolsActivePort(t *testing.T) {
activePort, ok := parseDevToolsActivePort("9222\n/devtools/browser/abc\n")
if !ok {
t.Fatal("parseDevToolsActivePort() = false, want true")
}
if activePort.port != 9222 || activePort.path != "/devtools/browser/abc" {
t.Fatalf("activePort = %#v", activePort)
}
}
func TestStableChromeDevToolsActivePortPathUsesLocalAppDataOnWindows(t *testing.T) {
got := stableChromeDevToolsActivePortPathFor("windows", `C:\Users\example`, `D:\Profiles\Local`)
want := filepath.Join(`D:\Profiles\Local`, "Google", "Chrome", "User Data", "DevToolsActivePort")
if got != want {
t.Fatalf("stableChromeDevToolsActivePortPathFor() = %q, want %q", got, want)
}
}
func TestStableChromeDevToolsWebSocketEndpointFromDevToolsActivePort(t *testing.T) {
home := t.TempDir()
writeTestDevToolsActivePort(t, home, "9222\n/devtools/browser/live\n")
t.Setenv("HOME", home)
endpoint, ok := stableChromeDevToolsWebSocketEndpoint()
if !ok {
t.Fatal("stableChromeDevToolsWebSocketEndpoint() = false, want true")
}
if endpoint != "ws://127.0.0.1:9222/devtools/browser/live" {
t.Fatalf("endpoint = %q", endpoint)
}
}
func TestValidateAutoConnectChromeReadyAcceptsDevToolsActivePortWithoutJsonVersion(t *testing.T) {
home := t.TempDir()
writeTestDevToolsActivePort(t, home, "9222\n/devtools/browser/live\n")
t.Setenv("HOME", home)
if err := validateAutoConnectChromeReady(); err != nil {
t.Fatalf("validateAutoConnectChromeReady() error = %v, want nil", err)
}
}
func TestValidateAutoConnectChromeReadyReturnsSetupHintWhenPortFileMissing(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
err := validateAutoConnectChromeReady()
if err == nil {
t.Fatal("validateAutoConnectChromeReady() error = nil, want setup hint")
}
if !strings.Contains(err.Error(), "chrome://inspect/#remote-debugging") || !strings.Contains(err.Error(), "reuse mode") {
t.Fatalf("error = %q, want setup hint", err.Error())
}
}
func TestResolveAutoConnectMCPConnectionArgsUsesDevToolsActivePortEndpoint(t *testing.T) {
home := t.TempDir()
writeTestDevToolsActivePort(t, home, "9222\n/devtools/browser/live\n")
t.Setenv("HOME", home)
args := resolveAutoConnectMCPConnectionArgs()
if len(args) != 3 || args[0] != "--wsEndpoint" || args[1] != "ws://127.0.0.1:9222/devtools/browser/live" {
t.Fatalf("args = %#v", args)
}
}