CloudWatch: Refactor tests to assert struct instead of marshalled json (#52024)

* CloudWatch: Refactor tests to assert struct instead of marshalled json

* apply linter suggestion

* Move false next to average
This commit is contained in:
Shirley 2022-07-25 11:48:09 +02:00 committed by GitHub
parent 4176b652a8
commit 7f73f65bcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,6 +12,8 @@ import (
) )
func TestRequestParser(t *testing.T) { func TestRequestParser(t *testing.T) {
average := "Average"
false := false
t.Run("Query migration ", func(t *testing.T) { t.Run("Query migration ", func(t *testing.T) {
t.Run("legacy statistics field is migrated", func(t *testing.T) { t.Run("legacy statistics field is migrated", func(t *testing.T) {
oldQuery := &backend.DataQuery{ oldQuery := &backend.DataQuery{
@ -45,25 +47,22 @@ func TestRequestParser(t *testing.T) {
}) })
t.Run("New dimensions structure", func(t *testing.T) { t.Run("New dimensions structure", func(t *testing.T) {
fixtureJSON := []byte(`{ query := QueryJson{
"refId": "ref1", RefId: "ref1",
"region": "us-east-1", Region: "us-east-1",
"namespace": "ec2", Namespace: "ec2",
"metricName": "CPUUtilization", MetricName: "CPUUtilization",
"id": "", Id: "",
"expression": "", Expression: "",
"dimensions": { Dimensions: map[string]interface{}{
"InstanceId": ["test"], "InstanceId": []interface{}{"test"},
"InstanceType": ["test2", "test3"] "InstanceType": []interface{}{"test2", "test3"},
}, },
"statistic": "Average", Statistic: &average,
"period": "600", Period: "600",
"hide": false Hide: &false,
}`) }
var query QueryJson
err := json.Unmarshal(fixtureJSON, &query)
require.NoError(t, err)
res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour)) res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour))
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, "us-east-1", res.Region) assert.Equal(t, "us-east-1", res.Region)
@ -82,25 +81,21 @@ func TestRequestParser(t *testing.T) {
}) })
t.Run("Old dimensions structure (backwards compatibility)", func(t *testing.T) { t.Run("Old dimensions structure (backwards compatibility)", func(t *testing.T) {
fixtureJSON := []byte(`{ query := QueryJson{
"refId": "ref1", RefId: "ref1",
"region": "us-east-1", Region: "us-east-1",
"namespace": "ec2", Namespace: "ec2",
"metricName": "CPUUtilization", MetricName: "CPUUtilization",
"id": "", Id: "",
"expression": "", Expression: "",
"dimensions": { Dimensions: map[string]interface{}{
"InstanceId": ["test"], "InstanceId": []interface{}{"test"},
"InstanceType": ["test2"] "InstanceType": []interface{}{"test2"},
}, },
"statistic": "Average", Statistic: &average,
"period": "600", Period: "600",
"hide": false Hide: &false,
}`) }
var query QueryJson
err := json.Unmarshal(fixtureJSON, &query)
require.NoError(t, err)
res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour)) res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour))
require.NoError(t, err) require.NoError(t, err)
@ -120,25 +115,21 @@ func TestRequestParser(t *testing.T) {
}) })
t.Run("Period defined in the editor by the user is being used when time range is short", func(t *testing.T) { t.Run("Period defined in the editor by the user is being used when time range is short", func(t *testing.T) {
fixtureJSON := []byte(`{ query := QueryJson{
"refId": "ref1", RefId: "ref1",
"region": "us-east-1", Region: "us-east-1",
"namespace": "ec2", Namespace: "ec2",
"metricName": "CPUUtilization", MetricName: "CPUUtilization",
"id": "", Id: "",
"expression": "", Expression: "",
"dimensions": { Dimensions: map[string]interface{}{
"InstanceId": ["test"], "InstanceId": []interface{}{"test"},
"InstanceType": ["test2"] "InstanceType": []interface{}{"test2"},
}, },
"statistic": "Average", Statistic: &average,
"hide": false Period: "900",
}`) Hide: &false,
}
var query QueryJson
err := json.Unmarshal(fixtureJSON, &query)
require.NoError(t, err)
query.Period = "900"
res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour)) res, err := parseRequestQuery(query, "ref1", time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour))
require.NoError(t, err) require.NoError(t, err)
@ -146,25 +137,21 @@ func TestRequestParser(t *testing.T) {
}) })
t.Run("Period is parsed correctly if not defined by user", func(t *testing.T) { t.Run("Period is parsed correctly if not defined by user", func(t *testing.T) {
fixtureJSON := []byte(`{ query := QueryJson{
"refId": "ref1", RefId: "ref1",
"region": "us-east-1", Region: "us-east-1",
"namespace": "ec2", Namespace: "ec2",
"metricName": "CPUUtilization", MetricName: "CPUUtilization",
"id": "", Id: "",
"expression": "", Expression: "",
"dimensions": { Dimensions: map[string]interface{}{
"InstanceId": ["test"], "InstanceId": []interface{}{"test"},
"InstanceType": ["test2"] "InstanceType": []interface{}{"test2"},
}, },
"statistic": "Average", Statistic: &average,
"hide": false, Hide: &false,
"period": "auto" Period: "auto",
}`) }
var query QueryJson
err := json.Unmarshal(fixtureJSON, &query)
require.NoError(t, err)
t.Run("Time range is 5 minutes", func(t *testing.T) { t.Run("Time range is 5 minutes", func(t *testing.T) {
query.Period = "auto" query.Period = "auto"
@ -340,21 +327,15 @@ func TestRequestParser(t *testing.T) {
} }
func getBaseJsonQuery() QueryJson { func getBaseJsonQuery() QueryJson {
fixtureJSON := []byte(`{ average := "Average"
"refId": "ref1", return QueryJson{
"region": "us-east-1", RefId: "ref1",
"namespace": "ec2", Region: "us-east-1",
"metricName": "CPUUtilization", Namespace: "ec2",
"statistic": "Average", MetricName: "CPUUtilization",
"period": "900" Statistic: &average,
}`) Period: "900",
var query QueryJson
err := json.Unmarshal(fixtureJSON, &query)
if err != nil {
panic(err)
} }
return query
} }
func Test_migrateAliasToDynamicLabel_single_query_preserves_old_alias_and_creates_new_label(t *testing.T) { func Test_migrateAliasToDynamicLabel_single_query_preserves_old_alias_and_creates_new_label(t *testing.T) {
@ -375,43 +356,39 @@ func Test_migrateAliasToDynamicLabel_single_query_preserves_old_alias_and_create
} }
for name, tc := range testCases { for name, tc := range testCases {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
queryJson := []byte(fmt.Sprintf(`{ average := "Average"
"region": "us-east-1", false := false
"namespace": "ec2",
"metricName": "CPUUtilization",
"alias": "%s",
"dimensions": {
"InstanceId": ["test"]
},
"statistic": "Average",
"period": "600",
"hide": false
}`, tc.inputAlias))
var query QueryJson queryToMigrate := QueryJson{
err := json.Unmarshal(queryJson, &query) Region: "us-east-1",
require.NoError(t, err) Namespace: "ec2",
MetricName: "CPUUtilization",
Alias: &tc.inputAlias,
Dimensions: map[string]interface{}{
"InstanceId": []interface{}{"test"},
},
Statistic: &average,
Period: "600",
Hide: &false,
}
migrateAliasToDynamicLabel(&query) migrateAliasToDynamicLabel(&queryToMigrate)
matchedJson := []byte(fmt.Sprintf(`{ expected := QueryJson{
"alias": "%s", Alias: &tc.inputAlias,
"dimensions": { Dimensions: map[string]interface{}{
"InstanceId": ["test"] "InstanceId": []interface{}{"test"},
}, },
"hide": false, Hide: &false,
"label": "%s", Label: &tc.expectedLabel,
"metricName": "CPUUtilization", MetricName: "CPUUtilization",
"namespace": "ec2", Namespace: "ec2",
"period": "600", Period: "600",
"region": "us-east-1", Region: "us-east-1",
"statistic": "Average" Statistic: &average,
}`, tc.inputAlias, tc.expectedLabel)) }
result, err := json.Marshal(query) assert.Equal(t, expected, queryToMigrate)
require.NoError(t, err)
assert.JSONEq(t, string(matchedJson), string(result))
}) })
} }
} }