mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
With this change, we no longer need to persist silence/nflog states to disk in addition to the kvstore
109 lines
3.1 KiB
Go
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))
|
|
}
|
|
}
|