2020-01-07 15:13:57 -08:00
|
|
|
package variables
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
|
2021-10-29 18:13:20 +02:00
|
|
|
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
2020-10-07 11:12:31 -07:00
|
|
|
"github.com/kyverno/kyverno/pkg/engine/context"
|
2021-07-28 19:54:50 +03:00
|
|
|
"github.com/stretchr/testify/assert"
|
2020-03-17 16:25:34 -07:00
|
|
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
2020-01-07 15:13:57 -08:00
|
|
|
)
|
|
|
|
|
2021-10-29 09:54:51 +01:00
|
|
|
func TestEvaluate(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
|
|
Condition kyverno.Condition
|
|
|
|
Result bool
|
|
|
|
}{
|
|
|
|
// Equals
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: "string"}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: 1.0}, true},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: true}, true},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: false}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "1024Mi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "1h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "60m"}, true},
|
|
|
|
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.Equals, Value: map[string]interface{}{"foo": "bar"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.Equals, Value: []interface{}{"foo", "bar"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.Equals, Value: []interface{}{map[string]string{"foo": "bar"}}}, true},
|
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: "not string"}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: 2}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: int64(2)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: 2}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: 2.0}, false},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: false}, false},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: true}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "10Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.Equals, Value: "1024Mi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "5h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "30m"}, false},
|
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: "2"}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: "2.0"}, false},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: "false"}, false},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: "true"}, false},
|
|
|
|
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.Equals, Value: map[string]interface{}{"bar": "foo"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.Equals, Value: []interface{}{"bar", "foo"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.Equals, Value: []interface{}{map[string]string{"bar": "foo"}}}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: "2h", Operator: kyverno.Equals, Value: 3600}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Not Equals
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: "string"}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: 1.0}, false},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: false}, true},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: false}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "1Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.NotEquals, Value: "1024Mi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "60m"}, false},
|
|
|
|
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.NotEquals, Value: map[string]interface{}{"foo": "bar"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.NotEquals, Value: []interface{}{"foo", "bar"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.NotEquals, Value: []interface{}{map[string]string{"foo": "bar"}}}, false},
|
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: "not string"}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: 2}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: int64(2)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: 2}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: 2.0}, true},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: true}, false},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: true}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "10Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "1024Mi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "5h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "30m"}, true},
|
|
|
|
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: "2"}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: "2.0"}, true},
|
|
|
|
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: "false"}, true},
|
|
|
|
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: "true"}, true},
|
|
|
|
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.NotEquals, Value: map[string]interface{}{"bar": "foo"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.NotEquals, Value: []interface{}{"bar", "foo"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.NotEquals, Value: []interface{}{map[string]string{"bar": "foo"}}}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: 3600}, false},
|
|
|
|
{kyverno.Condition{Key: "2h", Operator: kyverno.NotEquals, Value: 3600}, true},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Greater Than
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThan, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThan, Value: 1.0}, true},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThan, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThan, Value: 1.5}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 1.5}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThan, Value: 1.0}, false},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.GreaterThan, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "1Mi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "10Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10Mi", Operator: kyverno.GreaterThan, Value: "10Mi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10h", Operator: kyverno.GreaterThan, Value: "1h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: "30m"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "1Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThan, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 100, Operator: kyverno.GreaterThan, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "100", Operator: kyverno.GreaterThan, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThan, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: 3600}, false},
|
|
|
|
{kyverno.Condition{Key: "2h", Operator: kyverno.GreaterThan, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: 3600, Operator: kyverno.GreaterThan, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: 3600, Operator: kyverno.GreaterThan, Value: "30m"}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThan, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: int64(10)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThan, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThan, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: int64(10)}, false},
|
|
|
|
{kyverno.Condition{Key: -5, Operator: kyverno.GreaterThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: -5, Operator: kyverno.GreaterThan, Value: -10}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: -10}, true},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Less Than
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThan, Value: 1.0}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThan, Value: 1.5}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 1.5}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThan, Value: 1.0}, false},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.LessThan, Value: "1Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "10Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "1Mi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Mi", Operator: kyverno.LessThan, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "10h", Operator: kyverno.LessThan, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: "30m"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "1Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 100, Operator: kyverno.LessThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "100", Operator: kyverno.LessThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.LessThan, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.LessThan, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.LessThan, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: 3600}, false},
|
|
|
|
{kyverno.Condition{Key: "30m", Operator: kyverno.LessThan, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: 3600, Operator: kyverno.LessThan, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: 3600, Operator: kyverno.LessThan, Value: "30m"}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: int64(10)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThan, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.LessThan, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: int64(10)}, true},
|
|
|
|
{kyverno.Condition{Key: -5, Operator: kyverno.LessThan, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: -5, Operator: kyverno.LessThan, Value: -10}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: -10}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Greater Than or Equal
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThanOrEquals, Value: 1.0}, true},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1.5}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 1.5}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1.0}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Mi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "10Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "10h", Operator: kyverno.GreaterThanOrEquals, Value: "1h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: "30m"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: "1h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 100, Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "100", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: "2h", Operator: kyverno.GreaterThanOrEquals, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: int64(10)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: int64(10)}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Less Than or Equal
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.LessThanOrEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThanOrEquals, Value: 1.0}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThanOrEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThanOrEquals, Value: 1.5}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 1.5}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThanOrEquals, Value: 1.0}, true},
|
|
|
|
{kyverno.Condition{Key: "10Gi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "10Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "1Mi"}, false},
|
|
|
|
{kyverno.Condition{Key: "1Mi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "10h", Operator: kyverno.LessThanOrEquals, Value: "1h"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: "30m"}, false},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: "1h"}, true},
|
|
|
|
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, true},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.LessThanOrEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: 100, Operator: kyverno.LessThanOrEquals, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "100", Operator: kyverno.LessThanOrEquals, Value: "10"}, false},
|
|
|
|
{kyverno.Condition{Key: "10", Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.LessThanOrEquals, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
|
|
|
|
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: 3600}, true},
|
|
|
|
{kyverno.Condition{Key: "2h", Operator: kyverno.LessThanOrEquals, Value: 3600}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThanOrEquals, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: int64(10)}, true},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: 1}, true},
|
|
|
|
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThanOrEquals, Value: 1}, false},
|
|
|
|
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: 10}, true},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: int64(1)}, true},
|
|
|
|
{kyverno.Condition{Key: 10, Operator: kyverno.LessThanOrEquals, Value: int64(1)}, false},
|
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: int64(10)}, true},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.In, Value: []interface{}{1, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.In, Value: []interface{}{1, 1.5, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.In, Value: []interface{}{"1", "2", "3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.In, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: 5, Operator: kyverno.In, Value: []interface{}{1, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: 5.5, Operator: kyverno.In, Value: []interface{}{1, 1.5, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: "5", Operator: kyverno.In, Value: []interface{}{"1", "2", "3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.In, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Not In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.NotIn, Value: []interface{}{1, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.NotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.NotIn, Value: []interface{}{"1", "2", "3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.NotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: 5, Operator: kyverno.NotIn, Value: []interface{}{1, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: 5.5, Operator: kyverno.NotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: "5", Operator: kyverno.NotIn, Value: []interface{}{"1", "2", "3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.NotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Any In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
2021-11-12 15:45:16 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: "1.1.1.1"}, true},
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, false},
|
2021-11-15 19:32:46 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"2*"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"4*"}}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// All In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, false},
|
2021-11-15 19:32:46 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"2.1.1.1", "2.2.2.2", "2.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"2*"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"4*"}}, false},
|
2021-11-12 15:45:16 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: "5.5.5.5"}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// All Not In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.AllNotIn, Value: []interface{}{1, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.AllNotIn, Value: []interface{}{"1", "2", "3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: 5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: 5.5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: "5", Operator: kyverno.AllNotIn, Value: []interface{}{"1", "2", "3"}}, true},
|
2021-11-12 15:45:16 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4", "1.1.1.1"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1", "4.4.4.4"}}, false},
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
2021-11-15 19:32:46 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"7*", "6*", "5*"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1*", "2*"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "3.3.3.3", "5.5.5.5"}, Operator: kyverno.AllNotIn, Value: []interface{}{"2*"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"4.1.1.1", "4.2.2.2", "4.5.5.5"}, Operator: kyverno.AllNotIn, Value: []interface{}{"4*"}}, false},
|
2021-11-12 15:45:16 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: "2.2.2.2"}, true},
|
2021-10-29 09:54:51 +01:00
|
|
|
|
|
|
|
// Any Not In
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: 1, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: 1.5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
|
|
|
|
{kyverno.Condition{Key: "1", Operator: kyverno.AnyNotIn, Value: []interface{}{"1", "2", "3"}}, false},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
|
|
|
|
{kyverno.Condition{Key: 5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: 5.5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
|
|
|
|
{kyverno.Condition{Key: "5", Operator: kyverno.AnyNotIn, Value: []interface{}{"1", "2", "3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
2021-11-12 15:45:16 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: "4.4.4.4"}, true},
|
2021-10-29 13:09:11 +01:00
|
|
|
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
2021-11-15 19:32:46 +05:30
|
|
|
{kyverno.Condition{Key: []interface{}{"1*", "3*", "5*"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"2*"}}, true},
|
|
|
|
{kyverno.Condition{Key: []interface{}{"2.2*"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"2.2.2.2"}}, false},
|
2021-10-29 09:54:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx := context.NewContext()
|
|
|
|
for _, tc := range testCases {
|
|
|
|
if Evaluate(log.Log, ctx, tc.Condition) != tc.Result {
|
|
|
|
t.Errorf("%v - expected result to be %v", tc.Condition, tc.Result)
|
|
|
|
}
|
2020-01-07 15:13:57 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Variables
|
|
|
|
|
|
|
|
func Test_Eval_Equal_Var_Pass(t *testing.T) {
|
|
|
|
resourceRaw := []byte(`
|
|
|
|
{
|
|
|
|
"metadata": {
|
|
|
|
"name": "temp",
|
|
|
|
"namespace": "n1"
|
|
|
|
},
|
|
|
|
"spec": {
|
|
|
|
"namespace": "n1",
|
|
|
|
"name": "temp1"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`)
|
|
|
|
|
|
|
|
// context
|
|
|
|
ctx := context.NewContext()
|
2020-01-24 09:37:12 -08:00
|
|
|
err := ctx.AddResource(resourceRaw)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
2020-01-07 15:13:57 -08:00
|
|
|
condition := kyverno.Condition{
|
|
|
|
Key: "{{request.object.metadata.name}}",
|
|
|
|
Operator: kyverno.Equal,
|
|
|
|
Value: "temp",
|
|
|
|
}
|
|
|
|
|
2021-07-28 19:54:50 +03:00
|
|
|
conditionJSON, err := json.Marshal(condition)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
var conditionMap interface{}
|
|
|
|
err = json.Unmarshal(conditionJSON, &conditionMap)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2021-10-11 12:46:28 -07:00
|
|
|
conditionWithResolvedVars, _ := SubstituteAllInPreconditions(log.Log, ctx, conditionMap)
|
2021-07-28 19:54:50 +03:00
|
|
|
conditionJSON, err = json.Marshal(conditionWithResolvedVars)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
err = json.Unmarshal(conditionJSON, &condition)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.True(t, Evaluate(log.Log, ctx, condition))
|
2020-01-07 15:13:57 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_Eval_Equal_Var_Fail(t *testing.T) {
|
|
|
|
resourceRaw := []byte(`
|
|
|
|
{
|
|
|
|
"metadata": {
|
|
|
|
"name": "temp",
|
|
|
|
"namespace": "n1"
|
|
|
|
},
|
|
|
|
"spec": {
|
|
|
|
"namespace": "n1",
|
|
|
|
"name": "temp1"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`)
|
|
|
|
|
|
|
|
// context
|
|
|
|
ctx := context.NewContext()
|
2020-01-24 09:37:12 -08:00
|
|
|
err := ctx.AddResource(resourceRaw)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
2020-01-07 15:13:57 -08:00
|
|
|
condition := kyverno.Condition{
|
|
|
|
Key: "{{request.object.metadata.name}}",
|
|
|
|
Operator: kyverno.Equal,
|
|
|
|
Value: "temp1",
|
|
|
|
}
|
|
|
|
|
2021-07-28 19:54:50 +03:00
|
|
|
if Evaluate(log.Log, ctx, condition) {
|
2020-01-07 15:13:57 -08:00
|
|
|
t.Error("expected to fail")
|
|
|
|
}
|
|
|
|
}
|