Skip to content

Commit 20342a8

Browse files
authored
fix: add CVM,SG,MySQL,EKS test sweepers (#873)
1 parent 67c6519 commit 20342a8

6 files changed

+207
-7
lines changed

tencentcloud/resource_tc_eks_cluster_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,43 @@ import (
55
"fmt"
66
"testing"
77

8+
tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
9+
810
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
911
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1012
)
1113

14+
func init() {
15+
resource.AddTestSweepers("tencentcloud_eks_cluster", &resource.Sweeper{
16+
Name: "tencentcloud_eks_cluster",
17+
F: testSweepEksClusters,
18+
})
19+
}
20+
21+
func testSweepEksClusters(region string) error {
22+
client, err := sharedClientForRegion(region)
23+
logId := getLogId(contextNil)
24+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
25+
if err != nil {
26+
return err
27+
}
28+
service := EksService{client: client.(*TencentCloudClient).apiV3Conn}
29+
clusters, err := service.DescribeEKSClusters(ctx, "", "tf-eks-test")
30+
if err != nil {
31+
return err
32+
}
33+
for _, c := range clusters {
34+
id := c.ClusterId
35+
req := tke.NewDeleteEKSClusterRequest()
36+
req.ClusterId = &id
37+
err := service.DeleteEksCluster(ctx, req)
38+
if err != nil {
39+
return err
40+
}
41+
}
42+
return nil
43+
}
44+
1245
func TestAccTencentCloudEKSCluster_basic(t *testing.T) {
1346
t.Parallel()
1447

tencentcloud/resource_tc_instance.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
12011201
if errRet != nil {
12021202
return retryError(errRet, InternalError)
12031203
}
1204-
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
1204+
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
12051205
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
12061206
}
12071207
return nil
@@ -1226,7 +1226,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
12261226
if errRet != nil {
12271227
return retryError(errRet, InternalError)
12281228
}
1229-
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
1229+
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
12301230
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
12311231
}
12321232
return nil
@@ -1247,7 +1247,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
12471247
if errRet != nil {
12481248
return retryError(errRet, InternalError)
12491249
}
1250-
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
1250+
if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
12511251
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
12521252
}
12531253
return nil
@@ -1364,7 +1364,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
13641364
}
13651365
// Modifying instance type need restart the instance
13661366
// so status of CVM must be running when running flag is true
1367-
if instance != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
1367+
if instance != nil && instance.LatestOperationState != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
13681368
(flag && *instance.InstanceState != CVM_STATUS_RUNNING)) {
13691369
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
13701370
}
@@ -1390,7 +1390,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
13901390
}
13911391
// Modifying instance type need restart the instance
13921392
// so status of CVM must be running when running flag is true
1393-
if instance != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
1393+
if instance != nil && instance.LatestOperationState != nil && (*instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING ||
13941394
(flag && *instance.InstanceState != CVM_STATUS_RUNNING)) {
13951395
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
13961396
}

tencentcloud/resource_tc_instance_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,7 @@ func TestAccTencentCloudInstanceWithSpotpaid(t *testing.T) {
467467
})
468468
}
469469

470+
/* Skip prepaid for now
470471
func TestAccTencentCloudInstanceWithPrepaidChargeType(t *testing.T) {
471472
t.Parallel()
472473
@@ -494,6 +495,8 @@ func TestAccTencentCloudInstanceWithPrepaidChargeType(t *testing.T) {
494495
})
495496
}
496497
498+
*/
499+
497500
func testAccCheckTencentCloudInstanceExists(n string) resource.TestCheckFunc {
498501
return func(s *terraform.State) error {
499502
logId := getLogId(contextNil)

tencentcloud/resource_tc_kubernetes_addon_attachment_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
8484
}
8585
8686
resource "tencentcloud_kubernetes_addon_attachment" "cbs" {
87+
cluster_id = tencentcloud_kubernetes_cluster.managed_cluster.id
8788
name = "cbs"
8889
version = "1.0.0"
8990
}

tencentcloud/resource_tc_mysql_instance_test.go

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,97 @@ import (
55
"fmt"
66
"testing"
77

8+
cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
9+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
10+
811
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
912
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1013
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1114
)
1215

1316
const TestAccTencentCloudMysqlMasterInstance_availability_zone = "ap-guangzhou-3"
17+
const TestAccTencentCloudMysqlInstanceName = "testAccMysql"
18+
const TestAccTencentCloudMysqlInstanceNameVersion1 = "testAccMysql-version1"
19+
const TestAccTencentCloudMysqlInstanceNamePrepaid = "testAccMysqlPrepaid"
20+
21+
func init() {
22+
resource.AddTestSweepers("tencentcloud_mysql_instance", &resource.Sweeper{
23+
Name: "tencentcloud_mysql_instance",
24+
F: testSweepMySQLInstance,
25+
})
26+
}
27+
28+
func testSweepMySQLInstance(region string) error {
29+
logId := getLogId(contextNil)
30+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
31+
cli, err := sharedClientForRegion(region)
32+
if err != nil {
33+
return err
34+
}
35+
client := cli.(*TencentCloudClient).apiV3Conn
36+
service := MysqlService{client: client}
37+
38+
request := cdb.NewDescribeDBInstancesRequest()
39+
request.InstanceNames = []*string{
40+
helper.String(TestAccTencentCloudMysqlInstanceName),
41+
helper.String(TestAccTencentCloudMysqlInstanceNameVersion1),
42+
helper.String(TestAccTencentCloudMysqlInstanceNamePrepaid),
43+
}
44+
request.Limit = helper.IntUint64(2000)
45+
46+
response, err := client.UseMysqlClient().DescribeDBInstances(request)
47+
if err != nil {
48+
return err
49+
}
50+
51+
if len(response.Response.Items) == 0 {
52+
return nil
53+
}
54+
55+
for _, v := range response.Response.Items {
56+
id := *v.InstanceId
57+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
58+
_, err := service.IsolateDBInstance(ctx, id)
59+
if err != nil {
60+
//for the pay order wait
61+
return retryError(err, InternalError)
62+
}
63+
return nil
64+
})
65+
if err != nil {
66+
return err
67+
}
68+
69+
err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError {
70+
mysqlInfo, err := service.DescribeDBInstanceById(ctx, id)
71+
72+
if err != nil {
73+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
74+
return resource.RetryableError(err)
75+
} else {
76+
return resource.NonRetryableError(err)
77+
}
78+
}
79+
if mysqlInfo == nil {
80+
return nil
81+
}
82+
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATING || *mysqlInfo.Status == MYSQL_STATUS_RUNNING {
83+
return resource.RetryableError(fmt.Errorf("mysql isolating."))
84+
}
85+
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATED {
86+
return nil
87+
}
88+
return resource.NonRetryableError(fmt.Errorf("after IsolateDBInstance mysql Status is %d", *mysqlInfo.Status))
89+
})
90+
91+
err = service.OfflineIsolatedInstances(ctx, id)
92+
if err != nil {
93+
return err
94+
}
95+
}
96+
97+
return nil
98+
}
1499

15100
func TestAccTencentCloudMysqlMasterInstance_fullslave(t *testing.T) {
16101
t.Parallel()
@@ -23,7 +108,7 @@ func TestAccTencentCloudMysqlMasterInstance_fullslave(t *testing.T) {
23108
Config: testAccMysqlMasterInstance_fullslave(),
24109
Check: resource.ComposeAggregateTestCheckFunc(
25110
testAccCheckMysqlMasterInstanceExists("tencentcloud_mysql_instance.mysql_master"),
26-
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", "testAccMysql"),
111+
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", TestAccTencentCloudMysqlInstanceName),
27112
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "slave_deploy_mode", "0"),
28113
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "slave_sync_mode", "2"),
29114
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "availability_zone", TestAccTencentCloudMysqlMasterInstance_availability_zone),
@@ -46,7 +131,7 @@ func TestAccTencentCloudMysqlMasterInstance_basic_and_update(t *testing.T) {
46131
Config: testAccMysqlMasterInstance_basic(),
47132
Check: resource.ComposeAggregateTestCheckFunc(
48133
testAccCheckMysqlMasterInstanceExists("tencentcloud_mysql_instance.mysql_master"),
49-
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", "testAccMysql"),
134+
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "instance_name", TestAccTencentCloudMysqlInstanceName),
50135
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "mem_size", "1000"),
51136
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "volume_size", "50"),
52137
resource.TestCheckResourceAttr("tencentcloud_mysql_instance.mysql_master", "intranet_port", "3360"),

tencentcloud/resource_tc_security_group_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,90 @@ package tencentcloud
33
import (
44
"context"
55
"fmt"
6+
"log"
7+
"strings"
68
"testing"
79

10+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
11+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
12+
813
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
914
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1015
)
1116

17+
func init() {
18+
resource.AddTestSweepers("tencentcloud_security_group", &resource.Sweeper{
19+
Name: "tencentcloud_security_group",
20+
F: testSweepSecurityGroups,
21+
})
22+
}
23+
24+
func testSweepSecurityGroups(region string) error {
25+
const NamePrefix = "ci-temp-test-sg"
26+
logId := getLogId(contextNil)
27+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
28+
29+
sharedClient, err := sharedClientForRegion(region)
30+
if err != nil {
31+
return fmt.Errorf("getting tencentcloud client error: %s", err.Error())
32+
}
33+
client := sharedClient.(*TencentCloudClient)
34+
service := VpcService{
35+
client: client.apiV3Conn,
36+
}
37+
38+
sgs, err := service.DescribeSecurityGroups(ctx, nil, helper.String(NamePrefix), nil, nil)
39+
var sgIds []*string
40+
var candidates []string
41+
var referredSgs = make(map[string][]*string, 0)
42+
43+
if err != nil {
44+
return fmt.Errorf("DescribeSecurityGroups error: %s", err.Error())
45+
}
46+
47+
for _, v := range sgs {
48+
name := *v.SecurityGroupName
49+
id := *v.SecurityGroupId
50+
sgIds = append(sgIds, v.SecurityGroupId)
51+
if !strings.HasPrefix(name, NamePrefix) {
52+
continue
53+
}
54+
candidates = append(candidates, id)
55+
56+
}
57+
58+
refReq := vpc.NewDescribeSecurityGroupReferencesRequest()
59+
refReq.SecurityGroupIds = sgIds
60+
61+
refRes, err := client.apiV3Conn.UseVpcClient().DescribeSecurityGroupReferences(refReq)
62+
if err != nil {
63+
return fmt.Errorf("DescribeSecurityGroupReferences error: %s", err.Error())
64+
}
65+
for _, v := range refRes.Response.ReferredSecurityGroupSet {
66+
if len(v.ReferredSecurityGroupIds) > 0 {
67+
referredSgs[*v.SecurityGroupId] = v.ReferredSecurityGroupIds
68+
}
69+
}
70+
71+
res, err := service.DescribeSecurityGroupsAssociate(ctx, candidates)
72+
if err != nil {
73+
return fmt.Errorf("DescribeSecurityGroupsAssociate error: %s", err.Error())
74+
}
75+
76+
for _, v := range res {
77+
id := *v.SecurityGroupId
78+
79+
if *v.TotalCount > 0 || len(referredSgs[id]) > 0 {
80+
continue
81+
}
82+
83+
if err := service.DeleteSecurityGroup(ctx, id); err != nil {
84+
log.Printf("[ERROR] sweep security group %s error: %s", id, err.Error())
85+
}
86+
}
87+
return nil
88+
}
89+
1290
func TestAccTencentCloudSecurityGroup_basic(t *testing.T) {
1391
t.Parallel()
1492
var sgId string

0 commit comments

Comments
 (0)