@@ -30,6 +30,7 @@ import (
3030 "github.com/aws/aws-sdk-go/aws"
3131 "github.com/aws/aws-sdk-go/aws/awserr"
3232 "github.com/aws/aws-sdk-go/service/ec2"
33+ "github.com/aws/aws-sdk-go/service/ec2/ec2iface"
3334 "github.com/aws/aws-sdk-go/service/elb"
3435 "github.com/aws/aws-sdk-go/service/elbv2"
3536 "github.com/stretchr/testify/assert"
@@ -3741,3 +3742,105 @@ func TestGetZoneByProviderIDForFargate(t *testing.T) {
37413742 assert .Nil (t , err )
37423743 assert .Equal (t , "us-west-2c" , zoneDetails .FailureDomain )
37433744}
3745+
3746+ type MockedEC2API struct {
3747+ ec2iface.EC2API
3748+ mock.Mock
3749+ }
3750+
3751+ func (m * MockedEC2API ) DescribeInstances (input * ec2.DescribeInstancesInput ) (* ec2.DescribeInstancesOutput , error ) {
3752+ args := m .Called (input )
3753+ return args .Get (0 ).(* ec2.DescribeInstancesOutput ), args .Error (1 )
3754+ }
3755+
3756+ func newMockedEC2API () * MockedEC2API {
3757+ return & MockedEC2API {}
3758+ }
3759+
3760+ func TestDescribeInstances (t * testing.T ) {
3761+ tests := []struct {
3762+ name string
3763+ input * ec2.DescribeInstancesInput
3764+ expect func (ec2iface.EC2API )
3765+ isError bool
3766+ }{
3767+ {
3768+ "MaxResults set on empty DescribeInstancesInput and NextToken respected." ,
3769+ & ec2.DescribeInstancesInput {},
3770+ func (mockedEc2 ec2iface.EC2API ) {
3771+ m := mockedEc2 .(* MockedEC2API )
3772+ m .On ("DescribeInstances" ,
3773+ & ec2.DescribeInstancesInput {
3774+ MaxResults : aws .Int64 (1000 ),
3775+ },
3776+ ).Return (
3777+ & ec2.DescribeInstancesOutput {
3778+ NextToken : aws .String ("asdf" ),
3779+ },
3780+ nil ,
3781+ )
3782+ m .On ("DescribeInstances" ,
3783+ & ec2.DescribeInstancesInput {
3784+ MaxResults : aws .Int64 (1000 ),
3785+ NextToken : aws .String ("asdf" ),
3786+ },
3787+ ).Return (
3788+ & ec2.DescribeInstancesOutput {},
3789+ nil ,
3790+ )
3791+ },
3792+ false ,
3793+ },
3794+ {
3795+ "MaxResults only set if empty DescribeInstancesInput" ,
3796+ & ec2.DescribeInstancesInput {
3797+ MaxResults : aws .Int64 (3 ),
3798+ },
3799+ func (mockedEc2 ec2iface.EC2API ) {
3800+ m := mockedEc2 .(* MockedEC2API )
3801+ m .On ("DescribeInstances" ,
3802+ & ec2.DescribeInstancesInput {
3803+ MaxResults : aws .Int64 (3 ),
3804+ },
3805+ ).Return (
3806+ & ec2.DescribeInstancesOutput {},
3807+ nil ,
3808+ )
3809+ },
3810+ false ,
3811+ },
3812+ {
3813+ "MaxResults not set if instance IDs are provided" ,
3814+ & ec2.DescribeInstancesInput {
3815+ InstanceIds : []* string {aws .String ("i-1234" )},
3816+ },
3817+ func (mockedEc2 ec2iface.EC2API ) {
3818+ m := mockedEc2 .(* MockedEC2API )
3819+ m .On ("DescribeInstances" ,
3820+ & ec2.DescribeInstancesInput {
3821+ InstanceIds : []* string {aws .String ("i-1234" )},
3822+ },
3823+ ).Return (
3824+ & ec2.DescribeInstancesOutput {},
3825+ nil ,
3826+ )
3827+ },
3828+ false ,
3829+ },
3830+ }
3831+
3832+ for _ , test := range tests {
3833+ t .Run (test .name , func (t * testing.T ) {
3834+ mockedEC2API := newMockedEC2API ()
3835+ test .expect (mockedEC2API )
3836+ fakeEC2 := awsSdkEC2 {
3837+ ec2 : mockedEC2API ,
3838+ }
3839+ _ , err := fakeEC2 .DescribeInstances (test .input )
3840+ if ! test .isError {
3841+ assert .NoError (t , err )
3842+ }
3843+ mockedEC2API .AssertExpectations (t )
3844+ })
3845+ }
3846+ }
0 commit comments