From 2faa325a6a09c737507c52d4d541c426b1e9600d Mon Sep 17 00:00:00 2001 From: Kagashino Date: Mon, 18 Apr 2022 22:18:45 +0800 Subject: [PATCH] fix: cbs testcases --- .../tencentcloud-persistent-resource/cvm.tf | 5 ++ .../variables.tf | 13 +++++ tencentcloud/basic_test.go | 12 +++++ ...ta_source_tc_cbs_snapshot_policies_test.go | 2 +- .../data_source_tc_cbs_snapshots_test.go | 2 +- ..._tc_cbs_snapshot_policy_attachment_test.go | 2 +- .../resource_tc_cbs_snapshot_policy_test.go | 2 +- tencentcloud/resource_tc_cbs_snapshot_test.go | 2 +- tencentcloud/resource_tc_cbs_storage.go | 6 ++- ...resource_tc_cbs_storage_attachment_test.go | 9 ++-- tencentcloud/resource_tc_cbs_storage_test.go | 53 ++++++++++++++++++- 11 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 examples/tencentcloud-persistent-resource/cvm.tf diff --git a/examples/tencentcloud-persistent-resource/cvm.tf b/examples/tencentcloud-persistent-resource/cvm.tf new file mode 100644 index 0000000000..1fe84b7881 --- /dev/null +++ b/examples/tencentcloud-persistent-resource/cvm.tf @@ -0,0 +1,5 @@ +resource "tencentcloud_instance" "cvm" { + availability_zone = var.default_az + image_id = var.image_id + instance_name = var.cvm_name +} \ No newline at end of file diff --git a/examples/tencentcloud-persistent-resource/variables.tf b/examples/tencentcloud-persistent-resource/variables.tf index 71601fe27b..4fb68a9b9a 100644 --- a/examples/tencentcloud-persistent-resource/variables.tf +++ b/examples/tencentcloud-persistent-resource/variables.tf @@ -1,3 +1,16 @@ +variable "default_az" { + default = "ap-guangzhou-3" +} + +variable "cvm_name" { + default = "keep-cvm" +} + +# this persist exist and barely removed +variable "image_id" { + default = "img-2lr9q49h" +} + variable "vpn_gw" { default = "kepp-vpn-gw" } diff --git a/tencentcloud/basic_test.go b/tencentcloud/basic_test.go index 3961aa36bf..f880746d6d 100644 --- a/tencentcloud/basic_test.go +++ b/tencentcloud/basic_test.go @@ -204,6 +204,18 @@ resource "tencentcloud_instance" "default" { } ` +const defaultCVMName = "keep-cvm" +const presetCVM = ` +data "tencentcloud_instances" "instance" { + instance_name = "` + defaultCVMName + `" +} + +locals { + cvm_id = data.tencentcloud_instances.instance.instance_list.0.instance_id + cvm_az = "` + defaultAZone + `" +} +` + const mysqlInstanceCommonTestCase = defaultVpcVariable + ` resource "tencentcloud_mysql_instance" "default" { mem_size = 1000 diff --git a/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go b/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go index bf668668e8..168f225237 100644 --- a/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go +++ b/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go @@ -10,7 +10,7 @@ func TestAccTencentCloudCbsSnapshotPoliciesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyDestroy, Steps: []resource.TestStep{ diff --git a/tencentcloud/data_source_tc_cbs_snapshots_test.go b/tencentcloud/data_source_tc_cbs_snapshots_test.go index 1726731d6f..50f7b87256 100644 --- a/tencentcloud/data_source_tc_cbs_snapshots_test.go +++ b/tencentcloud/data_source_tc_cbs_snapshots_test.go @@ -10,7 +10,7 @@ func TestAccTencentCloudCbsSnapshotsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsSnapshotDestroy, Steps: []resource.TestStep{ diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go b/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go index e4e22055d4..ccee796835 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go +++ b/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go @@ -15,7 +15,7 @@ func TestAccTencentCloudCbsSnapshotPolicyAttachment(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyAttachmentDestroy, Steps: []resource.TestStep{ diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy_test.go b/tencentcloud/resource_tc_cbs_snapshot_policy_test.go index d9c3222c35..379cb099a2 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy_test.go +++ b/tencentcloud/resource_tc_cbs_snapshot_policy_test.go @@ -13,7 +13,7 @@ func TestAccTencentCloudCbsSnapshotPolicy(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyDestroy, Steps: []resource.TestStep{ diff --git a/tencentcloud/resource_tc_cbs_snapshot_test.go b/tencentcloud/resource_tc_cbs_snapshot_test.go index e7630bdd4c..f78cec2be1 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_test.go +++ b/tencentcloud/resource_tc_cbs_snapshot_test.go @@ -13,7 +13,7 @@ func TestAccTencentCloudCbsSnapshot(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsSnapshotDestroy, Steps: []resource.TestStep{ diff --git a/tencentcloud/resource_tc_cbs_storage.go b/tencentcloud/resource_tc_cbs_storage.go index e98e0c1ac1..9a50054488 100644 --- a/tencentcloud/resource_tc_cbs_storage.go +++ b/tencentcloud/resource_tc_cbs_storage.go @@ -386,9 +386,13 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface if e != nil { return retryError(e) } - if storage != nil && *storage.DiskState == CBS_STORAGE_STATUS_EXPANDING { + + if *storage.DiskState == CBS_STORAGE_STATUS_EXPANDING { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *storage.DiskState)) } + if *storage.DiskSize != uint64(newValue) { + return resource.RetryableError(fmt.Errorf("waiting for cbs size changed to %d, now %d", newValue, *storage.DiskSize)) + } return nil }) if err != nil { diff --git a/tencentcloud/resource_tc_cbs_storage_attachment_test.go b/tencentcloud/resource_tc_cbs_storage_attachment_test.go index 0c3f263e77..e7b8781558 100644 --- a/tencentcloud/resource_tc_cbs_storage_attachment_test.go +++ b/tencentcloud/resource_tc_cbs_storage_attachment_test.go @@ -87,16 +87,17 @@ func testAccCheckCbsStorageAttachmentExists(n string) resource.TestCheckFunc { } } -const testAccCbsStorageAttachmentConfig = instanceCommonTestCase + ` +const testAccCbsStorageAttachmentConfig = presetCVM + ` resource "tencentcloud_cbs_storage" "foo" { - availability_zone = var.availability_zone + availability_zone = local.cvm_az storage_size = 100 storage_type = "CLOUD_PREMIUM" - storage_name = var.instance_name + storage_name = "test-cbs-attachment" + charge_type = "POSTPAID_BY_HOUR" } resource "tencentcloud_cbs_storage_attachment" "foo" { storage_id = tencentcloud_cbs_storage.foo.id - instance_id = tencentcloud_instance.default.id + instance_id = local.cvm_id } ` diff --git a/tencentcloud/resource_tc_cbs_storage_test.go b/tencentcloud/resource_tc_cbs_storage_test.go index a625551e27..b6034ba74d 100644 --- a/tencentcloud/resource_tc_cbs_storage_test.go +++ b/tencentcloud/resource_tc_cbs_storage_test.go @@ -4,11 +4,59 @@ import ( "context" "fmt" "testing" + "time" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" ) +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_cbs_storage + resource.AddTestSweepers("tencentcloud_cbs_storage", &resource.Sweeper{ + Name: "tencentcloud_cbs_storage", + F: func(r string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(r) + client := cli.(*TencentCloudClient).apiV3Conn + + service := CbsService{client} + + disks, err := service.DescribeDisksByFilter(ctx, nil) + + if err != nil { + return err + } + + for i := range disks { + disk := disks[i] + id := *disk.DiskId + if disk.DiskName == nil { + continue + } + name := *disk.DiskName + created, err := time.Parse("2006-01-02 15:04:05", *disk.CreateTime) + if err != nil { + created = time.Now() + } + if isResourcePersist(name, &created) { + continue + } + if *disk.DiskState == CBS_STORAGE_STATUS_ATTACHED { + continue + } + err = service.DeleteDiskById(ctx, id) + if err != nil { + continue + } + + } + + return nil + }, + }) +} + func TestAccTencentCloudCbsStorage_basic(t *testing.T) { t.Parallel() @@ -78,7 +126,7 @@ func TestAccTencentCloudCbsStorage_prepaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ @@ -108,7 +156,7 @@ func TestAccTencentCloudCbsStorage_upgrade(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, Providers: testAccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ @@ -258,6 +306,7 @@ resource "tencentcloud_cbs_storage" "storage_upgrade" { storage_name = "tf-storage-upgrade" storage_size = 50 availability_zone = "ap-guangzhou-3" + charge_type = "POSTPAID_BY_HOUR" } `