mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-15 17:51:20 +00:00
367156f60b
* changed go version 1.19->1.20 Signed-off-by: Ved Ratan <vedratan8@gmail.com> * updated go version in actions Signed-off-by: Ved Ratan <vedratan8@gmail.com> * bumped golangci-lint Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fix conflicts Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fixed some linter issues Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fixed some linter issues Signed-off-by: Ved Ratan <vedratan8@gmail.com> * possible fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> * small fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> * fix Signed-off-by: Ved Ratan <vedratan8@gmail.com> --------- Signed-off-by: Ved Ratan <vedratan8@gmail.com> Signed-off-by: Ved Ratan <82467006+VedRatan@users.noreply.github.com>
205 lines
9 KiB
Go
205 lines
9 KiB
Go
package dclient
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
var (
|
|
networkPolicyAPIResource = metav1.APIResource{Name: "networkpolicies", SingularName: "", Namespaced: true, Kind: "NetworkPolicy"}
|
|
networkPolicyStatusAPIResource = metav1.APIResource{Name: "networkpolicies/status", SingularName: "", Namespaced: true, Kind: "NetworkPolicy"}
|
|
podAPIResource = metav1.APIResource{Name: "pods", SingularName: "", Namespaced: true, Kind: "Pod"}
|
|
podEvictionAPIResource = metav1.APIResource{Name: "pods/eviction", SingularName: "", Namespaced: true, Group: "policy", Version: "v1", Kind: "Eviction"}
|
|
podLogAPIResource = metav1.APIResource{Name: "pods/log", SingularName: "", Namespaced: true, Kind: "Pod"}
|
|
cronJobAPIResource = metav1.APIResource{Name: "cronjobs", SingularName: "", Namespaced: true, Kind: "CronJob"}
|
|
)
|
|
|
|
func Test_findSubresource(t *testing.T) {
|
|
serverGroupsAndResources := []*metav1.APIResourceList{
|
|
{
|
|
GroupVersion: "networking.k8s.io/v1",
|
|
APIResources: []metav1.APIResource{
|
|
networkPolicyAPIResource,
|
|
networkPolicyStatusAPIResource,
|
|
},
|
|
},
|
|
|
|
{
|
|
GroupVersion: "v1",
|
|
APIResources: []metav1.APIResource{
|
|
podAPIResource,
|
|
podEvictionAPIResource,
|
|
},
|
|
},
|
|
}
|
|
|
|
apiResource, gvr, err := findSubresource("", "pods", "eviction", "Pod/eviction", serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "pods/eviction", Group: "policy", Version: "v1"})
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, podEvictionAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podEvictionAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, podEvictionAPIResource.Group)
|
|
assert.Equal(t, apiResource.Version, podEvictionAPIResource.Version)
|
|
|
|
apiResource, gvr, err = findSubresource("v1", "pods", "eviction", "Pod/eviction", serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "pods/eviction", Group: "policy", Version: "v1"})
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, podEvictionAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podEvictionAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, podEvictionAPIResource.Group)
|
|
assert.Equal(t, apiResource.Version, podEvictionAPIResource.Version)
|
|
|
|
apiResource, gvr, err = findSubresource("networking.k8s.io/*", "networkpolicies", "status", "NetworkPolicy/status", serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "networkpolicies/status", Group: "networking.k8s.io", Version: "v1"})
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, networkPolicyStatusAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, networkPolicyStatusAPIResource.Kind)
|
|
|
|
// Resources with empty GV use the GV of APIResourceList
|
|
assert.Equal(t, apiResource.Group, "networking.k8s.io")
|
|
assert.Equal(t, apiResource.Version, "v1")
|
|
}
|
|
|
|
func Test_findResource(t *testing.T) {
|
|
serverGroupsAndResources := []*metav1.APIResourceList{
|
|
{
|
|
GroupVersion: "v1",
|
|
APIResources: []metav1.APIResource{
|
|
podEvictionAPIResource,
|
|
podLogAPIResource,
|
|
podAPIResource,
|
|
},
|
|
},
|
|
{
|
|
GroupVersion: "batch/v1beta1",
|
|
APIResources: []metav1.APIResource{
|
|
cronJobAPIResource,
|
|
},
|
|
},
|
|
{
|
|
GroupVersion: "batch/v1",
|
|
APIResources: []metav1.APIResource{
|
|
cronJobAPIResource,
|
|
},
|
|
},
|
|
}
|
|
|
|
serverPreferredResourcesList := []*metav1.APIResourceList{
|
|
{
|
|
GroupVersion: "v1",
|
|
APIResources: []metav1.APIResource{
|
|
podAPIResource,
|
|
},
|
|
},
|
|
{
|
|
GroupVersion: "batch/v1",
|
|
APIResources: []metav1.APIResource{
|
|
cronJobAPIResource,
|
|
},
|
|
},
|
|
}
|
|
|
|
apiResource, parentAPIResource, gvr, err := findResource("", "Pod", serverPreferredResourcesList, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "pods", Group: "", Version: "v1"})
|
|
assert.Equal(t, parentAPIResource, (*metav1.APIResource)(nil))
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, podAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podAPIResource.Kind)
|
|
|
|
// Resources with empty GV use the GV of APIResourceList
|
|
assert.Equal(t, apiResource.Group, "")
|
|
assert.Equal(t, apiResource.Version, "v1")
|
|
|
|
apiResource, parentAPIResource, gvr, err = findResource("policy/v1", "Eviction", serverPreferredResourcesList, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "pods/eviction", Group: "policy", Version: "v1"})
|
|
|
|
assert.Equal(t, parentAPIResource.Name, podAPIResource.Name)
|
|
assert.Equal(t, parentAPIResource.Kind, podAPIResource.Kind)
|
|
assert.Equal(t, parentAPIResource.Group, "")
|
|
assert.Equal(t, parentAPIResource.Version, "v1")
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, podEvictionAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podEvictionAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, podEvictionAPIResource.Group)
|
|
assert.Equal(t, apiResource.Version, podEvictionAPIResource.Version)
|
|
|
|
apiResource, parentAPIResource, gvr, err = findResource("", "CronJob", serverPreferredResourcesList, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "cronjobs", Group: "batch", Version: "v1"})
|
|
|
|
assert.Equal(t, parentAPIResource, (*metav1.APIResource)(nil))
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, cronJobAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, cronJobAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, "batch")
|
|
assert.Equal(t, apiResource.Version, "v1")
|
|
|
|
apiResource, parentAPIResource, gvr, err = findResource("batch/v1beta1", "CronJob", serverPreferredResourcesList, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gvr, schema.GroupVersionResource{Resource: "cronjobs", Group: "batch", Version: "v1beta1"})
|
|
|
|
assert.Equal(t, parentAPIResource, (*metav1.APIResource)(nil))
|
|
|
|
// Not comparing directly because actual apiResource also contains fields like 'ShortNames' which are not set in the expected apiResource
|
|
assert.Equal(t, apiResource.Name, cronJobAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, cronJobAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, "batch")
|
|
assert.Equal(t, apiResource.Version, "v1beta1")
|
|
}
|
|
|
|
func Test_getServerResourceGroupVersion(t *testing.T) {
|
|
apiResource := &metav1.APIResource{Name: "pods", SingularName: "", Namespaced: true, Kind: "Pod"}
|
|
apiResourceListGV := "v1"
|
|
assert.Equal(t, getServerResourceGroupVersion(apiResourceListGV, apiResource.Group, apiResource.Version), "v1")
|
|
|
|
apiResource = &metav1.APIResource{Name: "horizontalpodautoscalers", SingularName: "", Namespaced: true, Kind: "HorizontalPodAutoscaler"}
|
|
apiResourceListGV = "autoscaling/v2beta1"
|
|
assert.Equal(t, getServerResourceGroupVersion(apiResourceListGV, apiResource.Group, apiResource.Version), "autoscaling/v2beta1")
|
|
|
|
apiResource = &metav1.APIResource{Name: "deployments/scale", SingularName: "", Namespaced: true, Group: "autoscaling", Version: "v1", Kind: "Scale"}
|
|
apiResourceListGV = "apps/v1"
|
|
assert.Equal(t, getServerResourceGroupVersion(apiResourceListGV, apiResource.Group, apiResource.Version), "autoscaling/v1")
|
|
}
|
|
|
|
func Test_findResourceFromResourceName(t *testing.T) {
|
|
serverGroupsAndResources := []*metav1.APIResourceList{
|
|
{
|
|
GroupVersion: "v1",
|
|
APIResources: []metav1.APIResource{
|
|
podAPIResource,
|
|
podEvictionAPIResource,
|
|
},
|
|
},
|
|
}
|
|
|
|
apiResource, err := findResourceFromResourceName(schema.GroupVersionResource{Version: "v1", Resource: "pods"}, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, apiResource.Name, podAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, "")
|
|
assert.Equal(t, apiResource.Version, "v1")
|
|
|
|
apiResource, err = findResourceFromResourceName(schema.GroupVersionResource{Group: "policy", Version: "v1", Resource: "pods/eviction"}, serverGroupsAndResources)
|
|
assert.Error(t, err)
|
|
|
|
apiResource, err = findResourceFromResourceName(schema.GroupVersionResource{Version: "v1", Resource: "pods/eviction"}, serverGroupsAndResources)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, apiResource.Name, podEvictionAPIResource.Name)
|
|
assert.Equal(t, apiResource.Kind, podEvictionAPIResource.Kind)
|
|
assert.Equal(t, apiResource.Group, podEvictionAPIResource.Group)
|
|
assert.Equal(t, apiResource.Version, podEvictionAPIResource.Version)
|
|
}
|