122 lines
4.4 KiB
Go
122 lines
4.4 KiB
Go
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")
|
|
}
|
|
}
|