Alerting: Refactor provisioning tests/fakes (#81205)

* Fix up test Alertmanager config JSON

* Move fake AM config and provisioning stores to fakes package
This commit is contained in:
William Wernert
2024-01-24 17:15:55 -05:00
committed by GitHub
parent e45f664ca4
commit 2203bc2a3d
10 changed files with 160 additions and 145 deletions
@@ -0,0 +1,44 @@
package fakes
import (
"context"
"crypto/md5"
"fmt"
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
type FakeAlertmanagerConfigStore struct {
Config models.AlertConfiguration
LastSaveCommand *models.SaveAlertmanagerConfigurationCmd
}
func NewFakeAlertmanagerConfigStore(config string) *FakeAlertmanagerConfigStore {
return &FakeAlertmanagerConfigStore{
Config: models.AlertConfiguration{
AlertmanagerConfiguration: config,
ConfigurationVersion: "v1",
Default: true,
OrgID: 1,
},
LastSaveCommand: nil,
}
}
func (f *FakeAlertmanagerConfigStore) GetLatestAlertmanagerConfiguration(ctx context.Context, orgID int64) (*models.AlertConfiguration, error) {
result := &f.Config
result.OrgID = orgID
result.ConfigurationHash = fmt.Sprintf("%x", md5.Sum([]byte(f.Config.AlertmanagerConfiguration)))
return result, nil
}
func (f *FakeAlertmanagerConfigStore) UpdateAlertmanagerConfiguration(ctx context.Context, cmd *models.SaveAlertmanagerConfigurationCmd) error {
f.Config = models.AlertConfiguration{
AlertmanagerConfiguration: cmd.AlertmanagerConfiguration,
ConfigurationVersion: cmd.ConfigurationVersion,
Default: cmd.Default,
OrgID: cmd.OrgID,
}
f.LastSaveCommand = cmd
return nil
}
@@ -0,0 +1,55 @@
package fakes
import (
"context"
"strings"
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
type FakeProvisioningStore struct {
Records map[int64]map[string]models.Provenance
}
func NewFakeProvisioningStore() *FakeProvisioningStore {
return &FakeProvisioningStore{
Records: map[int64]map[string]models.Provenance{},
}
}
func (f *FakeProvisioningStore) GetProvenance(ctx context.Context, o models.Provisionable, org int64) (models.Provenance, error) {
if val, ok := f.Records[org]; ok {
if prov, ok := val[o.ResourceID()+o.ResourceType()]; ok {
return prov, nil
}
}
return models.ProvenanceNone, nil
}
func (f *FakeProvisioningStore) GetProvenances(ctx context.Context, orgID int64, resourceType string) (map[string]models.Provenance, error) {
results := make(map[string]models.Provenance)
if val, ok := f.Records[orgID]; ok {
for k, v := range val {
if strings.HasSuffix(k, resourceType) {
results[strings.TrimSuffix(k, resourceType)] = v
}
}
}
return results, nil
}
func (f *FakeProvisioningStore) SetProvenance(ctx context.Context, o models.Provisionable, org int64, p models.Provenance) error {
if _, ok := f.Records[org]; !ok {
f.Records[org] = map[string]models.Provenance{}
}
_ = f.DeleteProvenance(ctx, o, org) // delete old entries first
f.Records[org][o.ResourceID()+o.ResourceType()] = p
return nil
}
func (f *FakeProvisioningStore) DeleteProvenance(ctx context.Context, o models.Provisionable, org int64) error {
if val, ok := f.Records[org]; ok {
delete(val, o.ResourceID()+o.ResourceType())
}
return nil
}