grafana/pkg/services/ngalert/notifier/file_store_test.go
Matthew Jacobson 0c3c5c5607
Alerting: Stop persisting silences and nflog to disk (#84706)
With this change, we no longer need to persist silence/nflog states to disk in addition to the kvstore
2024-03-23 00:37:33 +02:00

109 lines
3.1 KiB
Go

package notifier
import (
"context"
"encoding/base64"
"strings"
"testing"
"time"
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/services/ngalert/tests/fakes"
)
func TestFileStore_Silences(t *testing.T) {
store := fakes.NewFakeKVStore(t)
ctx := context.Background()
var orgId int64 = 1
// Initialize kvstore.
now := time.Now()
oneHour := now.Add(time.Hour)
initialState := silenceState{
"1": createSilence("1", now, oneHour),
"2": createSilence("2", now, oneHour),
}
decodedState, err := initialState.MarshalBinary()
require.NoError(t, err)
encodedState := base64.StdEncoding.EncodeToString(decodedState)
err = store.Set(ctx, orgId, KVNamespace, SilencesFilename, encodedState)
require.NoError(t, err)
fs := NewFileStore(orgId, store)
// Load initial.
silences, err := fs.GetSilences(ctx)
require.NoError(t, err)
decoded, err := decodeSilenceState(strings.NewReader(silences))
require.NoError(t, err)
if !cmp.Equal(initialState, decoded) {
t.Errorf("Unexpected Diff: %v", cmp.Diff(initialState, decoded))
}
// Save new.
newState := silenceState{
"a": createSilence("a", now, oneHour),
"b": createSilence("b", now, oneHour),
}
size, err := fs.SaveSilences(ctx, newState)
require.NoError(t, err)
require.EqualValues(t, len(decodedState), size)
// Load new.
silences, err = fs.GetSilences(ctx)
require.NoError(t, err)
decoded, err = decodeSilenceState(strings.NewReader(silences))
require.NoError(t, err)
if !cmp.Equal(newState, decoded) {
t.Errorf("Unexpected Diff: %v", cmp.Diff(newState, decoded))
}
}
func TestFileStore_NotificationLog(t *testing.T) {
store := fakes.NewFakeKVStore(t)
ctx := context.Background()
var orgId int64 = 1
// Initialize kvstore.
now := time.Now()
oneHour := now.Add(time.Hour)
k1, v1 := createNotificationLog("group1", "receiver1", now, oneHour)
k2, v2 := createNotificationLog("group2", "receiver2", now, oneHour)
initialState := nflogState{k1: v1, k2: v2}
decodedState, err := initialState.MarshalBinary()
require.NoError(t, err)
encodedState := base64.StdEncoding.EncodeToString(decodedState)
err = store.Set(ctx, orgId, KVNamespace, NotificationLogFilename, encodedState)
require.NoError(t, err)
fs := NewFileStore(orgId, store)
// Load initial.
nflog, err := fs.GetNotificationLog(ctx)
require.NoError(t, err)
decoded, err := decodeNflogState(strings.NewReader(nflog))
require.NoError(t, err)
if !cmp.Equal(initialState, decoded) {
t.Errorf("Unexpected Diff: %v", cmp.Diff(initialState, decoded))
}
// Save new.
k1, v1 = createNotificationLog("groupA", "receiverA", now, oneHour)
k2, v2 = createNotificationLog("groupB", "receiverB", now, oneHour)
newState := nflogState{k1: v1, k2: v2}
size, err := fs.SaveNotificationLog(ctx, newState)
require.NoError(t, err)
require.EqualValues(t, len(decodedState), size)
// Load new.
nflog, err = fs.GetNotificationLog(ctx)
require.NoError(t, err)
decoded, err = decodeNflogState(strings.NewReader(nflog))
require.NoError(t, err)
if !cmp.Equal(newState, decoded) {
t.Errorf("Unexpected Diff: %v", cmp.Diff(newState, decoded))
}
}