mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 05:32:32 +08:00

* Use interface for factories * Add most mocks to unit test jobs * Generate more mocks for main jobs package * Interface for parser * Use clients directly without parser * Regenerate mock * Eliminate resource clients from Parser * Interface for folder tree
118 lines
3.0 KiB
Go
118 lines
3.0 KiB
Go
package resources
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
|
|
provisioning "github.com/grafana/grafana/pkg/apis/provisioning/v0alpha1"
|
|
"github.com/grafana/grafana/pkg/registry/apis/provisioning/repository"
|
|
)
|
|
|
|
func TestUtils(t *testing.T) {
|
|
t.Run("load playlist json", func(t *testing.T) {
|
|
obj, gvk, err := DecodeYAMLObject(bytes.NewReader([]byte(`{
|
|
"kind": "Playlist",
|
|
"apiVersion": "playlist.grafana.app/v0alpha1",
|
|
"metadata": {
|
|
"name": "hello"
|
|
},
|
|
"spec": {
|
|
"title": "Playlist from provisioning"
|
|
}
|
|
}`)))
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, &schema.GroupVersionKind{
|
|
Group: "playlist.grafana.app",
|
|
Version: "v0alpha1",
|
|
Kind: "Playlist",
|
|
}, gvk)
|
|
require.NotNil(t, obj)
|
|
})
|
|
|
|
t.Run("YAML Parsing", func(t *testing.T) {
|
|
obj, gvk, err := DecodeYAMLObject(bytes.NewReader([]byte("kind: xyz\npi: 3.1415")))
|
|
require.NoError(t, err)
|
|
require.NotNil(t, gvk)
|
|
require.Equal(t, "xyz", obj.Object["kind"])
|
|
require.Equal(t, 3.1415, obj.Object["pi"])
|
|
|
|
// // Tabs in the value
|
|
// _, _, err = LoadYAMLOrJSON(bytes.NewReader([]byte("kind: xyz\n\tpi: 3.1415")))
|
|
// require.Equal(t, ErrYamlContainsTabs, err)
|
|
})
|
|
|
|
t.Run("load playlist yaml", func(t *testing.T) {
|
|
obj, gvk, err := DecodeYAMLObject(bytes.NewReader([]byte(`
|
|
apiVersion: playlist.grafana.app/v0alpha1
|
|
kind: Playlist
|
|
metadata:
|
|
name: hello
|
|
spec:
|
|
title: a title
|
|
`)))
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, &schema.GroupVersionKind{
|
|
Group: "playlist.grafana.app",
|
|
Version: "v0alpha1",
|
|
Kind: "Playlist",
|
|
}, gvk)
|
|
require.NotNil(t, obj)
|
|
})
|
|
|
|
t.Run("load dashboard json", func(t *testing.T) {
|
|
// Support dashboard conversion
|
|
obj, gvk, classic, err := ReadClassicResource(context.Background(), &repository.FileInfo{
|
|
Data: []byte(`{
|
|
"schemaVersion": 7,
|
|
"panels": [],
|
|
"tags": []
|
|
}`),
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, provisioning.ClassicDashboard, classic)
|
|
require.Equal(t, &schema.GroupVersionKind{
|
|
Group: "dashboard.grafana.app",
|
|
Version: "v0alpha1",
|
|
Kind: "Dashboard",
|
|
}, gvk)
|
|
require.NotNil(t, obj)
|
|
})
|
|
|
|
t.Run("lint dashboard", func(t *testing.T) {
|
|
var err error
|
|
info := &repository.FileInfo{
|
|
Path: "devenv/dev-dashboards/panel-timeline/timeline-demo.json",
|
|
}
|
|
info.Data, err = os.ReadFile(path.Join("../../../../..", info.Path))
|
|
require.NoError(t, err)
|
|
|
|
parser := &parser{
|
|
repo: provisioning.ResourceRepositoryInfo{
|
|
Name: "test",
|
|
},
|
|
}
|
|
|
|
// Support dashboard conversion
|
|
parsed, err := parser.Parse(context.Background(), info)
|
|
require.EqualError(t, err, "no clients configured")
|
|
err = parsed.DryRun(context.Background())
|
|
require.EqualError(t, err, "no client configured")
|
|
|
|
require.Equal(t, provisioning.ClassicDashboard, parsed.Classic)
|
|
require.Equal(t, schema.GroupVersionKind{
|
|
Group: "dashboard.grafana.app",
|
|
Version: "v0alpha1",
|
|
Kind: "Dashboard",
|
|
}, parsed.GVK)
|
|
})
|
|
}
|