89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
|
package cloudwatch
|
||
|
|
||
|
import (
|
||
|
"sort"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/aws/aws-sdk-go/aws"
|
||
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||
|
|
||
|
"github.com/influxdata/influxdb/client/v2"
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
// Test that each tag becomes one dimension
|
||
|
func TestBuildDimensions(t *testing.T) {
|
||
|
const MaxDimensions = 10
|
||
|
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
testPoint := testutil.TestPoint(1)
|
||
|
dimensions := BuildDimensions(testPoint.Tags())
|
||
|
|
||
|
tagKeys := make([]string, len(testPoint.Tags()))
|
||
|
i := 0
|
||
|
for k, _ := range testPoint.Tags() {
|
||
|
tagKeys[i] = k
|
||
|
i += 1
|
||
|
}
|
||
|
|
||
|
sort.Strings(tagKeys)
|
||
|
|
||
|
if len(testPoint.Tags()) >= MaxDimensions {
|
||
|
assert.Equal(MaxDimensions, len(dimensions), "Number of dimensions should be less than MaxDimensions")
|
||
|
} else {
|
||
|
assert.Equal(len(testPoint.Tags()), len(dimensions), "Number of dimensions should be equal to number of tags")
|
||
|
}
|
||
|
|
||
|
for i, key := range tagKeys {
|
||
|
if i >= 10 {
|
||
|
break
|
||
|
}
|
||
|
assert.Equal(key, *dimensions[i].Name, "Key should be equal")
|
||
|
assert.Equal(testPoint.Tags()[key], *dimensions[i].Value, "Value should be equal")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Test that points with valid values have a MetricDatum created where as non valid do not.
|
||
|
// Skips "time.Time" type as something is converting the value to string.
|
||
|
func TestBuildMetricDatums(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
validPoints := []*client.Point{
|
||
|
testutil.TestPoint(1),
|
||
|
testutil.TestPoint(int32(1)),
|
||
|
testutil.TestPoint(int64(1)),
|
||
|
testutil.TestPoint(float64(1)),
|
||
|
testutil.TestPoint(true),
|
||
|
}
|
||
|
|
||
|
for _, point := range validPoints {
|
||
|
datums := BuildMetricDatum(point)
|
||
|
assert.Equal(1, len(datums), "Valid type should create a Datum")
|
||
|
}
|
||
|
|
||
|
nonValidPoint := testutil.TestPoint("Foo")
|
||
|
|
||
|
assert.Equal(0, len(BuildMetricDatum(nonValidPoint)), "Invalid type should not create a Datum")
|
||
|
}
|
||
|
|
||
|
func TestPartitionDatums(t *testing.T) {
|
||
|
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
testDatum := cloudwatch.MetricDatum{
|
||
|
MetricName: aws.String("Foo"),
|
||
|
Value: aws.Float64(1),
|
||
|
}
|
||
|
|
||
|
oneDatum := []*cloudwatch.MetricDatum{&testDatum}
|
||
|
twoDatum := []*cloudwatch.MetricDatum{&testDatum, &testDatum}
|
||
|
threeDatum := []*cloudwatch.MetricDatum{&testDatum, &testDatum, &testDatum}
|
||
|
|
||
|
assert.Equal([][]*cloudwatch.MetricDatum{oneDatum}, PartitionDatums(2, oneDatum))
|
||
|
assert.Equal([][]*cloudwatch.MetricDatum{twoDatum}, PartitionDatums(2, twoDatum))
|
||
|
assert.Equal([][]*cloudwatch.MetricDatum{twoDatum, oneDatum}, PartitionDatums(2, threeDatum))
|
||
|
}
|