1package cloudwatch 2 3import ( 4 "context" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/aws/request" 9 "github.com/aws/aws-sdk-go/service/cloudwatch" 10 "github.com/aws/aws-sdk-go/service/cloudwatch/cloudwatchiface" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13) 14 15var counter = 1 16 17type cloudWatchFakeClient struct { 18 cloudwatchiface.CloudWatchAPI 19} 20 21func (client *cloudWatchFakeClient) GetMetricDataWithContext(ctx aws.Context, input *cloudwatch.GetMetricDataInput, opts ...request.Option) (*cloudwatch.GetMetricDataOutput, error) { 22 nextToken := "next" 23 res := []*cloudwatch.MetricDataResult{{ 24 Values: []*float64{aws.Float64(12.3), aws.Float64(23.5)}, 25 }} 26 if counter == 0 { 27 nextToken = "" 28 res = []*cloudwatch.MetricDataResult{{ 29 Values: []*float64{aws.Float64(100)}, 30 }} 31 } 32 counter-- 33 return &cloudwatch.GetMetricDataOutput{ 34 MetricDataResults: res, 35 NextToken: aws.String(nextToken), 36 }, nil 37} 38 39func TestGetMetricDataExecutorTest(t *testing.T) { 40 executor := &cloudWatchExecutor{} 41 inputs := &cloudwatch.GetMetricDataInput{MetricDataQueries: []*cloudwatch.MetricDataQuery{}} 42 res, err := executor.executeRequest(context.Background(), &cloudWatchFakeClient{}, inputs) 43 require.NoError(t, err) 44 require.Len(t, res, 2) 45 require.Len(t, res[0].MetricDataResults[0].Values, 2) 46 assert.Equal(t, 23.5, *res[0].MetricDataResults[0].Values[1]) 47 assert.Equal(t, 100.0, *res[1].MetricDataResults[0].Values[0]) 48} 49