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  }