1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-04-08 18:15:48 +00:00

fixed unit tests for mutation global anchor

Signed-off-by: Max Goncharenko <kacejot@fex.net>
This commit is contained in:
Max Goncharenko 2021-08-17 15:14:46 +03:00
parent 13a3cc3628
commit cacf8bfdbe
2 changed files with 66 additions and 43 deletions

View file

@ -158,11 +158,16 @@ func processListOfMaps(logger logr.Logger, pattern, resource *yaml.RNode) error
}
newNode := patternElement.Copy()
err := deleteConditionsFromNestedMaps(newNode)
empty, err := deleteConditionsFromNestedMaps(newNode)
if err != nil {
return err
}
// Do not add an empty element to the patch
if empty {
continue
}
err = newNode.PipeE(yaml.SetField("name", resourceElementName.Value))
if err != nil {
return err
@ -313,34 +318,50 @@ func checkCondition(logger logr.Logger, pattern *yaml.RNode, resource *yaml.RNod
return err
}
func deleteConditionsFromNestedMaps(pattern *yaml.RNode) error {
func deleteConditionsFromNestedMaps(pattern *yaml.RNode) (bool, error) {
if pattern.YNode().Kind != yaml.MappingNode {
return nil
return false, nil
}
fields, err := pattern.Fields()
if err != nil {
return err
return false, err
}
for _, field := range fields {
if anchor.ContainsCondition(field) {
err = pattern.PipeE(yaml.Clear(field))
if err != nil {
return err
return false, err
}
} else {
child := pattern.Field(field).Value
if child != nil {
err = deleteConditionsFromNestedMaps(child)
empty, err := deleteConditionsFromNestedMaps(child)
if err != nil {
return err
return false, err
}
if empty {
err = pattern.PipeE(yaml.Clear(field))
if err != nil {
return false, err
}
}
}
}
}
return nil
fields, err = pattern.Fields()
if err != nil {
return false, err
}
if len(fields) == 0 {
return true, nil
}
return false, nil
}
func deleteConditionElements(pattern *yaml.RNode) error {
@ -403,16 +424,50 @@ func deleteAnchorsInMap(node *yaml.RNode) (bool, error) {
// Go further through the map elements.
for _, field := range fields {
patternValue := node.Field(field).Value
var wasEmpty bool
var isSequence bool
if patternValue.YNode().Kind == yaml.SequenceNode {
isSequence = true
elements, err := patternValue.Elements()
if err != nil {
return false, err
}
if len(elements) == 0 {
wasEmpty = true
}
}
ok, err := deleteAnchors(node.Field(field).Value)
if err != nil {
return false, err
}
// If we have at least one element without annchor,
// If we have at least one element without anchor,
// then we don't need to delete this element.
if !ok {
return false, nil
}
if isSequence {
patternValue := node.Field(field).Value
elements, err := patternValue.Elements()
if err != nil {
return false, err
}
if len(elements) == 0 && !wasEmpty {
// List became empty after deleting anchors,
// delete it
err = node.PipeE(yaml.Clear(field))
if err != nil {
return false, err
}
}
}
}
return true, nil

View file

@ -177,11 +177,6 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
}`),
expectedPatch: []byte(`{
"spec": {
"containers": [
{
"name": "hello"
}
],
"imagePullSecrets": [
{
"name": "regcred"
@ -222,11 +217,6 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
}`),
expectedPatch: []byte(`{
"spec": {
"containers": [
{
"name": "hello"
}
],
"imagePullSecrets": [
{
"name": "regcred"
@ -276,14 +266,6 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
}`),
expectedPatch: []byte(`{
"spec": {
"containers": [
{
"name": "hello"
},
{
"name": "hello2"
}
],
"imagePullSecrets": [
{
"name": "regcred"
@ -351,13 +333,6 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
"labels": {
"add-labels": "add"
}
},
"spec": {
"volumes": [
{
"name": "cache-volume"
}
]
}
}`),
},
@ -412,15 +387,7 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
]
}
}`),
expectedPatch: []byte(`{
"spec": {
"volumes": [
{
"name": "cache-volume"
}
]
}
}`),
expectedPatch: []byte(`{}`),
},
{
rawPolicy: []byte(`{
@ -794,6 +761,7 @@ func Test_preProcessStrategicMergePatch_multipleAnchors(t *testing.T) {
}
for i, test := range testCases {
t.Logf("Running test %d...", i+1)
preProcessedPolicy, err := preProcessStrategicMergePatch(log.Log, string(test.rawPolicy), string(test.rawResource))
assert.NilError(t, err)