189 lines
3.5 KiB
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)
|
|
}
|
|
}
|