@@ -1327,3 +1327,107 @@ func TestUpdateStatus(t *testing.T) {
13271327 assert .Equal (t , "status field not found in current object" , err .Error ())
13281328 })
13291329}
1330+
1331+ func TestAddFinalizersIfNeeded (t * testing.T ) {
1332+ instance := & pmtesting.TestApiObject {ObjectMeta : metav1.ObjectMeta {Name : "instance1" }}
1333+ fakeClient := pmtesting .CreateFakeClient (t , instance )
1334+ sub := pmtesting.FinalizerSubroutine {Client : fakeClient }
1335+ // Should add finalizer
1336+ err := AddFinalizersIfNeeded (context .Background (), fakeClient , instance , []subroutine.Subroutine {sub }, false )
1337+ assert .NoError (t , err )
1338+ assert .Contains (t , instance .Finalizers , pmtesting .SubroutineFinalizer )
1339+
1340+ // Should not add if readonly
1341+ instance2 := & pmtesting.TestApiObject {}
1342+ err = AddFinalizersIfNeeded (context .Background (), fakeClient , instance2 , []subroutine.Subroutine {sub }, true )
1343+ assert .NoError (t , err )
1344+ assert .NotContains (t , instance2 .Finalizers , pmtesting .SubroutineFinalizer )
1345+
1346+ // Should not add if deletion timestamp is set
1347+ now := metav1 .Now ()
1348+ instance3 := & pmtesting.TestApiObject {ObjectMeta : metav1.ObjectMeta {DeletionTimestamp : & now }}
1349+ err = AddFinalizersIfNeeded (context .Background (), fakeClient , instance3 , []subroutine.Subroutine {sub }, false )
1350+ assert .NoError (t , err )
1351+ }
1352+
1353+ func TestAddFinalizerIfNeeded (t * testing.T ) {
1354+ instance := & pmtesting.TestApiObject {}
1355+ sub := pmtesting.FinalizerSubroutine {}
1356+ // Should add and return true
1357+ added := AddFinalizerIfNeeded (instance , sub )
1358+ assert .True (t , added )
1359+ // Should not add again
1360+ added = AddFinalizerIfNeeded (instance , sub )
1361+ assert .False (t , added )
1362+ }
1363+
1364+ func TestRemoveFinalizerIfNeeded (t * testing.T ) {
1365+ instance := & pmtesting.TestApiObject {ObjectMeta : metav1.ObjectMeta {Name : "instance1" }}
1366+ sub := pmtesting.FinalizerSubroutine {}
1367+ AddFinalizerIfNeeded (instance , sub )
1368+ fakeClient := pmtesting .CreateFakeClient (t , instance )
1369+ // Should remove finalizer if not readonly and RequeueAfter == 0
1370+ res := ctrl.Result {}
1371+ err := removeFinalizerIfNeeded (context .Background (), instance , sub , res , false , fakeClient )
1372+ assert .Nil (t , err )
1373+ assert .NotContains (t , instance .Finalizers , pmtesting .SubroutineFinalizer )
1374+
1375+ // Should not remove if readonly
1376+ AddFinalizerIfNeeded (instance , sub )
1377+ err = removeFinalizerIfNeeded (context .Background (), instance , sub , res , true , fakeClient )
1378+ assert .Nil (t , err )
1379+ assert .Contains (t , instance .Finalizers , pmtesting .SubroutineFinalizer )
1380+
1381+ // Should not remove if RequeueAfter > 0
1382+ res = ctrl.Result {RequeueAfter : 1 }
1383+ err = removeFinalizerIfNeeded (context .Background (), instance , sub , res , false , fakeClient )
1384+ assert .Nil (t , err )
1385+ }
1386+
1387+ func TestContainsFinalizer (t * testing.T ) {
1388+ instance := & pmtesting.TestApiObject {}
1389+ sub := pmtesting.FinalizerSubroutine {}
1390+ assert .False (t , containsFinalizer (instance , sub .Finalizers ()))
1391+ AddFinalizerIfNeeded (instance , sub )
1392+ assert .True (t , containsFinalizer (instance , sub .Finalizers ()))
1393+ }
1394+
1395+ func TestMarkResourceAsFinal (t * testing.T ) {
1396+ instance := & pmtesting.ImplementingSpreadReconciles {}
1397+ logcfg := logger .DefaultConfig ()
1398+ logcfg .NoJSON = true
1399+ log , _ := logger .New (logcfg )
1400+ conds := []metav1.Condition {}
1401+ mgr := & pmtesting.TestLifecycleManager {Logger : log }
1402+ MarkResourceAsFinal (instance , log , conds , metav1 .ConditionTrue , mgr )
1403+ assert .Equal (t , instance .Status .ObservedGeneration , instance .Generation )
1404+ }
1405+
1406+ func TestHandleClientError (t * testing.T ) {
1407+ log := testlogger .New ().Logger
1408+ result , err := HandleClientError ("msg" , log , fmt .Errorf ("err" ), true , sentry.Tags {})
1409+ assert .Error (t , err )
1410+ assert .Equal (t , ctrl.Result {}, result )
1411+ }
1412+
1413+ func TestHandleOperatorError (t * testing.T ) {
1414+ log := testlogger .New ().Logger
1415+ opErr := operrors .NewOperatorError (fmt .Errorf ("err" ), false , false )
1416+ result , err := HandleOperatorError (context .Background (), opErr , "msg" , true , log )
1417+ assert .Nil (t , err )
1418+ assert .Equal (t , ctrl.Result {}, result )
1419+
1420+ ctx := sentry .ContextWithSentryTags (context .Background (), sentry.Tags {"test" : "tag" })
1421+ opErr = operrors .NewOperatorError (fmt .Errorf ("err" ), true , true )
1422+ result , err = HandleOperatorError (ctx , opErr , "msg" , true , log )
1423+ assert .Error (t , err )
1424+ assert .Equal (t , ctrl.Result {}, result )
1425+ }
1426+
1427+ func TestValidateInterfaces (t * testing.T ) {
1428+ log := testlogger .New ().Logger
1429+ instance := & pmtesting.ImplementingSpreadReconciles {}
1430+ mgr := & pmtesting.TestLifecycleManager {Logger : log }
1431+ err := ValidateInterfaces (instance , log , mgr )
1432+ assert .NoError (t , err )
1433+ }
0 commit comments