@@ -31,7 +31,7 @@ import (
3131func  TestAccVersionDeferralResource (t  * testing.T ) {
3232	t .Parallel ()
3333	clusterName  :=  fmt .Sprintf ("%s-version-deferral-%s" , tfTestPrefix , GenerateRandomString (4 ))
34- 	testVersionDeferralResource (t , clusterName , false )
34+ 	testVersionDeferralResourceTransition (t , clusterName , false ,  "FIXED_DEFERRAL" ,  "NOT_DEFERRED" )
3535}
3636
3737// TestIntegrationVersionDeferralResource attempts to create, check, and 
@@ -49,28 +49,8 @@ func TestIntegrationVersionDeferralResource(t *testing.T) {
4949		return  s 
5050	})()
5151
52- 	clusterInfo  :=  & client.Cluster {
53- 		Id :               clusterID ,
54- 		Name :             clusterName ,
55- 		CockroachVersion : "v22.2.0" ,
56- 		Plan :             "ADVANCED" ,
57- 		CloudProvider :    "GCP" ,
58- 		State :            "CREATED" ,
59- 		Config : client.ClusterConfig {
60- 			Dedicated : & client.DedicatedHardwareConfig {
61- 				MachineType :    "m5.xlarge" ,
62- 				NumVirtualCpus : 4 ,
63- 				StorageGib :     35 ,
64- 				MemoryGib :      8 ,
65- 			},
66- 		},
67- 		Regions : []client.Region {
68- 			{
69- 				Name :      "us-east1" ,
70- 				NodeCount : 3 ,
71- 			},
72- 		},
73- 	}
52+ 	clusterInfo  :=  getClusterInfo (clusterID , clusterName )
53+ 
7454	createdVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
7555		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_FIXED_DEFERRAL ,
7656	}
@@ -110,10 +90,242 @@ func TestIntegrationVersionDeferralResource(t *testing.T) {
11090	s .EXPECT ().DeleteCluster (gomock .Any (), clusterID )
11191	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , deletedVersionDeferralInfo )
11292
113- 	testVersionDeferralResource (t , clusterName , true )
93+ 	testVersionDeferralResourceTransition (t , clusterName , true , "FIXED_DEFERRAL" , "NOT_DEFERRED" )
94+ }
95+ 
96+ // TestIntegrationVersionDeferral30Days tests the DEFERRAL_FIXED_DAYS policy for backward compatibility 
97+ func  TestIntegrationVersionDeferralFixedTo30Days (t  * testing.T ) {
98+ 	clusterName  :=  fmt .Sprintf ("%s-deferral-30-%s" , tfTestPrefix , GenerateRandomString (4 ))
99+ 	clusterID  :=  uuid .Nil .String ()
100+ 	if  os .Getenv (CockroachAPIKey ) ==  ""  {
101+ 		os .Setenv (CockroachAPIKey , "fake" )
102+ 	}
103+ 
104+ 	ctrl  :=  gomock .NewController (t )
105+ 	s  :=  mock_client .NewMockService (ctrl )
106+ 	defer  HookGlobal (& NewService , func (c  * client.Client ) client.Service  {
107+ 		return  s 
108+ 	})()
109+ 
110+ 	clusterInfo  :=  getClusterInfo (clusterID , clusterName )
111+ 
112+ 	createdVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
113+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_FIXED_DEFERRAL ,
114+ 	}
115+ 	updatedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
116+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_30_DAYS ,
117+ 	}
118+ 	deletedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
119+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_NOT_DEFERRED ,
120+ 	}
121+ 
122+ 	// Create 
123+ 	s .EXPECT ().CreateCluster (gomock .Any (), gomock .Any ()).
124+ 		Return (clusterInfo , nil , nil )
125+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
126+ 		Return (clusterInfo , & http.Response {Status : http .StatusText (http .StatusOK )}, nil ).
127+ 		Times (3 )
128+ 	s .EXPECT ().GetBackupConfiguration (gomock .Any (), clusterID ).
129+ 		Return (initialBackupConfig , httpOk , nil ).AnyTimes ()
130+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , createdVersionDeferralInfo ).
131+ 		Return (createdVersionDeferralInfo , nil , nil )
132+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
133+ 		Return (createdVersionDeferralInfo , nil , nil )
134+ 
135+ 	// Update to 30 days 
136+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
137+ 		Return (clusterInfo , nil , nil ).
138+ 		Times (3 )
139+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
140+ 		Return (createdVersionDeferralInfo , nil , nil )
141+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , updatedVersionDeferralInfo ).
142+ 		Return (updatedVersionDeferralInfo , nil , nil )
143+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
144+ 		Return (updatedVersionDeferralInfo , nil , nil ).
145+ 		Times (2 )
146+ 
147+ 	// Delete 
148+ 	s .EXPECT ().DeleteCluster (gomock .Any (), clusterID )
149+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , deletedVersionDeferralInfo )
150+ 
151+ 	testVersionDeferralResourceTransition (t , clusterName , true , "FIXED_DEFERRAL" , "DEFERRAL_30_DAYS" )
152+ }
153+ 
154+ // TestIntegrationVersionDeferral30Days tests the DEFERRAL_30_DAYS policy 
155+ func  TestIntegrationVersionDeferral30Days (t  * testing.T ) {
156+ 	clusterName  :=  fmt .Sprintf ("%s-deferral-30-%s" , tfTestPrefix , GenerateRandomString (4 ))
157+ 	clusterID  :=  uuid .Nil .String ()
158+ 	if  os .Getenv (CockroachAPIKey ) ==  ""  {
159+ 		os .Setenv (CockroachAPIKey , "fake" )
160+ 	}
161+ 
162+ 	ctrl  :=  gomock .NewController (t )
163+ 	s  :=  mock_client .NewMockService (ctrl )
164+ 	defer  HookGlobal (& NewService , func (c  * client.Client ) client.Service  {
165+ 		return  s 
166+ 	})()
167+ 
168+ 	clusterInfo  :=  getClusterInfo (clusterID , clusterName )
169+ 
170+ 	createdVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
171+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_30_DAYS ,
172+ 	}
173+ 	updatedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
174+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_60_DAYS ,
175+ 	}
176+ 	deletedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
177+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_NOT_DEFERRED ,
178+ 	}
179+ 
180+ 	// Create 
181+ 	s .EXPECT ().CreateCluster (gomock .Any (), gomock .Any ()).
182+ 		Return (clusterInfo , nil , nil )
183+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
184+ 		Return (clusterInfo , & http.Response {Status : http .StatusText (http .StatusOK )}, nil ).
185+ 		Times (3 )
186+ 	s .EXPECT ().GetBackupConfiguration (gomock .Any (), clusterID ).
187+ 		Return (initialBackupConfig , httpOk , nil ).AnyTimes ()
188+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , createdVersionDeferralInfo ).
189+ 		Return (createdVersionDeferralInfo , nil , nil )
190+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
191+ 		Return (createdVersionDeferralInfo , nil , nil )
192+ 
193+ 	// Update to 60 days 
194+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
195+ 		Return (clusterInfo , nil , nil ).
196+ 		Times (3 )
197+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
198+ 		Return (createdVersionDeferralInfo , nil , nil )
199+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , updatedVersionDeferralInfo ).
200+ 		Return (updatedVersionDeferralInfo , nil , nil )
201+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
202+ 		Return (updatedVersionDeferralInfo , nil , nil ).
203+ 		Times (2 )
204+ 
205+ 	// Delete 
206+ 	s .EXPECT ().DeleteCluster (gomock .Any (), clusterID )
207+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , deletedVersionDeferralInfo )
208+ 
209+ 	testVersionDeferralResourceTransition (t , clusterName , true , "DEFERRAL_30_DAYS" , "DEFERRAL_60_DAYS" )
114210}
115211
116- func  testVersionDeferralResource (t  * testing.T , clusterName  string , useMock  bool ) {
212+ // TestIntegrationVersionDeferral60Days tests the DEFERRAL_60_DAYS policy 
213+ func  TestIntegrationVersionDeferral60Days (t  * testing.T ) {
214+ 	clusterName  :=  fmt .Sprintf ("%s-deferral-60-%s" , tfTestPrefix , GenerateRandomString (4 ))
215+ 	clusterID  :=  uuid .Nil .String ()
216+ 	if  os .Getenv (CockroachAPIKey ) ==  ""  {
217+ 		os .Setenv (CockroachAPIKey , "fake" )
218+ 	}
219+ 
220+ 	ctrl  :=  gomock .NewController (t )
221+ 	s  :=  mock_client .NewMockService (ctrl )
222+ 	defer  HookGlobal (& NewService , func (c  * client.Client ) client.Service  {
223+ 		return  s 
224+ 	})()
225+ 
226+ 	clusterInfo  :=  getClusterInfo (clusterID , clusterName )
227+ 
228+ 	createdVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
229+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_60_DAYS ,
230+ 	}
231+ 	updatedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
232+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_90_DAYS ,
233+ 	}
234+ 	deletedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
235+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_NOT_DEFERRED ,
236+ 	}
237+ 
238+ 	// Create 
239+ 	s .EXPECT ().CreateCluster (gomock .Any (), gomock .Any ()).
240+ 		Return (clusterInfo , nil , nil )
241+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
242+ 		Return (clusterInfo , & http.Response {Status : http .StatusText (http .StatusOK )}, nil ).
243+ 		Times (3 )
244+ 	s .EXPECT ().GetBackupConfiguration (gomock .Any (), clusterID ).
245+ 		Return (initialBackupConfig , httpOk , nil ).AnyTimes ()
246+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , createdVersionDeferralInfo ).
247+ 		Return (createdVersionDeferralInfo , nil , nil )
248+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
249+ 		Return (createdVersionDeferralInfo , nil , nil )
250+ 
251+ 	// Update to 90 days 
252+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
253+ 		Return (clusterInfo , nil , nil ).
254+ 		Times (3 )
255+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
256+ 		Return (createdVersionDeferralInfo , nil , nil )
257+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , updatedVersionDeferralInfo ).
258+ 		Return (updatedVersionDeferralInfo , nil , nil )
259+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
260+ 		Return (updatedVersionDeferralInfo , nil , nil ).
261+ 		Times (2 )
262+ 
263+ 	// Delete 
264+ 	s .EXPECT ().DeleteCluster (gomock .Any (), clusterID )
265+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , deletedVersionDeferralInfo )
266+ 
267+ 	testVersionDeferralResourceTransition (t , clusterName , true , "DEFERRAL_60_DAYS" , "DEFERRAL_90_DAYS" )
268+ }
269+ 
270+ // TestIntegrationVersionDeferral90Days tests the DEFERRAL_90_DAYS policy 
271+ func  TestIntegrationVersionDeferral90Days (t  * testing.T ) {
272+ 	clusterName  :=  fmt .Sprintf ("%s-deferral-90-%s" , tfTestPrefix , GenerateRandomString (4 ))
273+ 	clusterID  :=  uuid .Nil .String ()
274+ 	if  os .Getenv (CockroachAPIKey ) ==  ""  {
275+ 		os .Setenv (CockroachAPIKey , "fake" )
276+ 	}
277+ 
278+ 	ctrl  :=  gomock .NewController (t )
279+ 	s  :=  mock_client .NewMockService (ctrl )
280+ 	defer  HookGlobal (& NewService , func (c  * client.Client ) client.Service  {
281+ 		return  s 
282+ 	})()
283+ 
284+ 	clusterInfo  :=  getClusterInfo (clusterID , clusterName )
285+ 
286+ 	createdVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
287+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_DEFERRAL_90_DAYS ,
288+ 	}
289+ 	updatedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
290+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_NOT_DEFERRED ,
291+ 	}
292+ 	deletedVersionDeferralInfo  :=  & client.ClusterVersionDeferral {
293+ 		DeferralPolicy : client .CLUSTERVERSIONDEFERRALPOLICYTYPE_NOT_DEFERRED ,
294+ 	}
295+ 
296+ 	// Create 
297+ 	s .EXPECT ().CreateCluster (gomock .Any (), gomock .Any ()).
298+ 		Return (clusterInfo , nil , nil )
299+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
300+ 		Return (clusterInfo , & http.Response {Status : http .StatusText (http .StatusOK )}, nil ).
301+ 		Times (3 )
302+ 	s .EXPECT ().GetBackupConfiguration (gomock .Any (), clusterID ).
303+ 		Return (initialBackupConfig , httpOk , nil ).AnyTimes ()
304+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , createdVersionDeferralInfo ).
305+ 		Return (createdVersionDeferralInfo , nil , nil )
306+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
307+ 		Return (createdVersionDeferralInfo , nil , nil )
308+ 
309+ 	// Update to NOT_DEFERRED 
310+ 	s .EXPECT ().GetCluster (gomock .Any (), clusterID ).
311+ 		Return (clusterInfo , nil , nil ).
312+ 		Times (3 )
313+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
314+ 		Return (createdVersionDeferralInfo , nil , nil )
315+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , updatedVersionDeferralInfo ).
316+ 		Return (updatedVersionDeferralInfo , nil , nil )
317+ 	s .EXPECT ().GetClusterVersionDeferral (gomock .Any (), clusterID ).
318+ 		Return (updatedVersionDeferralInfo , nil , nil ).
319+ 		Times (2 )
320+ 
321+ 	// Delete 
322+ 	s .EXPECT ().DeleteCluster (gomock .Any (), clusterID )
323+ 	s .EXPECT ().SetClusterVersionDeferral (gomock .Any (), clusterID , deletedVersionDeferralInfo )
324+ 
325+ 	testVersionDeferralResourceTransition (t , clusterName , true , "DEFERRAL_90_DAYS" , "NOT_DEFERRED" )
326+ }
327+ 
328+ func  testVersionDeferralResourceTransition (t  * testing.T , clusterName  string , useMock  bool , from  string , to  string ) {
117329	var  (
118330		clusterResourceName          =  "cockroach_cluster.test" 
119331		versionDeferralResourceName  =  "cockroach_version_deferral.test" 
@@ -125,17 +337,17 @@ func testVersionDeferralResource(t *testing.T, clusterName string, useMock bool)
125337		ProtoV6ProviderFactories : testAccProtoV6ProviderFactories ,
126338		Steps : []resource.TestStep {
127339			{
128- 				Config : getTestVersionDeferralResourceCreateConfig (clusterName ),
340+ 				Config : getTestVersionDeferralConfig (clusterName ,  from ),
129341				Check : resource .ComposeTestCheckFunc (
130342					testCheckCockroachClusterExists (clusterResourceName ),
131- 					resource .TestCheckResourceAttr (versionDeferralResourceName , "deferral_policy" , "FIXED_DEFERRAL" ),
343+ 					resource .TestCheckResourceAttr (versionDeferralResourceName , "deferral_policy" , from ),
132344				),
133345			},
134346			{
135- 				Config : getTestVersionDeferralResourceUpdateConfig (clusterName ),
347+ 				Config : getTestVersionDeferralConfig (clusterName ,  to ),
136348				Check : resource .ComposeTestCheckFunc (
137349					testCheckCockroachClusterExists (clusterResourceName ),
138- 					resource .TestCheckResourceAttr (versionDeferralResourceName , "deferral_policy" , "NOT_DEFERRED" ),
350+ 					resource .TestCheckResourceAttr (versionDeferralResourceName , "deferral_policy" , to ),
139351				),
140352			},
141353			{
@@ -147,28 +359,33 @@ func testVersionDeferralResource(t *testing.T, clusterName string, useMock bool)
147359	})
148360}
149361
150- func  getTestVersionDeferralResourceCreateConfig (name  string ) string  {
151- 	return  fmt .Sprintf (` 
152- resource "cockroach_cluster" "test" { 
153-   name           = "%s" 
154-   cloud_provider = "GCP" 
155-   dedicated = { 
156-     storage_gib  = 35 
157-   	num_virtual_cpus = 4 
158-   } 
159-   regions = [{ 
160-     name = "us-east1" 
161-     node_count: 3 
162-   }] 
163- } 
164- resource "cockroach_version_deferral" "test" { 
165-   id              = cockroach_cluster.test.id 
166-   deferral_policy = "FIXED_DEFERRAL" 
167- } 
168- ` , name )
362+ func  getClusterInfo (clusterID  string , clusterName  string ) * client.Cluster  {
363+ 	clusterInfo  :=  & client.Cluster {
364+ 		Id :               clusterID ,
365+ 		Name :             clusterName ,
366+ 		CockroachVersion : "v22.2.0" ,
367+ 		Plan :             "ADVANCED" ,
368+ 		CloudProvider :    "GCP" ,
369+ 		State :            "CREATED" ,
370+ 		Config : client.ClusterConfig {
371+ 			Dedicated : & client.DedicatedHardwareConfig {
372+ 				MachineType :    "m5.xlarge" ,
373+ 				NumVirtualCpus : 4 ,
374+ 				StorageGib :     35 ,
375+ 				MemoryGib :      8 ,
376+ 			},
377+ 		},
378+ 		Regions : []client.Region {
379+ 			{
380+ 				Name :      "us-east1" ,
381+ 				NodeCount : 3 ,
382+ 			},
383+ 		},
384+ 	}
385+ 	return  clusterInfo 
169386}
170387
171- func  getTestVersionDeferralResourceUpdateConfig (name  string ) string  {
388+ func  getTestVersionDeferralConfig (name   string ,  policy  string ) string  {
172389	return  fmt .Sprintf (` 
173390resource "cockroach_cluster" "test" { 
174391  name           = "%s" 
@@ -184,7 +401,7 @@ resource "cockroach_cluster" "test" {
184401} 
185402resource "cockroach_version_deferral" "test" { 
186403  id              = cockroach_cluster.test.id 
187-   deferral_policy = "NOT_DEFERRED " 
404+   deferral_policy = "%s " 
188405} 
189- ` , name )
406+ ` , name ,  policy )
190407}
0 commit comments