mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-07 08:26:53 +00:00
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
|
package json_utils
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"testing"
|
||
|
|
||
|
"gotest.tools/assert"
|
||
|
)
|
||
|
|
||
|
var document = []byte(`
|
||
|
{
|
||
|
"kind": "{{request.object.metadata.name1}}",
|
||
|
"name": "ns-owner-{{request.object.metadata.name}}",
|
||
|
"data": {
|
||
|
"rules": [
|
||
|
{
|
||
|
"apiGroups": [
|
||
|
"{{request.object.metadata.name}}"
|
||
|
],
|
||
|
"resources": [
|
||
|
"namespaces"
|
||
|
],
|
||
|
"verbs": [
|
||
|
"*"
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
|
||
|
func Test_TraverseLeafsCheckIfTheyHit(t *testing.T) {
|
||
|
hitMap := map[string]int{
|
||
|
"{{request.object.metadata.name1}}": 0,
|
||
|
"ns-owner-{{request.object.metadata.name}}": 0,
|
||
|
"{{request.object.metadata.name}}": 0,
|
||
|
"namespaces": 0,
|
||
|
"*": 0,
|
||
|
}
|
||
|
|
||
|
var originalJSON interface{}
|
||
|
err := json.Unmarshal(document, &originalJSON)
|
||
|
assert.NilError(t, err)
|
||
|
|
||
|
traversal := NewTraversal(originalJSON, OnlyForLeafs(func(data *ActionData) (interface{}, error) {
|
||
|
hitMap[data.Element.(string)]++
|
||
|
return data.Element, nil
|
||
|
}))
|
||
|
|
||
|
_, err = traversal.TraverseJSON()
|
||
|
|
||
|
for _, v := range hitMap {
|
||
|
assert.Equal(t, v, 1)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_PathMustBeCorrectEveryTime(t *testing.T) {
|
||
|
expectedValue := "ns-owner-{{request.object.metadata.name}}"
|
||
|
expectedPath := "/name"
|
||
|
|
||
|
var originalJSON interface{}
|
||
|
err := json.Unmarshal(document, &originalJSON)
|
||
|
assert.NilError(t, err)
|
||
|
|
||
|
traversal := NewTraversal(originalJSON, OnlyForLeafs(func(data *ActionData) (interface{}, error) {
|
||
|
if data.Element.(string) == expectedValue {
|
||
|
assert.Equal(t, expectedPath, data.Path)
|
||
|
}
|
||
|
return data.Element, nil
|
||
|
}))
|
||
|
|
||
|
_, err = traversal.TraverseJSON()
|
||
|
}
|