diff --git a/controllers/horizontalrunnerautoscaler_controller.go b/controllers/horizontalrunnerautoscaler_controller.go index e007cbe6..eb6b281f 100644 --- a/controllers/horizontalrunnerautoscaler_controller.go +++ b/controllers/horizontalrunnerautoscaler_controller.go @@ -149,13 +149,7 @@ func (r *HorizontalRunnerAutoscalerReconciler) Reconcile(req ctrl.Request) (ctrl updated = hra.DeepCopy() } - var cacheEntries []v1alpha1.CacheEntry - - for _, ent := range updated.Status.CacheEntries { - if ent.ExpirationTime.Before(&metav1.Time{Time: now}) { - cacheEntries = append(cacheEntries, ent) - } - } + cacheEntries := getValidCacheEntries(updated, now) var cacheDuration time.Duration @@ -183,6 +177,18 @@ func (r *HorizontalRunnerAutoscalerReconciler) Reconcile(req ctrl.Request) (ctrl return ctrl.Result{}, nil } +func getValidCacheEntries(hra *v1alpha1.HorizontalRunnerAutoscaler, now time.Time) []v1alpha1.CacheEntry { + var cacheEntries []v1alpha1.CacheEntry + + for _, ent := range hra.Status.CacheEntries { + if ent.ExpirationTime.After(now) { + cacheEntries = append(cacheEntries, ent) + } + } + + return cacheEntries +} + func (r *HorizontalRunnerAutoscalerReconciler) SetupWithManager(mgr ctrl.Manager) error { name := "horizontalrunnerautoscaler-controller" if r.Name != "" { diff --git a/controllers/horizontalrunnerautoscaler_controller_test.go b/controllers/horizontalrunnerautoscaler_controller_test.go new file mode 100644 index 00000000..d8f0940a --- /dev/null +++ b/controllers/horizontalrunnerautoscaler_controller_test.go @@ -0,0 +1,49 @@ +package controllers + +import ( + "github.com/google/go-cmp/cmp" + actionsv1alpha1 "github.com/summerwind/actions-runner-controller/api/v1alpha1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "testing" + "time" +) + +func TestGetValidCacheEntries(t *testing.T) { + now := time.Now() + + hra := &actionsv1alpha1.HorizontalRunnerAutoscaler{ + Status: actionsv1alpha1.HorizontalRunnerAutoscalerStatus{ + CacheEntries: []actionsv1alpha1.CacheEntry{ + { + Key: "foo", + Value: 1, + ExpirationTime: metav1.Time{Time: now.Add(-time.Second)}, + }, + { + Key: "foo", + Value: 2, + ExpirationTime: metav1.Time{Time: now}, + }, + { + Key: "foo", + Value: 3, + ExpirationTime: metav1.Time{Time: now.Add(time.Second)}, + }, + }, + }, + } + + revs := getValidCacheEntries(hra, now) + + counts := map[string]int{} + + for _, r := range revs { + counts[r.Key] += r.Value + } + + want := map[string]int{"foo": 3} + + if d := cmp.Diff(want, counts); d != "" { + t.Errorf("%s", d) + } +}