From 1e1cbfbfc8782179ba4119c941dc5a00c22feada Mon Sep 17 00:00:00 2001 From: arunma Date: Mon, 10 Oct 2022 09:19:50 +0800 Subject: [PATCH] fix: dnspod unit update --- ...resource_tc_dnspod_domain_instance_test.go | 92 ++++++++++++++++++- tencentcloud/service_tencentcloud_dnspod.go | 57 ++++++++++++ 2 files changed, 147 insertions(+), 2 deletions(-) diff --git a/tencentcloud/resource_tc_dnspod_domain_instance_test.go b/tencentcloud/resource_tc_dnspod_domain_instance_test.go index acd8f5ee19..98fbb9396e 100644 --- a/tencentcloud/resource_tc_dnspod_domain_instance_test.go +++ b/tencentcloud/resource_tc_dnspod_domain_instance_test.go @@ -1,19 +1,61 @@ package tencentcloud import ( + "context" + "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +const Domain = "terraformer.com" + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_dnspod_domain_instance + resource.AddTestSweepers("tencentcloud_dnspod_domain_instance", &resource.Sweeper{ + Name: "tencentcloud_dnspod_domain_instance", + F: testSweepDnspodDoamin, + }) +} +func testSweepDnspodDoamin(region string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(region) + client := cli.(*TencentCloudClient).apiV3Conn + service := DnspodService{client} + + response, err := service.DescribeDomain(ctx, Domain) + if err != nil { + return err + } + + domainInfo := response.Response.DomainInfo + if domainInfo == nil { + return nil + } + + err = service.DeleteDomain(ctx, Domain) + if err != nil { + return err + } + + return nil +} + +// go test -i; go test -test.run TestAccTencentCloudDnspodDoamin -v func TestAccTencentCloudDnspodDoamin(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckDnspodDomainDestroy, Steps: []resource.TestStep{ { Config: testAccTencentCloudDnspodDomain, Check: resource.ComposeTestCheckFunc( + testAccCheckDnspodDomainExists("tencentcloud_dnspod_domain_instance.domain"), resource.TestCheckResourceAttr("tencentcloud_dnspod_domain_instance.domain", "domain", "terraformer.com"), resource.TestCheckResourceAttr("tencentcloud_dnspod_domain_instance.domain", "is_mark", "no"), ), @@ -22,9 +64,55 @@ func TestAccTencentCloudDnspodDoamin(t *testing.T) { }) } +func testAccCheckDnspodDomainDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + dnspodService := DnspodService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_dnspod_domain_instance" { + continue + } + + response, err := dnspodService.DescribeDomain(ctx, rs.Primary.ID) + if err != nil { + return nil + } + if response.Response.DomainInfo != nil { + return fmt.Errorf("record rule %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckDnspodDomainExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + + rs, ok := s.RootModule().Resources[r] + if !ok { + return fmt.Errorf("resource %s is not found", r) + } + if rs.Primary.ID == "" { + return fmt.Errorf("domain id is not set") + } + + dnspodService := DnspodService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + response, err := dnspodService.DescribeDomain(ctx, rs.Primary.ID) + if err != nil { + return err + } + if response.Response.DomainInfo == nil { + return fmt.Errorf("dnspod domain %s is not found", rs.Primary.ID) + } + + return nil + } +} + const testAccTencentCloudDnspodDomain = ` resource "tencentcloud_dnspod_domain_instance" "domain" { - domain = "terraformer.com" + domain = "` + Domain + `" is_mark = "no" } ` diff --git a/tencentcloud/service_tencentcloud_dnspod.go b/tencentcloud/service_tencentcloud_dnspod.go index 9e9ae12c54..6e3e5586ca 100644 --- a/tencentcloud/service_tencentcloud_dnspod.go +++ b/tencentcloud/service_tencentcloud_dnspod.go @@ -2,6 +2,7 @@ package tencentcloud import ( "context" + "fmt" "log" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -70,3 +71,59 @@ func (me *DnspodService) ModifyDnsPodDomainRemark(ctx context.Context, domain st } return } + +func (me *DnspodService) DescribeDomain(ctx context.Context, domain string) (ret *dnspod.DescribeDomainResponse, errRet error) { + + logId := getLogId(ctx) + request := dnspod.NewDescribeDomainRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + request.Domain = helper.String(domain) + + response, err := me.client.UseDnsPodClient().DescribeDomain(request) + + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil { + return nil, fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + return response, nil +} + +func (me *DnspodService) DeleteDomain(ctx context.Context, domain string) (errRet error) { + + logId := getLogId(ctx) + request := dnspod.NewDeleteDomainRequest() + ratelimit.Check(request.GetAction()) + request.Domain = helper.String(domain) + + response, err := me.client.UseDnsPodClient().DeleteDomain(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + errRet = err + return +}