@@ -393,23 +393,106 @@ func TestExistingPasswordAndKeyfile_AreUsedWhenTheSecretExists(t *testing.T) {
393393}
394394
395395func TestScramIsConfigured (t * testing.T ) {
396- AssertReplicaSetIsConfiguredWithScram (t , newScramReplicaSet ())
396+ assertReplicaSetIsConfiguredWithScram (t , newScramReplicaSet ())
397397}
398398
399399func TestScramIsConfiguredWhenNotSpecified (t * testing.T ) {
400- AssertReplicaSetIsConfiguredWithScram (t , newTestReplicaSet ())
400+ assertReplicaSetIsConfiguredWithScram (t , newTestReplicaSet ())
401401}
402402
403- func AssertReplicaSetIsConfiguredWithScram (t * testing.T , mdb mdbv1.MongoDB ) {
403+ func TestReplicaSet_IsScaledDown_OneMember_AtATime_WhenItAlreadyExists (t * testing.T ) {
404+ mdb := newTestReplicaSet ()
405+ mdb .Spec .Members = 5
406+
407+ mgr := client .NewManager (& mdb )
408+ r := newReconciler (mgr , mockManifestProvider (mdb .Spec .Version ))
409+ res , err := r .Reconcile (reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
410+ assertReconciliationSuccessful (t , res , err )
411+
412+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
413+
414+ assert .NoError (t , err )
415+ assert .Equal (t , 5 , mdb .Status .Members )
416+
417+ // scale members from five to three
418+ mdb .Spec .Members = 3
419+
420+ err = mgr .GetClient ().Update (context .TODO (), & mdb )
421+ assert .NoError (t , err )
422+
423+ makeStatefulSetReady (t , mgr .GetClient (), mdb )
424+
425+ res , err = r .Reconcile (reconcile.Request {NamespacedName : mdb .NamespacedName ()})
426+
427+ assert .NoError (t , err )
428+
429+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
430+ assert .NoError (t , err )
431+
432+ assert .Equal (t , true , res .Requeue )
433+ assert .Equal (t , 4 , mdb .Status .Members )
434+
435+ res , err = r .Reconcile (reconcile.Request {NamespacedName : mdb .NamespacedName ()})
436+
437+ assert .NoError (t , err )
438+
439+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
440+ assert .NoError (t , err )
441+ assert .Equal (t , false , res .Requeue )
442+ assert .Equal (t , 3 , mdb .Status .Members )
443+ }
444+
445+ func TestReplicaSet_IsScaledUp_OneMember_AtATime_WhenItAlreadyExists (t * testing.T ) {
446+ mdb := newTestReplicaSet ()
447+
448+ mgr := client .NewManager (& mdb )
449+ r := newReconciler (mgr , mockManifestProvider (mdb .Spec .Version ))
450+ res , err := r .Reconcile (reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
451+ assertReconciliationSuccessful (t , res , err )
452+
453+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
454+ assert .NoError (t , err )
455+ assert .Equal (t , 3 , mdb .Status .Members )
456+
457+ // scale members from three to five
458+ mdb .Spec .Members = 5
459+
460+ err = mgr .GetClient ().Update (context .TODO (), & mdb )
461+ assert .NoError (t , err )
462+
463+ makeStatefulSetReady (t , mgr .GetClient (), mdb )
464+
465+ res , err = r .Reconcile (reconcile.Request {NamespacedName : mdb .NamespacedName ()})
466+
467+ assert .NoError (t , err )
468+
469+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
470+
471+ assert .NoError (t , err )
472+ assert .Equal (t , true , res .Requeue )
473+ assert .Equal (t , 4 , mdb .Status .Members )
474+
475+ res , err = r .Reconcile (reconcile.Request {NamespacedName : mdb .NamespacedName ()})
476+
477+ assert .NoError (t , err )
478+
479+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
480+ assert .NoError (t , err )
481+
482+ assert .Equal (t , false , res .Requeue )
483+ assert .Equal (t , 5 , mdb .Status .Members )
484+ }
485+
486+ func assertReplicaSetIsConfiguredWithScram (t * testing.T , mdb mdbv1.MongoDB ) {
404487 mgr := client .NewManager (& mdb )
405488 r := newReconciler (mgr , mockManifestProvider (mdb .Spec .Version ))
406489 res , err := r .Reconcile (reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
407490 assertReconciliationSuccessful (t , res , err )
408491
409492 currentAc , err := getCurrentAutomationConfig (client .NewClient (mgr .GetClient ()), mdb )
410493 t .Run ("Automation Config is configured with SCRAM" , func (t * testing.T ) {
411- assert .NoError (t , err )
412494 assert .NotEmpty (t , currentAc .Auth .Key )
495+ assert .NoError (t , err )
413496 assert .NotEmpty (t , currentAc .Auth .KeyFileWindows )
414497 assert .NotEmpty (t , currentAc .Auth .AutoPwd )
415498 assert .False (t , currentAc .Auth .Disabled )
@@ -423,6 +506,20 @@ func AssertReplicaSetIsConfiguredWithScram(t *testing.T, mdb mdbv1.MongoDB) {
423506 })
424507}
425508
509+ func TestReplicaSet_IsScaledUpToDesiredMembers_WhenFirstCreated (t * testing.T ) {
510+ mdb := newTestReplicaSet ()
511+
512+ mgr := client .NewManager (& mdb )
513+ r := newReconciler (mgr , mockManifestProvider (mdb .Spec .Version ))
514+ res , err := r .Reconcile (reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
515+ assertReconciliationSuccessful (t , res , err )
516+
517+ err = mgr .GetClient ().Get (context .TODO (), mdb .NamespacedName (), & mdb )
518+ assert .NoError (t , err )
519+
520+ assert .Equal (t , 3 , mdb .Status .Members )
521+ }
522+
426523func TestOpenshift_Configuration (t * testing.T ) {
427524 sts := performReconciliationAndGetStatefulSet (t , "openshift_mdb.yaml" )
428525 assert .Equal (t , "MANAGED_SECURITY_CONTEXT" , sts .Spec .Template .Spec .Containers [0 ].Env [1 ].Name )
0 commit comments