chronograf/filestore/dashboards_test.go

189 lines
3.5 KiB
Go

package filestore_test
import (
"context"
"fmt"
"io/ioutil"
"os"
"path"
"testing"
"github.com/influxdata/chronograf"
"github.com/influxdata/chronograf/filestore"
"github.com/influxdata/chronograf/mocks"
"github.com/stretchr/testify/require"
)
type dashAllTest struct {
boards []string
err bool
}
func TestDashboardsAll(t *testing.T) {
var tests = []dashAllTest{
{
boards: []string{
`{
"id": 1,
"cells": [],
"templates": [],
"name": "test-int-id",
"organization": "default"
}`,
`{
"id": "2",
"cells": [],
"templates": [],
"name": "test-string-id",
"organization": "default"
}`,
},
err: false,
},
{
boards: []string{
`{
"meta": {"whatever": "is"},
"dashboard": {
"id": "-1",
"cells": [],
"templates": [],
"name": "test-wrapped-dashboard",
"organization": "default"
}
}`,
},
err: false,
},
{
boards: []string{
`{
"id": "abc123",
"cells": [],
"templates": [],
"name": "test-string-id",
"organization": "default"
}`,
},
err: true,
},
}
for i, test := range tests {
testDashboardAll(t, i, test)
}
}
func testDashboardAll(t *testing.T, i int, test dashAllTest) {
dir, err := ioutil.TempDir("", "dashboard-all")
require.NoError(t, err)
defer os.RemoveAll(dir)
for j, b := range test.boards {
require.NoError(t, ioutil.WriteFile(path.Join(dir, fmt.Sprintf("%d-%d.dashboard", i, j)), []byte(b), 0644))
}
dboards, err := filestore.NewDashboards(dir, mocks.NewLogger()).All(context.TODO())
require.NoError(t, err)
if test.err {
require.Equal(t, 0, len(dboards))
} else {
require.Equal(t, len(test.boards), len(dboards))
for _, b := range dboards {
require.NotEmpty(t, b.Name)
require.NotEqual(t, b.ID, 0)
}
}
}
type dashUpdateTest struct {
pre []string
post []chronograf.Dashboard
err bool
}
func TestDashboardsUpdate(t *testing.T) {
var tests = []dashUpdateTest{
{
pre: []string{
`{
"id": 1,
"cells": [],
"templates": [],
"name": "test-int-id",
"organization": "default"
}`,
`{
"id": "2",
"cells": [],
"templates": [],
"name": "test-string-id",
"organization": "default"
}`,
},
post: []chronograf.Dashboard{
{
ID: chronograf.DashboardID(1),
Name: "test-int-id-1",
Organization: "default",
},
{
ID: chronograf.DashboardID(2),
Name: "test-string-id-1",
Organization: "default",
},
},
err: false,
},
{
pre: []string{
`{
"id": "abc123",
"cells": [],
"templates": [],
"name": "test-string-id",
"organization": "default"
}`,
},
post: []chronograf.Dashboard{
{
ID: chronograf.DashboardID(1),
Name: "test-string-id",
Organization: "default",
},
},
err: true,
},
}
for i, test := range tests {
testDashboardUpdate(t, i, test)
}
}
func testDashboardUpdate(t *testing.T, i int, test dashUpdateTest) {
dir, err := ioutil.TempDir("", "dashboard-all")
require.NoError(t, err)
defer os.RemoveAll(dir)
for j, b := range test.pre {
require.NoError(t, ioutil.WriteFile(path.Join(dir, fmt.Sprintf("%d-%d.dashboard", i, j)), []byte(b), 0644))
}
dash := filestore.NewDashboards(dir, mocks.NewLogger())
for _, b := range test.post {
require.Equal(t, test.err, dash.Update(context.TODO(), b) != nil)
}
dboards, err := dash.All(context.TODO())
require.NoError(t, err)
if test.err {
require.Equal(t, 0, len(dboards))
} else {
require.Equal(t, len(test.pre), len(dboards))
require.Equal(t, test.post, dboards)
}
}