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