mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-14 11:57:48 +00:00
3bf3dcc1af
* Add metric "kyverno_kube_client_queries_total" Signed-off-by: ShutingZhao <shuting@nirmata.com> * publish metric for missing queries Signed-off-by: ShutingZhao <shuting@nirmata.com> * Refactor the way Kyverno registers QPS metric Signed-off-by: ShutingZhao <shuting@nirmata.com> * Move clientsets to a dedicated folder Signed-off-by: ShutingZhao <shuting@nirmata.com> * Wrap Kyverno client and policyreport client to register client query metric Signed-off-by: ShutingZhao <shuting@nirmata.com> * address linter comments Signed-off-by: ShutingZhao <shuting@nirmata.com> * address linter comments Signed-off-by: ShutingZhao <shuting@nirmata.com> * Switch to use wrapper clients Signed-off-by: ShutingZhao <shuting@nirmata.com> Signed-off-by: ShutingZhao <shuting@nirmata.com> Co-authored-by: Vyankatesh Kudtarkar <vyankateshkd@gmail.com>
118 lines
3.8 KiB
Go
118 lines
3.8 KiB
Go
package dclient
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/kyverno/kyverno/pkg/config"
|
|
kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
// GetResource
|
|
// ListResource
|
|
// CreateResource
|
|
// getGroupVersionMapper (valid and invalid resources)
|
|
|
|
//NewMockClient creates a mock client
|
|
// - dynamic client
|
|
// - kubernetes client
|
|
// - objects to initialize the client
|
|
|
|
type fixture struct {
|
|
t *testing.T
|
|
objects []runtime.Object
|
|
client Interface
|
|
}
|
|
|
|
func newFixture(t *testing.T) *fixture {
|
|
// init groupversion
|
|
regResource := []schema.GroupVersionResource{
|
|
{Group: "group", Version: "version", Resource: "thekinds"},
|
|
{Group: "group2", Version: "version", Resource: "thekinds"},
|
|
{Group: "", Version: "v1", Resource: "namespaces"},
|
|
{Group: "apps", Version: "v1", Resource: "deployments"},
|
|
}
|
|
|
|
gvrToListKind := map[schema.GroupVersionResource]string{
|
|
{Group: "group", Version: "version", Resource: "thekinds"}: "TheKindList",
|
|
{Group: "group2", Version: "version", Resource: "thekinds"}: "TheKindList",
|
|
{Group: "", Version: "v1", Resource: "namespaces"}: "NamespaceList",
|
|
{Group: "apps", Version: "v1", Resource: "deployments"}: "DeploymentList",
|
|
}
|
|
|
|
objects := []runtime.Object{
|
|
kubeutils.NewUnstructured("group/version", "TheKind", "ns-foo", "name-foo"),
|
|
kubeutils.NewUnstructured("group2/version", "TheKind", "ns-foo", "name2-foo"),
|
|
kubeutils.NewUnstructured("group/version", "TheKind", "ns-foo", "name-bar"),
|
|
kubeutils.NewUnstructured("group/version", "TheKind", "ns-foo", "name-baz"),
|
|
kubeutils.NewUnstructured("group2/version", "TheKind", "ns-foo", "name2-baz"),
|
|
kubeutils.NewUnstructured("apps/v1", "Deployment", config.KyvernoNamespace(), config.KyvernoDeploymentName()),
|
|
}
|
|
|
|
scheme := runtime.NewScheme()
|
|
// Create mock client
|
|
client, err := NewFakeClient(scheme, gvrToListKind, objects...)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// set discovery Client
|
|
client.SetDiscovery(NewFakeDiscoveryClient(regResource))
|
|
|
|
f := fixture{
|
|
t: t,
|
|
objects: objects,
|
|
client: client,
|
|
}
|
|
return &f
|
|
|
|
}
|
|
|
|
func TestCRUDResource(t *testing.T) {
|
|
f := newFixture(t)
|
|
// Get Resource
|
|
_, err := f.client.GetResource("", "thekind", "ns-foo", "name-foo")
|
|
if err != nil {
|
|
t.Errorf("GetResource not working: %s", err)
|
|
}
|
|
// List Resources
|
|
_, err = f.client.ListResource("", "thekind", "ns-foo", nil)
|
|
if err != nil {
|
|
t.Errorf("ListResource not working: %s", err)
|
|
}
|
|
// DeleteResouce
|
|
err = f.client.DeleteResource("", "thekind", "ns-foo", "name-bar", false)
|
|
if err != nil {
|
|
t.Errorf("DeleteResouce not working: %s", err)
|
|
}
|
|
// CreateResource
|
|
_, err = f.client.CreateResource("", "thekind", "ns-foo", kubeutils.NewUnstructured("group/version", "TheKind", "ns-foo", "name-foo1"), false)
|
|
if err != nil {
|
|
t.Errorf("CreateResource not working: %s", err)
|
|
}
|
|
// UpdateResource
|
|
_, err = f.client.UpdateResource("", "thekind", "ns-foo", kubeutils.NewUnstructuredWithSpec("group/version", "TheKind", "ns-foo", "name-foo1", map[string]interface{}{"foo": "bar"}), false)
|
|
if err != nil {
|
|
t.Errorf("UpdateResource not working: %s", err)
|
|
}
|
|
// UpdateStatusResource
|
|
_, err = f.client.UpdateStatusResource("", "thekind", "ns-foo", kubeutils.NewUnstructuredWithSpec("group/version", "TheKind", "ns-foo", "name-foo1", map[string]interface{}{"foo": "status"}), false)
|
|
if err != nil {
|
|
t.Errorf("UpdateStatusResource not working: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestEventInterface(t *testing.T) {
|
|
f := newFixture(t)
|
|
iEvent, err := f.client.GetEventsInterface()
|
|
if err != nil {
|
|
t.Errorf("GetEventsInterface not working: %s", err)
|
|
}
|
|
_, err = iEvent.List(context.TODO(), metav1.ListOptions{})
|
|
if err != nil {
|
|
t.Errorf("Testing Event interface not working: %s", err)
|
|
}
|
|
}
|