mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
more work on dashboard importing and templating
This commit is contained in:
313
pkg/components/dynmap/dynmap_test.go
Normal file
313
pkg/components/dynmap/dynmap_test.go
Normal file
@@ -0,0 +1,313 @@
|
||||
// uses code from https://github.com/antonholmquist/jason/blob/master/jason.go
|
||||
// MIT Licence
|
||||
|
||||
package dynmap
|
||||
|
||||
import (
|
||||
"log"
|
||||
"testing"
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
type Assert struct {
|
||||
T *testing.T
|
||||
}
|
||||
|
||||
func NewAssert(t *testing.T) *Assert {
|
||||
return &Assert{
|
||||
T: t,
|
||||
}
|
||||
}
|
||||
|
||||
func (assert *Assert) True(value bool, message string) {
|
||||
if value == false {
|
||||
log.Panicln("Assert: ", message)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFirst(t *testing.T) {
|
||||
|
||||
assert := NewAssert(t)
|
||||
|
||||
testJSON := `{
|
||||
"name": "anton",
|
||||
"age": 29,
|
||||
"nothing": null,
|
||||
"true": true,
|
||||
"false": false,
|
||||
"list": [
|
||||
"first",
|
||||
"second"
|
||||
],
|
||||
"list2": [
|
||||
{
|
||||
"street": "Street 42",
|
||||
"city": "Stockholm"
|
||||
},
|
||||
{
|
||||
"street": "Street 42",
|
||||
"city": "Stockholm"
|
||||
}
|
||||
],
|
||||
"address": {
|
||||
"street": "Street 42",
|
||||
"city": "Stockholm"
|
||||
},
|
||||
"country": {
|
||||
"name": "Sweden"
|
||||
}
|
||||
}`
|
||||
|
||||
j, err := NewObjectFromBytes([]byte(testJSON))
|
||||
|
||||
a, err := j.GetObject("address")
|
||||
assert.True(a != nil && err == nil, "failed to create json from string")
|
||||
|
||||
assert.True(err == nil, "failed to create json from string")
|
||||
|
||||
s, err := j.GetString("name")
|
||||
assert.True(s == "anton" && err == nil, "name should be a string")
|
||||
|
||||
s = j.MustGetString("name", "fallback")
|
||||
assert.True(s == "anton", "must get string")
|
||||
|
||||
s = j.MustGetString("adsasdas", "fallback")
|
||||
assert.True(s == "fallback", "must get string return fallback")
|
||||
|
||||
s, err = j.GetString("name")
|
||||
assert.True(s == "anton" && err == nil, "name shoud match")
|
||||
|
||||
s, err = j.GetString("address", "street")
|
||||
assert.True(s == "Street 42" && err == nil, "street shoud match")
|
||||
//log.Println("s: ", s.String())
|
||||
|
||||
_, err = j.GetNumber("age")
|
||||
assert.True(err == nil, "age should be a number")
|
||||
|
||||
n, err := j.GetInt64("age")
|
||||
assert.True(n == 29 && err == nil, "age mismatch")
|
||||
|
||||
ageInterface, err := j.GetInterface("age")
|
||||
assert.True(ageInterface != nil, "should be defined")
|
||||
assert.True(err == nil, "age interface error")
|
||||
|
||||
invalidInterface, err := j.GetInterface("not_existing")
|
||||
assert.True(invalidInterface == nil, "should not give error here")
|
||||
assert.True(err != nil, "should give error here")
|
||||
|
||||
age, err := j.GetValue("age")
|
||||
assert.True(age != nil && err == nil, "age should exist")
|
||||
|
||||
age2, err := j.GetValue("age2")
|
||||
assert.True(age2 == nil && err != nil, "age2 should not exist")
|
||||
|
||||
address, err := j.GetObject("address")
|
||||
assert.True(address != nil && err == nil, "address should be an object")
|
||||
|
||||
//log.Println("address: ", address)
|
||||
|
||||
s, err = address.GetString("street")
|
||||
|
||||
addressAsString, err := j.GetString("address")
|
||||
assert.True(addressAsString == "" && err != nil, "address should not be an string")
|
||||
|
||||
s, err = j.GetString("address", "street")
|
||||
assert.True(s == "Street 42" && err == nil, "street mismatching")
|
||||
|
||||
s, err = j.GetString("address", "name2")
|
||||
assert.True(s == "" && err != nil, "nonexistent string fail")
|
||||
|
||||
b, err := j.GetBoolean("true")
|
||||
assert.True(b == true && err == nil, "bool true test")
|
||||
|
||||
b, err = j.GetBoolean("false")
|
||||
assert.True(b == false && err == nil, "bool false test")
|
||||
|
||||
b, err = j.GetBoolean("invalid_field")
|
||||
assert.True(b == false && err != nil, "bool invalid test")
|
||||
|
||||
list, err := j.GetValueArray("list")
|
||||
assert.True(list != nil && err == nil, "list should be an array")
|
||||
|
||||
list2, err := j.GetValueArray("list2")
|
||||
assert.True(list2 != nil && err == nil, "list2 should be an array")
|
||||
|
||||
list2Array, err := j.GetValueArray("list2")
|
||||
assert.True(err == nil, "List2 should not return error on AsArray")
|
||||
assert.True(len(list2Array) == 2, "List2 should should have length 2")
|
||||
|
||||
list2Value, err := j.GetValue("list2")
|
||||
assert.True(err == nil, "List2 should not return error on value")
|
||||
|
||||
list2ObjectArray, err := list2Value.ObjectArray()
|
||||
assert.True(err == nil, "list2Value should not return error on ObjectArray")
|
||||
assert.True(len(list2ObjectArray) == 2, "list2ObjectArray should should have length 2")
|
||||
|
||||
for _, elementValue := range list2Array {
|
||||
//assert.True(element.IsObject() == true, "first fail")
|
||||
|
||||
element, err := elementValue.Object()
|
||||
|
||||
s, err = element.GetString("street")
|
||||
assert.True(s == "Street 42" && err == nil, "second fail")
|
||||
}
|
||||
|
||||
obj, err := j.GetObject("country")
|
||||
assert.True(obj != nil && err == nil, "country should not return error on AsObject")
|
||||
for key, value := range obj.Map() {
|
||||
|
||||
assert.True(key == "name", "country name key incorrect")
|
||||
|
||||
s, err = value.String()
|
||||
assert.True(s == "Sweden" && err == nil, "country name should be Sweden")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSecond(t *testing.T) {
|
||||
json := `
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "X999_Y999",
|
||||
"from": {
|
||||
"name": "Tom Brady", "id": "X12"
|
||||
},
|
||||
"message": "Looking forward to 2010!",
|
||||
"actions": [
|
||||
{
|
||||
"name": "Comment",
|
||||
"link": "http://www.facebook.com/X999/posts/Y999"
|
||||
},
|
||||
{
|
||||
"name": "Like",
|
||||
"link": "http://www.facebook.com/X999/posts/Y999"
|
||||
}
|
||||
],
|
||||
"type": "status",
|
||||
"created_time": "2010-08-02T21:27:44+0000",
|
||||
"updated_time": "2010-08-02T21:27:44+0000"
|
||||
},
|
||||
{
|
||||
"id": "X998_Y998",
|
||||
"from": {
|
||||
"name": "Peyton Manning", "id": "X18"
|
||||
},
|
||||
"message": "Where's my contract?",
|
||||
"actions": [
|
||||
{
|
||||
"name": "Comment",
|
||||
"link": "http://www.facebook.com/X998/posts/Y998"
|
||||
},
|
||||
{
|
||||
"name": "Like",
|
||||
"link": "http://www.facebook.com/X998/posts/Y998"
|
||||
}
|
||||
],
|
||||
"type": "status",
|
||||
"created_time": "2010-08-02T21:27:44+0000",
|
||||
"updated_time": "2010-08-02T21:27:44+0000"
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
assert := NewAssert(t)
|
||||
j, err := NewObjectFromBytes([]byte(json))
|
||||
|
||||
assert.True(j != nil && err == nil, "failed to parse json")
|
||||
|
||||
dataObject, err := j.GetObject("data")
|
||||
assert.True(dataObject == nil && err != nil, "data should not be an object")
|
||||
|
||||
dataArray, err := j.GetObjectArray("data")
|
||||
assert.True(dataArray != nil && err == nil, "data should be an object array")
|
||||
|
||||
for index, dataItem := range dataArray {
|
||||
|
||||
if index == 0 {
|
||||
id, err := dataItem.GetString("id")
|
||||
assert.True(id == "X999_Y999" && err == nil, "item id mismatch")
|
||||
|
||||
fromName, err := dataItem.GetString("from", "name")
|
||||
assert.True(fromName == "Tom Brady" && err == nil, "fromName mismatch")
|
||||
|
||||
actions, err := dataItem.GetObjectArray("actions")
|
||||
|
||||
for index, action := range actions {
|
||||
|
||||
if index == 1 {
|
||||
name, err := action.GetString("name")
|
||||
assert.True(name == "Like" && err == nil, "name mismatch")
|
||||
|
||||
link, err := action.GetString("link")
|
||||
assert.True(link == "http://www.facebook.com/X999/posts/Y999" && err == nil, "Like mismatch")
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
} else if index == 1 {
|
||||
id, err := dataItem.GetString("id")
|
||||
assert.True(id == "X998_Y998" && err == nil, "item id mismatch")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestErrors(t *testing.T) {
|
||||
json := `
|
||||
{
|
||||
"string": "hello",
|
||||
"number": 1,
|
||||
"array": [1,2,3]
|
||||
}`
|
||||
|
||||
errstr := "expected an error getting %s, but got '%s'"
|
||||
|
||||
j, err := NewObjectFromBytes([]byte(json))
|
||||
if err != nil {
|
||||
t.Fatal("failed to parse json")
|
||||
}
|
||||
|
||||
if _, err = j.GetObject("string"); err != ErrNotObject {
|
||||
t.Errorf(errstr, "object", err)
|
||||
}
|
||||
|
||||
if err = j.GetNull("string"); err != ErrNotNull {
|
||||
t.Errorf(errstr, "null", err)
|
||||
}
|
||||
|
||||
if _, err = j.GetStringArray("string"); err != ErrNotArray {
|
||||
t.Errorf(errstr, "array", err)
|
||||
}
|
||||
|
||||
if _, err = j.GetStringArray("array"); err != ErrNotString {
|
||||
t.Errorf(errstr, "string array", err)
|
||||
}
|
||||
|
||||
if _, err = j.GetNumber("array"); err != ErrNotNumber {
|
||||
t.Errorf(errstr, "number", err)
|
||||
}
|
||||
|
||||
if _, err = j.GetBoolean("array"); err != ErrNotBool {
|
||||
t.Errorf(errstr, "boolean", err)
|
||||
}
|
||||
|
||||
if _, err = j.GetString("number"); err != ErrNotString {
|
||||
t.Errorf(errstr, "string", err)
|
||||
}
|
||||
|
||||
_, err = j.GetString("not_found")
|
||||
if e, ok := err.(KeyNotFoundError); !ok {
|
||||
t.Errorf(errstr, "key not found error", e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestWriting(t *testing.T) {
|
||||
Convey("When writing", t, func() {
|
||||
j, _ := NewObjectFromBytes([]byte(`{}`))
|
||||
j.SetValue("prop", "value")
|
||||
So(j.MustGetString("prop", ""), ShouldEqual, "value")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user