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:
parent
13a3cc3628
commit
cacf8bfdbe
2 changed files with 66 additions and 43 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue