github.com/anthropics/anthropic-sdk-go@v1.70.1/aws/aws_live_test.go (about) 1 package aws_test 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 8 "github.com/anthropics/anthropic-sdk-go" 9 "github.com/anthropics/anthropic-sdk-go/aws" 10 ) 11 12 // Live integration tests for the AWS gateway client. Skipped unless ANTHROPIC_LIVE=1. 13 // 14 // Required env vars vary by auth mode: 15 // 16 // API key mode: ANTHROPIC_AWS_API_KEY, ANTHROPIC_AWS_WORKSPACE_ID, AWS_REGION 17 // 18 // SigV4 mode: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, 19 // ANTHROPIC_AWS_WORKSPACE_ID 20 // 21 // Run: ANTHROPIC_LIVE=1 go test ./aws/... -run TestLiveAWS -v 22 23 func skipUnlessLive(t *testing.T) { 24 t.Helper() 25 if os.Getenv("ANTHROPIC_LIVE") != "1" { 26 t.Skip("set ANTHROPIC_LIVE=1 to run live integration tests") 27 } 28 } 29 30 func requireEnv(t *testing.T, names ...string) { 31 t.Helper() 32 for _, name := range names { 33 if os.Getenv(name) == "" { 34 t.Fatalf("required env var %s is not set", name) 35 } 36 } 37 } 38 39 func liveModel() string { 40 if m := os.Getenv("ANTHROPIC_LIVE_MODEL"); m != "" { 41 return m 42 } 43 return "claude-sonnet-4-6" 44 } 45 46 func sendAWSMessage(t *testing.T, client *aws.Client) { 47 t.Helper() 48 49 message, err := client.Messages.New(context.Background(), anthropic.MessageNewParams{ 50 Model: liveModel(), 51 MaxTokens: 32, 52 Messages: []anthropic.MessageParam{ 53 anthropic.NewUserMessage(anthropic.NewTextBlock("Say exactly: hello")), 54 }, 55 }) 56 if err != nil { 57 t.Fatalf("Messages.New failed: %v", err) 58 } 59 if len(message.Content) == 0 { 60 t.Fatal("expected non-empty content in response") 61 } 62 t.Logf("response: %s", message.Content[0].Text) 63 } 64 65 func TestLiveAWSAPIKey(t *testing.T) { 66 skipUnlessLive(t) 67 requireEnv(t, "ANTHROPIC_AWS_API_KEY", "ANTHROPIC_AWS_WORKSPACE_ID", "AWS_REGION") 68 69 client, err := aws.NewClient(context.Background(), aws.ClientConfig{}) 70 if err != nil { 71 t.Fatalf("NewClient failed: %v", err) 72 } 73 74 sendAWSMessage(t, client) 75 } 76 77 func TestLiveAWSSigV4ExplicitCreds(t *testing.T) { 78 skipUnlessLive(t) 79 requireEnv(t, "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "ANTHROPIC_AWS_WORKSPACE_ID") 80 81 // Clear API key so SigV4 is used 82 t.Setenv("ANTHROPIC_AWS_API_KEY", "") 83 84 client, err := aws.NewClient(context.Background(), aws.ClientConfig{ 85 AWSAccessKey: os.Getenv("AWS_ACCESS_KEY_ID"), 86 AWSSecretAccessKey: os.Getenv("AWS_SECRET_ACCESS_KEY"), 87 AWSSessionToken: os.Getenv("AWS_SESSION_TOKEN"), 88 }) 89 if err != nil { 90 t.Fatalf("NewClient failed: %v", err) 91 } 92 93 sendAWSMessage(t, client) 94 } 95 96 func TestLiveAWSSigV4DefaultChain(t *testing.T) { 97 skipUnlessLive(t) 98 requireEnv(t, "AWS_REGION", "ANTHROPIC_AWS_WORKSPACE_ID") 99 100 // Clear all API key env vars so the default AWS credential chain is used 101 t.Setenv("ANTHROPIC_AWS_API_KEY", "") 102 103 client, err := aws.NewClient(context.Background(), aws.ClientConfig{}) 104 if err != nil { 105 t.Fatalf("NewClient failed (default AWS credential chain): %v", err) 106 } 107 108 sendAWSMessage(t, client) 109 } 110 111 func TestLiveAWSSigV4ProfileFromCredentialsFile(t *testing.T) { 112 skipUnlessLive(t) 113 requireEnv(t, "AWS_REGION", "ANTHROPIC_AWS_WORKSPACE_ID", "AWS_PROFILE") 114 115 // Clear explicit creds and API keys so the SDK must resolve from ~/.aws/credentials 116 t.Setenv("ANTHROPIC_AWS_API_KEY", "") 117 t.Setenv("AWS_ACCESS_KEY_ID", "") 118 t.Setenv("AWS_SECRET_ACCESS_KEY", "") 119 t.Setenv("AWS_SESSION_TOKEN", "") 120 121 client, err := aws.NewClient(context.Background(), aws.ClientConfig{ 122 AWSProfile: os.Getenv("AWS_PROFILE"), 123 }) 124 if err != nil { 125 t.Fatalf("NewClient failed (profile from credentials file): %v", err) 126 } 127 128 sendAWSMessage(t, client) 129 }