Alerting: Marshal incoming json.RawMessage in diff (#84692)

This will ensure the encoding is correct when comparing
to the existing rule.
This commit is contained in:
William Wernert 2024-03-20 13:10:39 -04:00 committed by GitHub
parent 8336f1fc1e
commit 6d16cf2699
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 1 deletions

View File

@ -346,7 +346,11 @@ func (alertRule *AlertRule) Diff(rule *AlertRule, ignore ...string) cmputil.Diff
// json.RawMessage is a slice of bytes and therefore cmp's default behavior is to compare it by byte, which is not really useful
var jsonCmp = cmp.Transformer("", func(in json.RawMessage) string {
return string(in)
b, err := json.Marshal(in)
if err != nil {
return string(in)
}
return string(b)
})
ops = append(
ops,

View File

@ -656,6 +656,21 @@ func TestDiff(t *testing.T) {
}
})
t.Run("should correctly detect no change with '<' and '>' in query", func(t *testing.T) {
old := query1
new := query1
old.Model = json.RawMessage(`{"field1": "$A \u003c 1"}`)
new.Model = json.RawMessage(`{"field1": "$A < 1"}`)
rule1.Data = []AlertQuery{old}
rule2.Data = []AlertQuery{new}
diff := rule1.Diff(rule2)
assert.Nil(t, diff)
// reset rule1
rule1.Data = []AlertQuery{query1}
})
t.Run("should detect new changes in array if too many fields changed", func(t *testing.T) {
query2 := query1
query2.QueryType = "test"