[v10.4.x] Alerting: Marshal incoming json.RawMessage in diff (#84853)
Alerting: Marshal incoming json.RawMessage in diff (#84692)
This will ensure the encoding is correct when comparing
to the existing rule.
(cherry picked from commit 6d16cf2699)
Co-authored-by: William Wernert <william.wernert@grafana.com>
This commit is contained in:
co-authored by
William Wernert
parent
d3ce857c0e
commit
04f6c66e91
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user