Skip to content

Commit e87e799

Browse files
authored
fix: cdn - add domain verify precheck before running testcase (#1093)
1 parent 39b588f commit e87e799

File tree

1 file changed

+133
-1
lines changed

1 file changed

+133
-1
lines changed

tencentcloud/resource_tc_cdn_domain_test.go

Lines changed: 133 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ package tencentcloud
33
import (
44
"context"
55
"fmt"
6+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
67
"testing"
78

9+
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
10+
domain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain/v20180808"
11+
812
cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606"
913

1014
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
@@ -83,7 +87,12 @@ func testAccTencentCloudCdnDomainResource(t *testing.T) {
8387

8488
func TestAccTencentCloudCdnDomainWithHTTPs(t *testing.T) {
8589
resource.Test(t, resource.TestCase{
86-
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
90+
PreCheck: func() {
91+
testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY)
92+
if err := testAccCdnDomainVerify(); err != nil {
93+
t.Fatalf("[TestAccCentcentCloudCdnDomainWithHTTPs] Domain Verify failed: %s", err)
94+
}
95+
},
8796
Providers: testAccProviders,
8897
CheckDestroy: testAccCheckCdnDomainDestroy,
8998
Steps: []resource.TestStep{
@@ -175,6 +184,129 @@ func TestAccTencentCloudCdnDomainWithHTTPs(t *testing.T) {
175184
})
176185
}
177186

187+
func testAccGetTestingDomain() (string, error) {
188+
logId := getLogId(contextNil)
189+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
190+
cli, _ := sharedClientForRegion("ap-guangzhou")
191+
client := cli.(*TencentCloudClient).apiV3Conn
192+
service := DomainService{client}
193+
request := domain.NewDescribeDomainNameListRequest()
194+
domains, err := service.DescribeDomainNameList(ctx, request)
195+
if err != nil {
196+
return "", err
197+
}
198+
if len(domains) == 0 {
199+
return "", nil
200+
}
201+
return *domains[0].DomainName, nil
202+
}
203+
204+
func testAccCdnDomainVerify() error {
205+
cli, _ := sharedClientForRegion("ap-guangzhou")
206+
client := cli.(*TencentCloudClient).apiV3Conn
207+
continueCode := []string{
208+
// no record
209+
cdn.UNAUTHORIZEDOPERATION_CDNDOMAINRECORDNOTVERIFIED,
210+
// has record but need modify
211+
cdn.UNAUTHORIZEDOPERATION_CDNTXTRECORDVALUENOTMATCH,
212+
}
213+
214+
domainName, err := testAccGetTestingDomain()
215+
l3domain := fmt.Sprintf("c.%s", domainName)
216+
217+
if err != nil {
218+
return err
219+
}
220+
221+
vRequest := cdn.NewVerifyDomainRecordRequest()
222+
vRequest.Domain = &l3domain
223+
224+
vRes, err := client.UseCdnClient().VerifyDomainRecord(vRequest)
225+
226+
if err != nil {
227+
228+
code := err.(*sdkErrors.TencentCloudSDKError).Code
229+
230+
if !IsContains(continueCode, code) {
231+
return err
232+
}
233+
}
234+
235+
if vRes.Response != nil && *vRes.Response.Result {
236+
return nil
237+
}
238+
239+
cRequest := cdn.NewCreateVerifyRecordRequest()
240+
cRequest.Domain = &l3domain
241+
242+
cRes, err := client.UseCdnClient().CreateVerifyRecord(cRequest)
243+
if err != nil {
244+
return err
245+
}
246+
247+
recordType := *cRes.Response.RecordType
248+
record := *cRes.Response.Record
249+
250+
err = testAccSetDnsPodRecord(domainName, recordType, record)
251+
252+
if err != nil {
253+
return err
254+
}
255+
256+
err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError {
257+
vRes, err = client.UseCdnClient().VerifyDomainRecord(vRequest)
258+
if err != nil {
259+
return retryError(err, continueCode...)
260+
}
261+
if vRes.Response != nil && *vRes.Response.Result {
262+
return nil
263+
}
264+
return resource.RetryableError(fmt.Errorf("verifying domain, retry"))
265+
})
266+
267+
return nil
268+
}
269+
270+
func testAccSetDnsPodRecord(domainName, recordType, record string) error {
271+
cli, _ := sharedClientForRegion("ap-guangzhou")
272+
client := cli.(*TencentCloudClient).apiV3Conn
273+
recordLine := "默认"
274+
subDomain := "_cdnauth"
275+
276+
request := dnspod.NewDescribeRecordListRequest()
277+
request.Domain = &domainName
278+
request.Subdomain = &subDomain
279+
response, err := client.UseDnsPodClient().DescribeRecordList(request)
280+
281+
if err != nil {
282+
code := err.(*sdkErrors.TencentCloudSDKError).Code
283+
if code != dnspod.RESOURCENOTFOUND_NODATAOFRECORD {
284+
return err
285+
}
286+
}
287+
288+
if response.Response != nil && len(response.Response.RecordList) > 0 {
289+
for i := range response.Response.RecordList {
290+
recordInfo := response.Response.RecordList[i]
291+
if *recordInfo.Value == record {
292+
return nil
293+
}
294+
}
295+
}
296+
297+
cRequest := dnspod.NewCreateRecordRequest()
298+
cRequest.Domain = &domainName
299+
cRequest.SubDomain = &subDomain
300+
cRequest.RecordType = &recordType
301+
cRequest.RecordLine = &recordLine
302+
cRequest.Value = &record
303+
304+
if _, err := client.UseDnsPodClient().CreateRecord(cRequest); err != nil {
305+
return err
306+
}
307+
return nil
308+
}
309+
178310
func testAccCheckCdnDomainDestroy(s *terraform.State) error {
179311
logId := getLogId(contextNil)
180312
ctx := context.WithValue(context.TODO(), logIdKey, logId)

0 commit comments

Comments
 (0)