mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Simplistic store API for provenance lookups on arbitrary types * Add a few notes in comments * Improved type safety for provisioned objects * Clean-up TODOs for future PRs * Clean up provisioning model * Clean up tests * Restrict allowable types in interface * Fix linter error * Move AlertRule domain methods to same file as AlertRule definition * Update pkg/services/ngalert/models/provisioning.go Co-authored-by: George Robinson <george.robinson@grafana.com> * Complete interface rename * Pass context through store API * More idiomatic method names * Better error description * Improve code-docs * Use ORM language instead of raw sql * Add support for records in different orgs * ResourceTypeID -> ResourceType since it's not an ID Co-authored-by: George Robinson <george.robinson@grafana.com>
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package store_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/models"
|
|
"github.com/grafana/grafana/pkg/services/ngalert/tests"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const testAlertingIntervalSeconds = 10
|
|
|
|
func TestProvisioningStore(t *testing.T) {
|
|
_, dbstore := tests.SetupTestEnv(t, testAlertingIntervalSeconds)
|
|
|
|
t.Run("Default provenance of a known type is None", func(t *testing.T) {
|
|
rule := models.AlertRule{
|
|
UID: "asdf",
|
|
}
|
|
|
|
provenance, err := dbstore.GetProvenance(context.Background(), &rule)
|
|
|
|
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",
|
|
}
|
|
err := dbstore.SetProvenance(context.Background(), &rule, models.ProvenanceFile)
|
|
require.NoError(t, err)
|
|
|
|
p, err := dbstore.GetProvenance(context.Background(), &rule)
|
|
|
|
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{
|
|
UID: "456",
|
|
OrgID: 2,
|
|
}
|
|
ruleOrg3 := models.AlertRule{
|
|
UID: "456",
|
|
OrgID: 3,
|
|
}
|
|
err := dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceFile)
|
|
require.NoError(t, err)
|
|
|
|
p, err := dbstore.GetProvenance(context.Background(), &ruleOrg3)
|
|
|
|
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,
|
|
}
|
|
err := dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceFile)
|
|
require.NoError(t, err)
|
|
err = dbstore.SetProvenance(context.Background(), &ruleOrg3, models.ProvenanceFile)
|
|
require.NoError(t, err)
|
|
|
|
err = dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceApi)
|
|
require.NoError(t, err)
|
|
|
|
p, err := dbstore.GetProvenance(context.Background(), &ruleOrg2)
|
|
require.NoError(t, err)
|
|
require.Equal(t, models.ProvenanceApi, p)
|
|
p, err = dbstore.GetProvenance(context.Background(), &ruleOrg3)
|
|
require.NoError(t, err)
|
|
require.Equal(t, models.ProvenanceFile, p)
|
|
})
|
|
}
|