From 16210f4b23ce7d90cc1534ee15336968190eea58 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Wed, 13 Apr 2022 11:50:56 +0100 Subject: [PATCH] runtime/controller: fix RateLimiterOptions.BindFlags Signed-off-by: Paulo Gomes --- runtime/controller/rate_limiter.go | 5 +- runtime/controller/rate_limiter_test.go | 79 +++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 runtime/controller/rate_limiter_test.go diff --git a/runtime/controller/rate_limiter.go b/runtime/controller/rate_limiter.go index 8c4599d4..eaf47e8a 100644 --- a/runtime/controller/rate_limiter.go +++ b/runtime/controller/rate_limiter.go @@ -17,7 +17,6 @@ limitations under the License. package controller import ( - "flag" "time" "github.com/spf13/pflag" @@ -47,9 +46,9 @@ type RateLimiterOptions struct { // BindFlags will parse the given pflag.FlagSet for the controller and // set the RateLimiterOptions accordingly. func (o *RateLimiterOptions) BindFlags(fs *pflag.FlagSet) { - flag.DurationVar(&o.MinRetryDelay, flagMinRetryDelay, defaultMinRetryDelay, + fs.DurationVar(&o.MinRetryDelay, flagMinRetryDelay, defaultMinRetryDelay, "The minimum amount of time for which an object being reconciled will have to wait before a retry.") - flag.DurationVar(&o.MaxRetryDelay, flagMaxRetryDelay, defaultMaxRetryDelay, + fs.DurationVar(&o.MaxRetryDelay, flagMaxRetryDelay, defaultMaxRetryDelay, "The maximum amount of time for which an object being reconciled will have to wait before a retry.") } diff --git a/runtime/controller/rate_limiter_test.go b/runtime/controller/rate_limiter_test.go new file mode 100644 index 00000000..986e5ac5 --- /dev/null +++ b/runtime/controller/rate_limiter_test.go @@ -0,0 +1,79 @@ +/* +Copyright 2022 The Flux 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 controller + +import ( + "testing" + "time" + + . "github.com/onsi/gomega" + + "github.com/spf13/pflag" +) + +func Test_RateLimiterOptions_BindFlags(t *testing.T) { + tests := []struct { + name string + commandLine []string + expectedMinRetryDelay time.Duration + expectedMaxRetryDelay time.Duration + }{ + { + name: "empty flags gets default values", + commandLine: []string{""}, + expectedMinRetryDelay: 750 * time.Millisecond, + expectedMaxRetryDelay: 15 * time.Minute, + }, + { + name: "min retry delay only", + commandLine: []string{"--min-retry-delay=1s"}, + expectedMinRetryDelay: 1 * time.Second, + expectedMaxRetryDelay: 15 * time.Minute, + }, + { + name: "max retry delay only", + commandLine: []string{"--max-retry-delay=5h"}, + expectedMinRetryDelay: 750 * time.Millisecond, + expectedMaxRetryDelay: 5 * time.Hour, + }, + { + name: "min and max retry set", + commandLine: []string{ + "--min-retry-delay=30s", + "--max-retry-delay=24h", + }, + expectedMinRetryDelay: 30 * time.Second, + expectedMaxRetryDelay: 24 * time.Hour, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + f := pflag.NewFlagSet("test", pflag.ContinueOnError) + opts := RateLimiterOptions{} + opts.BindFlags(f) + + err := f.Parse(tt.commandLine) + g.Expect(err).NotTo(HaveOccurred()) + + g.Expect(opts.MaxRetryDelay).To(Equal(tt.expectedMaxRetryDelay)) + g.Expect(opts.MinRetryDelay).To(Equal(tt.expectedMinRetryDelay)) + }) + } +}