1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/engine/jsonutils/traverse_test.go
Jim Bugwadia 46f02a8ba7
optimize JSON context processing using in-memory maps (#8322)
* optimize JSON context processing using in memory maps

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* fix excessive logs

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* fix mutate resource diff

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* uncomment tests

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* copy resource, as it can be modified

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* clear prior resource to prevent mutating original

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* linter fix

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* fix ImageInfo to unstructured conversion

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* fix custom image extractors

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* do not update mutated resource in JSON context

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

* address review comments

Signed-off-by: Jim Bugwadia <jim@nirmata.com>

---------

Signed-off-by: Jim Bugwadia <jim@nirmata.com>
Signed-off-by: shuting <shuting@nirmata.com>
Co-authored-by: Vishal Choudhary <sendtovishalchoudhary@gmail.com>
Co-authored-by: shuting <shuting@nirmata.com>
2023-12-04 07:35:36 +00:00

76 lines
1.6 KiB
Go

package jsonutils
import (
"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, OnlyForLeafsAndKeys(func(data *ActionData) (interface{}, error) {
if key, ok := data.Element.(string); ok {
hitMap[key]++
}
return data.Element, nil
}))
_, err = traversal.TraverseJSON()
assert.NilError(t, err)
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, OnlyForLeafsAndKeys(func(data *ActionData) (interface{}, error) {
if data.Element.(string) == expectedValue {
assert.Equal(t, expectedPath, data.Path)
}
return data.Element, nil
}))
_, err = traversal.TraverseJSON()
assert.NilError(t, err)
}