@@ -25,6 +25,7 @@ import (
2525 "go.uber.org/zap/zapcore"
2626 "path/filepath"
2727 ctrlrtzap "sigs.k8s.io/controller-runtime/pkg/log/zap"
28+ "strconv"
2829 "testing"
2930
3031 "github.com/stretchr/testify/assert"
@@ -290,8 +291,7 @@ func TestCustomModifyReplicationGroup(t *testing.T) {
290291 desired := provideResource ()
291292 latest := provideResource ()
292293 var delta ackcompare.Delta
293- var ctx context.Context
294- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
294+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
295295 assert .Nil (res )
296296 assert .Nil (err )
297297 })
@@ -306,8 +306,7 @@ func TestCustomModifyReplicationGroup_Unavailable(t *testing.T) {
306306 desired := provideResource ()
307307 latest := provideResourceWithStatus ("modifying" )
308308 var delta ackcompare.Delta
309- var ctx context.Context
310- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
309+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
311310 assert .Nil (res )
312311 assert .NotNil (err )
313312 var requeueNeededAfter * requeue.RequeueNeededAfter
@@ -329,8 +328,7 @@ func TestCustomModifyReplicationGroup_NodeGroup_Unvailable(t *testing.T) {
329328 nodeGroup .Status = & unavailableStatus
330329 }
331330 var delta ackcompare.Delta
332- var ctx context.Context
333- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
331+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
334332 assert .Nil (res )
335333 assert .NotNil (err )
336334 var requeueNeededAfter * requeue.RequeueNeededAfter
@@ -357,9 +355,8 @@ func TestCustomModifyReplicationGroup_NodeGroup_MemberClusters_mismatch(t *testi
357355 nodeGroup .Status = & availableStatus
358356 }
359357 var delta ackcompare.Delta
360- var ctx context.Context
361358 require .NotNil (latest .ko .Status .MemberClusters )
362- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
359+ res , err := rm .CustomModifyReplicationGroup (context . TODO () , desired , latest , & delta )
363360 assert .Nil (res )
364361 assert .NotNil (err ) // due to surplus member cluster
365362 var requeueNeededAfter * requeue.RequeueNeededAfter
@@ -384,14 +381,61 @@ func TestCustomModifyReplicationGroup_NodeGroup_available(t *testing.T) {
384381 nodeGroup .Status = & availableStatus
385382 }
386383 var delta ackcompare.Delta
387- var ctx context.Context
388384 require .NotNil (latest .ko .Status .MemberClusters )
389- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
385+ res , err := rm .CustomModifyReplicationGroup (context . TODO () , desired , latest , & delta )
390386 assert .Nil (res )
391387 assert .Nil (err )
392388 })
393389}
394390
391+ func TestCustomModifyReplicationGroup_Scaling_Async_Rollback (t * testing.T ) {
392+ assert := assert .New (t )
393+ t .Run ("ScaleDownRollback=Diff" , func (t * testing.T ) {
394+ desired := provideResource ()
395+ latest := provideResource ()
396+ rgId := "RGID"
397+ desired .ko .Spec .ReplicationGroupID = & rgId
398+ latest .ko .Spec .ReplicationGroupID = & rgId
399+ desired .ko .ObjectMeta .Annotations = make (map [string ]string )
400+ desiredCacheNodeType := "cache.t3.micro"
401+ currentCacheNodeType := "cache.m5.large"
402+ desired .ko .Annotations [AnnotationLastRequestedCNT ] = desiredCacheNodeType
403+ desired .ko .Spec .CacheNodeType = & desiredCacheNodeType
404+
405+ rm := provideResourceManager ()
406+
407+ var delta ackcompare.Delta
408+ delta .Add ("Spec.CacheNodeType" , currentCacheNodeType , desiredCacheNodeType )
409+
410+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
411+ assert .Nil (res )
412+ assert .NotNil (err )
413+ assert .Equal ("InvalidParameterCombination: Cannot update CacheNodeType, Please refer to Events for more details" , err .Error ())
414+ })
415+
416+ t .Run ("ScaleInRollback=Diff" , func (t * testing.T ) {
417+ desired := provideResource ()
418+ latest := provideResource ()
419+ rgId := "RGID"
420+ desired .ko .Spec .ReplicationGroupID = & rgId
421+ latest .ko .Spec .ReplicationGroupID = & rgId
422+ desired .ko .ObjectMeta .Annotations = make (map [string ]string )
423+
424+ desiredNodeGroup := int64 (4 )
425+ currentNodeGroup := int64 (3 )
426+ desired .ko .Annotations [AnnotationLastRequestedNNG ] = strconv .Itoa (int (desiredNodeGroup ))
427+ desired .ko .Spec .NumNodeGroups = & desiredNodeGroup
428+ rm := provideResourceManager ()
429+
430+ var delta ackcompare.Delta
431+ delta .Add ("Spec.NumNodeGroups" , currentNodeGroup , desiredNodeGroup )
432+
433+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
434+ assert .Nil (res )
435+ assert .NotNil (err )
436+ assert .Equal ("InvalidParameterCombination: Cannot update NodeGroups, Please refer to Events for more details" , err .Error ())
437+ })
438+ }
395439func TestCustomModifyReplicationGroup_ScaleUpAndDown_And_Resharding (t * testing.T ) {
396440 assert := assert .New (t )
397441
@@ -402,16 +446,26 @@ func TestCustomModifyReplicationGroup_ScaleUpAndDown_And_Resharding(t *testing.T
402446 rgId := "RGID"
403447 desired .ko .Spec .ReplicationGroupID = & rgId
404448 latest .ko .Spec .ReplicationGroupID = & rgId
449+ desired .ko .ObjectMeta .Annotations = make (map [string ]string )
450+ desiredCacheNodeType := "cache.m5.large"
451+ currentCacheNodeType := "cache.t3.small"
452+ desired .ko .Annotations [AnnotationLastRequestedCNT ] = currentCacheNodeType
453+ desired .ko .Spec .CacheNodeType = & desiredCacheNodeType
405454
455+ desiredNodeGroup := int64 (4 )
456+ currentNodeGroup := int64 (3 )
457+ desired .ko .Annotations [AnnotationLastRequestedNNG ] = strconv .Itoa (int (currentNodeGroup ))
458+ desired .ko .Spec .NumNodeGroups = & desiredNodeGroup
459+ allowedNodeModifications := []* string {& desiredCacheNodeType }
460+ desired .ko .Status .AllowedScaleUpModifications = allowedNodeModifications
406461 mocksdkapi := & mocksvcsdkapi.ElastiCacheAPI {}
407462 rm := provideResourceManagerWithMockSDKAPI (mocksdkapi )
408463
409464 var delta ackcompare.Delta
410- delta .Add ("Spec.CacheNodeType" , "cache.t3.small" , "cache.m5.large" )
411- delta .Add ("Spec.NumNodeGroups" , 3 , 4 )
465+ delta .Add ("Spec.CacheNodeType" , currentCacheNodeType , desiredCacheNodeType )
466+ delta .Add ("Spec.NumNodeGroups" , currentNodeGroup , desiredNodeGroup )
412467
413- var ctx context.Context
414- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
468+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
415469 assert .Nil (res )
416470 assert .Nil (err )
417471 assert .Empty (mocksdkapi .Calls )
@@ -429,15 +483,19 @@ func TestCustomModifyReplicationGroup_ScaleUpAndDown_And_Resharding(t *testing.T
429483
430484 var delta ackcompare.Delta
431485 delta .Add ("Spec.CacheNodeType" , "cache.t3.small" , "cache.t3.micro" )
486+ desired .ko .ObjectMeta .Annotations = make (map [string ]string )
487+ cacheNodeType := "cache.t3.small"
488+ desired .ko .Annotations [AnnotationLastRequestedCNT ] = "cache.t3.micro"
489+ desired .ko .Spec .CacheNodeType = & cacheNodeType
432490 oldshardCount := int64 (4 )
433491 newShardCount := int64 (10 )
434492 delta .Add ("Spec.NumNodeGroups" , oldshardCount , newShardCount )
435493 desired .ko .Spec .NumNodeGroups = & newShardCount
436494 latest .ko .Spec .NumNodeGroups = & oldshardCount
495+ desired .ko .Annotations [AnnotationLastRequestedNNG ] = strconv .Itoa (int (oldshardCount ))
437496 mocksdkapi .On ("ModifyReplicationGroupShardConfigurationWithContext" , mock .Anything , mock .Anything ).Return (nil ,
438497 awserr .New ("Invalid" , "Invalid error" , nil ))
439- var ctx context.Context
440- res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
498+ res , err := rm .CustomModifyReplicationGroup (context .TODO (), desired , latest , & delta )
441499 assert .Nil (res )
442500 assert .NotNil (err )
443501 assert .NotEmpty (mocksdkapi .Calls )
0 commit comments