package utils import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/aws/smithy-go" "github.com/stretchr/testify/assert" "testing" ) type tester struct { } //noinspection GoUnusedParameter func (t *tester) TerminateInstances(ctx context.Context, input *ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error) { return nil, smithy.NewErrParamRequired("something") } //noinspection GoUnusedParameter func (t *tester) AlmostRunDescribe1(ctx context.Context, input *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, string) { return nil, "" } //noinspection GoUnusedParameter func (t *tester) AlmostRunDescribe2(input *ec2.DescribeInstancesInput, _ string) ( *ec2.DescribeInstancesOutput, error) { return nil, nil } //noinspection GoUnusedParameter func (t *tester) AlmostRunDescribe3(ctx context.Context, input *ec2.DescribeAccountAttributesInput) (*ec2.DescribeInstancesOutput, error) { return nil, nil } //noinspection GoUnusedParameter func (t *tester) AlmostRunDescribe4(input *ec2.DescribeInstancesInput) ( *ec2.DescribeInstancesOutput, error) { return nil, nil } //noinspection GoUnusedParameter func (t *tester) AlmostRunDescribe5(ctx context.Context, input *ec2.DescribeInstancesInput) error { return nil } func TestMockNotFound(t *testing.T) { am := AwsMockHandler{} am.AddHandler(&tester{}) assert.Panics(t, func() { ec := ec2.NewFromConfig(am.AwsConfig()) _, _ = ec.DeleteKeyPair(context.Background(), &ec2.DeleteKeyPairInput{ KeyName: aws.String("something"), }) }, "could not find a handler for operation: DeleteKeyPair") } func TestAwsMock(t *testing.T) { am := NewAwsMockHandler() am.AddHandler(&tester{}) am.AddHandler(func(ctx context.Context, arg *ec2.DescribeInstancesInput) ( *ec2.DescribeInstancesOutput, error) { return &ec2.DescribeInstancesOutput{NextToken: arg.NextToken}, nil }) am.AddHandler(func(ctx context.Context, arg *ec2.TerminateInstancesInput) ( *ec2.DescribeInstancesOutput, error) { return nil, nil }) ec := ec2.NewFromConfig(am.AwsConfig()) response, e := ec.DescribeInstances(context.Background(), &ec2.DescribeInstancesInput{ NextToken: aws.String("hello, token"), }) assert.NoError(t, e) assert.Equal(t, "hello, token", *response.NextToken) // Check the tester methods _, err := ec.TerminateInstances(context.Background(), &ec2.TerminateInstancesInput{}) assert.Error(t, err, "something") } func ExampleNewAwsMockHandler() { am := NewAwsMockHandler() am.AddHandler(func(ctx context.Context, arg *ec2.TerminateInstancesInput) ( *ec2.TerminateInstancesOutput, error) { if arg.InstanceIds[0] != "i-123" { panic("BadInstanceId") } return &ec2.TerminateInstancesOutput{}, nil }) ec := ec2.NewFromConfig(am.AwsConfig()) _, _ = ec.TerminateInstances(context.Background(), &ec2.TerminateInstancesInput{ InstanceIds: []string{"i-123"}, }) }