From 0f97e6d19d7cde556d675ce1faec4e8147b86d94 Mon Sep 17 00:00:00 2001 From: kit837 <66801824+kit837@users.noreply.github.com> Date: Tue, 15 Jun 2021 17:44:55 +0000 Subject: [PATCH] pass in clock.Clock for better test Signed-off-by: kit837 <66801824+kit837@users.noreply.github.com> --- cmd/controller/app/controller.go | 2 +- pkg/controller/test/context_builder.go | 2 +- pkg/metrics/certificates_test.go | 5 +++-- pkg/metrics/metrics.go | 5 +++-- pkg/metrics/metrics_test.go | 15 ++++++++++----- test/integration/acme/orders_controller_test.go | 2 +- .../certificates/issuing_controller_test.go | 4 ++-- .../certificates/metrics_controller_test.go | 3 ++- .../revisionmanager_controller_test.go | 3 ++- .../certificates/trigger_controller_test.go | 5 +++-- 10 files changed, 28 insertions(+), 18 deletions(-) diff --git a/cmd/controller/app/controller.go b/cmd/controller/app/controller.go index 6d592a823..9a2ed51e5 100644 --- a/cmd/controller/app/controller.go +++ b/cmd/controller/app/controller.go @@ -215,7 +215,7 @@ func buildControllerContext(ctx context.Context, stopCh <-chan struct{}, opts *o SharedInformerFactory: sharedInformerFactory, Namespace: opts.Namespace, Clock: clock.RealClock{}, - Metrics: metrics.New(log), + Metrics: metrics.New(log, clock.RealClock{}), ACMEOptions: controller.ACMEOptions{ HTTP01SolverImage: opts.ACMEHTTP01SolverImage, HTTP01SolverResourceRequestCPU: HTTP01SolverResourceRequestCPU, diff --git a/pkg/controller/test/context_builder.go b/pkg/controller/test/context_builder.go index a9b44f785..55c75eec1 100644 --- a/pkg/controller/test/context_builder.go +++ b/pkg/controller/test/context_builder.go @@ -114,7 +114,7 @@ func (b *Builder) Init() { b.KubeSharedInformerFactory = kubeinformers.NewSharedInformerFactory(b.Client, informerResyncPeriod) b.SharedInformerFactory = informers.NewSharedInformerFactory(b.CMClient, informerResyncPeriod) b.stopCh = make(chan struct{}) - b.Metrics = metrics.New(logs.Log) + b.Metrics = metrics.New(logs.Log, clock.RealClock{}) // set the Clock on the context if b.Clock == nil { diff --git a/pkg/metrics/certificates_test.go b/pkg/metrics/certificates_test.go index bf4370ea9..6bec1a480 100644 --- a/pkg/metrics/certificates_test.go +++ b/pkg/metrics/certificates_test.go @@ -24,6 +24,7 @@ import ( "github.com/prometheus/client_golang/prometheus/testutil" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/clock" cmapi "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" @@ -125,7 +126,7 @@ func TestCertificateMetrics(t *testing.T) { } for n, test := range tests { t.Run(n, func(t *testing.T) { - m := New(logtesting.TestLogger{T: t}) + m := New(logtesting.TestLogger{T: t}, clock.RealClock{}) m.UpdateCertificate(context.TODO(), test.crt) if err := testutil.CollectAndCompare(m.certificateExpiryTimeSeconds, @@ -146,7 +147,7 @@ func TestCertificateMetrics(t *testing.T) { } func TestCertificateCache(t *testing.T) { - m := New(logtesting.TestLogger{T: t}) + m := New(logtesting.TestLogger{T: t}, clock.RealClock{}) crt1 := gen.Certificate("crt1", gen.SetCertificateUID("uid-1"), diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index b76a46108..2d6077412 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -30,6 +30,7 @@ import ( "time" logf "github.com/jetstack/cert-manager/pkg/logs" + "k8s.io/utils/clock" "github.com/go-logr/logr" @@ -65,7 +66,7 @@ type Metrics struct { var readyConditionStatuses = [...]cmmeta.ConditionStatus{cmmeta.ConditionTrue, cmmeta.ConditionFalse, cmmeta.ConditionUnknown} -func New(log logr.Logger) *Metrics { +func New(log logr.Logger, c clock.Clock) *Metrics { var ( clockTimeSeconds = prometheus.NewCounterFunc( prometheus.CounterOpts{ @@ -74,7 +75,7 @@ func New(log logr.Logger) *Metrics { Help: "The clock time given in seconds (from 1970/01/01 UTC).", }, func() float64 { - return float64(time.Now().Unix()) + return float64(c.Now().Unix()) }, ) diff --git a/pkg/metrics/metrics_test.go b/pkg/metrics/metrics_test.go index 2ff2a181b..cf5262c36 100644 --- a/pkg/metrics/metrics_test.go +++ b/pkg/metrics/metrics_test.go @@ -25,27 +25,32 @@ import ( "github.com/prometheus/client_golang/prometheus/testutil" logtesting "github.com/jetstack/cert-manager/pkg/logs/testing" + fakeclock "k8s.io/utils/clock/testing" +) + +var ( + fixedClock = fakeclock.NewFakeClock(time.Now()) ) func TestClockMetrics(t *testing.T) { type testT struct { - expectedFmt string + expected string } tests := map[string]testT{ "clock time seconds as expected": { - expectedFmt: ` + expected: fmt.Sprintf(` # HELP certmanager_clock_time_seconds The clock time given in seconds (from 1970/01/01 UTC). # TYPE certmanager_clock_time_seconds counter certmanager_clock_time_seconds %f - `, + `, float64(fixedClock.Now().Unix())), }, } for n, test := range tests { t.Run(n, func(t *testing.T) { - m := New(logtesting.TestLogger{T: t}) + m := New(logtesting.TestLogger{T: t}, fixedClock) if err := testutil.CollectAndCompare(m.clockTimeSeconds, - strings.NewReader(fmt.Sprintf(test.expectedFmt, float64(time.Now().Unix()))), + strings.NewReader(test.expected), "certmanager_clock_time_seconds", ); err != nil { t.Errorf("unexpected collecting result:\n%s", err) diff --git a/test/integration/acme/orders_controller_test.go b/test/integration/acme/orders_controller_test.go index 84fc467af..a217dca57 100644 --- a/test/integration/acme/orders_controller_test.go +++ b/test/integration/acme/orders_controller_test.go @@ -130,7 +130,7 @@ func TestAcmeOrdersController(t *testing.T) { c := controllerpkg.NewController( context.Background(), "orders_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil, diff --git a/test/integration/certificates/issuing_controller_test.go b/test/integration/certificates/issuing_controller_test.go index 431a316aa..01a15f420 100644 --- a/test/integration/certificates/issuing_controller_test.go +++ b/test/integration/certificates/issuing_controller_test.go @@ -60,7 +60,7 @@ func TestIssuingController(t *testing.T) { c := controllerpkg.NewController( context.Background(), "issuing_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil, @@ -264,7 +264,7 @@ func TestIssuingController_PKCS8_PrivateKey(t *testing.T) { c := controllerpkg.NewController( context.Background(), "issuing_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil, diff --git a/test/integration/certificates/metrics_controller_test.go b/test/integration/certificates/metrics_controller_test.go index 3ff785d8f..dba5220ce 100644 --- a/test/integration/certificates/metrics_controller_test.go +++ b/test/integration/certificates/metrics_controller_test.go @@ -26,6 +26,7 @@ import ( "time" corev1 "k8s.io/api/core/v1" + "k8s.io/utils/clock" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" @@ -50,7 +51,7 @@ func TestMetricsController(t *testing.T) { // Build, instantiate and run the issuing controller. kubernetesCl, factory, cmClient, cmFactory := framework.NewClients(t, config) - metricsHandler := metrics.New(logf.Log) + metricsHandler := metrics.New(logf.Log, clock.RealClock{}) server, err := metricsHandler.Start("127.0.0.1:0", false) if err != nil { t.Fatal(err) diff --git a/test/integration/certificates/revisionmanager_controller_test.go b/test/integration/certificates/revisionmanager_controller_test.go index 4bd320f41..c3b3afd32 100644 --- a/test/integration/certificates/revisionmanager_controller_test.go +++ b/test/integration/certificates/revisionmanager_controller_test.go @@ -26,6 +26,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/utils/clock" apiutil "github.com/jetstack/cert-manager/pkg/api/util" cmapi "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" @@ -54,7 +55,7 @@ func TestRevisionManagerController(t *testing.T) { c := controllerpkg.NewController( context.Background(), "revisionmanager_controller_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil, diff --git a/test/integration/certificates/trigger_controller_test.go b/test/integration/certificates/trigger_controller_test.go index a21d6bb20..45d7eb23f 100644 --- a/test/integration/certificates/trigger_controller_test.go +++ b/test/integration/certificates/trigger_controller_test.go @@ -25,6 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/utils/clock" fakeclock "k8s.io/utils/clock/testing" apiutil "github.com/jetstack/cert-manager/pkg/api/util" @@ -69,7 +70,7 @@ func TestTriggerController(t *testing.T) { c := controllerpkg.NewController( context.Background(), "trigger_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil, @@ -181,7 +182,7 @@ func TestTriggerController_RenewNearExpiry(t *testing.T) { c := controllerpkg.NewController( logf.NewContext(context.Background(), logf.Log, "trigger_controller_RenewNearExpiry"), "trigger_test", - metrics.New(logf.Log), + metrics.New(logf.Log, clock.RealClock{}), ctrl.ProcessItem, mustSync, nil,