@@ -19,6 +19,7 @@ import (
1919 "github.com/aws-controllers-k8s/elasticache-controller/pkg/testutil"
2020 ackmetrics "github.com/aws-controllers-k8s/runtime/pkg/metrics"
2121 "github.com/aws-controllers-k8s/runtime/pkg/requeue"
22+ "github.com/aws/aws-sdk-go/aws/awserr"
2223 "github.com/pkg/errors"
2324 "github.com/stretchr/testify/mock"
2425 "go.uber.org/zap/zapcore"
@@ -391,6 +392,60 @@ func TestCustomModifyReplicationGroup_NodeGroup_available(t *testing.T) {
391392 })
392393}
393394
395+ func TestCustomModifyReplicationGroup_ScaleUpAndDown_And_Resharding (t * testing.T ) {
396+ assert := assert .New (t )
397+
398+ // Tests
399+ t .Run ("ScaleInAndScaleUp=Diff" , func (t * testing.T ) {
400+ desired := provideResource ()
401+ latest := provideResource ()
402+ rgId := "RGID"
403+ desired .ko .Spec .ReplicationGroupID = & rgId
404+ latest .ko .Spec .ReplicationGroupID = & rgId
405+
406+ mocksdkapi := & mocksvcsdkapi.ElastiCacheAPI {}
407+ rm := provideResourceManagerWithMockSDKAPI (mocksdkapi )
408+
409+ var delta ackcompare.Delta
410+ delta .Add ("Spec.CacheNodeType" , "cache.t3.small" , "cache.m5.large" )
411+ delta .Add ("Spec.NumNodeGroups" , 3 , 4 )
412+
413+ var ctx context.Context
414+ res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
415+ assert .Nil (res )
416+ assert .Nil (err )
417+ assert .Empty (mocksdkapi .Calls )
418+ })
419+
420+ t .Run ("ScaleOutAndScaleDown=Diff" , func (t * testing.T ) {
421+ desired := provideResource ()
422+ latest := provideResource ()
423+ rgId := "RGID"
424+ desired .ko .Spec .ReplicationGroupID = & rgId
425+ latest .ko .Spec .ReplicationGroupID = & rgId
426+
427+ mocksdkapi := & mocksvcsdkapi.ElastiCacheAPI {}
428+ rm := provideResourceManagerWithMockSDKAPI (mocksdkapi )
429+
430+ var delta ackcompare.Delta
431+ delta .Add ("Spec.CacheNodeType" , "cache.t3.small" , "cache.t3.micro" )
432+ oldshardCount := int64 (4 )
433+ newShardCount := int64 (10 )
434+ delta .Add ("Spec.NumNodeGroups" , oldshardCount , newShardCount )
435+ desired .ko .Spec .NumNodeGroups = & newShardCount
436+ latest .ko .Spec .NumNodeGroups = & oldshardCount
437+ mocksdkapi .On ("ModifyReplicationGroupShardConfigurationWithContext" , mock .Anything , mock .Anything ).Return (nil ,
438+ awserr .New ("Invalid" , "Invalid error" , nil ))
439+ var ctx context.Context
440+ res , err := rm .CustomModifyReplicationGroup (ctx , desired , latest , & delta )
441+ assert .Nil (res )
442+ assert .NotNil (err )
443+ assert .NotEmpty (mocksdkapi .Calls )
444+ assert .Equal ("ModifyReplicationGroupShardConfigurationWithContext" , mocksdkapi .Calls [0 ].Method )
445+ })
446+
447+ }
448+
394449// TestReplicaCountDifference tests scenarios to check if desired, latest replica count
395450// configurations differ
396451func TestReplicaCountDifference (t * testing.T ) {
0 commit comments