1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-09 09:26:54 +00:00
kyverno/pkg/policystore/policystore_test.go

282 lines
5.1 KiB
Go
Raw Normal View History

2019-11-11 11:10:25 -08:00
package policystore
import (
"encoding/json"
2019-11-12 14:41:29 -08:00
"reflect"
2019-11-11 11:10:25 -08:00
"testing"
2019-11-13 13:56:07 -08:00
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
2019-11-12 14:41:29 -08:00
"github.com/nirmata/kyverno/pkg/client/clientset/versioned/fake"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes/scheme"
2019-11-11 11:10:25 -08:00
)
2019-11-12 14:41:29 -08:00
func Test_Operations(t *testing.T) {
2019-11-11 11:10:25 -08:00
rawPolicy1 := []byte(`
{
2019-11-13 13:56:07 -08:00
"apiVersion": "kyverno.io/v1",
2019-11-11 11:10:25 -08:00
"kind": "ClusterPolicy",
"metadata": {
2019-11-13 08:07:11 -08:00
"name": "test-policy1"
2019-11-11 11:10:25 -08:00
},
"spec": {
"rules": [
{
"name": "r1",
"match": {
"resources": {
"kinds": [
"Pod"
]
}
},
"mutate": {
"overlay": "temp"
}
},
{
"name": "r2",
"match": {
"resources": {
"kinds": [
"Pod",
"Deployment"
]
}
},
"mutate": {
"overlay": "temp"
}
},
{
"name": "r3",
"match": {
"resources": {
"kinds": [
"Pod",
"Deployment"
],
"namespaces": [
"n1"
]
}
},
"mutate": {
"overlay": "temp"
}
},
{
"name": "r4",
"match": {
"resources": {
"kinds": [
"Pod",
"Deployment"
],
"namespaces": [
"n1",
"n2"
]
}
},
"validate": {
"pattern": "temp"
}
}
]
}
}
`)
rawPolicy2 := []byte(`
{
2019-11-13 13:56:07 -08:00
"apiVersion": "kyverno.io/v1",
2019-11-11 11:10:25 -08:00
"kind": "ClusterPolicy",
"metadata": {
2019-11-13 08:07:11 -08:00
"name": "test-policy2"
2019-11-11 11:10:25 -08:00
},
"spec": {
"rules": [
{
"name": "r1",
"match": {
"resources": {
"kinds": [
"Pod"
]
}
},
"mutate": {
"overlay": "temp"
}
},
{
"name": "r2",
"match": {
"resources": {
"kinds": [
"Pod"
],
"namespaces": [
"n4"
]
}
},
"mutate": {
"overlay": "temp"
}
},
{
"name": "r2",
"match": {
"resources": {
"kinds": [
"Pod"
],
"namespaces": [
"n4",
"n5",
"n6"
]
}
},
"validate": {
"pattern": "temp"
}
}
]
}
}`)
2019-11-12 14:41:29 -08:00
rawPolicy3 := []byte(`
{
2019-11-13 13:56:07 -08:00
"apiVersion": "kyverno.io/v1",
2019-11-12 14:41:29 -08:00
"kind": "ClusterPolicy",
"metadata": {
"name": "test-policy3"
},
"spec": {
"rules": [
{
"name": "r4",
"match": {
"resources": {
"kinds": [
"Service"
]
}
},
"mutate": {
"overlay": "temp"
}
}
]
}
}`)
2019-11-13 13:56:07 -08:00
var policy1 kyverno.ClusterPolicy
2019-11-11 11:10:25 -08:00
json.Unmarshal(rawPolicy1, &policy1)
2019-11-13 13:56:07 -08:00
var policy2 kyverno.ClusterPolicy
2019-11-11 11:10:25 -08:00
json.Unmarshal(rawPolicy2, &policy2)
2019-11-13 13:56:07 -08:00
var policy3 kyverno.ClusterPolicy
2019-11-12 14:41:29 -08:00
json.Unmarshal(rawPolicy3, &policy3)
2019-11-13 13:56:07 -08:00
scheme.Scheme.AddKnownTypes(kyverno.SchemeGroupVersion,
&kyverno.ClusterPolicy{},
2019-11-12 14:41:29 -08:00
)
var obj runtime.Object
var err error
2019-11-13 13:56:07 -08:00
var retPolicies []kyverno.ClusterPolicy
2019-11-12 14:41:29 -08:00
polices := []runtime.Object{}
// list of runtime objects
decode := scheme.Codecs.UniversalDeserializer().Decode
obj, _, err = decode(rawPolicy1, nil, nil)
if err != nil {
t.Error(err)
}
polices = append(polices, obj)
obj, _, err = decode(rawPolicy2, nil, nil)
if err != nil {
t.Error(err)
}
polices = append(polices, obj)
obj, _, err = decode(rawPolicy3, nil, nil)
if err != nil {
t.Error(err)
}
polices = append(polices, obj)
// Mock Lister
client := fake.NewSimpleClientset(polices...)
fakeLister := &FakeLister{client: client}
store := NewPolicyStore(fakeLister)
// Test Operations
2019-11-11 11:10:25 -08:00
// Add
store.Register(policy1)
2019-11-12 14:41:29 -08:00
// Add
2019-11-11 11:10:25 -08:00
store.Register(policy2)
2019-11-12 14:41:29 -08:00
// Add
store.Register(policy3)
// Lookup
retPolicies, err = store.LookUp("Pod", "")
if err != nil {
t.Error(err)
}
2019-11-13 13:56:07 -08:00
if !reflect.DeepEqual(retPolicies, []kyverno.ClusterPolicy{policy1, policy2}) {
2019-11-12 14:41:29 -08:00
t.Error("not matching")
}
// Remove
2019-11-11 11:10:25 -08:00
store.UnRegister(policy1)
2019-11-12 14:41:29 -08:00
retPolicies, err = store.LookUp("Pod", "")
if err != nil {
t.Error(err)
}
// Lookup
2019-11-13 13:56:07 -08:00
if !reflect.DeepEqual(retPolicies, []kyverno.ClusterPolicy{policy2}) {
2019-11-12 14:41:29 -08:00
t.Error("not matching")
}
// Add
2019-11-11 11:10:25 -08:00
store.Register(policy1)
2019-11-12 14:41:29 -08:00
retPolicies, err = store.LookUp("Pod", "")
if err != nil {
t.Error(err)
}
2019-11-13 08:07:11 -08:00
2019-11-13 13:56:07 -08:00
if len(retPolicies) != len([]kyverno.ClusterPolicy{policy1, policy2}) {
2019-11-13 08:07:11 -08:00
// checking length as the order of polcies might be different
2019-11-12 14:41:29 -08:00
t.Error("not matching")
}
retPolicies, err = store.LookUp("Service", "")
if err != nil {
t.Error(err)
}
2019-11-13 13:56:07 -08:00
if !reflect.DeepEqual(retPolicies, []kyverno.ClusterPolicy{policy3}) {
2019-11-12 14:41:29 -08:00
t.Error("not matching")
}
}
type FakeLister struct {
client *fake.Clientset
}
2019-11-13 13:56:07 -08:00
func (fk *FakeLister) List(selector labels.Selector) (ret []*kyverno.ClusterPolicy, err error) {
2019-11-12 14:41:29 -08:00
return nil, nil
}
2019-11-13 13:56:07 -08:00
func (fk *FakeLister) Get(name string) (*kyverno.ClusterPolicy, error) {
2019-11-13 13:41:08 -08:00
return fk.client.KyvernoV1().ClusterPolicies().Get(name, v1.GetOptions{})
2019-11-12 14:41:29 -08:00
}
2019-11-13 13:56:07 -08:00
func (fk *FakeLister) GetPolicyForPolicyViolation(pv *kyverno.ClusterPolicyViolation) ([]*kyverno.ClusterPolicy, error) {
2019-11-12 14:41:29 -08:00
return nil, nil
}
2019-11-13 13:56:07 -08:00
func (fk *FakeLister) ListResources(selector labels.Selector) (ret []*kyverno.ClusterPolicy, err error) {
2019-11-12 14:41:29 -08:00
return nil, nil
2019-11-11 11:10:25 -08:00
}
2019-11-13 10:21:33 -08:00
2019-11-13 13:56:07 -08:00
func (fk *FakeLister) GetPolicyForNamespacedPolicyViolation(pv *kyverno.NamespacedPolicyViolation) ([]*kyverno.ClusterPolicy, error) {
2019-11-13 10:21:33 -08:00
return nil, nil
}