@@ -970,6 +970,100 @@ func TestUpdateProcessArgs(t *testing.T) {
970970 }
971971}
972972
973+ func TestUpgradeCluster (t * testing.T ) {
974+ tests := map [string ]struct {
975+ deployment Deployment
976+ apiMocker func () (admin.ClustersApi , admin.ServerlessInstancesApi , admin.FlexClustersApi )
977+ result Deployment
978+ err error
979+ }{
980+ "should fail to upgrade shared cluster in atlas" : {
981+ deployment : & Cluster {},
982+ apiMocker : func () (admin.ClustersApi , admin.ServerlessInstancesApi , admin.FlexClustersApi ) {
983+ clusterAPI := mockadmin .NewClustersApi (t )
984+ serverlessInstanceAPI := mockadmin .NewServerlessInstancesApi (t )
985+ flexAPI := mockadmin .NewFlexClustersApi (t )
986+ return clusterAPI , serverlessInstanceAPI , flexAPI
987+ },
988+ err : errors .New ("upgrade from shared to dedicated is not supported" ),
989+ },
990+ "should fail to upgrade serverless instance in atlas" : {
991+ deployment : & Serverless {},
992+ apiMocker : func () (admin.ClustersApi , admin.ServerlessInstancesApi , admin.FlexClustersApi ) {
993+ clusterAPI := mockadmin .NewClustersApi (t )
994+ serverlessInstanceAPI := mockadmin .NewServerlessInstancesApi (t )
995+ flexAPI := mockadmin .NewFlexClustersApi (t )
996+ return clusterAPI , serverlessInstanceAPI , flexAPI
997+ },
998+ err : errors .New ("upgrade from serverless to dedicated is not supported" ),
999+ },
1000+ "should fail to upgrade flex instance in atlas" : {
1001+ deployment : & Flex {
1002+ ProjectID : "project-id" ,
1003+ customResource : & akov2.AtlasDeployment {
1004+ Spec : akov2.AtlasDeploymentSpec {
1005+ DeploymentSpec : & akov2.AdvancedDeploymentSpec {},
1006+ },
1007+ },
1008+ },
1009+ apiMocker : func () (admin.ClustersApi , admin.ServerlessInstancesApi , admin.FlexClustersApi ) {
1010+ clusterAPI := mockadmin .NewClustersApi (t )
1011+ serverlessInstanceAPI := mockadmin .NewServerlessInstancesApi (t )
1012+ flexAPI := mockadmin .NewFlexClustersApi (t )
1013+ flexAPI .EXPECT ().UpgradeFlexCluster (context .Background (), "project-id" , mock .AnythingOfType ("*admin.AtlasTenantClusterUpgradeRequest20240805" )).
1014+ Return (admin.UpgradeFlexClusterApiRequest {ApiService : flexAPI })
1015+ flexAPI .EXPECT ().UpgradeFlexClusterExecute (mock .AnythingOfType ("admin.UpgradeFlexClusterApiRequest" )).
1016+ Return (nil , & http.Response {}, errors .New ("failed to upgrade flex cluster in atlas" ))
1017+ return clusterAPI , serverlessInstanceAPI , flexAPI
1018+ },
1019+ err : errors .New ("failed to upgrade flex cluster in atlas" ),
1020+ },
1021+ "should upgrade flex instance in atlas" : {
1022+ deployment : & Flex {
1023+ ProjectID : "project-id" ,
1024+ customResource : & akov2.AtlasDeployment {
1025+ Spec : akov2.AtlasDeploymentSpec {
1026+ DeploymentSpec : & akov2.AdvancedDeploymentSpec {},
1027+ },
1028+ },
1029+ },
1030+ apiMocker : func () (admin.ClustersApi , admin.ServerlessInstancesApi , admin.FlexClustersApi ) {
1031+ clusterAPI := mockadmin .NewClustersApi (t )
1032+ serverlessInstanceAPI := mockadmin .NewServerlessInstancesApi (t )
1033+ flexAPI := mockadmin .NewFlexClustersApi (t )
1034+ flexAPI .EXPECT ().UpgradeFlexCluster (context .Background (), "project-id" , mock .AnythingOfType ("*admin.AtlasTenantClusterUpgradeRequest20240805" )).
1035+ Return (admin.UpgradeFlexClusterApiRequest {ApiService : flexAPI })
1036+ flexAPI .EXPECT ().UpgradeFlexClusterExecute (mock .AnythingOfType ("admin.UpgradeFlexClusterApiRequest" )).
1037+ Return (
1038+ & admin.FlexClusterDescription20241113 {GroupId : pointer .MakePtr ("project-id" )},
1039+ & http.Response {},
1040+ nil ,
1041+ )
1042+ return clusterAPI , serverlessInstanceAPI , flexAPI
1043+ },
1044+ result : & Flex {
1045+ FlexSpec : & akov2.FlexSpec {
1046+ Tags : []* akov2.TagSpec {},
1047+ ProviderSettings : & akov2.FlexProviderSettings {},
1048+ },
1049+ ProjectID : "project-id" ,
1050+ Connection : & status.ConnectionStrings {},
1051+ },
1052+ },
1053+ }
1054+
1055+ for name , tt := range tests {
1056+ t .Run (name , func (t * testing.T ) {
1057+ clusterAPI , serverlessInstanceAPI , flexAPI := tt .apiMocker ()
1058+ service := NewAtlasDeployments (clusterAPI , serverlessInstanceAPI , nil , flexAPI , false )
1059+
1060+ result , err := service .UpgradeToDedicated (context .Background (), tt .deployment )
1061+ require .Equal (t , tt .err , err )
1062+ assert .Equal (t , tt .result , result )
1063+ })
1064+ }
1065+ }
1066+
9731067func atlasAPIError (code string ) * admin.GenericOpenAPIError {
9741068 err := admin.GenericOpenAPIError {}
9751069 err .SetModel (admin.ApiError {ErrorCode : code })
0 commit comments