1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2024-12-15 17:51:20 +00:00
kyverno/pkg/clients/dclient/discovery_test.go
Ved Ratan 367156f60b
[Chore] Bump to Go 1.20 (#6683)
* 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>
2023-04-03 11:40:47 +00:00

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)
}