Skip to content

Commit

Permalink
[awsemfexporter] Restructure Metric Translator Logic (#1353)
Browse files Browse the repository at this point in the history
* Restructure buildCWMetric logic (#1)

* Restructure code to remove duplicated logic

* Update format

* Improve function and variable names

* Extract logic for dimension creation and add test

* Implement minor fixes

* Remove changes to go.sum

* Implement tests for getCWMetrics

* Implement tests for buildCWMetric

* Format metric_translator_test.go

* Run with gofmt -s

* Disregard ordering of dimensions in test case

* Perform dimension equality checking as a helper function
  • Loading branch information
kohrapha committed Oct 29, 2020
1 parent 9f53564 commit 9bb6f2d
Showing 1 changed file with 45 additions and 39 deletions.
84 changes: 45 additions & 39 deletions exporter/awsemfexporter/metric_translator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,25 @@ import (
"go.opentelemetry.io/collector/translator/internaldata"
)

// Asserts whether dimension sets are equal (i.e. has same sets of dimensions)
func assertDimsEqual(t *testing.T, expected, actual [][]string) {
// Convert to string for easier sorting
expectedStringified := make([]string, len(expected))
actualStringified := make([]string, len(actual))
for i, v := range expected {
sort.Strings(v)
expectedStringified[i] = strings.Join(v, ",")
}
for i, v := range actual {
sort.Strings(v)
actualStringified[i] = strings.Join(v, ",")
}
// Sort across dimension sets for equality checking
sort.Strings(expectedStringified)
sort.Strings(actualStringified)
assert.Equal(t, expectedStringified, actualStringified)
}

func TestTranslateOtToCWMetricWithInstrLibrary(t *testing.T) {

md := createMetricTestData()
Expand Down Expand Up @@ -756,7 +775,7 @@ func TestBuildCWMetric(t *testing.T) {
instrLibName := "InstrLibName"
OTelLib := "OTelLib"
metricSlice := []map[string]string{
map[string]string{
{
"Name": "foo",
"Unit": "",
},
Expand All @@ -779,9 +798,9 @@ func TestBuildCWMetric(t *testing.T) {
assert.NotNil(t, cwMetric)
assert.Equal(t, 1, len(cwMetric.Measurements))
expectedMeasurement := CwMeasurement{
Namespace: namespace,
Namespace: namespace,
Dimensions: [][]string{{"label1", OTelLib}},
Metrics: metricSlice,
Metrics: metricSlice,
}
assert.Equal(t, expectedMeasurement, cwMetric.Measurements[0])
expectedFields := map[string]interface{}{
Expand All @@ -806,9 +825,9 @@ func TestBuildCWMetric(t *testing.T) {
assert.NotNil(t, cwMetric)
assert.Equal(t, 1, len(cwMetric.Measurements))
expectedMeasurement := CwMeasurement{
Namespace: namespace,
Namespace: namespace,
Dimensions: [][]string{{"label1", OTelLib}},
Metrics: metricSlice,
Metrics: metricSlice,
}
assert.Equal(t, expectedMeasurement, cwMetric.Measurements[0])
expectedFields := map[string]interface{}{
Expand All @@ -835,9 +854,9 @@ func TestBuildCWMetric(t *testing.T) {
assert.NotNil(t, cwMetric)
assert.Equal(t, 1, len(cwMetric.Measurements))
expectedMeasurement := CwMeasurement{
Namespace: namespace,
Namespace: namespace,
Dimensions: [][]string{{"label1", OTelLib}},
Metrics: metricSlice,
Metrics: metricSlice,
}
assert.Equal(t, expectedMeasurement, cwMetric.Measurements[0])
expectedFields := map[string]interface{}{
Expand All @@ -864,9 +883,9 @@ func TestBuildCWMetric(t *testing.T) {
assert.NotNil(t, cwMetric)
assert.Equal(t, 1, len(cwMetric.Measurements))
expectedMeasurement := CwMeasurement{
Namespace: namespace,
Namespace: namespace,
Dimensions: [][]string{{"label1", OTelLib}},
Metrics: metricSlice,
Metrics: metricSlice,
}
assert.Equal(t, expectedMeasurement, cwMetric.Measurements[0])
expectedFields := map[string]interface{}{
Expand Down Expand Up @@ -894,14 +913,14 @@ func TestBuildCWMetric(t *testing.T) {
assert.NotNil(t, cwMetric)
assert.Equal(t, 1, len(cwMetric.Measurements))
expectedMeasurement := CwMeasurement{
Namespace: namespace,
Namespace: namespace,
Dimensions: [][]string{{"label1", OTelLib}},
Metrics: metricSlice,
Metrics: metricSlice,
}
assert.Equal(t, expectedMeasurement, cwMetric.Measurements[0])
expectedFields := map[string]interface{}{
OTelLib: instrLibName,
"foo": &CWMetricStats{
OTelLib: instrLibName,
"foo": &CWMetricStats{
Min: 1,
Max: 3,
Sum: 17.13,
Expand All @@ -911,7 +930,6 @@ func TestBuildCWMetric(t *testing.T) {
}
assert.Equal(t, expectedFields, cwMetric.Fields)
})

t.Run("Invalid datapoint type", func(t *testing.T) {
metric.SetDataType(pdata.MetricDataTypeIntGauge)
dp := pdata.NewIntHistogramDataPoint()
Expand Down Expand Up @@ -956,35 +974,23 @@ func TestCreateDimensions(t *testing.T) {
},
}

sliceSorter := func(slice [][]string) func(a, b int) bool {
stringified := make([]string, len(slice))
for i, v := range slice {
stringified[i] = strings.Join(v, ",")
}
return func(i, j int) bool {
return stringified[i] > stringified[j]
}
}

for _, tc := range testCases {
dp := pdata.NewIntDataPoint()
dp.InitEmpty()
dp.LabelsMap().InitFromMap(tc.labels)
dimensions, fields := createDimensions(dp, OTelLib, ZeroAndSingleDimensionRollup)

// Sort slice for equality check
sort.Slice(tc.dims, sliceSorter(tc.dims))
sort.Slice(dimensions, sliceSorter(dimensions))
t.Run(tc.testName, func(t *testing.T) {
dp := pdata.NewIntDataPoint()
dp.InitEmpty()
dp.LabelsMap().InitFromMap(tc.labels)
dimensions, fields := createDimensions(dp, OTelLib, ZeroAndSingleDimensionRollup)

assert.Equal(t, tc.dims, dimensions)
assertDimsEqual(t, tc.dims, dimensions)

expectedFields := make(map[string]interface{})
for k, v := range tc.labels {
expectedFields[k] = v
}
expectedFields[OTellibDimensionKey] = OTelLib
expectedFields := make(map[string]interface{})
for k, v := range tc.labels {
expectedFields[k] = v
}
expectedFields[OTellibDimensionKey] = OTelLib

assert.Equal(t, expectedFields, fields)
assert.Equal(t, expectedFields, fields)
})
}

}
Expand Down

0 comments on commit 9bb6f2d

Please sign in to comment.