184 lines
4.1 KiB
Go
184 lines
4.1 KiB
Go
package filestore_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"reflect"
|
|
"sort"
|
|
"strconv"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/influxdata/chronograf"
|
|
"github.com/influxdata/chronograf/filestore"
|
|
clog "github.com/influxdata/chronograf/log"
|
|
)
|
|
|
|
func Test_Protoboard_All(t *testing.T) {
|
|
t.Parallel()
|
|
var tests = []struct {
|
|
Existing []chronograf.Protoboard
|
|
Err error
|
|
}{
|
|
{
|
|
Existing: []chronograf.Protoboard{
|
|
{ID: "1"},
|
|
{ID: "2"},
|
|
},
|
|
Err: nil,
|
|
},
|
|
{
|
|
Existing: []chronograf.Protoboard{},
|
|
Err: nil,
|
|
},
|
|
{
|
|
Existing: nil,
|
|
Err: errors.New("Error"),
|
|
},
|
|
}
|
|
for i, test := range tests {
|
|
fp, _ := MockProtoboards(test.Existing, test.Err)
|
|
protoboards, err := fp.All(context.Background())
|
|
if err != test.Err {
|
|
t.Errorf("Test %d: protoboards all error expected: %v; actual: %v", i, test.Err, err)
|
|
}
|
|
if !reflect.DeepEqual(protoboards, test.Existing) {
|
|
t.Errorf("Test %d: Protoboards should be equal; expected %v; actual %v", i, test.Existing, protoboards)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_Protoboard_Get(t *testing.T) {
|
|
t.Parallel()
|
|
var tests = []struct {
|
|
Existing []chronograf.Protoboard
|
|
ID string
|
|
Expected chronograf.Protoboard
|
|
Err error
|
|
}{
|
|
{
|
|
Existing: []chronograf.Protoboard{
|
|
{ID: "1"},
|
|
{ID: "2"},
|
|
},
|
|
ID: "1",
|
|
Expected: chronograf.Protoboard{
|
|
ID: "1",
|
|
},
|
|
Err: nil,
|
|
},
|
|
{
|
|
Existing: []chronograf.Protoboard{},
|
|
ID: "1",
|
|
Expected: chronograf.Protoboard{},
|
|
Err: chronograf.ErrProtoboardNotFound,
|
|
},
|
|
{
|
|
Existing: nil,
|
|
ID: "1",
|
|
Expected: chronograf.Protoboard{},
|
|
Err: chronograf.ErrProtoboardNotFound,
|
|
},
|
|
}
|
|
for i, test := range tests {
|
|
fp, _ := MockProtoboards(test.Existing, test.Err)
|
|
protoboard, err := fp.Get(context.Background(), test.ID)
|
|
if err != test.Err {
|
|
t.Errorf("Test %d: Protoboards get error expected: %v; actual: %v", i, test.Err, err)
|
|
}
|
|
if !reflect.DeepEqual(protoboard, test.Expected) {
|
|
t.Errorf("Test %d: Protoboards should be equal; expected %v; actual %v", i, test.Expected, protoboard)
|
|
}
|
|
}
|
|
}
|
|
|
|
type Mock_Protoboard_FileInfo struct {
|
|
name string
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) Name() string {
|
|
return m.name
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) Size() int64 {
|
|
return 0
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) Mode() os.FileMode {
|
|
return 0666
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) ModTime() time.Time {
|
|
return time.Now()
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) IsDir() bool {
|
|
return false
|
|
}
|
|
|
|
func (m *Mock_Protoboard_FileInfo) Sys() interface{} {
|
|
return nil
|
|
}
|
|
|
|
type Mock_Protoboard_FileInfos []os.FileInfo
|
|
|
|
func (m Mock_Protoboard_FileInfos) Len() int { return len(m) }
|
|
func (m Mock_Protoboard_FileInfos) Swap(i, j int) { m[i], m[j] = m[j], m[i] }
|
|
func (m Mock_Protoboard_FileInfos) Less(i, j int) bool { return m[i].Name() < m[j].Name() }
|
|
|
|
type Mock_Protoboard_ID struct {
|
|
id int
|
|
}
|
|
|
|
func (m *Mock_Protoboard_ID) Generate() (string, error) {
|
|
m.id++
|
|
return strconv.Itoa(m.id), nil
|
|
}
|
|
|
|
func MockProtoboards(existing []chronograf.Protoboard, expected error) (filestore.Protoboards, *map[string]chronograf.Protoboard) {
|
|
protoboards := map[string]chronograf.Protoboard{}
|
|
fileName := func(dir string, protoboard chronograf.Protoboard) string {
|
|
return path.Join(dir, protoboard.ID+".json")
|
|
}
|
|
dir := "dir"
|
|
for _, l := range existing {
|
|
protoboards[fileName(dir, l)] = l
|
|
}
|
|
load := func(file string) (chronograf.Protoboard, error) {
|
|
if expected != nil {
|
|
return chronograf.Protoboard{}, expected
|
|
}
|
|
|
|
l, ok := protoboards[file]
|
|
if !ok {
|
|
return chronograf.Protoboard{}, chronograf.ErrProtoboardNotFound
|
|
}
|
|
return l, nil
|
|
}
|
|
|
|
readDir := func(dirname string) ([]os.FileInfo, error) {
|
|
if expected != nil {
|
|
return nil, expected
|
|
}
|
|
info := []os.FileInfo{}
|
|
for k := range protoboards {
|
|
info = append(info, &Mock_Protoboard_FileInfo{filepath.Base(k)})
|
|
}
|
|
sort.Sort(Mock_Protoboard_FileInfos(info))
|
|
return info, nil
|
|
}
|
|
|
|
return filestore.Protoboards{
|
|
Dir: dir,
|
|
Load: load,
|
|
ReadDir: readDir,
|
|
IDs: &Mock_Protoboard_ID{
|
|
id: len(existing),
|
|
},
|
|
Logger: clog.New(clog.ParseLevel("debug")),
|
|
}, &protoboards
|
|
}
|