From babb17afd65e8a872ac4bae9e3b7765ace116b86 Mon Sep 17 00:00:00 2001 From: Kyle Brandt Date: Thu, 13 May 2021 10:05:33 -0400 Subject: [PATCH] Alerting/Chore: Move tests from tests package (#34059) Instead put in package folder but with package name suffixed with _test This enables code coverage within the pkg while still allow the tests to operate from external to package perspective (only exported things). --- .../{tests => schedule}/schedule_test.go | 20 +++++++++++-------- .../ngalert/{tests => state}/manager_test.go | 2 +- .../instance_database_test.go | 13 ++++++------ pkg/services/ngalert/tests/util.go | 8 ++++---- 4 files changed, 24 insertions(+), 19 deletions(-) rename pkg/services/ngalert/{tests => schedule}/schedule_test.go (93%) rename pkg/services/ngalert/{tests => state}/manager_test.go (99%) rename pkg/services/ngalert/{tests => store}/instance_database_test.go (93%) diff --git a/pkg/services/ngalert/tests/schedule_test.go b/pkg/services/ngalert/schedule/schedule_test.go similarity index 93% rename from pkg/services/ngalert/tests/schedule_test.go rename to pkg/services/ngalert/schedule/schedule_test.go index 963870a4e7c..b53fb958af6 100644 --- a/pkg/services/ngalert/tests/schedule_test.go +++ b/pkg/services/ngalert/schedule/schedule_test.go @@ -1,4 +1,4 @@ -package tests +package schedule_test import ( "context" @@ -12,6 +12,8 @@ import ( "github.com/google/go-cmp/cmp/cmpopts" "github.com/grafana/grafana-plugin-sdk-go/data" "github.com/grafana/grafana/pkg/services/ngalert/eval" + "github.com/grafana/grafana/pkg/services/ngalert/metrics" + "github.com/grafana/grafana/pkg/services/ngalert/tests" "github.com/grafana/grafana/pkg/services/ngalert/state" @@ -27,6 +29,8 @@ import ( "github.com/benbjohnson/clock" ) +var nilMetrics = metrics.NewMetrics(nil) + type evalAppliedInfo struct { alertDefKey models.AlertRuleKey now time.Time @@ -34,9 +38,9 @@ type evalAppliedInfo struct { func TestWarmStateCache(t *testing.T) { evaluationTime, _ := time.Parse("2006-01-02", "2021-03-25") - dbstore := setupTestEnv(t, 1) + dbstore := tests.SetupTestEnv(t, 1) - rule := createTestAlertRule(t, dbstore, 600) + rule := tests.CreateTestAlertRule(t, dbstore, 600) expectedEntries := []*state.State{ { @@ -119,15 +123,15 @@ func TestWarmStateCache(t *testing.T) { } func TestAlertingTicker(t *testing.T) { - dbstore := setupTestEnv(t, 1) + dbstore := tests.SetupTestEnv(t, 1) t.Cleanup(registry.ClearOverrides) alerts := make([]*models.AlertRule, 0) // create alert rule with zero interval (should never run) - alerts = append(alerts, createTestAlertRule(t, dbstore, 0)) + alerts = append(alerts, tests.CreateTestAlertRule(t, dbstore, 0)) // create alert rule with one second interval - alerts = append(alerts, createTestAlertRule(t, dbstore, 1)) + alerts = append(alerts, tests.CreateTestAlertRule(t, dbstore, 1)) evalAppliedCh := make(chan evalAppliedInfo, len(alerts)) stopAppliedCh := make(chan models.AlertRuleKey, len(alerts)) @@ -167,7 +171,7 @@ func TestAlertingTicker(t *testing.T) { // change alert rule interval to three seconds var threeSecInterval int64 = 3 - alerts[0] = updateTestAlertRuleIntervalSeconds(t, dbstore, alerts[0], threeSecInterval) + alerts[0] = tests.UpdateTestAlertRuleIntervalSeconds(t, dbstore, alerts[0], threeSecInterval) t.Logf("alert rule: %v interval reset to: %d", alerts[0].GetKey(), threeSecInterval) expectedAlertRulesEvaluated = []models.AlertRuleKey{alerts[1].GetKey()} @@ -209,7 +213,7 @@ func TestAlertingTicker(t *testing.T) { }) // create alert rule with one second interval - alerts = append(alerts, createTestAlertRule(t, dbstore, 1)) + alerts = append(alerts, tests.CreateTestAlertRule(t, dbstore, 1)) expectedAlertRulesEvaluated = []models.AlertRuleKey{alerts[2].GetKey()} t.Run(fmt.Sprintf("on 7th tick alert rules: %s should be evaluated", concatenate(expectedAlertRulesEvaluated)), func(t *testing.T) { diff --git a/pkg/services/ngalert/tests/manager_test.go b/pkg/services/ngalert/state/manager_test.go similarity index 99% rename from pkg/services/ngalert/tests/manager_test.go rename to pkg/services/ngalert/state/manager_test.go index dc91dcbaabe..5917ce83664 100644 --- a/pkg/services/ngalert/tests/manager_test.go +++ b/pkg/services/ngalert/state/manager_test.go @@ -1,4 +1,4 @@ -package tests +package state_test import ( "testing" diff --git a/pkg/services/ngalert/tests/instance_database_test.go b/pkg/services/ngalert/store/instance_database_test.go similarity index 93% rename from pkg/services/ngalert/tests/instance_database_test.go rename to pkg/services/ngalert/store/instance_database_test.go index 95aba4c14a9..ee056d2d300 100644 --- a/pkg/services/ngalert/tests/instance_database_test.go +++ b/pkg/services/ngalert/store/instance_database_test.go @@ -1,6 +1,6 @@ // +build integration -package tests +package store_test import ( "testing" @@ -9,6 +9,7 @@ import ( "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/ngalert/models" "github.com/grafana/grafana/pkg/services/ngalert/store" + "github.com/grafana/grafana/pkg/services/ngalert/tests" "github.com/stretchr/testify/require" ) @@ -25,19 +26,19 @@ func mockTimeNow() { } func TestAlertInstanceOperations(t *testing.T) { - dbstore := setupTestEnv(t, baseIntervalSeconds) + dbstore := tests.SetupTestEnv(t, baseIntervalSeconds) t.Cleanup(registry.ClearOverrides) - alertRule1 := createTestAlertRule(t, dbstore, 60) + alertRule1 := tests.CreateTestAlertRule(t, dbstore, 60) orgID := alertRule1.OrgID - alertRule2 := createTestAlertRule(t, dbstore, 60) + alertRule2 := tests.CreateTestAlertRule(t, dbstore, 60) require.Equal(t, orgID, alertRule2.OrgID) - alertRule3 := createTestAlertRule(t, dbstore, 60) + alertRule3 := tests.CreateTestAlertRule(t, dbstore, 60) require.Equal(t, orgID, alertRule3.OrgID) - alertRule4 := createTestAlertRule(t, dbstore, 60) + alertRule4 := tests.CreateTestAlertRule(t, dbstore, 60) require.Equal(t, orgID, alertRule4.OrgID) t.Run("can save and read new alert instance", func(t *testing.T) { diff --git a/pkg/services/ngalert/tests/util.go b/pkg/services/ngalert/tests/util.go index 41e4753fc28..7ad4d1a9d0b 100644 --- a/pkg/services/ngalert/tests/util.go +++ b/pkg/services/ngalert/tests/util.go @@ -24,8 +24,8 @@ import ( "github.com/stretchr/testify/require" ) -// setupTestEnv initializes a store to used by the tests. -func setupTestEnv(t *testing.T, baseIntervalSeconds int64) *store.DBstore { +// SetupTestEnv initializes a store to used by the tests. +func SetupTestEnv(t *testing.T, baseIntervalSeconds int64) *store.DBstore { cfg := setting.NewCfg() // AlertNG is disabled by default and only if it's enabled // its database migrations run and the relative database tables are created @@ -65,7 +65,7 @@ func overrideAlertNGInRegistry(t *testing.T, cfg *setting.Cfg) ngalert.AlertNG { } // createTestAlertRule creates a dummy alert definition to be used by the tests. -func createTestAlertRule(t *testing.T, dbstore *store.DBstore, intervalSeconds int64) *models.AlertRule { +func CreateTestAlertRule(t *testing.T, dbstore *store.DBstore, intervalSeconds int64) *models.AlertRule { d := rand.Intn(1000) ruleGroup := fmt.Sprintf("ruleGroup-%d", d) err := dbstore.UpdateRuleGroup(store.UpdateRuleGroupCmd{ @@ -118,7 +118,7 @@ func createTestAlertRule(t *testing.T, dbstore *store.DBstore, intervalSeconds i } // updateTestAlertRule update a dummy alert definition to be used by the tests. -func updateTestAlertRuleIntervalSeconds(t *testing.T, dbstore *store.DBstore, existingRule *models.AlertRule, intervalSeconds int64) *models.AlertRule { +func UpdateTestAlertRuleIntervalSeconds(t *testing.T, dbstore *store.DBstore, existingRule *models.AlertRule, intervalSeconds int64) *models.AlertRule { cmd := store.UpdateRuleGroupCmd{ OrgID: 1, NamespaceUID: "namespace",