From 92fe46a498a540a78db644024bacc560bf5d68af Mon Sep 17 00:00:00 2001 From: Gregory Man Date: Thu, 19 Oct 2017 18:31:46 +0300 Subject: [PATCH] Added unit tests to sample-controller Added unit tests. Changed NewController function to accept informers and not informers factory. This make code more testable and align it with other controllers. Kubernetes-commit: a29a1cbb955e993300c9388a218a4f323f3fdf8f --- Godeps/Godeps.json | 510 ++++++++++++++++++++++++++++----------------- controller.go | 13 +- controller_test.go | 313 ++++++++++++++++++++++++++++ main.go | 4 +- 4 files changed, 635 insertions(+), 205 deletions(-) create mode 100644 controller_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 034fddb5..520574a0 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,6 +1,6 @@ { "ImportPath": "k8s.io/sample-controller", - "GoVersion": "go1.9", + "GoVersion": "go1.10", "GodepVersion": "v80", "Packages": [ "./..." @@ -172,779 +172,899 @@ }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/scheduling/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "1b6ea75871c9eda0a66254aeeb2d47ecba3ff3c6" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "8e510c818b62c1a0a1b738153104e8627916ebeb" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/discovery", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/discovery/fake", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/apps", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta2", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/batch", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/batch/v2alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/certificates", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/certificates/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/core", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/core/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/events", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/events/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/extensions", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/extensions/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/internalinterfaces", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/networking", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/networking/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/policy", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/policy/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/rbac", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/scheduling", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/settings", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/settings/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/storage", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/scheme", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta2", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/batch/v2alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/certificates/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/core/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/events/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/extensions/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/networking/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/policy/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/settings/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1beta1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/pkg/version", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/plugin/pkg/client/auth/exec", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/rest", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/rest/watch", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/testing", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/auth", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/cache", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/metrics", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/pager", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/record", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/tools/reference", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/transport", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/buffer", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/cert", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/flowcontrol", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/homedir", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/integer", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/retry", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/client-go/util/workqueue", - "Rev": "f9b6f71f0a4ef5eef81887f941d0d7761659615d" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", diff --git a/controller.go b/controller.go index c3fa44bc..3159e7bc 100644 --- a/controller.go +++ b/controller.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - kubeinformers "k8s.io/client-go/informers" + appsinformers "k8s.io/client-go/informers/apps/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1" @@ -40,7 +40,7 @@ import ( samplev1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1" clientset "k8s.io/sample-controller/pkg/client/clientset/versioned" samplescheme "k8s.io/sample-controller/pkg/client/clientset/versioned/scheme" - informers "k8s.io/sample-controller/pkg/client/informers/externalversions" + informers "k8s.io/sample-controller/pkg/client/informers/externalversions/samplecontroller/v1alpha1" listers "k8s.io/sample-controller/pkg/client/listers/samplecontroller/v1alpha1" ) @@ -88,13 +88,8 @@ type Controller struct { func NewController( kubeclientset kubernetes.Interface, sampleclientset clientset.Interface, - kubeInformerFactory kubeinformers.SharedInformerFactory, - sampleInformerFactory informers.SharedInformerFactory) *Controller { - - // obtain references to shared index informers for the Deployment and Foo - // types. - deploymentInformer := kubeInformerFactory.Apps().V1().Deployments() - fooInformer := sampleInformerFactory.Samplecontroller().V1alpha1().Foos() + deploymentInformer appsinformers.DeploymentInformer, + fooInformer informers.FooInformer) *Controller { // Create event broadcaster // Add sample-controller types to the default Kubernetes Scheme so Events can be diff --git a/controller_test.go b/controller_test.go new file mode 100644 index 00000000..8eea8161 --- /dev/null +++ b/controller_test.go @@ -0,0 +1,313 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "reflect" + "testing" + "time" + + apps "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/diff" + kubeinformers "k8s.io/client-go/informers" + k8sfake "k8s.io/client-go/kubernetes/fake" + core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + + samplecontroller "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1" + "k8s.io/sample-controller/pkg/client/clientset/versioned/fake" + informers "k8s.io/sample-controller/pkg/client/informers/externalversions" +) + +var ( + alwaysReady = func() bool { return true } + noResyncPeriodFunc = func() time.Duration { return 0 } +) + +type fixture struct { + t *testing.T + + client *fake.Clientset + kubeclient *k8sfake.Clientset + // Objects to put in the store. + fooLister []*samplecontroller.Foo + deploymentLister []*apps.Deployment + // Actions expected to happen on the client. + kubeactions []core.Action + actions []core.Action + // Objects from here preloaded into NewSimpleFake. + kubeobjects []runtime.Object + objects []runtime.Object +} + +func newFixture(t *testing.T) *fixture { + f := &fixture{} + f.t = t + f.objects = []runtime.Object{} + f.kubeobjects = []runtime.Object{} + return f +} + +func newFoo(name string, replicas *int32) *samplecontroller.Foo { + return &samplecontroller.Foo{ + TypeMeta: metav1.TypeMeta{APIVersion: samplecontroller.SchemeGroupVersion.String()}, + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: metav1.NamespaceDefault, + }, + Spec: samplecontroller.FooSpec{ + DeploymentName: fmt.Sprintf("%s-deployment", name), + Replicas: replicas, + }, + } +} + +func (f *fixture) newController() (*Controller, informers.SharedInformerFactory, kubeinformers.SharedInformerFactory) { + f.client = fake.NewSimpleClientset(f.objects...) + f.kubeclient = k8sfake.NewSimpleClientset(f.kubeobjects...) + + i := informers.NewSharedInformerFactory(f.client, noResyncPeriodFunc()) + k8sI := kubeinformers.NewSharedInformerFactory(f.kubeclient, noResyncPeriodFunc()) + + c := NewController(f.kubeclient, f.client, + k8sI.Apps().V1().Deployments(), i.Samplecontroller().V1alpha1().Foos()) + + c.foosSynced = alwaysReady + c.deploymentsSynced = alwaysReady + c.recorder = &record.FakeRecorder{} + + for _, f := range f.fooLister { + i.Samplecontroller().V1alpha1().Foos().Informer().GetIndexer().Add(f) + } + + for _, d := range f.deploymentLister { + k8sI.Apps().V1().Deployments().Informer().GetIndexer().Add(d) + } + + return c, i, k8sI +} + +func (f *fixture) run(fooName string) { + f.runController(fooName, true, false) +} + +func (f *fixture) runExpectError(fooName string) { + f.runController(fooName, true, true) +} + +func (f *fixture) runController(fooName string, startInformers bool, expectError bool) { + c, i, k8sI := f.newController() + if startInformers { + stopCh := make(chan struct{}) + defer close(stopCh) + i.Start(stopCh) + k8sI.Start(stopCh) + } + + err := c.syncHandler(fooName) + if !expectError && err != nil { + f.t.Errorf("error syncing foo: %v", err) + } else if expectError && err == nil { + f.t.Error("expected error syncing foo, got nil") + } + + actions := filterInformerActions(f.client.Actions()) + for i, action := range actions { + if len(f.actions) < i+1 { + f.t.Errorf("%d unexpected actions: %+v", len(actions)-len(f.actions), actions[i:]) + break + } + + expectedAction := f.actions[i] + checkAction(expectedAction, action, f.t) + } + + if len(f.actions) > len(actions) { + f.t.Errorf("%d additional expected actions:%+v", len(f.actions)-len(actions), f.actions[len(actions):]) + } + + k8sActions := filterInformerActions(f.kubeclient.Actions()) + for i, action := range k8sActions { + if len(f.kubeactions) < i+1 { + f.t.Errorf("%d unexpected actions: %+v", len(k8sActions)-len(f.kubeactions), k8sActions[i:]) + break + } + + expectedAction := f.kubeactions[i] + checkAction(expectedAction, action, f.t) + } + + if len(f.kubeactions) > len(k8sActions) { + f.t.Errorf("%d additional expected actions:%+v", len(f.kubeactions)-len(k8sActions), f.kubeactions[len(k8sActions):]) + } +} + +// checkAction verifies that expected and actual actions are equal and both have +// same attached resources +func checkAction(expected, actual core.Action, t *testing.T) { + if !(expected.Matches(actual.GetVerb(), actual.GetResource().Resource) && actual.GetSubresource() == expected.GetSubresource()) { + t.Errorf("Expected\n\t%#v\ngot\n\t%#v", expected, actual) + return + } + + if reflect.TypeOf(actual) != reflect.TypeOf(expected) { + t.Errorf("Action has wrong type. Expected: %t. Got: %t", expected, actual) + return + } + + switch a := actual.(type) { + case core.CreateAction: + e, _ := expected.(core.CreateAction) + expObject := e.GetObject() + object := a.GetObject() + + if !reflect.DeepEqual(expObject, object) { + t.Errorf("Action %s %s has wrong object\nDiff:\n %s", + a.GetVerb(), a.GetResource().Resource, diff.ObjectGoPrintDiff(expObject, object)) + } + case core.UpdateAction: + e, _ := expected.(core.UpdateAction) + expObject := e.GetObject() + object := a.GetObject() + + if !reflect.DeepEqual(expObject, object) { + t.Errorf("Action %s %s has wrong object\nDiff:\n %s", + a.GetVerb(), a.GetResource().Resource, diff.ObjectGoPrintDiff(expObject, object)) + } + case core.PatchAction: + e, _ := expected.(core.PatchAction) + expPatch := e.GetPatch() + patch := a.GetPatch() + + if !reflect.DeepEqual(expPatch, expPatch) { + t.Errorf("Action %s %s has wrong patch\nDiff:\n %s", + a.GetVerb(), a.GetResource().Resource, diff.ObjectGoPrintDiff(expPatch, patch)) + } + } +} + +// filterInformerActions filters list and watch actions for testing resources. +// Since list and watch don't change resource state we can filter it to lower +// nose level in our tests. +func filterInformerActions(actions []core.Action) []core.Action { + ret := []core.Action{} + for _, action := range actions { + if len(action.GetNamespace()) == 0 && + (action.Matches("list", "foos") || + action.Matches("watch", "foos") || + action.Matches("list", "deployments") || + action.Matches("watch", "deployments")) { + continue + } + ret = append(ret, action) + } + + return ret +} + +func (f *fixture) expectCreateDeploymentAction(d *apps.Deployment) { + f.kubeactions = append(f.kubeactions, core.NewCreateAction(schema.GroupVersionResource{Resource: "deployments"}, d.Namespace, d)) +} + +func (f *fixture) expectUpdateDeploymentAction(d *apps.Deployment) { + f.kubeactions = append(f.kubeactions, core.NewUpdateAction(schema.GroupVersionResource{Resource: "deployments"}, d.Namespace, d)) +} + +func (f *fixture) expectUpdateFooStatusAction(foo *samplecontroller.Foo) { + action := core.NewUpdateAction(schema.GroupVersionResource{Resource: "foos"}, foo.Namespace, foo) + // TODO: Until #38113 is merged, we can't use Subresource + //action.Subresource = "status" + f.actions = append(f.actions, action) +} + +func getKey(foo *samplecontroller.Foo, t *testing.T) string { + key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(foo) + if err != nil { + t.Errorf("Unexpected error getting key for foo %v: %v", foo.Name, err) + return "" + } + return key +} + +func TestCreatesDeployment(t *testing.T) { + f := newFixture(t) + foo := newFoo("test", int32Ptr(1)) + + f.fooLister = append(f.fooLister, foo) + f.objects = append(f.objects, foo) + + expDeployment := newDeployment(foo) + f.expectCreateDeploymentAction(expDeployment) + f.expectUpdateFooStatusAction(foo) + + f.run(getKey(foo, t)) +} + +func TestDoNothing(t *testing.T) { + f := newFixture(t) + foo := newFoo("test", int32Ptr(1)) + d := newDeployment(foo) + + f.fooLister = append(f.fooLister, foo) + f.objects = append(f.objects, foo) + f.deploymentLister = append(f.deploymentLister, d) + f.kubeobjects = append(f.kubeobjects, d) + + f.expectUpdateFooStatusAction(foo) + f.run(getKey(foo, t)) +} + +func TestUpdateDeployment(t *testing.T) { + f := newFixture(t) + foo := newFoo("test", int32Ptr(1)) + d := newDeployment(foo) + + // Update replicas + foo.Spec.Replicas = int32Ptr(2) + expDeployment := newDeployment(foo) + + f.fooLister = append(f.fooLister, foo) + f.objects = append(f.objects, foo) + f.deploymentLister = append(f.deploymentLister, d) + f.kubeobjects = append(f.kubeobjects, d) + + f.expectUpdateFooStatusAction(foo) + f.expectUpdateDeploymentAction(expDeployment) + f.run(getKey(foo, t)) +} + +func TestNotControlledByUs(t *testing.T) { + f := newFixture(t) + foo := newFoo("test", int32Ptr(1)) + d := newDeployment(foo) + + d.ObjectMeta.OwnerReferences = []metav1.OwnerReference{} + + f.fooLister = append(f.fooLister, foo) + f.objects = append(f.objects, foo) + f.deploymentLister = append(f.deploymentLister, d) + f.kubeobjects = append(f.kubeobjects, d) + + f.runExpectError(getKey(foo, t)) +} + +func int32Ptr(i int32) *int32 { return &i } diff --git a/main.go b/main.go index d3514fc3..026083f3 100644 --- a/main.go +++ b/main.go @@ -61,7 +61,9 @@ func main() { kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30) exampleInformerFactory := informers.NewSharedInformerFactory(exampleClient, time.Second*30) - controller := NewController(kubeClient, exampleClient, kubeInformerFactory, exampleInformerFactory) + controller := NewController(kubeClient, exampleClient, + kubeInformerFactory.Apps().V1().Deployments(), + exampleInformerFactory.Samplecontroller().V1alpha1().Foos()) go kubeInformerFactory.Start(stopCh) go exampleInformerFactory.Start(stopCh)