489 lines
12 KiB
Go
489 lines
12 KiB
Go
package internal_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/influxdata/platform/chronograf"
|
|
"github.com/influxdata/platform/chronograf/bolt/internal"
|
|
)
|
|
|
|
func TestMarshalSource(t *testing.T) {
|
|
v := chronograf.Source{
|
|
ID: 12,
|
|
Name: "Fountain of Truth",
|
|
Type: "influx",
|
|
Username: "docbrown",
|
|
Password: "1 point twenty-one g1g@w@tts",
|
|
URL: "http://twin-pines.mall.io:8086",
|
|
MetaURL: "http://twin-pines.meta.io:8086",
|
|
Default: true,
|
|
Telegraf: "telegraf",
|
|
}
|
|
|
|
var vv chronograf.Source
|
|
if buf, err := internal.MarshalSource(v); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalSource(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !reflect.DeepEqual(v, vv) {
|
|
t.Fatalf("source protobuf copy error: got %#v, expected %#v", vv, v)
|
|
}
|
|
|
|
// Test if the new insecureskipverify works
|
|
v.InsecureSkipVerify = true
|
|
if buf, err := internal.MarshalSource(v); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalSource(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !reflect.DeepEqual(v, vv) {
|
|
t.Fatalf("source protobuf copy error: got %#v, expected %#v", vv, v)
|
|
}
|
|
}
|
|
func TestMarshalSourceWithSecret(t *testing.T) {
|
|
v := chronograf.Source{
|
|
ID: 12,
|
|
Name: "Fountain of Truth",
|
|
Type: "influx",
|
|
Username: "docbrown",
|
|
SharedSecret: "hunter2s",
|
|
URL: "http://twin-pines.mall.io:8086",
|
|
MetaURL: "http://twin-pines.meta.io:8086",
|
|
Default: true,
|
|
Telegraf: "telegraf",
|
|
}
|
|
|
|
var vv chronograf.Source
|
|
if buf, err := internal.MarshalSource(v); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalSource(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !reflect.DeepEqual(v, vv) {
|
|
t.Fatalf("source protobuf copy error: got %#v, expected %#v", vv, v)
|
|
}
|
|
|
|
// Test if the new insecureskipverify works
|
|
v.InsecureSkipVerify = true
|
|
if buf, err := internal.MarshalSource(v); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalSource(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !reflect.DeepEqual(v, vv) {
|
|
t.Fatalf("source protobuf copy error: got %#v, expected %#v", vv, v)
|
|
}
|
|
}
|
|
|
|
func TestMarshalServer(t *testing.T) {
|
|
v := chronograf.Server{
|
|
ID: 12,
|
|
SrcID: 2,
|
|
Name: "Fountain of Truth",
|
|
Username: "docbrown",
|
|
Password: "1 point twenty-one g1g@w@tts",
|
|
URL: "http://oldmanpeabody.mall.io:9092",
|
|
InsecureSkipVerify: true,
|
|
}
|
|
|
|
var vv chronograf.Server
|
|
if buf, err := internal.MarshalServer(v); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalServer(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !reflect.DeepEqual(v, vv) {
|
|
t.Fatalf("source protobuf copy error: got %#v, expected %#v", vv, v)
|
|
}
|
|
}
|
|
|
|
func TestMarshalLayout(t *testing.T) {
|
|
layout := chronograf.Layout{
|
|
ID: "id",
|
|
Measurement: "measurement",
|
|
Application: "app",
|
|
Cells: []chronograf.Cell{
|
|
{
|
|
X: 1,
|
|
Y: 1,
|
|
W: 4,
|
|
H: 4,
|
|
I: "anotherid",
|
|
Type: "line",
|
|
Name: "cell1",
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
Bounds: []string{"0", "100"},
|
|
Label: "foo",
|
|
},
|
|
},
|
|
Queries: []chronograf.Query{
|
|
{
|
|
Range: &chronograf.Range{
|
|
Lower: 1,
|
|
Upper: 2,
|
|
},
|
|
Label: "y1",
|
|
Command: "select mean(usage_user) as usage_user from cpu",
|
|
Wheres: []string{
|
|
`"host"="myhost"`,
|
|
},
|
|
GroupBys: []string{
|
|
`"cpu"`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
var vv chronograf.Layout
|
|
if buf, err := internal.MarshalLayout(layout); err != nil {
|
|
t.Fatal(err)
|
|
} else if err := internal.UnmarshalLayout(buf, &vv); err != nil {
|
|
t.Fatal(err)
|
|
} else if !cmp.Equal(layout, vv) {
|
|
t.Fatal("source protobuf copy error: diff:\n", cmp.Diff(layout, vv))
|
|
}
|
|
}
|
|
|
|
func Test_MarshalDashboard(t *testing.T) {
|
|
dashboard := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
X: 0,
|
|
Y: 0,
|
|
W: 4,
|
|
H: 4,
|
|
Name: "Super awesome query",
|
|
Queries: []chronograf.DashboardQuery{
|
|
{
|
|
Command: "select * from cpu",
|
|
Label: "CPU Utilization",
|
|
Range: &chronograf.Range{
|
|
Upper: int64(100),
|
|
},
|
|
Source: "/chronograf/v1/sources/1",
|
|
Shifts: []chronograf.TimeShift{},
|
|
},
|
|
},
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
Bounds: []string{"0", "3", "1-7", "foo"},
|
|
Label: "foo",
|
|
Prefix: "M",
|
|
Suffix: "m",
|
|
Base: "2",
|
|
Scale: "roflscale",
|
|
},
|
|
},
|
|
Type: "line",
|
|
CellColors: []chronograf.CellColor{
|
|
{
|
|
ID: "myid",
|
|
Type: "min",
|
|
Hex: "#234567",
|
|
Name: "Laser",
|
|
Value: "0",
|
|
},
|
|
{
|
|
ID: "id2",
|
|
Type: "max",
|
|
Hex: "#876543",
|
|
Name: "Solitude",
|
|
Value: "100",
|
|
},
|
|
},
|
|
TableOptions: chronograf.TableOptions{},
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
TimeFormat: "",
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
Name: "Dashboard",
|
|
}
|
|
|
|
var actual chronograf.Dashboard
|
|
if buf, err := internal.MarshalDashboard(dashboard); err != nil {
|
|
t.Fatal("Error marshaling dashboard: err", err)
|
|
} else if err := internal.UnmarshalDashboard(buf, &actual); err != nil {
|
|
t.Fatal("Error unmarshaling dashboard: err:", err)
|
|
} else if !cmp.Equal(dashboard, actual) {
|
|
t.Fatalf("Dashboard protobuf copy error: diff follows:\n%s", cmp.Diff(dashboard, actual))
|
|
}
|
|
}
|
|
|
|
func Test_MarshalDashboard_WithLegacyBounds(t *testing.T) {
|
|
dashboard := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
X: 0,
|
|
Y: 0,
|
|
W: 4,
|
|
H: 4,
|
|
Name: "Super awesome query",
|
|
Queries: []chronograf.DashboardQuery{
|
|
{
|
|
Command: "select * from cpu",
|
|
Label: "CPU Utilization",
|
|
Range: &chronograf.Range{
|
|
Upper: int64(100),
|
|
},
|
|
Shifts: []chronograf.TimeShift{},
|
|
},
|
|
},
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
LegacyBounds: [2]int64{0, 5},
|
|
},
|
|
},
|
|
CellColors: []chronograf.CellColor{
|
|
{
|
|
ID: "myid",
|
|
Type: "min",
|
|
Hex: "#234567",
|
|
Name: "Laser",
|
|
Value: "0",
|
|
},
|
|
{
|
|
ID: "id2",
|
|
Type: "max",
|
|
Hex: "#876543",
|
|
Name: "Solitude",
|
|
Value: "100",
|
|
},
|
|
},
|
|
Legend: chronograf.Legend{
|
|
Type: "static",
|
|
Orientation: "bottom",
|
|
},
|
|
TableOptions: chronograf.TableOptions{},
|
|
TimeFormat: "MM:DD:YYYY",
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
Type: "line",
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
Name: "Dashboard",
|
|
}
|
|
|
|
expected := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
X: 0,
|
|
Y: 0,
|
|
W: 4,
|
|
H: 4,
|
|
Name: "Super awesome query",
|
|
Queries: []chronograf.DashboardQuery{
|
|
{
|
|
Command: "select * from cpu",
|
|
Label: "CPU Utilization",
|
|
Range: &chronograf.Range{
|
|
Upper: int64(100),
|
|
},
|
|
Shifts: []chronograf.TimeShift{},
|
|
},
|
|
},
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
Bounds: []string{},
|
|
Base: "10",
|
|
Scale: "linear",
|
|
},
|
|
},
|
|
CellColors: []chronograf.CellColor{
|
|
{
|
|
ID: "myid",
|
|
Type: "min",
|
|
Hex: "#234567",
|
|
Name: "Laser",
|
|
Value: "0",
|
|
},
|
|
{
|
|
ID: "id2",
|
|
Type: "max",
|
|
Hex: "#876543",
|
|
Name: "Solitude",
|
|
Value: "100",
|
|
},
|
|
},
|
|
Legend: chronograf.Legend{
|
|
Type: "static",
|
|
Orientation: "bottom",
|
|
},
|
|
TableOptions: chronograf.TableOptions{},
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
TimeFormat: "MM:DD:YYYY",
|
|
Type: "line",
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
Name: "Dashboard",
|
|
}
|
|
|
|
var actual chronograf.Dashboard
|
|
if buf, err := internal.MarshalDashboard(dashboard); err != nil {
|
|
t.Fatal("Error marshaling dashboard: err", err)
|
|
} else if err := internal.UnmarshalDashboard(buf, &actual); err != nil {
|
|
t.Fatal("Error unmarshaling dashboard: err:", err)
|
|
} else if !cmp.Equal(expected, actual) {
|
|
t.Fatalf("Dashboard protobuf copy error: diff follows:\n%s", cmp.Diff(expected, actual))
|
|
}
|
|
}
|
|
|
|
func Test_MarshalDashboard_WithEmptyLegacyBounds(t *testing.T) {
|
|
dashboard := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
X: 0,
|
|
Y: 0,
|
|
W: 4,
|
|
H: 4,
|
|
Name: "Super awesome query",
|
|
Queries: []chronograf.DashboardQuery{
|
|
{
|
|
Command: "select * from cpu",
|
|
Label: "CPU Utilization",
|
|
Range: &chronograf.Range{
|
|
Upper: int64(100),
|
|
},
|
|
Shifts: []chronograf.TimeShift{},
|
|
},
|
|
},
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
LegacyBounds: [2]int64{},
|
|
},
|
|
},
|
|
CellColors: []chronograf.CellColor{
|
|
{
|
|
ID: "myid",
|
|
Type: "min",
|
|
Hex: "#234567",
|
|
Name: "Laser",
|
|
Value: "0",
|
|
},
|
|
{
|
|
ID: "id2",
|
|
Type: "max",
|
|
Hex: "#876543",
|
|
Name: "Solitude",
|
|
Value: "100",
|
|
},
|
|
},
|
|
Type: "line",
|
|
TableOptions: chronograf.TableOptions{},
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
TimeFormat: "MM:DD:YYYY",
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
Name: "Dashboard",
|
|
}
|
|
|
|
expected := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
X: 0,
|
|
Y: 0,
|
|
W: 4,
|
|
H: 4,
|
|
Name: "Super awesome query",
|
|
Queries: []chronograf.DashboardQuery{
|
|
{
|
|
Command: "select * from cpu",
|
|
Label: "CPU Utilization",
|
|
Range: &chronograf.Range{
|
|
Upper: int64(100),
|
|
},
|
|
Shifts: []chronograf.TimeShift{},
|
|
},
|
|
},
|
|
Axes: map[string]chronograf.Axis{
|
|
"y": chronograf.Axis{
|
|
Bounds: []string{},
|
|
Base: "10",
|
|
Scale: "linear",
|
|
},
|
|
},
|
|
CellColors: []chronograf.CellColor{
|
|
{
|
|
ID: "myid",
|
|
Type: "min",
|
|
Hex: "#234567",
|
|
Name: "Laser",
|
|
Value: "0",
|
|
},
|
|
{
|
|
ID: "id2",
|
|
Type: "max",
|
|
Hex: "#876543",
|
|
Name: "Solitude",
|
|
Value: "100",
|
|
},
|
|
},
|
|
TableOptions: chronograf.TableOptions{},
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
TimeFormat: "MM:DD:YYYY",
|
|
Type: "line",
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
Name: "Dashboard",
|
|
}
|
|
|
|
var actual chronograf.Dashboard
|
|
if buf, err := internal.MarshalDashboard(dashboard); err != nil {
|
|
t.Fatal("Error marshaling dashboard: err", err)
|
|
} else if err := internal.UnmarshalDashboard(buf, &actual); err != nil {
|
|
t.Fatal("Error unmarshaling dashboard: err:", err)
|
|
} else if !cmp.Equal(expected, actual) {
|
|
t.Fatalf("Dashboard protobuf copy error: diff follows:\n%s", cmp.Diff(expected, actual))
|
|
}
|
|
}
|
|
|
|
func Test_MarshalDashboard_WithEmptyCellType(t *testing.T) {
|
|
dashboard := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
},
|
|
},
|
|
}
|
|
|
|
expected := chronograf.Dashboard{
|
|
ID: 1,
|
|
Cells: []chronograf.DashboardCell{
|
|
{
|
|
ID: "9b5367de-c552-4322-a9e8-7f384cbd235c",
|
|
Type: "line",
|
|
Queries: []chronograf.DashboardQuery{},
|
|
Axes: map[string]chronograf.Axis{},
|
|
CellColors: []chronograf.CellColor{},
|
|
TableOptions: chronograf.TableOptions{},
|
|
FieldOptions: []chronograf.RenamableField{},
|
|
},
|
|
},
|
|
Templates: []chronograf.Template{},
|
|
}
|
|
|
|
var actual chronograf.Dashboard
|
|
if buf, err := internal.MarshalDashboard(dashboard); err != nil {
|
|
t.Fatal("Error marshaling dashboard: err", err)
|
|
} else if err := internal.UnmarshalDashboard(buf, &actual); err != nil {
|
|
t.Fatal("Error unmarshaling dashboard: err:", err)
|
|
} else if !cmp.Equal(expected, actual) {
|
|
t.Fatalf("Dashboard protobuf copy error: diff follows:\n%s", cmp.Diff(expected, actual))
|
|
}
|
|
}
|