mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-07 00:17:13 +00:00
* 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>
127 lines
3.7 KiB
Go
127 lines
3.7 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/kyverno/kyverno/pkg/config"
|
|
meta "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 *Client
|
|
}
|
|
|
|
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"},
|
|
}
|
|
|
|
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.KubePolicyNamespace, config.KubePolicyDeploymentName),
|
|
}
|
|
scheme := runtime.NewScheme()
|
|
// Create mock client
|
|
client, err := NewMockClient(scheme, 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", 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", 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", 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(), meta.ListOptions{})
|
|
if err != nil {
|
|
t.Errorf("Testing Event interface not working: %s", err)
|
|
}
|
|
}
|
|
func TestCSRInterface(t *testing.T) {
|
|
f := newFixture(t)
|
|
iCSR, err := f.client.GetCSRInterface()
|
|
if err != nil {
|
|
t.Errorf("GetCSRInterface not working: %s", err)
|
|
}
|
|
_, err = iCSR.List(context.TODO(), meta.ListOptions{})
|
|
if err != nil {
|
|
t.Errorf("Testing CSR interface not working: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestKubePolicyDeployment(t *testing.T) {
|
|
f := newFixture(t)
|
|
_, err := f.client.GetKubePolicyDeployment()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|