2021-07-20 09:36:12 -07:00
|
|
|
package context
|
|
|
|
|
|
|
|
import (
|
2021-10-13 22:45:23 +02:00
|
|
|
"testing"
|
|
|
|
|
2023-12-03 23:35:36 -08:00
|
|
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
2021-07-20 09:36:12 -07:00
|
|
|
"github.com/stretchr/testify/assert"
|
2022-04-06 22:43:07 +02:00
|
|
|
admissionv1 "k8s.io/api/admission/v1"
|
2021-07-20 09:36:12 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestHasChanged(t *testing.T) {
|
|
|
|
ctx := createTestContext(`{"a": {"b": 1, "c": 2}, "d": 3}`, `{"a": {"b": 2, "c": 2}, "d": 4}`)
|
|
|
|
|
|
|
|
val, err := ctx.HasChanged("a.b")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, val)
|
|
|
|
|
|
|
|
val, err = ctx.HasChanged("a.c")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.False(t, val)
|
|
|
|
|
|
|
|
val, err = ctx.HasChanged("d")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, val)
|
|
|
|
|
2021-10-13 22:45:23 +02:00
|
|
|
_, err = ctx.HasChanged("a.x.y")
|
2021-07-20 09:36:12 -07:00
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRequestNotInitialize(t *testing.T) {
|
2023-04-04 07:11:18 +02:00
|
|
|
request := admissionv1.AdmissionRequest{}
|
2023-04-13 13:29:40 +02:00
|
|
|
ctx := NewContext(jp)
|
2021-07-20 09:36:12 -07:00
|
|
|
ctx.AddRequest(request)
|
|
|
|
|
|
|
|
_, err := ctx.HasChanged("x.y.z")
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMissingOldObject(t *testing.T) {
|
2023-04-04 07:11:18 +02:00
|
|
|
request := admissionv1.AdmissionRequest{}
|
2023-04-13 13:29:40 +02:00
|
|
|
ctx := NewContext(jp)
|
2021-07-20 09:36:12 -07:00
|
|
|
ctx.AddRequest(request)
|
|
|
|
request.Object.Raw = []byte(`{"a": {"b": 1, "c": 2}, "d": 3}`)
|
|
|
|
|
|
|
|
_, err := ctx.HasChanged("a.b")
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMissingObject(t *testing.T) {
|
2023-04-04 07:11:18 +02:00
|
|
|
request := admissionv1.AdmissionRequest{}
|
2023-04-13 13:29:40 +02:00
|
|
|
ctx := NewContext(jp)
|
2021-07-20 09:36:12 -07:00
|
|
|
ctx.AddRequest(request)
|
|
|
|
request.OldObject.Raw = []byte(`{"a": {"b": 1, "c": 2}, "d": 3}`)
|
|
|
|
|
|
|
|
_, err := ctx.HasChanged("a.b")
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
|
2022-04-09 13:52:50 +02:00
|
|
|
func createTestContext(obj, oldObj string) Interface {
|
2023-04-04 07:11:18 +02:00
|
|
|
request := admissionv1.AdmissionRequest{}
|
2021-07-20 09:36:12 -07:00
|
|
|
request.Operation = "UPDATE"
|
|
|
|
request.Object.Raw = []byte(obj)
|
|
|
|
request.OldObject.Raw = []byte(oldObj)
|
|
|
|
|
2023-04-13 13:29:40 +02:00
|
|
|
ctx := NewContext(jp)
|
2021-07-20 09:36:12 -07:00
|
|
|
ctx.AddRequest(request)
|
|
|
|
return ctx
|
|
|
|
}
|
2023-12-03 23:35:36 -08:00
|
|
|
|
|
|
|
func TestQueryOperation(t *testing.T) {
|
|
|
|
ctx := createTestContext(`{"a": {"b": 1, "c": 2}, "d": 3}`, `{"a": {"b": 2, "c": 2}, "d": 4}`)
|
|
|
|
assert.Equal(t, ctx.QueryOperation(), "UPDATE")
|
|
|
|
request := admissionv1.AdmissionRequest{
|
|
|
|
Operation: admissionv1.Delete,
|
|
|
|
}
|
|
|
|
|
|
|
|
err := ctx.AddRequest(request)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, ctx.QueryOperation(), "DELETE")
|
|
|
|
|
|
|
|
err = ctx.AddOperation(string(kyvernov1.Connect))
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, ctx.QueryOperation(), "CONNECT")
|
|
|
|
|
|
|
|
err = ctx.AddRequest(admissionv1.AdmissionRequest{})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, ctx.QueryOperation(), "")
|
|
|
|
}
|