@@ -3,8 +3,12 @@ package tencentcloud
33import (
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
8488func 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+
178310func testAccCheckCdnDomainDestroy (s * terraform.State ) error {
179311 logId := getLogId (contextNil )
180312 ctx := context .WithValue (context .TODO (), logIdKey , logId )
0 commit comments