Files
2025-04-23 20:54:35 +03:00

74 lines
1.8 KiB
Go

package dashboard
import (
"encoding/json"
"os"
"testing"
"github.com/stretchr/testify/require"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
dashv1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v1beta1"
)
func TestLargeDashboardSupport(t *testing.T) {
devdash := "../../../../devenv/dev-dashboards/all-panels.json"
// nolint:gosec
// We can ignore the gosec G304 warning because this is a test with hardcoded input values
f, err := os.ReadFile(devdash)
require.NoError(t, err)
dash := &dashv1.Dashboard{
ObjectMeta: v1.ObjectMeta{
Name: "test",
Namespace: "test",
},
}
err = json.Unmarshal(f, &dash.Spec)
require.NoError(t, err)
expectedPanelCount := 19
panels, found, err := unstructured.NestedSlice(dash.Spec.Object, "panels")
require.NoError(t, err)
require.True(t, found)
require.Len(t, panels, expectedPanelCount)
scheme := runtime.NewScheme()
err = dashv1.AddToScheme(scheme)
require.NoError(t, err)
largeObject := NewDashboardLargeObjectSupport(scheme, 0)
// Convert the dashboard to a small value
err = largeObject.ReduceSpec(dash)
require.NoError(t, err)
small, err := json.MarshalIndent(&dash.Spec, "", " ")
require.NoError(t, err)
require.JSONEq(t, `{
"schemaVersion": 36,
"title": "Panel tests - All panels",
"tags": ["gdev","panel-tests","all-panels"]
}`, string(small))
// Now make it big again
rehydratedDash := &dashv1.Dashboard{
ObjectMeta: v1.ObjectMeta{
Name: "test",
Namespace: "test",
},
}
err = largeObject.RebuildSpec(rehydratedDash, f)
require.NoError(t, err)
// check that all panels exist again
panels, found, err = unstructured.NestedSlice(rehydratedDash.Spec.Object, "panels")
require.NoError(t, err)
require.True(t, found)
require.Len(t, panels, expectedPanelCount)
}