1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/clients/dclient/client_test.go

135 lines
4.2 KiB
Go
Raw Normal View History

package dclient
2019-06-11 14:35:26 -07:00
import (
Add Policy Report (#1229) * add report in cli * policy report crd added * policy report added * configmap added * added jobs * added jobs * bug fixed * added logic for cli * common function added * sub command added for policy report * subcommand added for report * common package changed * configmap added * added logic for kyverno cli * added logic for jobs * added logic for jobs * added logic for jobs * added logic for cli * buf fix * cli changes * count bug fix * docs added for command * go fmt * refactor codebase * remove policy controller for policyreport * policy report removed * bug fixes * bug fixes * added job trigger if needed * job deletation logic added * build failed fix * fixed e2e test * remove hard coded variables * packages adde * improvment added in jobs sheduler * policy report yaml added * cronjob added * small fixes * remove background sync * documentation added for report command * remove extra log * small improvement * tested policy report * revert hardcoded changes * changes for demo * demo changes * resource aggrigation added * More changes * More changes * - resolve PR comments; - refactor jobs controller * set rbac for jobs * add clean up in job controller * add short names * remove application scope for policyreport * move job controller to policyreport * add report logic in command apply * - update policy report types; - upgrade k8s library; - update code gen * temporarily comment out code to pass CI build * generate / update policyreport to cluster * add unit test for CLI report * add test for apply - generate policy report * fix unit test * - remove job controller; - remove in-memory configmap; - clean up kustomize manifest * remove dependency * add reportRequest / clusterReportRequest * clean up policy report * generate report request * update crd clusterReportRequest * - update json tag of report summary; - update definition manifests; - fix dclient creation * aggregate reportRequest into policy report * fix unit tests * - update report summary to optional; - generate clusterPolicyReport; - remove reportRequests after merged to report * remove * generate reportRequest in kyverno namespace * update resource filter in helm chart * - rename reportRequest to reportChangeRequest; -rename clusterReportRequest to clusterReportChangeRequest * generate policy report in background scan * skip generating report change request if there's entry results * fix results entry removal when policy / rule gets deleted * rename apiversion from policy.kubernetes.io to policy.k8s.io * update summary.* to lower case * move reportChangeRequest to kyverno.io/v1alpha1 * remove policy report flag * fix report update * clean up policy violation CRD * remove violation CRD from manifest * clean up policy violation code - remove pvGenerator * change severity fields to lower case * update import library * set report category Co-authored-by: Yuvraj <yuvraj.yad001@gmail.com> Co-authored-by: Yuvraj <10830562+evalsocket@users.noreply.github.com> Co-authored-by: Jim Bugwadia <jim@nirmata.com>
2020-11-09 11:26:12 -08:00
"context"
2019-06-11 14:35:26 -07:00
"testing"
"github.com/kyverno/kyverno/pkg/config"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2019-06-11 14:35:26 -07:00
"k8s.io/apimachinery/pkg/runtime"
2019-06-14 14:51:06 -07:00
"k8s.io/apimachinery/pkg/runtime/schema"
2019-06-11 14:35:26 -07:00
)
// GetResource
// ListResource
// CreateResource
// getGroupVersionMapper (valid and invalid resources)
2019-06-11 14:35:26 -07:00
//NewMockClient creates a mock client
// - dynamic client
// - kubernetes client
// - objects to initialize the client
2019-06-14 16:02:28 -07:00
type fixture struct {
2019-06-17 10:31:51 -07:00
t *testing.T
objects []runtime.Object
client Interface
2019-06-11 14:35:26 -07:00
}
func newUnstructured(apiVersion, kind, namespace, name string) *unstructured.Unstructured {
return &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": apiVersion,
"kind": kind,
"metadata": map[string]interface{}{
"namespace": namespace,
"name": name,
},
},
}
}
func newUnstructuredWithSpec(apiVersion, kind, namespace, name string, spec map[string]interface{}) *unstructured.Unstructured {
u := newUnstructured(apiVersion, kind, namespace, name)
u.Object["spec"] = spec
return u
}
2019-06-14 16:02:28 -07:00
func newFixture(t *testing.T) *fixture {
2019-06-11 14:35:26 -07:00
// init groupversion
2019-06-14 14:51:06 -07:00
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"},
2019-06-14 14:51:06 -07:00
}
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{
newUnstructured("group/version", "TheKind", "ns-foo", "name-foo"),
newUnstructured("group2/version", "TheKind", "ns-foo", "name2-foo"),
newUnstructured("group/version", "TheKind", "ns-foo", "name-bar"),
newUnstructured("group/version", "TheKind", "ns-foo", "name-baz"),
newUnstructured("group2/version", "TheKind", "ns-foo", "name2-baz"),
newUnstructured("apps/v1", "Deployment", config.KyvernoNamespace(), config.KyvernoDeploymentName()),
2019-06-11 14:35:26 -07:00
}
2019-06-14 16:02:28 -07:00
scheme := runtime.NewScheme()
// Create mock client
client, err := NewFakeClient(scheme, gvrToListKind, objects...)
2019-06-11 14:35:26 -07:00
if err != nil {
t.Fatal(err)
}
// set discovery Client
2019-06-14 14:51:06 -07:00
client.SetDiscovery(NewFakeDiscoveryClient(regResource))
2019-06-14 16:02:28 -07:00
f := fixture{
2019-06-17 10:31:51 -07:00
t: t,
objects: objects,
client: client,
2019-06-14 16:02:28 -07:00
}
return &f
}
func TestCRUDResource(t *testing.T) {
f := newFixture(t)
2019-06-11 14:35:26 -07:00
// Get Resource
_, err := f.client.GetResource(context.TODO(), "", "thekind", "ns-foo", "name-foo")
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("GetResource not working: %s", err)
2019-06-11 14:35:26 -07:00
}
// List Resources
_, err = f.client.ListResource(context.TODO(), "", "thekind", "ns-foo", nil)
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("ListResource not working: %s", err)
2019-06-11 14:35:26 -07:00
}
// DeleteResouce
err = f.client.DeleteResource(context.TODO(), "", "thekind", "ns-foo", "name-bar", false)
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("DeleteResouce not working: %s", err)
2019-06-11 14:35:26 -07:00
}
// CreateResource
_, err = f.client.CreateResource(context.TODO(), "", "thekind", "ns-foo", newUnstructured("group/version", "TheKind", "ns-foo", "name-foo1"), false)
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("CreateResource not working: %s", err)
2019-06-11 14:35:26 -07:00
}
// UpdateResource
_, err = f.client.UpdateResource(context.TODO(), "", "thekind", "ns-foo", newUnstructuredWithSpec("group/version", "TheKind", "ns-foo", "name-foo1", map[string]interface{}{"foo": "bar"}), false)
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("UpdateResource not working: %s", err)
2019-06-11 14:35:26 -07:00
}
// UpdateStatusResource
_, err = f.client.UpdateStatusResource(context.TODO(), "", "thekind", "ns-foo", newUnstructuredWithSpec("group/version", "TheKind", "ns-foo", "name-foo1", map[string]interface{}{"foo": "status"}), false)
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("UpdateStatusResource not working: %s", err)
2019-06-11 14:35:26 -07:00
}
2019-06-14 16:02:28 -07:00
}
2019-06-11 14:35:26 -07:00
2019-06-14 16:02:28 -07:00
func TestEventInterface(t *testing.T) {
f := newFixture(t)
iEvent := f.client.GetEventsInterface()
_, err := iEvent.Events(metav1.NamespaceAll).List(context.TODO(), metav1.ListOptions{})
2019-06-11 14:35:26 -07:00
if err != nil {
2019-06-14 16:02:28 -07:00
t.Errorf("Testing Event interface not working: %s", err)
2019-06-11 14:35:26 -07:00
}
2019-06-14 16:02:28 -07:00
}