package claude import "testing" func TestApplyFingerprintOverridesUpdatesSharedDefaults(t *testing.T) { t.Setenv("CLAUDE_CODE_ENTRYPOINT", "") t.Setenv("CLAUDE_AGENT_SDK_VERSION", "") t.Setenv("CLAUDE_AGENT_SDK_CLIENT_APP", "") t.Setenv("CLAUDE_CODE_WORKLOAD", "") originalVersion := DefaultCLIVersion originalPackageVersion := DefaultStainlessPackageVersion originalRuntimeVersion := DefaultStainlessRuntimeVersion originalOS := DefaultStainlessOS originalArch := DefaultStainlessArch t.Cleanup(func() { ApplyFingerprintOverrides( originalVersion, originalPackageVersion, originalRuntimeVersion, originalOS, originalArch, ) }) ApplyFingerprintOverrides("2.1.999", "0.99.0", "v99.0.0", "Linux", "x64") if got := DefaultCLIVersion; got != "2.1.999" { t.Fatalf("DefaultCLIVersion = %q, want %q", got, "2.1.999") } if got := DefaultUserAgent(); got != "claude-cli/2.1.999 (external, cli)" { t.Fatalf("DefaultUserAgent() = %q", got) } profile := DefaultDeviceProfile() if profile.StainlessPackageVersion != "0.99.0" { t.Fatalf("DefaultDeviceProfile().StainlessPackageVersion = %q", profile.StainlessPackageVersion) } if profile.StainlessRuntimeVersion != "v99.0.0" { t.Fatalf("DefaultDeviceProfile().StainlessRuntimeVersion = %q", profile.StainlessRuntimeVersion) } if profile.StainlessOS != "Linux" { t.Fatalf("DefaultDeviceProfile().StainlessOS = %q", profile.StainlessOS) } if profile.StainlessArch != "x64" { t.Fatalf("DefaultDeviceProfile().StainlessArch = %q", profile.StainlessArch) } if got := DefaultHeaders["User-Agent"]; got != profile.UserAgent { t.Fatalf("DefaultHeaders[User-Agent] = %q, want %q", got, profile.UserAgent) } if got := DefaultHeaders["X-Stainless-Package-Version"]; got != profile.StainlessPackageVersion { t.Fatalf("DefaultHeaders[X-Stainless-Package-Version] = %q, want %q", got, profile.StainlessPackageVersion) } if got := DefaultHeaders["X-Stainless-Runtime-Version"]; got != profile.StainlessRuntimeVersion { t.Fatalf("DefaultHeaders[X-Stainless-Runtime-Version] = %q, want %q", got, profile.StainlessRuntimeVersion) } if got := DefaultHeaders["X-Stainless-OS"]; got != profile.StainlessOS { t.Fatalf("DefaultHeaders[X-Stainless-OS] = %q, want %q", got, profile.StainlessOS) } if got := DefaultHeaders["X-Stainless-Arch"]; got != profile.StainlessArch { t.Fatalf("DefaultHeaders[X-Stainless-Arch] = %q, want %q", got, profile.StainlessArch) } if got := DefaultHeaders["anthropic-dangerous-direct-browser-access"]; got != "true" { t.Fatalf("DefaultHeaders[anthropic-dangerous-direct-browser-access] = %q, want %q", got, "true") } } func TestDefaultUserAgentReflectsLocalRuntimeDescriptors(t *testing.T) { t.Setenv("CLAUDE_CODE_ENTRYPOINT", "sdk-cli") t.Setenv("CLAUDE_AGENT_SDK_VERSION", "0.0.77") t.Setenv("CLAUDE_AGENT_SDK_CLIENT_APP", "cron-daemon") t.Setenv("CLAUDE_CODE_WORKLOAD", "cron") got := DefaultUserAgent() want := "claude-cli/2.1.104 (external, sdk-cli, agent-sdk/0.0.77, client-app/cron-daemon, workload/cron)" if got != want { t.Fatalf("DefaultUserAgent() = %q, want %q", got, want) } } func TestDetailedCodeUserAgentReflectsEntrypointAndSDK(t *testing.T) { t.Setenv("CLAUDE_CODE_ENTRYPOINT", "remote") t.Setenv("CLAUDE_AGENT_SDK_VERSION", "0.0.77") t.Setenv("CLAUDE_AGENT_SDK_CLIENT_APP", "desktop") got := DetailedCodeUserAgent() want := "claude-code/2.1.104 (remote, agent-sdk/0.0.77, client-app/desktop)" if got != want { t.Fatalf("DetailedCodeUserAgent() = %q, want %q", got, want) } } func TestOptionalAPIHeaders(t *testing.T) { t.Setenv("CLAUDE_CODE_CONTAINER_ID", "ctr-123") t.Setenv("CLAUDE_CODE_REMOTE_SESSION_ID", "remote-456") t.Setenv("CLAUDE_AGENT_SDK_CLIENT_APP", "desktop") t.Setenv("CLAUDE_CODE_ADDITIONAL_PROTECTION", "true") headers := OptionalAPIHeaders() if got := headers["x-claude-remote-container-id"]; got != "ctr-123" { t.Fatalf("x-claude-remote-container-id = %q", got) } if got := headers["x-claude-remote-session-id"]; got != "remote-456" { t.Fatalf("x-claude-remote-session-id = %q", got) } if got := headers["x-client-app"]; got != "desktop" { t.Fatalf("x-client-app = %q", got) } if got := headers["x-anthropic-additional-protection"]; got != "true" { t.Fatalf("x-anthropic-additional-protection = %q", got) } } func TestAttributionHeaderDisabled(t *testing.T) { t.Setenv("CLAUDE_CODE_ATTRIBUTION_HEADER", "false") if !AttributionHeaderDisabled() { t.Fatal("expected AttributionHeaderDisabled() to be true when env=false") } }