Skip to content

Commit 284a083

Browse files
committed
Acceptance test for provisioner resource
Signed-off-by: Shobha M <mshobha@vmware.com>
1 parent eaf6b42 commit 284a083

5 files changed

+281
-10
lines changed

internal/resources/provisioner/constants.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ SPDX-License-Identifier: MPL-2.0
66
package provisioner
77

88
const (
9-
ResourceName = "tanzu-mission-control_provisioner"
9+
ResourceName = "tanzu-mission-control_provisioner"
10+
resourceVar = "provisioner_resource"
11+
dataSourceVar = "provisioner_data_source"
1012

1113
nameKey = "name"
1214
orgIDKey = "org_id"
1315
managementClusterNameKey = "management_cluster"
16+
eksManagementCluster = "eks"
1417
)

internal/resources/provisioner/data_source_provisioner.go

+25-9
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,34 @@ func dataSourceProvisionerRead(ctx context.Context, d *schema.ResourceData, m in
5555
return diag.FromErr(errors.Wrapf(err, "Couldn't read Tanzu Mission Control provisioner configurations."))
5656
}
5757

58-
resp, err := config.TMCConnection.ProvisionerResourceService.ProvisionerResourceServiceList(model.FullName)
59-
if err != nil {
60-
if clienterrors.IsNotFoundError(err) && !helper.IsDataRead(ctx) {
61-
_ = schema.RemoveFromState(d, m)
62-
return
58+
if model.FullName.Name == "" {
59+
resp, err := config.TMCConnection.ProvisionerResourceService.ProvisionerResourceServiceList(model.FullName)
60+
if err != nil {
61+
if clienterrors.IsNotFoundError(err) && !helper.IsDataRead(ctx) {
62+
_ = schema.RemoveFromState(d, m)
63+
return
64+
}
65+
}
66+
67+
for i := range resp.Provisioners {
68+
d.SetId(resp.Provisioners[i].Meta.UID)
69+
70+
if err := d.Set(common.MetaKey, common.FlattenMeta(resp.Provisioners[i].Meta)); err != nil {
71+
return diag.FromErr(err)
72+
}
73+
}
74+
} else {
75+
resp, err := config.TMCConnection.ProvisionerResourceService.ProvisionerResourceServiceGet(model.FullName)
76+
if err != nil {
77+
if clienterrors.IsNotFoundError(err) && !helper.IsDataRead(ctx) {
78+
_ = schema.RemoveFromState(d, m)
79+
return
80+
}
6381
}
64-
}
6582

66-
for i := range resp.Provisioners {
67-
d.SetId(resp.Provisioners[i].Meta.UID)
83+
d.SetId(resp.Provisioner.Meta.UID)
6884

69-
if err := d.Set(common.MetaKey, common.FlattenMeta(resp.Provisioners[i].Meta)); err != nil {
85+
if err := d.Set(common.MetaKey, common.FlattenMeta(resp.Provisioner.Meta)); err != nil {
7086
return diag.FromErr(err)
7187
}
7288
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
//go:build provisioner
2+
// +build provisioner
3+
4+
/*
5+
Copyright © 2023 VMware, Inc. All Rights Reserved.
6+
SPDX-License-Identifier: MPL-2.0
7+
*/
8+
9+
package provisioner
10+
11+
import (
12+
"fmt"
13+
"testing"
14+
15+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
18+
19+
testhelper "github.com/vmware/terraform-provider-tanzu-mission-control/internal/resources/testing"
20+
)
21+
22+
func TestAcceptanceForProvisionerDataSource(t *testing.T) {
23+
var provider = initTestProvider(t)
24+
25+
provisionerResourceName := fmt.Sprintf("%s.%s", ResourceName, resourceVar)
26+
provisionerName := acctest.RandomWithPrefix("tf-prv-test")
27+
28+
provisionerDataSource := fmt.Sprintf("data.%s.%s", ResourceName, dataSourceVar)
29+
30+
resource.Test(t, resource.TestCase{
31+
PreCheck: testhelper.TestPreCheck(t),
32+
ProviderFactories: testhelper.GetTestProviderFactories(provider),
33+
CheckDestroy: nil,
34+
Steps: []resource.TestStep{
35+
{
36+
Config: getTestProvisionerWithDataSourceConfigValue(provisionerName),
37+
Check: resource.ComposeTestCheckFunc(
38+
checkDataSourceAttributes(provisionerDataSource, provisionerResourceName),
39+
),
40+
},
41+
},
42+
})
43+
}
44+
45+
func getTestProvisionerWithDataSourceConfigValue(prvName string) string {
46+
return fmt.Sprintf(`
47+
resource "%s" "%s" {
48+
name = "%s"
49+
management_cluster = "%s"
50+
%s
51+
}
52+
53+
data "%s" "%s" {
54+
name = tanzu-mission-control_provisioner.provisioner_resource.name
55+
management_cluster = tanzu-mission-control_provisioner.provisioner_resource.management_cluster
56+
}
57+
`, ResourceName, resourceVar, prvName, eksManagementCluster, testhelper.MetaTemplate, ResourceName, dataSourceVar)
58+
}
59+
60+
func checkDataSourceAttributes(dataSourceName, resourceName string) resource.TestCheckFunc {
61+
var check = []resource.TestCheckFunc{
62+
verifyProvisionerDataSource(dataSourceName),
63+
resource.TestCheckResourceAttrPair(dataSourceName, "name", resourceName, "name"),
64+
resource.TestCheckResourceAttrSet(dataSourceName, "id"),
65+
}
66+
67+
check = append(check, metaDataSourceAttributeCheck(dataSourceName, resourceName)...)
68+
69+
return resource.ComposeTestCheckFunc(check...)
70+
}
71+
72+
func verifyProvisionerDataSource(name string) resource.TestCheckFunc {
73+
return func(s *terraform.State) error {
74+
_, ok := s.RootModule().Resources[name]
75+
if !ok {
76+
return fmt.Errorf("root module does not have provisioner resource %s", name)
77+
}
78+
79+
return nil
80+
}
81+
}
82+
83+
func metaDataSourceAttributeCheck(dataSourceName, resourceName string) []resource.TestCheckFunc {
84+
return []resource.TestCheckFunc{
85+
resource.TestCheckResourceAttrPair(dataSourceName, "meta.0.description", resourceName, "meta.0.description"),
86+
resource.TestCheckResourceAttrPair(dataSourceName, "meta.0.labels.key1", resourceName, "meta.0.labels.key1"),
87+
resource.TestCheckResourceAttrPair(dataSourceName, "meta.0.labels.key2", resourceName, "meta.0.labels.key2"),
88+
resource.TestCheckResourceAttrSet(dataSourceName, "meta.0.uid"),
89+
}
90+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//go:build provisioner
2+
// +build provisioner
3+
4+
/*
5+
Copyright © 2023 VMware, Inc. All Rights Reserved.
6+
SPDX-License-Identifier: MPL-2.0
7+
*/
8+
9+
package provisioner
10+
11+
import (
12+
"testing"
13+
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
"github.com/stretchr/testify/require"
16+
17+
"github.com/vmware/terraform-provider-tanzu-mission-control/internal/authctx"
18+
)
19+
20+
func initTestProvider(t *testing.T) *schema.Provider {
21+
testAccProvider := &schema.Provider{
22+
Schema: authctx.ProviderAuthSchema(),
23+
ResourcesMap: map[string]*schema.Resource{
24+
ResourceName: ResourceProvisioner(),
25+
},
26+
DataSourcesMap: map[string]*schema.Resource{
27+
ResourceName: DataSourceProvisioner(),
28+
},
29+
ConfigureContextFunc: authctx.ProviderConfigureContext,
30+
}
31+
if err := testAccProvider.InternalValidate(); err != nil {
32+
require.NoError(t, err)
33+
}
34+
35+
return testAccProvider
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
//go:build provisioner
2+
// +build provisioner
3+
4+
/*
5+
Copyright © 2023 VMware, Inc. All Rights Reserved.
6+
SPDX-License-Identifier: MPL-2.0
7+
*/
8+
9+
package provisioner
10+
11+
import (
12+
"fmt"
13+
"os"
14+
"testing"
15+
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
19+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
20+
"github.com/pkg/errors"
21+
22+
"github.com/vmware/terraform-provider-tanzu-mission-control/internal/authctx"
23+
"github.com/vmware/terraform-provider-tanzu-mission-control/internal/client/proxy"
24+
provisioner "github.com/vmware/terraform-provider-tanzu-mission-control/internal/models/provisioner"
25+
testhelper "github.com/vmware/terraform-provider-tanzu-mission-control/internal/resources/testing"
26+
)
27+
28+
func TestAcceptanceForProvisionerResource(t *testing.T) {
29+
var provider = initTestProvider(t)
30+
31+
provisionerResourceName := fmt.Sprintf("%s.%s", ResourceName, resourceVar)
32+
provisionerName := acctest.RandomWithPrefix("tf-prv-test")
33+
34+
resource.Test(t, resource.TestCase{
35+
PreCheck: testhelper.TestPreCheck(t),
36+
ProviderFactories: testhelper.GetTestProviderFactories(provider),
37+
CheckDestroy: nil,
38+
Steps: []resource.TestStep{
39+
{
40+
Config: getTestProvisionerWithResourceConfigValue(provisionerName),
41+
Check: resource.ComposeTestCheckFunc(
42+
checkResourceAttributes(provider, provisionerResourceName, provisionerName),
43+
),
44+
},
45+
},
46+
})
47+
}
48+
49+
func checkResourceAttributes(provider *schema.Provider, resourceName, prvName string) resource.TestCheckFunc {
50+
var check = []resource.TestCheckFunc{
51+
verifyProvisionerResourceCreation(provider, resourceName, prvName),
52+
}
53+
54+
check = append(check, metaResourceAttributeCheck(resourceName)...)
55+
56+
return resource.ComposeTestCheckFunc(check...)
57+
}
58+
59+
func getTestProvisionerWithResourceConfigValue(prvName string) string {
60+
return fmt.Sprintf(`
61+
resource "%s" "%s" {
62+
name = "%s"
63+
management_cluster = "%s"
64+
%s
65+
}
66+
`, ResourceName, resourceVar, prvName, eksManagementCluster, testhelper.MetaTemplate)
67+
}
68+
69+
func verifyProvisionerResourceCreation(
70+
provider *schema.Provider,
71+
resourceName string,
72+
provisionerName string,
73+
) resource.TestCheckFunc {
74+
return func(s *terraform.State) error {
75+
if provider == nil {
76+
return fmt.Errorf("provider not initialised")
77+
}
78+
79+
rs, ok := s.RootModule().Resources[resourceName]
80+
if !ok {
81+
return fmt.Errorf("not found resource: %s", resourceName)
82+
}
83+
84+
if rs.Primary.ID == "" {
85+
return fmt.Errorf("ID not set, resource: %s", resourceName)
86+
}
87+
88+
config := authctx.TanzuContext{
89+
ServerEndpoint: os.Getenv(authctx.ServerEndpointEnvVar),
90+
Token: os.Getenv(authctx.VMWCloudAPITokenEnvVar),
91+
VMWCloudEndPoint: os.Getenv(authctx.VMWCloudEndpointEnvVar),
92+
TLSConfig: &proxy.TLSConfig{},
93+
}
94+
95+
err := config.Setup()
96+
if err != nil {
97+
return errors.Wrap(err, "unable to set the context")
98+
}
99+
100+
fn := &provisioner.VmwareTanzuManageV1alpha1ManagementclusterProvisionerFullName{
101+
ManagementClusterName: "eks",
102+
Name: provisionerName,
103+
}
104+
105+
resp, err := config.TMCConnection.ProvisionerResourceService.ProvisionerResourceServiceGet(fn)
106+
if err != nil {
107+
return errors.Wrap(err, "provisioner resource not found")
108+
}
109+
110+
if resp == nil {
111+
return errors.Wrapf(err, "provisioner resource is empty, resource: %s", resourceName)
112+
}
113+
114+
return nil
115+
}
116+
}
117+
118+
func metaResourceAttributeCheck(resourceName string) []resource.TestCheckFunc {
119+
return []resource.TestCheckFunc{
120+
resource.TestCheckResourceAttr(resourceName, "meta.#", "1"),
121+
resource.TestCheckResourceAttr(resourceName, "meta.0.description", "resource with description"),
122+
resource.TestCheckResourceAttr(resourceName, "meta.0.labels.key1", "value1"),
123+
resource.TestCheckResourceAttr(resourceName, "meta.0.labels.key2", "value2"),
124+
resource.TestCheckResourceAttrSet(resourceName, "meta.0.uid"),
125+
}
126+
}

0 commit comments

Comments
 (0)