Skip to content

Commit 8cb3577

Browse files
committed
test: refactoring for unittests
1 parent 0108706 commit 8cb3577

File tree

13 files changed

+1598
-1315
lines changed

13 files changed

+1598
-1315
lines changed

controller/lifecycle/api/api.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@ type RuntimeObjectConditions interface {
4444
}
4545

4646
type SpreadManager interface {
47-
ToRuntimeObjectSpreadReconcileStatusInterface(instance runtimeobject.RuntimeObject, log *logger.Logger) (RuntimeObjectSpreadReconcileStatus, error)
48-
MustToRuntimeObjectSpreadReconcileStatusInterface(instance runtimeobject.RuntimeObject, log *logger.Logger) RuntimeObjectSpreadReconcileStatus
49-
OnNextReconcile(instanceStatusObj RuntimeObjectSpreadReconcileStatus, log *logger.Logger) (ctrl.Result, error)
47+
ReconcileRequired(instance runtimeobject.RuntimeObject, log *logger.Logger) bool
48+
OnNextReconcile(instance runtimeobject.RuntimeObject, log *logger.Logger) (ctrl.Result, error)
5049
RemoveRefreshLabelIfExists(instance runtimeobject.RuntimeObject) bool
5150
SetNextReconcileTime(instanceStatusObj RuntimeObjectSpreadReconcileStatus, log *logger.Logger)
5251
UpdateObservedGeneration(instanceStatusObj RuntimeObjectSpreadReconcileStatus, log *logger.Logger)

controller/lifecycle/controllerruntime/lifecycle.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,16 @@ func (l *LifecycleManager) ConditionsManager() api.ConditionManager {
6363
}
6464
return l.conditionsManager
6565
}
66-
6766
func (l *LifecycleManager) Spreader() api.SpreadManager {
6867
// it is important to return nil unsted of a nil pointer to the interface to avoid misbehaving nil checks
6968
if l.spreader == nil {
7069
return nil
7170
}
7271
return l.spreader
7372
}
74-
7573
func (l *LifecycleManager) Reconcile(ctx context.Context, req ctrl.Request, instance runtimeobject.RuntimeObject) (ctrl.Result, error) {
7674
return lifecycle.Reconcile(ctx, req.NamespacedName, instance, l.client, l)
7775
}
78-
7976
func (l *LifecycleManager) SetupWithManagerBuilder(mgr ctrl.Manager, maxReconciles int, reconcilerName string, instance runtimeobject.RuntimeObject, debugLabelValue string, log *logger.Logger, eventPredicates ...predicate.Predicate) (*builder.Builder, error) {
8077
if err := lifecycle.ValidateInterfaces(instance, log, l); err != nil {
8178
return nil, err
@@ -92,7 +89,6 @@ func (l *LifecycleManager) SetupWithManagerBuilder(mgr ctrl.Manager, maxReconcil
9289
WithOptions(controller.Options{MaxConcurrentReconciles: maxReconciles}).
9390
WithEventFilter(predicate.And(eventPredicates...)), nil
9491
}
95-
9692
func (l *LifecycleManager) SetupWithManager(mgr ctrl.Manager, maxReconciles int, reconcilerName string, instance runtimeobject.RuntimeObject, debugLabelValue string, r reconcile.Reconciler, log *logger.Logger, eventPredicates ...predicate.Predicate) error {
9793
b, err := l.SetupWithManagerBuilder(mgr, maxReconciles, reconcilerName, instance, debugLabelValue, log, eventPredicates...)
9894
if err != nil {

controller/lifecycle/controllerruntime/lifecycle_test.go

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,25 +47,6 @@ func TestLifecycle(t *testing.T) {
4747
}
4848
ctx := context.Background()
4949

50-
t.Run("Lifecycle with a not found object", func(t *testing.T) {
51-
// Arrange
52-
fakeClient := pmtesting.CreateFakeClient(t, &pmtesting.TestApiObject{})
53-
54-
mgr, log := createLifecycleManager([]subroutine.Subroutine{}, fakeClient)
55-
56-
// Act
57-
result, err := mgr.Reconcile(ctx, request, &pmtesting.TestApiObject{})
58-
59-
// Assert
60-
assert.NoError(t, err)
61-
assert.NotNil(t, result)
62-
logMessages, err := log.GetLogMessages()
63-
assert.NoError(t, err)
64-
assert.Equal(t, len(logMessages), 2)
65-
assert.Equal(t, logMessages[0].Message, "start reconcile")
66-
assert.Contains(t, logMessages[1].Message, "instance not found")
67-
})
68-
6950
t.Run("Lifecycle with a finalizer - add finalizer", func(t *testing.T) {
7051
// Arrange
7152
instance := &pmtesting.TestApiObject{

controller/lifecycle/lifecycle.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/google/uuid"
99
"go.opentelemetry.io/otel"
10-
"golang.org/x/exp/maps"
1110
"k8s.io/apimachinery/pkg/api/equality"
1211
kerrors "k8s.io/apimachinery/pkg/api/errors"
1312
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -20,8 +19,8 @@ import (
2019

2120
"github.com/platform-mesh/golang-commons/controller/lifecycle/api"
2221
"github.com/platform-mesh/golang-commons/controller/lifecycle/runtimeobject"
23-
"github.com/platform-mesh/golang-commons/controller/lifecycle/spread"
2422
"github.com/platform-mesh/golang-commons/controller/lifecycle/subroutine"
23+
"github.com/platform-mesh/golang-commons/controller/lifecycle/util"
2524
"github.com/platform-mesh/golang-commons/errors"
2625
"github.com/platform-mesh/golang-commons/logger"
2726
"github.com/platform-mesh/golang-commons/sentry"
@@ -57,15 +56,10 @@ func Reconcile(ctx context.Context, nName types.NamespacedName, instance runtime
5756
generationChanged := true
5857

5958
if l.Spreader() != nil && instance.GetDeletionTimestamp().IsZero() {
60-
instanceStatusObj := l.Spreader().MustToRuntimeObjectSpreadReconcileStatusInterface(instance, log)
61-
generationChanged = instance.GetGeneration() != instanceStatusObj.GetObservedGeneration()
62-
isAfterNextReconcileTime := v1.Now().UTC().After(instanceStatusObj.GetNextReconcileTime().UTC())
63-
refreshRequested := slices.Contains(maps.Keys(instance.GetLabels()), spread.ReconcileRefreshLabel)
64-
65-
reconcileRequired := generationChanged || isAfterNextReconcileTime || refreshRequested
59+
reconcileRequired := l.Spreader().ReconcileRequired(instance, log)
6660
if !reconcileRequired {
6761
log.Info().Msg("skipping reconciliation, spread reconcile is active. No processing needed")
68-
return l.Spreader().OnNextReconcile(instanceStatusObj, log)
62+
return l.Spreader().OnNextReconcile(instance, log)
6963
}
7064
}
7165

@@ -305,7 +299,7 @@ func HandleClientError(msg string, log *logger.Logger, err error, generationChan
305299

306300
func MarkResourceAsFinal(instance runtimeobject.RuntimeObject, log *logger.Logger, conditions []v1.Condition, status v1.ConditionStatus, l api.Lifecycle) {
307301
if l.Spreader() != nil && instance.GetDeletionTimestamp().IsZero() {
308-
instanceStatusObj := l.Spreader().MustToRuntimeObjectSpreadReconcileStatusInterface(instance, log)
302+
instanceStatusObj := util.MustToInterface[api.RuntimeObjectSpreadReconcileStatus](instance, log)
309303
l.Spreader().SetNextReconcileTime(instanceStatusObj, log)
310304
l.Spreader().UpdateObservedGeneration(instanceStatusObj, log)
311305
}
@@ -369,7 +363,7 @@ func HandleOperatorError(ctx context.Context, operatorError errors.OperatorError
369363

370364
func ValidateInterfaces(instance runtimeobject.RuntimeObject, log *logger.Logger, l api.Lifecycle) error {
371365
if l.Spreader() != nil {
372-
_, err := l.Spreader().ToRuntimeObjectSpreadReconcileStatusInterface(instance, log)
366+
_, err := util.ToInterface[api.RuntimeObjectSpreadReconcileStatus](instance, log)
373367
if err != nil {
374368
return err
375369
}

0 commit comments

Comments
 (0)