@@ -473,6 +473,188 @@ func TestUpdateCluster_PreservesExistingConfig(t *testing.T) {
473473 assert .Equal (t , clusterv1 .ClusterConfigurationRestartPolicy_CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING , cfg .GetRestartPolicy ())
474474}
475475
476+ func TestUpdateCluster_VersionUpgrade (t * testing.T ) {
477+ env := testutil .NewTestEnv (t )
478+ setupUpdateHandlers (env )
479+
480+ stdout , _ , err := testutil .Exec (t , env ,
481+ "cluster" , "update" , "cluster-abc" ,
482+ "--version" , "v1.17.0" ,
483+ "--force" ,
484+ )
485+ require .NoError (t , err )
486+ assert .Contains (t , stdout , "updated successfully" )
487+
488+ req , ok := env .Server .UpdateClusterCalls .Last ()
489+ require .True (t , ok )
490+ assert .Equal (t , "v1.17.0" , req .GetCluster ().GetConfiguration ().GetVersion ())
491+ }
492+
493+ func TestUpdateCluster_VersionPromptShowsDiff (t * testing.T ) {
494+ env := testutil .NewTestEnv (t )
495+
496+ env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
497+ return & clusterv1.GetClusterResponse {
498+ Cluster : & clusterv1.Cluster {
499+ Id : req .GetClusterId (),
500+ Name : "my-cluster" ,
501+ Configuration : & clusterv1.ClusterConfiguration {},
502+ State : & clusterv1.ClusterState {
503+ Version : "v1.16.2" ,
504+ },
505+ },
506+ }, nil
507+ })
508+ env .Server .UpdateClusterCalls .Always (func (_ context.Context , req * clusterv1.UpdateClusterRequest ) (* clusterv1.UpdateClusterResponse , error ) {
509+ return & clusterv1.UpdateClusterResponse {Cluster : req .GetCluster ()}, nil
510+ })
511+
512+ stdout , stderr , err := testutil .Exec (t , env ,
513+ "cluster" , "update" , "cluster-abc" ,
514+ "--version" , "v1.17.0" ,
515+ )
516+ require .NoError (t , err )
517+ assert .Contains (t , stdout , "Aborted." )
518+ assert .Contains (t , stderr , "v1.16.2 => v1.17.0" )
519+ assert .Contains (t , stderr , "rolling restart" )
520+ assert .Equal (t , 0 , env .Server .UpdateClusterCalls .Count ())
521+ }
522+
523+ func TestUpdateCluster_DBConfigPromptShowsDiff (t * testing.T ) {
524+ env := testutil .NewTestEnv (t )
525+
526+ rf := uint32 (1 )
527+ env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
528+ return & clusterv1.GetClusterResponse {
529+ Cluster : & clusterv1.Cluster {
530+ Id : req .GetClusterId (),
531+ Name : "my-cluster" ,
532+ Configuration : & clusterv1.ClusterConfiguration {
533+ DatabaseConfiguration : & clusterv1.DatabaseConfiguration {
534+ Collection : & clusterv1.DatabaseConfigurationCollection {
535+ ReplicationFactor : & rf ,
536+ },
537+ },
538+ },
539+ },
540+ }, nil
541+ })
542+ env .Server .UpdateClusterCalls .Always (func (_ context.Context , req * clusterv1.UpdateClusterRequest ) (* clusterv1.UpdateClusterResponse , error ) {
543+ return & clusterv1.UpdateClusterResponse {Cluster : req .GetCluster ()}, nil
544+ })
545+
546+ stdout , stderr , err := testutil .Exec (t , env ,
547+ "cluster" , "update" , "cluster-abc" ,
548+ "--replication-factor" , "3" ,
549+ )
550+ require .NoError (t , err )
551+ assert .Contains (t , stdout , "Aborted." )
552+ assert .Contains (t , stderr , "1 => 3" )
553+ assert .Contains (t , stderr , "rolling restart" )
554+ assert .NotContains (t , stderr , "Version:" )
555+ assert .Equal (t , 0 , env .Server .UpdateClusterCalls .Count ())
556+ }
557+
558+ func TestUpdateCluster_VersionAndDBConfigShowSinglePrompt (t * testing.T ) {
559+ env := testutil .NewTestEnv (t )
560+
561+ rf := uint32 (1 )
562+ env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
563+ return & clusterv1.GetClusterResponse {
564+ Cluster : & clusterv1.Cluster {
565+ Id : req .GetClusterId (),
566+ Name : "my-cluster" ,
567+ Configuration : & clusterv1.ClusterConfiguration {
568+ DatabaseConfiguration : & clusterv1.DatabaseConfiguration {
569+ Collection : & clusterv1.DatabaseConfigurationCollection {
570+ ReplicationFactor : & rf ,
571+ },
572+ },
573+ },
574+ State : & clusterv1.ClusterState {
575+ Version : "v1.16.2" ,
576+ },
577+ },
578+ }, nil
579+ })
580+ env .Server .UpdateClusterCalls .Always (func (_ context.Context , req * clusterv1.UpdateClusterRequest ) (* clusterv1.UpdateClusterResponse , error ) {
581+ return & clusterv1.UpdateClusterResponse {Cluster : req .GetCluster ()}, nil
582+ })
583+
584+ stdout , stderr , err := testutil .Exec (t , env ,
585+ "cluster" , "update" , "cluster-abc" ,
586+ "--version" , "v1.17.0" ,
587+ "--replication-factor" , "3" ,
588+ )
589+ require .NoError (t , err )
590+ assert .Contains (t , stdout , "Aborted." )
591+ assert .Contains (t , stderr , "v1.16.2 => v1.17.0" )
592+ assert .Contains (t , stderr , "1 => 3" )
593+ assert .Contains (t , stderr , "rolling restart" )
594+ assert .Equal (t , 0 , env .Server .UpdateClusterCalls .Count ())
595+ }
596+
597+ func TestUpdateCluster_VersionAndDBConfigForceAppliesBoth (t * testing.T ) {
598+ env := testutil .NewTestEnv (t )
599+
600+ env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
601+ return & clusterv1.GetClusterResponse {
602+ Cluster : & clusterv1.Cluster {
603+ Id : req .GetClusterId (),
604+ Name : "my-cluster" ,
605+ Configuration : & clusterv1.ClusterConfiguration {},
606+ State : & clusterv1.ClusterState {
607+ Version : "v1.16.2" ,
608+ },
609+ },
610+ }, nil
611+ })
612+ env .Server .UpdateClusterCalls .Always (func (_ context.Context , req * clusterv1.UpdateClusterRequest ) (* clusterv1.UpdateClusterResponse , error ) {
613+ return & clusterv1.UpdateClusterResponse {Cluster : req .GetCluster ()}, nil
614+ })
615+
616+ stdout , _ , err := testutil .Exec (t , env ,
617+ "cluster" , "update" , "cluster-abc" ,
618+ "--version" , "v1.17.0" ,
619+ "--replication-factor" , "3" ,
620+ "--force" ,
621+ )
622+ require .NoError (t , err )
623+ assert .Contains (t , stdout , "updated successfully" )
624+
625+ req , ok := env .Server .UpdateClusterCalls .Last ()
626+ require .True (t , ok )
627+ assert .Equal (t , "v1.17.0" , req .GetCluster ().GetConfiguration ().GetVersion ())
628+ assert .Equal (t , uint32 (3 ), req .GetCluster ().GetConfiguration ().GetDatabaseConfiguration ().GetCollection ().GetReplicationFactor ())
629+ }
630+
631+ func TestUpdateCluster_VersionFallsBackToConfigVersion (t * testing.T ) {
632+ env := testutil .NewTestEnv (t )
633+
634+ v := "v1.15.0"
635+ env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
636+ return & clusterv1.GetClusterResponse {
637+ Cluster : & clusterv1.Cluster {
638+ Id : req .GetClusterId (),
639+ Name : "my-cluster" ,
640+ Configuration : & clusterv1.ClusterConfiguration {
641+ Version : & v ,
642+ },
643+ },
644+ }, nil
645+ })
646+ env .Server .UpdateClusterCalls .Always (func (_ context.Context , req * clusterv1.UpdateClusterRequest ) (* clusterv1.UpdateClusterResponse , error ) {
647+ return & clusterv1.UpdateClusterResponse {Cluster : req .GetCluster ()}, nil
648+ })
649+
650+ _ , stderr , err := testutil .Exec (t , env ,
651+ "cluster" , "update" , "cluster-abc" ,
652+ "--version" , "v1.17.0" ,
653+ )
654+ require .NoError (t , err )
655+ assert .Contains (t , stderr , "v1.15.0 => v1.17.0" )
656+ }
657+
476658// setupUpdateHandlers configures the standard Get/Update handlers for update tests.
477659func setupUpdateHandlers (env * testutil.TestEnv ) {
478660 env .Server .GetClusterCalls .Always (func (_ context.Context , req * clusterv1.GetClusterRequest ) (* clusterv1.GetClusterResponse , error ) {
0 commit comments