@@ -6,28 +6,35 @@ import (
66
77 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
88 "github.com/hashicorp/terraform-plugin-testing/terraform"
9- "github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
9+ k8sSDK "github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
1010 "github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
1111 "github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
12+ "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/k8s"
13+ "github.com/stretchr/testify/assert"
14+ "github.com/stretchr/testify/require"
1215)
1316
1417func TestAccDataSourceVersion_Basic (t * testing.T ) {
1518 tt := acctest .NewTestTools (t )
1619 defer tt .Cleanup ()
1720
21+ version := "1.32.2"
22+ versionWithoutPatch := "1.32"
23+
1824 resource .ParallelTest (t , resource.TestCase {
1925 ProtoV6ProviderFactories : tt .ProviderFactories ,
2026 CheckDestroy : testAccCheckK8SClusterDestroy (tt ),
2127 Steps : []resource.TestStep {
2228 {
23- Config : `
29+ Config : fmt . Sprintf ( `
2430 data "scaleway_k8s_version" "by_name" {
25- name = "1.32.2"
31+ name = %q
2632 }
27- ` ,
33+ ` , version ),
2834 Check : resource .ComposeTestCheckFunc (
2935 testAccCheckK8SVersionExists (tt , "data.scaleway_k8s_version.by_name" ),
30- resource .TestCheckResourceAttrSet ("data.scaleway_k8s_version.by_name" , "name" ),
36+ resource .TestCheckResourceAttr ("data.scaleway_k8s_version.by_name" , "name" , version ),
37+ resource .TestCheckResourceAttr ("data.scaleway_k8s_version.by_name" , "major_minor_only" , versionWithoutPatch ),
3138 resource .TestCheckResourceAttr ("data.scaleway_k8s_version.by_name" , "available_cnis.#" , "4" ),
3239 resource .TestCheckResourceAttr ("data.scaleway_k8s_version.by_name" , "available_cnis.0" , "cilium" ),
3340 resource .TestCheckResourceAttr ("data.scaleway_k8s_version.by_name" , "available_cnis.1" , "calico" ),
@@ -75,6 +82,42 @@ func TestAccDataSourceVersion_Latest(t *testing.T) {
7582 })
7683}
7784
85+ func TestAccDataSourceVersion_WithAutoUpgrade (t * testing.T ) {
86+ tt := acctest .NewTestTools (t )
87+ defer tt .Cleanup ()
88+
89+ latestK8SVersion := testAccK8SClusterGetLatestK8SVersion (tt )
90+
91+ latestK8SVersionWithoutPatch , err := k8s .VersionNameWithoutPatch (latestK8SVersion )
92+ if err != nil {
93+ t .Fatal (err )
94+ }
95+
96+ resource .ParallelTest (t , resource.TestCase {
97+ ProtoV6ProviderFactories : tt .ProviderFactories ,
98+ CheckDestroy : testAccCheckK8SClusterDestroy (tt ),
99+ Steps : []resource.TestStep {
100+ {
101+ Config : `
102+ data "scaleway_k8s_version" "latest" {
103+ name = "latest"
104+ }
105+ ` + testAccCheckK8SClusterAutoUpgrade (true , "any" , 0 , "data.scaleway_k8s_version.latest.major_minor_only" ),
106+ Check : resource .ComposeTestCheckFunc (
107+ testAccCheckK8SVersionExists (tt , "data.scaleway_k8s_version.latest" ),
108+ testAccCheckK8SClusterExists (tt , "scaleway_k8s_cluster.auto_upgrade" ),
109+ resource .TestCheckResourceAttr ("data.scaleway_k8s_version.latest" , "name" , latestK8SVersion ),
110+ resource .TestCheckResourceAttr ("data.scaleway_k8s_version.latest" , "major_minor_only" , latestK8SVersionWithoutPatch ),
111+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.auto_upgrade" , "version" , latestK8SVersionWithoutPatch ),
112+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.auto_upgrade" , "auto_upgrade.0.enable" , "true" ),
113+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.auto_upgrade" , "auto_upgrade.0.maintenance_window_day" , "any" ),
114+ resource .TestCheckResourceAttr ("scaleway_k8s_cluster.auto_upgrade" , "auto_upgrade.0.maintenance_window_start_hour" , "0" ),
115+ ),
116+ },
117+ },
118+ })
119+ }
120+
78121func testAccCheckK8SVersionExists (tt * acctest.TestTools , n string ) resource.TestCheckFunc {
79122 return func (s * terraform.State ) error {
80123 rs , ok := s .RootModule ().Resources [n ]
@@ -88,9 +131,9 @@ func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.Test
88131 return err
89132 }
90133
91- k8sAPI := k8s .NewAPI (tt .Meta .ScwClient ())
134+ k8sAPI := k8sSDK .NewAPI (tt .Meta .ScwClient ())
92135
93- _ , err = k8sAPI .GetVersion (& k8s .GetVersionRequest {
136+ _ , err = k8sAPI .GetVersion (& k8sSDK .GetVersionRequest {
94137 Region : region ,
95138 VersionName : name ,
96139 })
@@ -101,3 +144,35 @@ func testAccCheckK8SVersionExists(tt *acctest.TestTools, n string) resource.Test
101144 return nil
102145 }
103146}
147+
148+ func TestVersionNameWithoutPatch (t * testing.T ) {
149+ tt := acctest .NewTestTools (t )
150+ defer tt .Cleanup ()
151+
152+ t .Run ("ok-without-prefix" , func (t * testing.T ) {
153+ version := "1.32.3"
154+ expected := "1.32"
155+ actual , err := k8s .VersionNameWithoutPatch (version )
156+ require .NoError (t , err )
157+ assert .Equal (t , expected , actual )
158+ })
159+ t .Run ("ok-with-prefix" , func (t * testing.T ) {
160+ version := "v2.57.9"
161+ expected := "v2.57"
162+ actual , err := k8s .VersionNameWithoutPatch (version )
163+ require .NoError (t , err )
164+ assert .Equal (t , expected , actual )
165+ })
166+ t .Run ("errors" , func (t * testing.T ) {
167+ versionsToTest := []string {
168+ "1.32.3.4" ,
169+ "1.32" ,
170+ "" ,
171+ }
172+ for _ , version := range versionsToTest {
173+ expectedError := "version name must contain 3 parts"
174+ _ , err := k8s .VersionNameWithoutPatch (version )
175+ assert .ErrorContains (t , err , expectedError )
176+ }
177+ })
178+ }
0 commit comments