grafana/pkg/services/store/kind/dashboard/summary_test.go

116 lines
2.4 KiB
Go

package dashboard
import (
"bytes"
"context"
"encoding/json"
"os"
"path"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestGdevReadSummaries(t *testing.T) {
devdash := "../../../../../devenv/dev-dashboards/panel-graph/"
ctx := context.Background()
reader := GetEntitySummaryBuilder()
failed := make([]string, 0, 10)
err := filepath.Walk(devdash,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && strings.HasSuffix(path, ".json") {
// Ignore gosec warning G304 since it's a test
// nolint:gosec
body, err := os.ReadFile(path)
if err != nil {
return err
}
uid := path[len(devdash):]
summary, _, err := reader(ctx, uid, body)
if err != nil {
return err
}
out, err := json.MarshalIndent(summary, "", " ")
if err != nil {
return err
}
gpath := "testdata/gdev-walk-" + strings.ReplaceAll(uid, "/", "-")
// Ignore gosec warning G304 since it's a test
// nolint:gosec
golden, _ := os.ReadFile(gpath)
if !bytes.Equal(out, golden) {
failed = append(failed, uid)
err = os.WriteFile(gpath, out, 0600)
if err != nil {
return err
}
}
}
return nil
})
require.NoError(t, err)
// accumulated in the walk test
require.Equal(t, []string{}, failed)
}
func TestReadSummaries(t *testing.T) {
names := []string{
"with-library-panels",
}
ctx := context.Background()
reader := GetEntitySummaryBuilder()
failed := make([]string, 0, 10)
for _, name := range names {
fpath := path.Join("testdata", name+".json")
// Ignore gosec warning G304 since it's a test
// nolint:gosec
body, err := os.ReadFile(fpath)
if err != nil {
require.NoError(t, err, "error reading: "+fpath)
}
summary, _, err := reader(ctx, name, body)
if err != nil {
require.NoError(t, err, "error parsing: "+fpath)
}
out, err := json.MarshalIndent(summary, "", " ")
if err != nil {
require.NoError(t, err, "error formatting: "+fpath)
}
gpath := path.Join("testdata", name+"-info.json")
// Ignore gosec warning G304 since it's a test
// nolint:gosec
golden, _ := os.ReadFile(gpath)
if !bytes.Equal(out, golden) {
failed = append(failed, name)
err = os.WriteFile(gpath, out, 0600)
if err != nil {
require.NoError(t, err, "error writing snapshot: "+fpath)
}
}
}
// accumulated in the walk test
require.Equal(t, []string{}, failed)
}