diff --git a/probe/kubernetes/reporter_test.go b/probe/kubernetes/reporter_test.go index 54cda4204..70e083b3a 100644 --- a/probe/kubernetes/reporter_test.go +++ b/probe/kubernetes/reporter_test.go @@ -8,6 +8,7 @@ import ( "testing" apiv1 "k8s.io/api/core/v1" + apiv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -111,9 +112,10 @@ func newMockClient() *mockClient { } type mockClient struct { - pods []kubernetes.Pod - services []kubernetes.Service - logs map[string]io.ReadCloser + pods []kubernetes.Pod + services []kubernetes.Service + deployments []kubernetes.Deployment + logs map[string]io.ReadCloser } func (c *mockClient) Stop() {} @@ -143,6 +145,11 @@ func (c *mockClient) WalkCronJobs(f func(kubernetes.CronJob) error) error { return nil } func (c *mockClient) WalkDeployments(f func(kubernetes.Deployment) error) error { + for _, deployment := range c.deployments { + if err := f(deployment); err != nil { + return err + } + } return nil } func (c *mockClient) WalkNamespaces(f func(kubernetes.NamespaceResource) error) error { @@ -282,6 +289,39 @@ func TestReporter(t *testing.T) { } +func BenchmarkReporter(b *testing.B) { + hr := controls.NewDefaultHandlerRegistry() + mockK8s := newMockClient() + // Add more dummy data + for i := 0; i < 50; i++ { + service := apiService1 + service.ObjectMeta.UID = types.UID(fmt.Sprintf("service%d", i)) + mockK8s.services = append(mockK8s.services, kubernetes.NewService(&service)) + pod := apiPod1 + pod.ObjectMeta.UID = types.UID(fmt.Sprintf("pod%d", i)) + mockK8s.pods = append(mockK8s.pods, kubernetes.NewPod(&pod)) + deployment := apiv1beta1.Deployment{ + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: "v1beta1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("deployment%d", i), + UID: types.UID(fmt.Sprintf("deployment%d", i)), + Namespace: "ping", + CreationTimestamp: metav1.Now(), + }, + } + mockK8s.deployments = append(mockK8s.deployments, kubernetes.NewDeployment(&deployment)) + } + reporter := kubernetes.NewReporter(mockK8s, nil, "probe-id", "foo", nil, hr, nodeName, 0) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + reporter.Report() + } +} + func TestTagger(t *testing.T) { rpt := report.MakeReport() rpt.Container.AddNode(report.MakeNodeWith("container1", map[string]string{