65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package auditing_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/apiserver/auditing"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestEvent_MarshalJSON(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("marshals the event", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
now := time.Now()
|
|
|
|
event := auditing.Event{
|
|
ObservedAt: now,
|
|
Extra: map[string]string{"k1": "v1", "k2": "v2"},
|
|
}
|
|
|
|
data, err := json.Marshal(event)
|
|
require.NoError(t, err)
|
|
|
|
var result map[string]any
|
|
require.NoError(t, json.Unmarshal(data, &result))
|
|
|
|
require.Equal(t, event.Time().UTC().Format(time.RFC3339Nano), result["observedAt"])
|
|
require.NotNil(t, result["extra"])
|
|
require.Len(t, result["extra"], 2)
|
|
})
|
|
}
|
|
|
|
func TestEvent_KVPairs(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("records extra fields", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
extraFields := 2
|
|
extra := make(map[string]string, 0)
|
|
for i := 0; i < extraFields; i++ {
|
|
extra[strconv.Itoa(i)] = "value"
|
|
}
|
|
|
|
event := auditing.Event{Extra: extra}
|
|
|
|
kvPairs := event.KVPairs()
|
|
|
|
extraCount := 0
|
|
for i := 0; i < len(kvPairs); i += 2 {
|
|
if strings.HasPrefix(kvPairs[i].(string), "extra_") {
|
|
extraCount++
|
|
}
|
|
}
|
|
|
|
require.Equal(t, extraCount, extraFields)
|
|
})
|
|
}
|