2022-02-04 13:23:19 -06:00
|
|
|
package store_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"testing"
|
|
|
|
|
2023-01-30 02:55:35 -06:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
2022-03-15 11:48:42 -05:00
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert"
|
2022-02-04 13:23:19 -06:00
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/models"
|
2022-04-05 16:48:51 -05:00
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/provisioning"
|
2022-03-15 11:48:42 -05:00
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/store"
|
2022-02-04 13:23:19 -06:00
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/tests"
|
|
|
|
)
|
|
|
|
|
|
|
|
const testAlertingIntervalSeconds = 10
|
|
|
|
|
2022-10-10 00:54:54 -05:00
|
|
|
func TestIntegrationProvisioningStore(t *testing.T) {
|
2022-11-04 09:14:21 -05:00
|
|
|
if testing.Short() {
|
|
|
|
t.Skip("skipping integration test")
|
|
|
|
}
|
2022-04-05 16:48:51 -05:00
|
|
|
store := createProvisioningStoreSut(tests.SetupTestEnv(t, testAlertingIntervalSeconds))
|
2022-02-04 13:23:19 -06:00
|
|
|
|
|
|
|
t.Run("Default provenance of a known type is None", func(t *testing.T) {
|
|
|
|
rule := models.AlertRule{
|
|
|
|
UID: "asdf",
|
|
|
|
}
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
provenance, err := store.GetProvenance(context.Background(), &rule, 1)
|
2022-02-04 13:23:19 -06:00
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceNone, provenance)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Store returns saved provenance type", func(t *testing.T) {
|
|
|
|
rule := models.AlertRule{
|
|
|
|
UID: "123",
|
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
err := store.SetProvenance(context.Background(), &rule, 1, models.ProvenanceFile)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err := store.GetProvenance(context.Background(), &rule, 1)
|
2022-02-04 13:23:19 -06:00
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceFile, p)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Store does not get provenance of record with different org ID", func(t *testing.T) {
|
|
|
|
ruleOrg2 := models.AlertRule{
|
2022-04-26 10:30:57 -05:00
|
|
|
UID: "456",
|
2022-02-04 13:23:19 -06:00
|
|
|
}
|
|
|
|
ruleOrg3 := models.AlertRule{
|
2022-04-26 10:30:57 -05:00
|
|
|
UID: "456",
|
2022-02-04 13:23:19 -06:00
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
err := store.SetProvenance(context.Background(), &ruleOrg2, 2, models.ProvenanceFile)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err := store.GetProvenance(context.Background(), &ruleOrg3, 3)
|
2022-02-04 13:23:19 -06:00
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceNone, p)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Store only updates provenance of record with given org ID", func(t *testing.T) {
|
|
|
|
ruleOrg2 := models.AlertRule{
|
|
|
|
UID: "789",
|
|
|
|
OrgID: 2,
|
|
|
|
}
|
|
|
|
ruleOrg3 := models.AlertRule{
|
|
|
|
UID: "789",
|
|
|
|
OrgID: 3,
|
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
err := store.SetProvenance(context.Background(), &ruleOrg2, 2, models.ProvenanceFile)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
2022-04-26 10:30:57 -05:00
|
|
|
err = store.SetProvenance(context.Background(), &ruleOrg3, 3, models.ProvenanceFile)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
err = store.SetProvenance(context.Background(), &ruleOrg2, 2, models.ProvenanceAPI)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err := store.GetProvenance(context.Background(), &ruleOrg2, 2)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.Equal(t, models.ProvenanceAPI, p)
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err = store.GetProvenance(context.Background(), &ruleOrg3, 3)
|
2022-02-04 13:23:19 -06:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceFile, p)
|
|
|
|
})
|
2022-04-13 15:15:55 -05:00
|
|
|
|
|
|
|
t.Run("Store should return all provenances by type", func(t *testing.T) {
|
|
|
|
const orgID = 123
|
2022-04-26 10:30:57 -05:00
|
|
|
rule1 := models.AlertRule{
|
2022-04-13 15:15:55 -05:00
|
|
|
UID: "789",
|
|
|
|
OrgID: orgID,
|
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
rule2 := models.AlertRule{
|
2022-04-13 15:15:55 -05:00
|
|
|
UID: "790",
|
|
|
|
OrgID: orgID,
|
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
err := store.SetProvenance(context.Background(), &rule1, orgID, models.ProvenanceFile)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
2022-04-26 10:30:57 -05:00
|
|
|
err = store.SetProvenance(context.Background(), &rule2, orgID, models.ProvenanceAPI)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err := store.GetProvenances(context.Background(), orgID, rule1.ResourceType())
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, p, 2)
|
2022-04-26 10:30:57 -05:00
|
|
|
require.Equal(t, models.ProvenanceFile, p[rule1.UID])
|
|
|
|
require.Equal(t, models.ProvenanceAPI, p[rule2.UID])
|
2022-04-13 15:15:55 -05:00
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Store should delete provenance correctly", func(t *testing.T) {
|
|
|
|
const orgID = 1234
|
|
|
|
ruleOrg := models.AlertRule{
|
|
|
|
UID: "7834539",
|
|
|
|
OrgID: orgID,
|
|
|
|
}
|
2022-04-26 10:30:57 -05:00
|
|
|
err := store.SetProvenance(context.Background(), &ruleOrg, orgID, models.ProvenanceFile)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err := store.GetProvenance(context.Background(), &ruleOrg, orgID)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceFile, p)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
err = store.DeleteProvenance(context.Background(), &ruleOrg, orgID)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2022-04-26 10:30:57 -05:00
|
|
|
p, err = store.GetProvenance(context.Background(), &ruleOrg, orgID)
|
2022-04-13 15:15:55 -05:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, models.ProvenanceNone, p)
|
|
|
|
})
|
2022-03-15 11:48:42 -05:00
|
|
|
}
|
|
|
|
|
2022-04-05 16:48:51 -05:00
|
|
|
func createProvisioningStoreSut(_ *ngalert.AlertNG, db *store.DBstore) provisioning.ProvisioningStore {
|
|
|
|
return db
|
2022-02-04 13:23:19 -06:00
|
|
|
}
|