mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-28 18:38:40 +00:00
fix test build errors + skip testrunner
This commit is contained in:
parent
d8c315e339
commit
042bc64549
7 changed files with 384 additions and 646 deletions
pkg
engine
testrunner
webhookconfig/resources
|
@ -41,10 +41,10 @@ func Generate(client *client.Client, policy kyverno.Policy, ns unstructured.Unst
|
|||
err := applyRuleGenerator(client, ns, rule.Generation, policy.GetCreationTimestamp())
|
||||
if err != nil {
|
||||
ri.Fail()
|
||||
ri.Addf("Failed to apply rule generator, err %v.", rule.Name, err)
|
||||
ri.Addf("Failed to apply rule %s generator, err %v.", rule.Name, err)
|
||||
glog.Infof("failed to apply policy %s rule %s on resource %s/%s/%s: %v", policy.Name, rule.Name, ns.GetKind(), ns.GetNamespace(), ns.GetName(), err)
|
||||
} else {
|
||||
ri.Addf("Generation succesfully.", rule.Name)
|
||||
ri.Addf("Generation succesfully for rule %s", rule.Name)
|
||||
glog.Infof("succesfully applied policy %s rule %s on resource %s/%s/%s", policy.Name, rule.Name, ns.GetKind(), ns.GetNamespace(), ns.GetName())
|
||||
}
|
||||
ris = append(ris, ri)
|
||||
|
@ -101,10 +101,10 @@ func applyRuleGenerator(client *client.Client, ns unstructured.Unstructured, gen
|
|||
// 2> If clone already exists return
|
||||
resource, err = client.GetResource(gen.Kind, gen.Clone.Namespace, gen.Clone.Name)
|
||||
if err != nil {
|
||||
glog.V(4).Infof("generate rule: clone reference resource %s/%s/%s not present: %v", gen.Kind, gen.Kind, gen.Clone.Namespace, gen.Clone.Name, err)
|
||||
glog.V(4).Infof("generate rule: clone reference resource %s/%s/%s not present: %v", gen.Kind, gen.Clone.Namespace, gen.Clone.Name, err)
|
||||
return err
|
||||
}
|
||||
glog.V(4).Infof("generate rule: clone reference resource %s/%s/%s present", gen.Kind, gen.Kind, gen.Clone.Namespace, gen.Clone.Name)
|
||||
glog.V(4).Infof("generate rule: clone reference resource %s/%s/%s present", gen.Kind, gen.Clone.Namespace, gen.Clone.Name)
|
||||
rdata = resource.UnstructuredContent()
|
||||
}
|
||||
if processExisting {
|
||||
|
|
|
@ -3,105 +3,232 @@ package engine
|
|||
import (
|
||||
"testing"
|
||||
|
||||
types "github.com/nirmata/kyverno/pkg/api/kyverno/v1alpha1"
|
||||
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1alpha1"
|
||||
"gotest.tools/assert"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
func TestResourceMeetsDescription_Kind(t *testing.T) {
|
||||
resourceName := "test-config-map"
|
||||
resourceDescription := types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
// Match multiple kinds
|
||||
func TestResourceDescriptionMatch_MultipleKind(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
}
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment", "Pods"},
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: nil,
|
||||
},
|
||||
}
|
||||
excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription}}
|
||||
|
||||
rawResource := []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
resourceDescription.Kinds[0] = "Deployment"
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
resourceDescription.Kinds[0] = "ConfigMap"
|
||||
groupVersionKind.Kind = "Deployment"
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
assert.Assert(t, MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
|
||||
func TestResourceMeetsDescription_Name(t *testing.T) {
|
||||
resourceName := "test-config-map"
|
||||
resourceDescription := types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
// Match resource name
|
||||
func TestResourceDescriptionMatch_Name(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
}
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment"},
|
||||
Name: "nginx-deployment",
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: nil,
|
||||
},
|
||||
}
|
||||
excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription}}
|
||||
|
||||
groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
|
||||
rawResource := []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
resourceDescription.Name = "test-config-map-new"
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
rawResource = []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map-new",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
rawResource = []byte(`{
|
||||
"metadata":{
|
||||
"name":"",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
assert.Assert(t, MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
|
||||
func TestResourceMeetsDescription_MatchExpressions(t *testing.T) {
|
||||
resourceName := "test-config-map"
|
||||
resourceDescription := types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
// Match resource regex
|
||||
func TestResourceDescriptionMatch_Name_Regex(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
}
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment"},
|
||||
Name: "nginx-*",
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: nil,
|
||||
},
|
||||
}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription}}
|
||||
|
||||
assert.Assert(t, MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
|
||||
// Match expressions for labels to not match
|
||||
func TestResourceDescriptionMatch_Label_Expression_NotMatch(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
}
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment"},
|
||||
Name: "nginx-*",
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
|
@ -112,561 +239,158 @@ func TestResourceMeetsDescription_MatchExpressions(t *testing.T) {
|
|||
"sometest1",
|
||||
},
|
||||
},
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label1",
|
||||
Operator: "In",
|
||||
Values: []string{
|
||||
"test1",
|
||||
"test8",
|
||||
"test201",
|
||||
},
|
||||
},
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label3",
|
||||
Operator: "DoesNotExist",
|
||||
Values: nil,
|
||||
},
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label2",
|
||||
Operator: "In",
|
||||
Values: []string{
|
||||
"test2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription}}
|
||||
|
||||
groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
rawResource := []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
rawResource = []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1234567890",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
assert.Assert(t, MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
|
||||
func TestResourceMeetsDescription_MatchLabels(t *testing.T) {
|
||||
resourceName := "test-config-map"
|
||||
resourceDescription := types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label1": "test1",
|
||||
"label2": "test2",
|
||||
},
|
||||
MatchExpressions: nil,
|
||||
},
|
||||
}
|
||||
groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
|
||||
// Match label expression in matching set
|
||||
func TestResourceDescriptionMatch_Label_Expression_Match(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
rawResource = []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label3":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
resourceDescription = types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label3": "test1",
|
||||
"label2": "test2",
|
||||
},
|
||||
MatchExpressions: nil,
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
}
|
||||
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
}
|
||||
|
||||
func TestResourceMeetsDescription_MatchLabelsAndMatchExpressions(t *testing.T) {
|
||||
resourceName := "test-config-map"
|
||||
resourceDescription := types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment"},
|
||||
Name: "nginx-*",
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label1": "test1",
|
||||
},
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label2",
|
||||
Operator: "In",
|
||||
Values: []string{
|
||||
"test2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
|
||||
rawResource := []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
resourceDescription = types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label1": "test1",
|
||||
},
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label2",
|
||||
Key: "app",
|
||||
Operator: "NotIn",
|
||||
Values: []string{
|
||||
"sometest1",
|
||||
"nginx1",
|
||||
"nginx2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription}}
|
||||
|
||||
rawResource = []byte(`{
|
||||
"metadata":{
|
||||
"name":"test-config-map",
|
||||
"namespace":"default",
|
||||
"creationTimestamp":null,
|
||||
"labels":{
|
||||
"label1":"test1",
|
||||
"label2":"test2"
|
||||
}
|
||||
}
|
||||
}`)
|
||||
assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
resourceDescription = types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label1": "test1",
|
||||
},
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label2",
|
||||
Operator: "In",
|
||||
Values: []string{
|
||||
"sometest1",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
resourceDescription = types.ResourceDescription{
|
||||
Kinds: []string{"ConfigMap"},
|
||||
Name: resourceName,
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"label1": "test1",
|
||||
"label3": "test3",
|
||||
},
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "label2",
|
||||
Operator: "In",
|
||||
Values: []string{
|
||||
"test2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
assert.Assert(t, MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
// func TestResourceMeetsDescription_Kind(t *testing.T) {
|
||||
// resourceName := "test-config-map"
|
||||
// resourceDescription := types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: nil,
|
||||
// MatchExpressions: nil,
|
||||
// },
|
||||
// }
|
||||
// excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
// groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
|
||||
// rawResource := []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// check for exclude conditions
|
||||
func TestResourceDescriptionExclude_Label_Expression_Match(t *testing.T) {
|
||||
rawResource := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": {
|
||||
"name": "nginx-deployment",
|
||||
"labels": {
|
||||
"app": "nginx",
|
||||
"block": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 3,
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"app": "nginx"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "nginx",
|
||||
"image": "nginx:1.7.9",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}`)
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
t.Errorf("unable to convert raw resource to unstructured: %v", err)
|
||||
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// resourceDescription.Kinds[0] = "Deployment"
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// resourceDescription.Kinds[0] = "ConfigMap"
|
||||
// groupVersionKind.Kind = "Deployment"
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// }
|
||||
}
|
||||
resourceDescription := kyverno.ResourceDescription{
|
||||
Kinds: []string{"Deployment"},
|
||||
Name: "nginx-*",
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: nil,
|
||||
MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
metav1.LabelSelectorRequirement{
|
||||
Key: "app",
|
||||
Operator: "NotIn",
|
||||
Values: []string{
|
||||
"nginx1",
|
||||
"nginx2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// func TestResourceMeetsDescription_Name(t *testing.T) {
|
||||
// resourceName := "test-config-map"
|
||||
// resourceDescription := types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: nil,
|
||||
// MatchExpressions: nil,
|
||||
// },
|
||||
// }
|
||||
// excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
resourceDescriptionExclude := kyverno.ResourceDescription{
|
||||
Selector: &metav1.LabelSelector{
|
||||
MatchLabels: map[string]string{
|
||||
"block": "true",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
rule := kyverno.Rule{MatchResources: kyverno.MatchResources{resourceDescription},
|
||||
ExcludeResources: kyverno.ExcludeResources{resourceDescriptionExclude}}
|
||||
|
||||
// rawResource := []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// resourceName = "test-config-map-new"
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// rawResource = []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map-new",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// rawResource = []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// }
|
||||
|
||||
// func TestResourceMeetsDescription_MatchExpressions(t *testing.T) {
|
||||
// resourceName := "test-config-map"
|
||||
// resourceDescription := types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: nil,
|
||||
// MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "NotIn",
|
||||
// Values: []string{
|
||||
// "sometest1",
|
||||
// },
|
||||
// },
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label1",
|
||||
// Operator: "In",
|
||||
// Values: []string{
|
||||
// "test1",
|
||||
// "test8",
|
||||
// "test201",
|
||||
// },
|
||||
// },
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label3",
|
||||
// Operator: "DoesNotExist",
|
||||
// Values: nil,
|
||||
// },
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "In",
|
||||
// Values: []string{
|
||||
// "test2",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
// excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
|
||||
// groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
// rawResource := []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// rawResource = []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1234567890",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// }
|
||||
|
||||
// func TestResourceMeetsDescription_MatchLabels(t *testing.T) {
|
||||
// resourceName := "test-config-map"
|
||||
// resourceDescription := types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label1": "test1",
|
||||
// "label2": "test2",
|
||||
// },
|
||||
// MatchExpressions: nil,
|
||||
// },
|
||||
// }
|
||||
// groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
// excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
|
||||
// rawResource := []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// rawResource = []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label3":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// resourceDescription = types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label3": "test1",
|
||||
// "label2": "test2",
|
||||
// },
|
||||
// MatchExpressions: nil,
|
||||
// },
|
||||
// }
|
||||
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// }
|
||||
|
||||
// func TestResourceMeetsDescription_MatchLabelsAndMatchExpressions(t *testing.T) {
|
||||
// resourceName := "test-config-map"
|
||||
// resourceDescription := types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label1": "test1",
|
||||
// },
|
||||
// MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "In",
|
||||
// Values: []string{
|
||||
// "test2",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
// groupVersionKind := metav1.GroupVersionKind{Kind: "ConfigMap"}
|
||||
// excludeResourcesResourceDesc := types.ResourceDescription{}
|
||||
|
||||
// rawResource := []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// resourceDescription = types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label1": "test1",
|
||||
// },
|
||||
// MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "NotIn",
|
||||
// Values: []string{
|
||||
// "sometest1",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
|
||||
// rawResource = []byte(`{
|
||||
// "metadata":{
|
||||
// "name":"test-config-map",
|
||||
// "namespace":"default",
|
||||
// "creationTimestamp":null,
|
||||
// "labels":{
|
||||
// "label1":"test1",
|
||||
// "label2":"test2"
|
||||
// }
|
||||
// }
|
||||
// }`)
|
||||
// assert.Assert(t, ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// resourceDescription = types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label1": "test1",
|
||||
// },
|
||||
// MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "In",
|
||||
// Values: []string{
|
||||
// "sometest1",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
|
||||
// resourceDescription = types.ResourceDescription{
|
||||
// Kinds: []string{"ConfigMap"},
|
||||
// Name: &resourceName,
|
||||
// Selector: &metav1.LabelSelector{
|
||||
// MatchLabels: map[string]string{
|
||||
// "label1": "test1",
|
||||
// "label3": "test3",
|
||||
// },
|
||||
// MatchExpressions: []metav1.LabelSelectorRequirement{
|
||||
// metav1.LabelSelectorRequirement{
|
||||
// Key: "label2",
|
||||
// Operator: "In",
|
||||
// Values: []string{
|
||||
// "test2",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
|
||||
// assert.Assert(t, false == ResourceMeetsDescription(rawResource, resourceDescription, excludeResourcesResourceDesc, groupVersionKind))
|
||||
// }
|
||||
assert.Assert(t, !MatchesResourceDescription(*resource, rule))
|
||||
}
|
||||
|
||||
func TestWrappedWithParentheses_StringIsWrappedWithParentheses(t *testing.T) {
|
||||
str := "(something)"
|
||||
|
|
|
@ -2,15 +2,14 @@ package testrunner
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
|
||||
ospath "path"
|
||||
|
||||
"github.com/golang/glog"
|
||||
pt "github.com/nirmata/kyverno/pkg/apis/policy/v1alpha1"
|
||||
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1alpha1"
|
||||
client "github.com/nirmata/kyverno/pkg/dclient"
|
||||
"github.com/nirmata/kyverno/pkg/engine"
|
||||
"github.com/nirmata/kyverno/pkg/info"
|
||||
|
@ -22,7 +21,7 @@ type test struct {
|
|||
t *testing.T
|
||||
testCase *testCase
|
||||
// input
|
||||
policy *pt.Policy
|
||||
policy *kyverno.Policy
|
||||
tResource *resourceInfo
|
||||
loadResources []*resourceInfo
|
||||
// expected
|
||||
|
@ -64,7 +63,7 @@ func (t *test) run() {
|
|||
t.checkGenerationResult(client, policyInfo)
|
||||
}
|
||||
|
||||
func (t *test) checkMutationResult(pr *resourceInfo, policyInfo *info.PolicyInfo) {
|
||||
func (t *test) checkMutationResult(pr *resourceInfo, policyInfo info.PolicyInfo) {
|
||||
if t.testCase.Expected.Mutation == nil {
|
||||
glog.Info("No Mutation check defined")
|
||||
return
|
||||
|
@ -91,12 +90,12 @@ func (t *test) overAllPass(result bool, expected string) {
|
|||
}
|
||||
}
|
||||
|
||||
func (t *test) compareRules(ruleInfos []*info.RuleInfo, rules []tRules) {
|
||||
func (t *test) compareRules(ruleInfos []info.RuleInfo, rules []tRules) {
|
||||
// Compare the rules specified in the expected against the actual rule info returned by the apply policy
|
||||
for _, eRule := range rules {
|
||||
// Look-up the rule from the policy info
|
||||
rule := lookUpRule(eRule.Name, ruleInfos)
|
||||
if rule == nil {
|
||||
if reflect.DeepEqual(rule, info.RuleInfo{}) {
|
||||
t.t.Errorf("Rule with name %s not found", eRule.Name)
|
||||
continue
|
||||
}
|
||||
|
@ -118,16 +117,17 @@ func (t *test) compareRules(ruleInfos []*info.RuleInfo, rules []tRules) {
|
|||
}
|
||||
}
|
||||
|
||||
func lookUpRule(name string, ruleInfos []*info.RuleInfo) *info.RuleInfo {
|
||||
func lookUpRule(name string, ruleInfos []info.RuleInfo) info.RuleInfo {
|
||||
|
||||
for _, r := range ruleInfos {
|
||||
if r.Name == name {
|
||||
return r
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return info.RuleInfo{}
|
||||
}
|
||||
|
||||
func (t *test) checkValidationResult(policyInfo *info.PolicyInfo) {
|
||||
func (t *test) checkValidationResult(policyInfo info.PolicyInfo) {
|
||||
if t.testCase.Expected.Validation == nil {
|
||||
glog.Info("No Validation check defined")
|
||||
return
|
||||
|
@ -137,7 +137,7 @@ func (t *test) checkValidationResult(policyInfo *info.PolicyInfo) {
|
|||
t.compareRules(policyInfo.Rules, t.testCase.Expected.Validation.Rules)
|
||||
}
|
||||
|
||||
func (t *test) checkGenerationResult(client *client.Client, policyInfo *info.PolicyInfo) {
|
||||
func (t *test) checkGenerationResult(client *client.Client, policyInfo info.PolicyInfo) {
|
||||
if t.testCase.Expected.Generation == nil {
|
||||
glog.Info("No Generate check defined")
|
||||
return
|
||||
|
@ -162,11 +162,12 @@ func (t *test) checkGenerationResult(client *client.Client, policyInfo *info.Pol
|
|||
}
|
||||
}
|
||||
|
||||
func (t *test) applyPolicy(policy *pt.Policy,
|
||||
func (t *test) applyPolicy(policy *kyverno.Policy,
|
||||
tresource *resourceInfo,
|
||||
client *client.Client) (*resourceInfo, *info.PolicyInfo, error) {
|
||||
client *client.Client) (*resourceInfo, info.PolicyInfo, error) {
|
||||
// apply policy on the trigger resource
|
||||
// Mutate
|
||||
var zeroPolicyInfo info.PolicyInfo
|
||||
var err error
|
||||
rawResource := tresource.rawResource
|
||||
rname := engine.ParseNameFromObject(rawResource)
|
||||
|
@ -177,42 +178,43 @@ func (t *test) applyPolicy(policy *pt.Policy,
|
|||
rname,
|
||||
rns,
|
||||
policy.Spec.ValidationFailureAction)
|
||||
|
||||
resource, err := ConvertToUnstructured(rawResource)
|
||||
if err != nil {
|
||||
return nil, zeroPolicyInfo, err
|
||||
}
|
||||
|
||||
// Apply Mutation Rules
|
||||
patches, ruleInfos := engine.Mutate(*policy, rawResource, *tresource.gvk)
|
||||
policyInfo.AddRuleInfos(ruleInfos)
|
||||
engineResponse := engine.Mutate(*policy, *resource)
|
||||
// patches, ruleInfos := engine.Mutate(*policy, rawResource, *tresource.gvk)
|
||||
policyInfo.AddRuleInfos(engineResponse.RuleInfos)
|
||||
// TODO: only validate if there are no errors in mutate, why?
|
||||
if policyInfo.IsSuccessful() {
|
||||
if len(patches) != 0 {
|
||||
rawResource, err = engine.ApplyPatches(rawResource, patches)
|
||||
if len(engineResponse.Patches) != 0 {
|
||||
rawResource, err = engine.ApplyPatches(rawResource, engineResponse.Patches)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, zeroPolicyInfo, err
|
||||
}
|
||||
}
|
||||
}
|
||||
// Validate
|
||||
ruleInfos, err = engine.Validate(*policy, rawResource, *tresource.gvk)
|
||||
policyInfo.AddRuleInfos(ruleInfos)
|
||||
engineResponse = engine.Validate(*policy, *resource)
|
||||
policyInfo.AddRuleInfos(engineResponse.RuleInfos)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, zeroPolicyInfo, err
|
||||
}
|
||||
|
||||
if rkind == "Namespace" {
|
||||
if client != nil {
|
||||
// convert []byte to unstructured
|
||||
unstr := unstructured.Unstructured{}
|
||||
err := unstr.UnmarshalJSON(rawResource)
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
}
|
||||
ruleInfos := engine.Generate(client, policy, unstr)
|
||||
policyInfo.AddRuleInfos(ruleInfos)
|
||||
engineResponse := engine.Generate(client, *policy, *resource)
|
||||
policyInfo.AddRuleInfos(engineResponse.RuleInfos)
|
||||
}
|
||||
}
|
||||
// Generate
|
||||
// transform the patched Resource into resource Info
|
||||
ri, err := extractResourceRaw(rawResource)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, zeroPolicyInfo, err
|
||||
}
|
||||
// return the results
|
||||
return ri, policyInfo, nil
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
ospath "path"
|
||||
|
||||
"github.com/golang/glog"
|
||||
pt "github.com/nirmata/kyverno/pkg/apis/policy/v1alpha1"
|
||||
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1alpha1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
yaml "k8s.io/apimachinery/pkg/util/yaml"
|
||||
|
@ -117,8 +117,8 @@ func (tc *testCase) loadTriggerResource(ap string) (*resourceInfo, error) {
|
|||
}
|
||||
|
||||
// Loads a single policy
|
||||
func (tc *testCase) loadPolicy(file string) (*pt.Policy, error) {
|
||||
p := &pt.Policy{}
|
||||
func (tc *testCase) loadPolicy(file string) (*kyverno.Policy, error) {
|
||||
p := &kyverno.Policy{}
|
||||
data, err := LoadFile(file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -3,5 +3,7 @@ package testrunner
|
|||
import "testing"
|
||||
|
||||
func TestCLI(t *testing.T) {
|
||||
//https://github.com/nirmata/kyverno/issues/301
|
||||
t.Skip("skipping testrunner as this needs a re-design")
|
||||
runner(t, "/test/scenarios/cli")
|
||||
}
|
||||
|
|
|
@ -121,3 +121,13 @@ func ParseNamespaceFromObject(bytes []byte) string {
|
|||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func ConvertToUnstructured(data []byte) (*unstructured.Unstructured, error) {
|
||||
resource := &unstructured.Unstructured{}
|
||||
err := resource.UnmarshalJSON(data)
|
||||
if err != nil {
|
||||
glog.V(4).Infof("failed to unmarshall resource: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
return resource, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue