.github
alerting
client
config
controller
core
docs
example
jsonpath
jsonpath.go
jsonpath_test.go
k8s
k8stest
metric
pattern
security
static
storage
vendor
watchdog
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENSE.md
README.md
config.yaml
go.mod
go.sum
main.go
153 lines
3.6 KiB
Go
153 lines
3.6 KiB
Go
package jsonpath
|
|
|
|
import "testing"
|
|
|
|
func TestEval(t *testing.T) {
|
|
path := "simple"
|
|
data := `{"simple": "value"}`
|
|
|
|
expectedOutput := "value"
|
|
|
|
output, outputLength, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if outputLength != len(expectedOutput) {
|
|
t.Errorf("Expected output length to be %v, but was %v", len(expectedOutput), outputLength)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithLongSimpleWalk(t *testing.T) {
|
|
path := "long.simple.walk"
|
|
data := `{"long": {"simple": {"walk": "value"}}}`
|
|
|
|
expectedOutput := "value"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithArrayOfMaps(t *testing.T) {
|
|
path := "ids[1].id"
|
|
data := `{"ids": [{"id": 1}, {"id": 2}]}`
|
|
|
|
expectedOutput := "2"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithArrayOfValues(t *testing.T) {
|
|
path := "ids[0]"
|
|
data := `{"ids": [1, 2]}`
|
|
|
|
expectedOutput := "1"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithRootArrayOfValues(t *testing.T) {
|
|
path := "[1]"
|
|
data := `[1, 2]`
|
|
|
|
expectedOutput := "2"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithRootArrayOfMaps(t *testing.T) {
|
|
path := "[0].id"
|
|
data := `[{"id": 1}, {"id": 2}]`
|
|
|
|
expectedOutput := "1"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithRootArrayOfMapsUsingInvalidArrayIndex(t *testing.T) {
|
|
path := "[5].id"
|
|
data := `[{"id": 1}, {"id": 2}]`
|
|
|
|
_, _, err := Eval(path, []byte(data))
|
|
if err == nil {
|
|
t.Error("Should've returned an error, but didn't")
|
|
}
|
|
}
|
|
|
|
func TestEvalWithLongWalkAndArray(t *testing.T) {
|
|
path := "data.ids[0].id"
|
|
data := `{"data": {"ids": [{"id": 1}, {"id": 2}, {"id": 3}]}}`
|
|
|
|
expectedOutput := "1"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithNestedArray(t *testing.T) {
|
|
path := "[3][2]"
|
|
data := `[[1, 2], [3, 4], [], [5, 6, 7]]`
|
|
|
|
expectedOutput := "7"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|
|
|
|
func TestEvalWithMapOfNestedArray(t *testing.T) {
|
|
path := "data[1][1]"
|
|
data := `{"data": [["a", "b", "c"], ["d", "e", "f"]]}`
|
|
|
|
expectedOutput := "e"
|
|
|
|
output, _, err := Eval(path, []byte(data))
|
|
if err != nil {
|
|
t.Error("Didn't expect any error, but got", err)
|
|
}
|
|
if output != expectedOutput {
|
|
t.Errorf("Expected output to be %v, but was %v", expectedOutput, output)
|
|
}
|
|
}
|