mirror of
https://github.com/prymitive/karma
synced 2026-08-23 11:56:20 +00:00
Refactor group fingerpint tests
Depending on exact value breaks when testing with a different Go version since implementation details might cause structhash to return a different hash. We don't depend on exact values in the UI, we only require that those values are unique to a unique set of labels and selected attributes, so that's what we should test rather than hardcoded values. This PR allows unsee to pass tests under Go 1.9beta2
This commit is contained in:
+69
-25
@@ -69,42 +69,42 @@ func TestUnseeAlertListSort(t *testing.T) {
|
||||
}
|
||||
|
||||
type agFPTest struct {
|
||||
ag models.AlertGroup
|
||||
fingerprint string
|
||||
name string // name of the test
|
||||
ag models.AlertGroup // alert group data
|
||||
fpChange bool // true if fingerprint should change vs previous run
|
||||
}
|
||||
|
||||
var agFPTests = []agFPTest{
|
||||
// empty group fingerprint
|
||||
agFPTest{
|
||||
ag: models.AlertGroup{},
|
||||
fingerprint: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
name: "empty group fingerprint",
|
||||
ag: models.AlertGroup{},
|
||||
},
|
||||
// different Receiver shouldn't change content fingerprint
|
||||
agFPTest{
|
||||
name: "different Receiver shouldn't change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
},
|
||||
fingerprint: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
fpChange: false,
|
||||
},
|
||||
// different StateCount shouldn't change content fingerprint
|
||||
agFPTest{
|
||||
name: "different StateCount shouldn't change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
StateCount: map[string]int{"default": 0},
|
||||
},
|
||||
fingerprint: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
fpChange: false,
|
||||
},
|
||||
// different Labels shouldn't change content fingerprint
|
||||
agFPTest{
|
||||
name: "different Labels shouldn't change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
Labels: map[string]string{"foo": "bar"},
|
||||
StateCount: map[string]int{"default": 0},
|
||||
},
|
||||
fingerprint: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
fpChange: false,
|
||||
},
|
||||
// different set of alerts should change content fingerprint
|
||||
agFPTest{
|
||||
name: "different set of alerts should change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
Labels: map[string]string{"foo": "bar"},
|
||||
@@ -116,22 +116,66 @@ var agFPTests = []agFPTest{
|
||||
},
|
||||
StateCount: map[string]int{"default": 0},
|
||||
},
|
||||
fingerprint: "87e79b3d507d26f21bc5e82b8db19f87ce46c1ad",
|
||||
fpChange: true,
|
||||
},
|
||||
agFPTest{
|
||||
name: "another different set of alerts should change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
Labels: map[string]string{"bar": "foo"},
|
||||
Alerts: models.AlertList{
|
||||
models.Alert{
|
||||
Labels: map[string]string{"bar": "foo"},
|
||||
State: models.AlertStateActive,
|
||||
},
|
||||
},
|
||||
StateCount: map[string]int{"default": 0},
|
||||
},
|
||||
fpChange: true,
|
||||
},
|
||||
agFPTest{
|
||||
name: "repeating last set of alerts shouldn't change content fingerprint",
|
||||
ag: models.AlertGroup{
|
||||
Receiver: "default",
|
||||
Labels: map[string]string{"bar": "foo"},
|
||||
Alerts: models.AlertList{
|
||||
models.Alert{
|
||||
Labels: map[string]string{"bar": "foo"},
|
||||
State: models.AlertStateActive,
|
||||
},
|
||||
},
|
||||
StateCount: map[string]int{"default": 0},
|
||||
},
|
||||
fpChange: false,
|
||||
},
|
||||
}
|
||||
|
||||
func TestAlertGroupContentFingerprint(t *testing.T) {
|
||||
for _, testCase := range agFPTests {
|
||||
alerts := models.AlertList{}
|
||||
for _, alert := range testCase.ag.Alerts {
|
||||
alert.UpdateFingerprints()
|
||||
alerts = append(alerts, alert)
|
||||
}
|
||||
sort.Sort(alerts)
|
||||
testCase.ag.Alerts = alerts
|
||||
if testCase.ag.ContentFingerprint() != testCase.fingerprint {
|
||||
t.Errorf("Invalid AlertGroup ContentFingerprint(), expected '%s', got '%s', AlertGroup: %v",
|
||||
testCase.fingerprint, testCase.ag.ContentFingerprint(), testCase.ag)
|
||||
}
|
||||
fps := []string{}
|
||||
for i, testCase := range agFPTests {
|
||||
t.Run(testCase.name, func(t *testing.T) {
|
||||
alerts := models.AlertList{}
|
||||
for _, alert := range testCase.ag.Alerts {
|
||||
alert.UpdateFingerprints()
|
||||
alerts = append(alerts, alert)
|
||||
}
|
||||
sort.Sort(alerts)
|
||||
testCase.ag.Alerts = alerts
|
||||
// get alert group fingerprint
|
||||
fp := testCase.ag.ContentFingerprint()
|
||||
// add it to the list
|
||||
fps = append(fps, fp)
|
||||
// skip first test case since there's nothing to compare it with
|
||||
if i > 0 {
|
||||
// check if current test case generated fingerprint that is different
|
||||
// from the previous one
|
||||
fpChange := fp != fps[i-1]
|
||||
// check if we expected a change or not
|
||||
if fpChange != testCase.fpChange {
|
||||
t.Errorf("Fingerprint changed=%t while expected change=%t, alertgroup: %v",
|
||||
fpChange, testCase.fpChange, testCase.ag)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user