diff --git a/tencentcloud/basic_test.go b/tencentcloud/basic_test.go index 666780dd3e..d6a6072924 100644 --- a/tencentcloud/basic_test.go +++ b/tencentcloud/basic_test.go @@ -772,3 +772,13 @@ locals { ` // End of MongoDB + +// TEO + +const ( + defaultZoneName = "tf-teo-t.xyz" + defaultZoneId = "zone-2a1u0y616jz6" + defaultPolicyId = "11587" +) + +// End of TEO diff --git a/tencentcloud/data_source_tc_teo_bot_managed_rules_test.go b/tencentcloud/data_source_tc_teo_bot_managed_rules_test.go index 8bc450dee4..8f7632c525 100644 --- a/tencentcloud/data_source_tc_teo_bot_managed_rules_test.go +++ b/tencentcloud/data_source_tc_teo_bot_managed_rules_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoBotManagedRulesDataSource -v func TestAccTencentCloudTeoBotManagedRulesDataSource(t *testing.T) { t.Parallel() @@ -23,11 +24,21 @@ func TestAccTencentCloudTeoBotManagedRulesDataSource(t *testing.T) { }) } -const testAccDataSourceTeoBotManagedRules = ` +const testAccDataSourceTeoBotManagedRulesVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "entity" { + default = "` + defaultZoneName + `" +} +` + +const testAccDataSourceTeoBotManagedRules = testAccDataSourceTeoBotManagedRulesVar + ` data "tencentcloud_teo_bot_managed_rules" "bot_managed_rules" { - zone_id = "" - entity = "" - } + zone_id = var.zone_id + entity = var.entity +} ` diff --git a/tencentcloud/data_source_tc_teo_bot_portrait_rules_test.go b/tencentcloud/data_source_tc_teo_bot_portrait_rules_test.go index 60d4fea84d..fbec40147b 100644 --- a/tencentcloud/data_source_tc_teo_bot_portrait_rules_test.go +++ b/tencentcloud/data_source_tc_teo_bot_portrait_rules_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoBotPortraitRulesDataSource -v func TestAccTencentCloudTeoBotPortraitRulesDataSource(t *testing.T) { t.Parallel() @@ -23,11 +24,21 @@ func TestAccTencentCloudTeoBotPortraitRulesDataSource(t *testing.T) { }) } -const testAccDataSourceTeoBotPortraitRules = ` +const testAccDataSourceTeoBotPortraitRulesVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "entity" { + default = "` + defaultZoneName + `" +} +` + +const testAccDataSourceTeoBotPortraitRules = testAccDataSourceTeoBotPortraitRulesVar + ` data "tencentcloud_teo_bot_portrait_rules" "bot_portrait_rules" { - zone_id = "" - entity = "" - } + zone_id = var.zone_id + entity = var.entity +} ` diff --git a/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go b/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go index d8a637cc47..4d98a359cf 100644 --- a/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go +++ b/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoRuleEngineSettingsDataSource -v func TestAccTencentCloudTeoRuleEngineSettingsDataSource(t *testing.T) { t.Parallel() @@ -26,6 +27,6 @@ func TestAccTencentCloudTeoRuleEngineSettingsDataSource(t *testing.T) { const testAccDataSourceTeoRuleEngineSettings = ` data "tencentcloud_teo_rule_engine_settings" "rule_engine_settings" { - } +} ` diff --git a/tencentcloud/data_source_tc_teo_security_policy_regions_test.go b/tencentcloud/data_source_tc_teo_security_policy_regions_test.go index a7ff4b4b80..a228addb6e 100644 --- a/tencentcloud/data_source_tc_teo_security_policy_regions_test.go +++ b/tencentcloud/data_source_tc_teo_security_policy_regions_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoSecurityPolicyRegionsDataSource -v func TestAccTencentCloudTeoSecurityPolicyRegionsDataSource(t *testing.T) { t.Parallel() @@ -26,6 +27,6 @@ func TestAccTencentCloudTeoSecurityPolicyRegionsDataSource(t *testing.T) { const testAccDataSourceTeoSecurityPolicyRegions = ` data "tencentcloud_teo_security_policy_regions" "security_policy_regions" { - } +} ` diff --git a/tencentcloud/data_source_tc_teo_waf_rule_groups_test.go b/tencentcloud/data_source_tc_teo_waf_rule_groups_test.go index 4f4abffe5e..d9edf809fd 100644 --- a/tencentcloud/data_source_tc_teo_waf_rule_groups_test.go +++ b/tencentcloud/data_source_tc_teo_waf_rule_groups_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoWafRuleGroupsDataSource -v func TestAccTencentCloudTeoWafRuleGroupsDataSource(t *testing.T) { t.Parallel() @@ -23,9 +24,21 @@ func TestAccTencentCloudTeoWafRuleGroupsDataSource(t *testing.T) { }) } -const testAccDataSourceTeoWafRuleGroups = ` +const testAccDataSourceTeoWafRuleGroupsVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "entity" { + default = "` + defaultZoneName + `" +} +` + +const testAccDataSourceTeoWafRuleGroups = testAccDataSourceTeoWafRuleGroupsVar + ` data "tencentcloud_teo_waf_rule_groups" "waf_rule_groups" { - } + zone_id = var.zone_id + entity = var.entity +} ` diff --git a/tencentcloud/data_source_tc_teo_zone_available_plans_test.go b/tencentcloud/data_source_tc_teo_zone_available_plans_test.go index 744ea9d03a..ef0606ec38 100644 --- a/tencentcloud/data_source_tc_teo_zone_available_plans_test.go +++ b/tencentcloud/data_source_tc_teo_zone_available_plans_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoZoneAvailablePlansDataSource -v func TestAccTencentCloudTeoZoneAvailablePlansDataSource(t *testing.T) { t.Parallel() @@ -26,6 +27,6 @@ func TestAccTencentCloudTeoZoneAvailablePlansDataSource(t *testing.T) { const testAccDataSourceTeoZoneAvailablePlans = ` data "tencentcloud_teo_zone_available_plans" "zone_available_plans" { - } +} ` diff --git a/tencentcloud/data_source_tc_teo_zone_ddos_policy_test.go b/tencentcloud/data_source_tc_teo_zone_ddos_policy_test.go index de1120c996..fa5f859768 100644 --- a/tencentcloud/data_source_tc_teo_zone_ddos_policy_test.go +++ b/tencentcloud/data_source_tc_teo_zone_ddos_policy_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoZoneDDoSPolicyDataSource -v func TestAccTencentCloudTeoZoneDDoSPolicyDataSource(t *testing.T) { t.Parallel() @@ -23,10 +24,16 @@ func TestAccTencentCloudTeoZoneDDoSPolicyDataSource(t *testing.T) { }) } -const testAccDataSourceTeoZoneDDoSPolicy = ` +const testAccDataSourceTeoZoneDDoSPolicyVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} +` + +const testAccDataSourceTeoZoneDDoSPolicy = testAccDataSourceTeoZoneDDoSPolicyVar + ` data "tencentcloud_teo_zone_ddos_policy" "zone_ddos_policy" { - zone_id = "" + zone_id = var.zone_id } ` diff --git a/tencentcloud/resource_tc_teo_application_proxy_rule_test.go b/tencentcloud/resource_tc_teo_application_proxy_rule_test.go index 21f905db3e..5a3b68f492 100644 --- a/tencentcloud/resource_tc_teo_application_proxy_rule_test.go +++ b/tencentcloud/resource_tc_teo_application_proxy_rule_test.go @@ -1,26 +1,34 @@ package tencentcloud import ( + "context" + "fmt" + "strings" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoApplicationProxyRule_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoApplicationProxyRule_basic -v +func TestAccTencentCloudTeoApplicationProxyRule_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckApplicationProxyRuleDestroy, Steps: []resource.TestStep{ { Config: testAccTeoApplicationProxyRule, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_application_proxy_rule.application_proxy_rule", "id"), + testAccCheckApplicationProxyRuleExists("tencentcloud_teo_application_proxy_rule.basic"), + //resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy_rule.basic", "zone_name", "tf-teo.com"), + //resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy_rule.basic", "plan_type", "ent_with_bot"), ), }, { - ResourceName: "tencentcloud_teo_application_proxy_rule.application_proxy_rule", + ResourceName: "tencentcloud_teo_application_proxy_rule.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,22 +36,89 @@ func TestAccTencentCloudNeedFixTeoApplicationProxyRule_basic(t *testing.T) { }) } -const testAccTeoApplicationProxyRule = ` +func testAccCheckApplicationProxyRuleDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_application_proxy_rule" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + ruleId := idSplit[2] + + agents, err := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) + if agents != nil { + return fmt.Errorf("zone ApplicationProxyRule %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckApplicationProxyRuleExists(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) + } + + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + ruleId := idSplit[2] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) + if agents == nil { + return fmt.Errorf("zone ApplicationProxyRule %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoApplicationProxyRuleVar = ` +variable "default_zone_id" { + default = "` + defaultZoneId + `" +} +variable "proxy_id" { + default = "` + defaultPolicyId + `" +} +` -resource "tencentcloud_teo_application_proxy_rule" "application_proxy_rule" { - zone_id = tencentcloud_teo_zone.zone.id - proxy_id = tencentcloud_teo_application_proxy.application_proxy_rule.proxy_id +const testAccTeoApplicationProxyRule = testAccTeoApplicationProxyRuleVar + testAccTeoApplicationProxy + ` +resource "tencentcloud_teo_application_proxy_rule" "basic" { forward_client_ip = "TOA" origin_type = "custom" origin_value = [ - "1.1.1.1:80", + "127.0.0.1:8081", ] - port = [ - "80", + port = [ + "8083", ] - proto = "TCP" - session_persist = false + proto = "TCP" + proxy_id = tencentcloud_teo_application_proxy.basic.proxy_id + session_persist = false + status = "online" + zone_id = var.default_zone_id } ` diff --git a/tencentcloud/resource_tc_teo_application_proxy_test.go b/tencentcloud/resource_tc_teo_application_proxy_test.go index 14ff2b6159..dc77aae926 100644 --- a/tencentcloud/resource_tc_teo_application_proxy_test.go +++ b/tencentcloud/resource_tc_teo_application_proxy_test.go @@ -1,26 +1,73 @@ package tencentcloud import ( + "context" + "fmt" + "strings" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoApplicationProxy_basic(t *testing.T) { - t.Parallel() +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_teo_zone + resource.AddTestSweepers("tencentcloud_teo_application_proxy", &resource.Sweeper{ + Name: "tencentcloud_teo_application_proxy", + F: testSweepApplicationProxy, + }) +} + +func testSweepApplicationProxy(region string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(region) + client := cli.(*TencentCloudClient).apiV3Conn + service := TeoService{client} + + zoneId := defaultZoneId + for { + proxy, err := service.DescribeTeoApplicationProxy(ctx, zoneId, "") + if err != nil { + return err + } + + if proxy == nil { + return nil + } + + err = service.DeleteTeoApplicationProxyById(ctx, zoneId, *proxy.ProxyId) + if err != nil { + return err + } + } +} + +// go test -i; go test -test.run TestAccTencentCloudTeoApplicationProxy_basic -v +func TestAccTencentCloudTeoApplicationProxy_basic(t *testing.T) { + t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckApplicationProxyDestroy, Steps: []resource.TestStep{ { Config: testAccTeoApplicationProxy, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_application_proxy.application_proxy", "id"), + testAccCheckApplicationProxyExists("tencentcloud_teo_application_proxy.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "accelerate_type", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "security_type", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "plat_type", "domain"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_name", "test-instance"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_type", "instance"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "session_persist_time", "2400"), ), }, { - ResourceName: "tencentcloud_teo_application_proxy.application_proxy", + ResourceName: "tencentcloud_teo_application_proxy.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,17 +75,77 @@ func TestAccTencentCloudNeedFixTeoApplicationProxy_basic(t *testing.T) { }) } -const testAccTeoApplicationProxy = ` +func testAccCheckApplicationProxyDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_application_proxy" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) + if agents != nil { + return fmt.Errorf("zone ApplicationProxy %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckApplicationProxyExists(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) + } + + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) + if agents == nil { + return fmt.Errorf("zone ApplicationProxy %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoApplicationProxyVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +}` + +const testAccTeoApplicationProxy = testAccTeoApplicationProxyVar + ` -resource "tencentcloud_teo_application_proxy" "application_proxy" { - zone_id = tencentcloud_teo_zone.zone.id - zone_name = "sfurnace.work" +resource "tencentcloud_teo_application_proxy" "basic" { + zone_id = var.zone_id accelerate_type = 1 security_type = 1 plat_type = "domain" - proxy_name = "www.sfurnace.work" - proxy_type = "hostname" + proxy_name = "test-instance" + proxy_type = "instance" session_persist_time = 2400 } diff --git a/tencentcloud/resource_tc_teo_custom_error_page_test.go b/tencentcloud/resource_tc_teo_custom_error_page_test.go index 55f913cbcf..d6594bcfb0 100644 --- a/tencentcloud/resource_tc_teo_custom_error_page_test.go +++ b/tencentcloud/resource_tc_teo_custom_error_page_test.go @@ -6,35 +6,40 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoCustomErrorPage_basic -v func TestAccTencentCloudTeoCustomErrorPage_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccTeoCustomErrorPage, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_custom_error_page.custom_error_page", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_teo_custom_error_page.basic", "id"), ), }, - { - ResourceName: "tencentcloud_teo_custom_error_page.customErrorPage", - ImportState: true, - ImportStateVerify: true, - }, }, }) } -const testAccTeoCustomErrorPage = ` +const testAccTeoCustomErrorPageVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "zone_name" { + default = "` + defaultZoneName + `" +}` + +const testAccTeoCustomErrorPage = testAccTeoCustomErrorPageVar + ` + +resource "tencentcloud_teo_custom_error_page" "basic" { + zone_id = var.zone_id + entity = var.zone_name -resource "tencentcloud_teo_custom_error_page" "custom_error_page" { - zone_id = "" - entity = "" - name = "" - content = "" + name = "test" + content = "

test content

" } ` diff --git a/tencentcloud/resource_tc_teo_ddos_policy.go b/tencentcloud/resource_tc_teo_ddos_policy.go index 35a0e71670..b2ff144174 100644 --- a/tencentcloud/resource_tc_teo_ddos_policy.go +++ b/tencentcloud/resource_tc_teo_ddos_policy.go @@ -60,9 +60,9 @@ resource "tencentcloud_teo_ddos_policy" "ddos_policy" { ``` Import -teo ddos_policy can be imported using the id, e.g. +teo ddos_policy can be imported using the id#ddosPolicy_id, e.g. ``` -$ terraform import tencentcloud_teo_ddos_policy.ddos_policy ddosPolicy_id +$ terraform import tencentcloud_teo_ddos_policy.ddos_policy zone-2a1u0y616jz6#11587 ``` */ package tencentcloud diff --git a/tencentcloud/resource_tc_teo_ddos_policy_test.go b/tencentcloud/resource_tc_teo_ddos_policy_test.go index e4f2cc7ece..1f7b853f54 100644 --- a/tencentcloud/resource_tc_teo_ddos_policy_test.go +++ b/tencentcloud/resource_tc_teo_ddos_policy_test.go @@ -1,108 +1,195 @@ package tencentcloud -//func TestAccTencentCloudTeoDdosPolicy_basic(t *testing.T) { -// t.Parallel() -// -// resource.Test(t, resource.TestCase{ -// PreCheck: func() { testAccPreCheck(t) }, -// Providers: testAccProviders, -// Steps: []resource.TestStep{ -// { -// Config: testAccTeoDdosPolicy, -// Check: resource.ComposeTestCheckFunc( -// resource.TestCheckResourceAttrSet("tencentcloud_teo_ddos_policy.ddosPolicy", "id"), -// ), -// }, -// { -// ResourceName: "tencentcloud_teo_ddos_policy.ddosPolicy", -// ImportState: true, -// ImportStateVerify: true, -// }, -// }, -// }) -//} - -const testAccTeoDdosPolicy = ` - -resource "tencentcloud_teo_ddos_policy" "ddosPolicy" { - zone_id = "" - policy_id = "" - ddos_rule { - switch = "" - udp_shard_open = "" - ddos_status_info { - ply_level = "" - } - ddos_geo_ip { - region_id = "" - switch = "" +import ( + "context" + "fmt" + "log" + "strconv" + "strings" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTeoDdosPolicy_basic -v +func TestAccTencentCloudTeoDdosPolicy_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTeoDdosPolicy, + Check: resource.ComposeTestCheckFunc( + testAccCheckDdosPolicyExists("tencentcloud_teo_ddos_policy.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.0.action", "forward"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.0.dport_end", "8080"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.0.dport_start", "8080"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.0.protocol", "tcp"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.0.sport_start", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.action", "drop"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.dport_end", "65535"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.dport_start", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.protocol", "all"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.sport_end", "65535"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.acl.0.acls.1.sport_start", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.allow_block.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.allow_block.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.abnormal_connect_num", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.abnormal_syn_num", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.abnormal_syn_ratio", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.destination_connect_limit", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.destination_create_limit", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.drop_icmp", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.drop_other", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.drop_tcp", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.drop_udp", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.empty_connect_protect", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.source_connect_limit", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.source_create_limit", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.anti_ply.0.udp_shard", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.geo_ip.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.geo_ip.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.packet_filter.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.packet_filter.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.speed_limit.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.speed_limit.0.flux_limit", "0 bps"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.speed_limit.0.package_limit", "0 pps"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.status_info.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_ddos_policy.basic", "ddos_rule.0.status_info.0.ply_level", "middle"), + ), + }, + { + ResourceName: "tencentcloud_teo_ddos_policy.basic", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckDdosPolicyExists(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) } - ddos_allow_block { - switch = "" - user_allow_block_ip { - ip = "" - mask = "" - type = "" - ip2 = "" - mask2 = "" - } + + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) } - ddos_anti_ply { - drop_tcp = "" - drop_udp = "" - drop_icmp = "" - drop_other = "" - source_create_limit = "" - source_connect_limit = "" - destination_create_limit = "" - destination_connect_limit = "" - abnormal_connect_num = "" - abnormal_syn_ratio = "" - abnormal_syn_num = "" - connect_timeout = "" - empty_connect_protect = "" - udp_shard = "" + zoneId := idSplit[0] + policyId := idSplit[1] + + policyId64, err := strconv.ParseInt(policyId, 10, 64) + if err != nil { + log.Printf("[READ]%s read teo ddosPolicy parseInt[%v] failed, reason:%+v", logId, policyId, err) + return err } - ddos_packet_filter { - switch = "" - packet_filter { - action = "" - protocol = "" - dport_start = "" - dport_end = "" - packet_min = "" - packet_max = "" - sport_start = "" - sport_end = "" - match_type = "" - is_not = "" - offset = "" - depth = "" - match_begin = "" - str = "" - match_type2 = "" - is_not2 = "" - offset2 = "" - depth2 = "" - match_begin2 = "" - str2 = "" - match_logic = "" - } + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoDdosPolicy(ctx, zoneId, policyId64) + if agents == nil { + return fmt.Errorf("zone DdosPolicy %s is not found", rs.Primary.ID) } - ddos_acl { - switch = "" - acl { - dport_end = "" - dport_start = "" - sport_end = "" - sport_start = "" - protocol = "" - action = "" - default = "" - } + if err != nil { + return err } - } + return nil + } +} + +const testAccTeoDdosPolicyVar = ` +variable "default_zone_id" { + default = "` + defaultZoneId + `" +} + +variable "default_policy_id" { + default = ` + defaultPolicyId + ` +}` + +const testAccTeoDdosPolicy = testAccTeoDdosPolicyVar + ` + +resource "tencentcloud_teo_ddos_policy" "basic" { + policy_id = var.default_policy_id + zone_id = var.default_zone_id + + ddos_rule { + switch = "on" + + acl { + switch = "on" + + acls { + action = "forward" + dport_end = 8080 + dport_start = 8080 + protocol = "tcp" + sport_end = 65535 + sport_start = 1 + } + acls { + action = "drop" + dport_end = 65535 + dport_start = 1 + protocol = "all" + sport_end = 65535 + sport_start = 1 + } + } + + allow_block { + switch = "on" + } + + anti_ply { + abnormal_connect_num = 0 + abnormal_syn_num = 0 + abnormal_syn_ratio = 0 + connect_timeout = 0 + destination_connect_limit = 0 + destination_create_limit = 0 + drop_icmp = "off" + drop_other = "off" + drop_tcp = "off" + drop_udp = "off" + empty_connect_protect = "off" + source_connect_limit = 0 + source_create_limit = 0 + udp_shard = "off" + } + + geo_ip { + region_ids = [] + switch = "on" + } + + packet_filter { + switch = "on" + } + + speed_limit { + flux_limit = "0 bps" + package_limit = "0 pps" + } + + status_info { + ply_level = "middle" + } + } } ` diff --git a/tencentcloud/resource_tc_teo_default_certificate_test.go b/tencentcloud/resource_tc_teo_default_certificate_test.go deleted file mode 100644 index 0bd69da533..0000000000 --- a/tencentcloud/resource_tc_teo_default_certificate_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/helper/resource" -) - -func TestAccTencentCloudNeedFixTeoDefaultCertificate_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTeoDefaultCertificate, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_default_certificate.default_certificate", "id"), - ), - }, - { - ResourceName: "tencentcloud_teo_default_certificate.defaultCertificate", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -const testAccTeoDefaultCertificate = ` - -resource "tencentcloud_teo_default_certificate" "default_certificate" { - zone_id = tencentcloud_teo_zone.zone.id - - cert_info { - cert_id = "teo-28i46c1gtmkl" - status = "deployed" - } -} - -` diff --git a/tencentcloud/resource_tc_teo_dns_record_test.go b/tencentcloud/resource_tc_teo_dns_record_test.go new file mode 100644 index 0000000000..a423b6e7fe --- /dev/null +++ b/tencentcloud/resource_tc_teo_dns_record_test.go @@ -0,0 +1,147 @@ +package tencentcloud + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/terraform" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_teo_dns_record + resource.AddTestSweepers("tencentcloud_teo_dns_record", &resource.Sweeper{ + Name: "tencentcloud_teo_dns_record", + F: testSweepDnsRecord, + }) +} + +func testSweepDnsRecord(region string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(region) + client := cli.(*TencentCloudClient).apiV3Conn + service := TeoService{client} + + zoneId := defaultZoneId + + for { + record, err := service.DescribeTeoDnsRecord(ctx, zoneId, "") + if err != nil { + return err + } + + if record == nil { + return nil + } + + err = service.DeleteTeoDnsRecordById(ctx, zoneId, *record.DnsRecordId) + if err != nil { + return err + } + } +} + +// go test -i; go test -test.run TestAccTencentCloudTeoDnsRecord_basic -v +func TestAccTencentCloudTeoDnsRecord_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckDnsRecordDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTeoDnsRecord, + Check: resource.ComposeTestCheckFunc( + testAccCheckDnsRecordExists("tencentcloud_teo_dns_record.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_dns_record.basic", "zone_id", defaultZoneId), + ), + }, + { + ResourceName: "tencentcloud_teo_dns_record.basic", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckDnsRecordDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_dns_record" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + agents, err := service.DescribeTeoDnsRecord(ctx, zoneId, proxyId) + if agents != nil { + return fmt.Errorf("zone DnsRecord %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckDnsRecordExists(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) + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoDnsRecord(ctx, zoneId, proxyId) + if agents == nil { + return fmt.Errorf("zone DnsRecord %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoDnsRecordVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "zone_name" { + default = "www.` + defaultZoneName + `" +}` + +const testAccTeoDnsRecord = testAccTeoDnsRecordVar + ` + +resource "tencentcloud_teo_dns_record" "basic" { + zone_id = var.zone_id + type = "A" + name = var.zone_name + content = "150.109.8.2" + mode = "proxied" + ttl = "1" + priority = 1 +} +` diff --git a/tencentcloud/resource_tc_teo_dns_sec.go b/tencentcloud/resource_tc_teo_dns_sec.go index 6d7b5b18fa..b6fabc04bb 100644 --- a/tencentcloud/resource_tc_teo_dns_sec.go +++ b/tencentcloud/resource_tc_teo_dns_sec.go @@ -57,6 +57,7 @@ func resourceTencentCloudTeoDnsSec() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Computed: true, + Optional: true, Description: "DNSSEC infos.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -197,7 +198,9 @@ func resourceTencentCloudTeoDnsSecRead(d *schema.ResourceData, meta interface{}) dnssecMap["public_key"] = dnsSec.DnssecInfo.PublicKey } - _ = d.Set("dnssec", []interface{}{dnssecMap}) + if len(dnssecMap) > 0 { + _ = d.Set("dnssec", []interface{}{dnssecMap}) + } } if dnsSec.ModifiedOn != nil { diff --git a/tencentcloud/resource_tc_teo_dns_sec_test.go b/tencentcloud/resource_tc_teo_dns_sec_test.go index f6acc31a3c..e08b284ef0 100644 --- a/tencentcloud/resource_tc_teo_dns_sec_test.go +++ b/tencentcloud/resource_tc_teo_dns_sec_test.go @@ -1,26 +1,32 @@ package tencentcloud import ( + "context" + "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoDnsSec_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoDnsSec_basic -v +func TestAccTencentCloudTeoDnsSec_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccTeoDnsSec, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_dns_sec.dns_sec", "id"), + testAccCheckDnsSecExists("tencentcloud_teo_dns_sec.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_dns_sec.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_dns_sec.basic", "status", "disabled"), ), }, { - ResourceName: "tencentcloud_teo_dns_sec.dns_sec", + ResourceName: "tencentcloud_teo_dns_sec.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,10 +34,39 @@ func TestAccTencentCloudNeedFixTeoDnsSec_basic(t *testing.T) { }) } -const testAccTeoDnsSec = ` +func testAccCheckDnsSecExists(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) + } + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoDnsSec(ctx, rs.Primary.ID) + if agents == nil { + return fmt.Errorf("zone DnsSec %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoDnsSecVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} +` + +const testAccTeoDnsSec = testAccTeoDnsSecVar + ` -resource "tencentcloud_teo_dns_sec" "dns_sec" { - zone_id = tencentcloud_teo_zone.zone.id +resource "tencentcloud_teo_dns_sec" "basic" { + zone_id = var.zone_id status = "disabled" } ` diff --git a/tencentcloud/resource_tc_teo_host_certificate_test.go b/tencentcloud/resource_tc_teo_host_certificate_test.go deleted file mode 100644 index 5a08d83f29..0000000000 --- a/tencentcloud/resource_tc_teo_host_certificate_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/helper/resource" -) - -func TestAccTencentCloudNeedFixTeoHostCertificate_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTeoHostCertificate, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_host_certificate.host_certificate", "id"), - ), - }, - { - ResourceName: "tencentcloud_teo_host_certificate.host_certificate", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -const testAccTeoHostCertificate = ` - -resource "tencentcloud_teo_host_certificate" "host_certificate" { - zone_id = tencentcloud_teo_zone.zone.id - host = tencentcloud_teo_dns_record.dns_record.name - - cert_info { - cert_id = "yqWPPbs7" - status = "deployed" - } -} - -` diff --git a/tencentcloud/resource_tc_teo_load_balancing_test.go b/tencentcloud/resource_tc_teo_load_balancing_test.go new file mode 100644 index 0000000000..0a59b29473 --- /dev/null +++ b/tencentcloud/resource_tc_teo_load_balancing_test.go @@ -0,0 +1,116 @@ +package tencentcloud + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/terraform" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTeoLoadBalancing_basic -v +func TestAccTencentCloudTeoLoadBalancing_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLoadBalancingDestroy, + Steps: []resource.TestStep{ + //{ + // Config: testAccTeoLoadBalancing, + // Check: resource.ComposeTestCheckFunc( + // testAccCheckLoadBalancingExists("tencentcloud_teo_load_balancing.basic"), + // resource.TestCheckResourceAttr("tencentcloud_teo_load_balancing.basic", "zone_id", defaultZoneId), + // resource.TestCheckResourceAttr("tencentcloud_teo_load_balancing.basic", "host", "aaa."+defaultZoneName), + // resource.TestCheckResourceAttr("tencentcloud_teo_load_balancing.basic", "origin_group_id", "origin-8a6e424e-47b4-11ed-8422-5254006e4802"), + // resource.TestCheckResourceAttr("tencentcloud_teo_load_balancing.basic", "type", "proxied"), + // ), + //}, + //{ + // ResourceName: "tencentcloud_teo_load_balancing.basic", + // ImportState: true, + // ImportStateVerify: true, + //}, + }, + }) +} + +func testAccCheckLoadBalancingDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_load_balancing" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + loadBalancingId := idSplit[1] + + agents, err := service.DescribeTeoLoadBalancing(ctx, zoneId, loadBalancingId) + if agents != nil { + return fmt.Errorf("zone loadBalancing %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckLoadBalancingExists(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) + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + loadBalancingId := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + loadBalancing, err := service.DescribeTeoLoadBalancing(ctx, zoneId, loadBalancingId) + if loadBalancing == nil { + return fmt.Errorf("zone loadBalancing %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoLoadBalancingVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "zone_name" { + default = "aaa.` + defaultZoneName + `" +} +` + +const testAccTeoLoadBalancing = testAccTeoLoadBalancingVar + ` + +resource "tencentcloud_teo_load_balancing" "basic" { + host = var.zone_name + origin_group_id = "origin-8a6e424e-47b4-11ed-8422-5254006e4802" + type = "proxied" + zone_id = var.zone_id + backup_origin_group_id = "" +} + +` diff --git a/tencentcloud/resource_tc_teo_origin_group_test.go b/tencentcloud/resource_tc_teo_origin_group_test.go index 6ac8914bf3..cbe5da1bb5 100644 --- a/tencentcloud/resource_tc_teo_origin_group_test.go +++ b/tencentcloud/resource_tc_teo_origin_group_test.go @@ -1,26 +1,41 @@ package tencentcloud import ( + "context" + "fmt" + "strings" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoOriginGroup_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoOriginGroup_basic -v +func TestAccTencentCloudTeoOriginGroup_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckOriginGroupDestroy, Steps: []resource.TestStep{ { Config: testAccTeoOriginGroup, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_origin_group.originGroup", "id"), + testAccCheckOriginGroupExists("tencentcloud_teo_origin_group.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "configuration_type", "weight"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_group_name", "keep-group-1"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_type", "self"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_records.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_records.0.port", "8080"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_records.0.private", "false"), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_records.0.record", defaultZoneName), + resource.TestCheckResourceAttr("tencentcloud_teo_origin_group.basic", "origin_records.0.weight", "100"), ), }, { - ResourceName: "tencentcloud_teo_origin_group.originGroup", + ResourceName: "tencentcloud_teo_origin_group.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,36 +43,84 @@ func TestAccTencentCloudNeedFixTeoOriginGroup_basic(t *testing.T) { }) } -const testAccTeoOriginGroup = ` +func testAccCheckOriginGroupDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_origin_group" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + originGroupId := idSplit[1] + + originGroup, err := service.DescribeTeoOriginGroup(ctx, zoneId, originGroupId) + if originGroup != nil { + return fmt.Errorf("zone originGroup %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckOriginGroupExists(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) + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + originGroupId := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + originGroup, err := service.DescribeTeoOriginGroup(ctx, zoneId, originGroupId) + if originGroup == nil { + return fmt.Errorf("zone originGroup %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoOriginGroupVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} -locals { - group0 = [ - { - "record" = "1.1.1.1" - "port" = 80 - "weight" = 30 - }, { - "record" = "2.2.2.2" - "port" = 443 - "weight" = 70 - } - ] +variable "zone_name" { + default = "` + defaultZoneName + `" } +` +const testAccTeoOriginGroup = testAccTeoOriginGroupVar + ` -resource "tencentcloud_teo_origin_group" "origin_group" { - zone_id = tencentcloud_teo_zone.zone.id - origin_name = "group0" - origin_type = "self" - type = "weight" +resource "tencentcloud_teo_origin_group" "basic" { + configuration_type = "weight" + origin_group_name = "keep-group-1" + origin_type = "self" + zone_id = var.zone_id - dynamic "record" { - for_each = local.group0 - content { - record = record.value["record"] - port = record.value["port"] - weight = record.value["weight"] - area = [] - } + origin_records { + area = [] + port = 8080 + private = false + record = var.zone_name + weight = 100 } } diff --git a/tencentcloud/resource_tc_teo_rule_engine_priority_test.go b/tencentcloud/resource_tc_teo_rule_engine_priority_test.go index e160b02123..5f0281bb4e 100644 --- a/tencentcloud/resource_tc_teo_rule_engine_priority_test.go +++ b/tencentcloud/resource_tc_teo_rule_engine_priority_test.go @@ -1,26 +1,31 @@ package tencentcloud import ( + "context" + "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) +// go test -i; go test -test.run TestAccTencentCloudTeoRuleEnginePriority_basic -v func TestAccTencentCloudTeoRuleEnginePriority_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccTeoRuleEnginePriority, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_rule_engine_priority.rule_engine_priority", "id"), + testAccCheckRuleEnginePriorityExists("tencentcloud_teo_rule_engine_priority.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine_priority.basic", "zone_id", defaultZoneId), ), }, { - ResourceName: "tencentcloud_teo_rule_engine_priority.ruleEnginePriority", + ResourceName: "tencentcloud_teo_rule_engine_priority.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,10 +33,48 @@ func TestAccTencentCloudTeoRuleEnginePriority_basic(t *testing.T) { }) } -const testAccTeoRuleEnginePriority = ` +func testAccCheckRuleEnginePriorityExists(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) + } + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + originGroup, err := service.DescribeTeoRuleEnginePriority(ctx, rs.Primary.ID) + if originGroup == nil { + return fmt.Errorf("zone ruleEnginePriority %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoRuleEnginePriorityVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} +` + +const testAccTeoRuleEnginePriority = testAccTeoRuleEnginePriorityVar + ` + +resource "tencentcloud_teo_rule_engine_priority" "basic" { + zone_id = var.zone_id -resource "tencentcloud_teo_rule_engine_priority" "rule_engine_priority" { - rules_priority = "" + rules_priority { + index = 0 + value = "rule-2a26njgck4rq" + } + rules_priority { + index = 1 + value = "rule-2a26lzxhu13m" + } } ` diff --git a/tencentcloud/resource_tc_teo_rule_engine_test.go b/tencentcloud/resource_tc_teo_rule_engine_test.go index 08a2648472..9e85b46d19 100644 --- a/tencentcloud/resource_tc_teo_rule_engine_test.go +++ b/tencentcloud/resource_tc_teo_rule_engine_test.go @@ -1,26 +1,37 @@ package tencentcloud import ( + "context" + "fmt" + "strings" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoRuleEngine_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoRuleEngine_basic -v +func TestAccTencentCloudTeoRuleEngine_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckRuleEngineDestroy, Steps: []resource.TestStep{ { Config: testAccTeoRuleEngine, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_rule_engine.rule_engine", "id"), + testAccCheckRuleEngineExists("tencentcloud_teo_rule_engine.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine.basic", "status", "enable"), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine.basic", "rules.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine.basic", "rules.0.actions.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_rule_engine.basic", "rules.0.or.#", "1"), ), }, { - ResourceName: "tencentcloud_teo_rule_engine.rule_engine", + ResourceName: "tencentcloud_teo_rule_engine.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,44 +39,100 @@ func TestAccTencentCloudNeedFixTeoRuleEngine_basic(t *testing.T) { }) } -const testAccTeoRuleEngine = ` +func testAccCheckRuleEngineDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_rule_engine" { + continue + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + ruleId := idSplit[1] + + originGroup, err := service.DescribeTeoRuleEngine(ctx, zoneId, ruleId) + if originGroup != nil { + return fmt.Errorf("zone ruleEngine %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckRuleEngineExists(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) + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + ruleId := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + originGroup, err := service.DescribeTeoRuleEngine(ctx, zoneId, ruleId) + if originGroup == nil { + return fmt.Errorf("zone ruleEngine %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoRuleEngineVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} +` + +const testAccTeoRuleEngine = testAccTeoRuleEngineVar + ` -resource "tencentcloud_teo_rule_engine" "rule_engine" { - zone_id = tencentcloud_teo_zone.zone.id - rule_name = "rule0" +resource "tencentcloud_teo_rule_engine" "basic" { + rule_name = "rule-1" status = "enable" + zone_id = var.zone_id rules { - conditions { - conditions { - operator = "equal" - target = "host" - values = [ - "www.sfurnace.work", - ] - } - } - actions { - normal_action { - action = "MaxAge" + + rewrite_action { + action = "ResponseHeader" parameters { - name = "FollowOrigin" - values = [ - "on", - ] - } - parameters { - name = "MaxAgeTime" + action = "set" + name = "project" values = [ - "0", + "1111", ] } } } + + or { + and { + operator = "equal" + target = "extension" + values = [ + "11", + ] + } + } } } - ` diff --git a/tencentcloud/resource_tc_teo_security_policy_test.go b/tencentcloud/resource_tc_teo_security_policy_test.go index 02f4c71d08..970eccef6a 100644 --- a/tencentcloud/resource_tc_teo_security_policy_test.go +++ b/tencentcloud/resource_tc_teo_security_policy_test.go @@ -1,26 +1,34 @@ package tencentcloud import ( + "context" + "fmt" + "strings" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoSecurityPolicy_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoSecurityPolicy_basic -v +func TestAccTencentCloudTeoSecurityPolicy_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccTeoSecurityPolicy, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_security_policy.securityPolicy", "id"), + testAccCheckSecurityPolicyExists("tencentcloud_teo_security_policy.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_security_policy.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_security_policy.basic", "entity", "www."+defaultZoneName), + resource.TestCheckResourceAttr("tencentcloud_teo_security_policy.basic", "config.#", "1"), ), }, { - ResourceName: "tencentcloud_teo_security_policy.securityPolicy", + ResourceName: "tencentcloud_teo_security_policy.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,128 +36,102 @@ func TestAccTencentCloudNeedFixTeoSecurityPolicy_basic(t *testing.T) { }) } -const testAccTeoSecurityPolicy = ` +func testAccCheckSecurityPolicyExists(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) + } + idSplit := strings.Split(rs.Primary.ID, FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + entity := idSplit[1] + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoSecurityPolicy(ctx, zoneId, entity) + if agents == nil { + return fmt.Errorf("zone DnsSec %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoSecurityPolicyVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +} + +variable "zone_name" { + default = "www.` + defaultZoneName + `" +}` + +const testAccTeoSecurityPolicy = testAccTeoSecurityPolicyVar + ` + +resource "tencentcloud_teo_security_policy" "basic" { + entity = var.zone_name + zone_id = var.zone_id -resource "tencentcloud_teo_security_policy" "securityPolicy" { - zone_id = "" - entity = "" config { - waf_config { - switch = "" - level = "" - mode = "" - waf_rules { - switch = "" - block_rule_i_ds = "" - observe_rule_i_ds = "" - } - ai_rule { - mode = "" - } + switch_config { + web_switch = "on" } - rate_limit_config { - switch = "" - user_rules { - rule_name = "" - threshold = "" - period = "" - action = "" - punish_time = "" - punish_time_unit = "" - rule_status = "" - freq_fields = "" - conditions { - match_from = "" - match_param = "" - operator = "" - match_content = "" + + bot_config { + switch = "on" + + intelligence_rule { + switch = "off" + + items { + action = "drop" + label = "evil_bot" } - rule_priority = "" - } - template { - mode = "" - detail { - mode = "" - i_d = "" - action = "" - punish_time = "" - threshold = "" - period = "" + items { + action = "alg" + label = "suspect_bot" } - } - intelligence { - switch = "" - action = "" - } - } - acl_config { - switch = "" - user_rules { - rule_name = "" - action = "" - rule_status = "" - conditions { - match_from = "" - match_param = "" - operator = "" - match_content = "" + items { + action = "monitor" + label = "good_bot" + } + items { + action = "trans" + label = "normal" } - rule_priority = "" - punish_time = "" - punish_time_unit = "" - name = "" - page_id = "" - redirect_url = "" - response_code = "" } - } - bot_config { - switch = "" + managed_rule { - rule_i_d = "" - action = "" - punish_time = "" - punish_time_unit = "" - name = "" - page_id = "" - redirect_url = "" - response_code = "" - trans_managed_ids = "" - alg_managed_ids = "" - cap_managed_ids = "" - mon_managed_ids = "" - drop_managed_ids = "" + action = "monitor" + alg_managed_ids = [] + cap_managed_ids = [] + drop_managed_ids = [] + mon_managed_ids = [ + 100000, 100001, 100002, 100003, 100006, 100007, 100008, 100009, 100010, 100011, 100012, 100013, 100014, + 100015, 100016, 100017, 100018, 100019, 100020, 100021, 100022, 10000003, 10000004, 10000005, 10000006, + 10000007, 10000008, 10000009, + ] + page_id = 0 + punish_time = 0 + response_code = 0 + trans_managed_ids = [] } + portrait_rule { - rule_i_d = "" - alg_managed_ids = "" - cap_managed_ids = "" - mon_managed_ids = "" - drop_managed_ids = "" - switch = "" + alg_managed_ids = [] + cap_managed_ids = [] + drop_managed_ids = [] + mon_managed_ids = [] + switch = "off" } - intelligence_rule { - switch = "" - items { - label = "" - action = "" - } - } - } - switch_config { - web_switch = "" } - ip_table_config { - switch = "" - rules { - action = "" - match_from = "" - match_content = "" - rule_i_d = "" - } - } - } -} - -` +}` diff --git a/tencentcloud/resource_tc_teo_zone_setting_test.go b/tencentcloud/resource_tc_teo_zone_setting_test.go index 237672d263..9fbb8fec10 100644 --- a/tencentcloud/resource_tc_teo_zone_setting_test.go +++ b/tencentcloud/resource_tc_teo_zone_setting_test.go @@ -1,26 +1,82 @@ package tencentcloud import ( + "context" + "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoZoneSetting_basic(t *testing.T) { +// go test -i; go test -test.run TestAccTencentCloudTeoZoneSetting_basic -v +func TestAccTencentCloudTeoZoneSetting_basic(t *testing.T) { t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccTeoZoneSetting, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_zone_setting.zone_setting", "id"), + testAccCheckZoneSettingExists("tencentcloud_teo_zone_setting.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "zone_id", defaultZoneId), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", " cache.0.cache.#", "0"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache.0.follow_origin.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache.0.follow_origin.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache.0.no_cache.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache.0.no_cache.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.full_url_cache", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.ignore_case", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.query_string.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.query_string.0.action", "excludeCustom"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.query_string.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_key.0.query_string.0.value.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_prefresh.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_prefresh.0.percent", "90"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "cache_prefresh.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "client_ip_header.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "client_ip_header.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "compression.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "compression.0.algorithms.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "compression.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "force_redirect.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "force_redirect.0.redirect_status_code", "302"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "force_redirect.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.hsts.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.hsts.0.include_sub_domains", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.hsts.0.preload", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.hsts.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.http2", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.ocsp_stapling", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "https.0.tls_version.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "ipv6.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "ipv6.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "max_age.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "max_age.0.follow_origin", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "offline_cache.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "offline_cache.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "origin.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "origin.0.origin_pull_protocol", "follow"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "post_max_size.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "post_max_size.0.max_size", "524288000"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "post_max_size.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "quic.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "quic.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "smart_routing.0.switch", "on"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "upstream_http2.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "upstream_http2.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "web_socket.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "web_socket.0.switch", "off"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone_setting.basic", "web_socket.0.timeout", "30"), ), }, { - ResourceName: "tencentcloud_teo_zone_setting.zone_setting", + ResourceName: "tencentcloud_teo_zone_setting.basic", ImportState: true, ImportStateVerify: true, }, @@ -28,10 +84,38 @@ func TestAccTencentCloudNeedFixTeoZoneSetting_basic(t *testing.T) { }) } -const testAccTeoZoneSetting = ` +func testAccCheckZoneSettingExists(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) + } + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + setting, err := service.DescribeTeoZoneSetting(ctx, rs.Primary.ID) + if setting == nil { + return fmt.Errorf("zone setting %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoZoneSettingVar = ` +variable "zone_id" { + default = "` + defaultZoneId + `" +}` + +const testAccTeoZoneSetting = testAccTeoZoneSettingVar + ` -resource "tencentcloud_teo_zone_setting" "zone_setting" { - zone_id = tencentcloud_teo_zone.zone.id +resource "tencentcloud_teo_zone_setting" "basic" { + zone_id = var.zone_id cache { follow_origin { @@ -90,7 +174,7 @@ resource "tencentcloud_teo_zone_setting" "zone_setting" { max_age { follow_origin = "off" - max_age_time = 600 + max_age_time = 0 } offline_cache { diff --git a/tencentcloud/resource_tc_teo_zone_test.go b/tencentcloud/resource_tc_teo_zone_test.go index 0292cbda47..28718ff24d 100644 --- a/tencentcloud/resource_tc_teo_zone_test.go +++ b/tencentcloud/resource_tc_teo_zone_test.go @@ -1,46 +1,134 @@ package tencentcloud import ( + "context" + "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) -func TestAccTencentCloudNeedFixTeoZone_basic(t *testing.T) { - t.Parallel() +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_teo_zone + resource.AddTestSweepers("tencentcloud_teo_zone", &resource.Sweeper{ + Name: "tencentcloud_teo_zone", + F: testSweepZone, + }) +} + +func testSweepZone(region string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(region) + client := cli.(*TencentCloudClient).apiV3Conn + service := TeoService{client} + + zoneId := clusterPrometheusId + zone, err := service.DescribeTeoZone(ctx, zoneId) + if err != nil { + return err + } + + if zone == nil { + return nil + } + + err = service.DeleteTeoZoneById(ctx, zoneId) + if err != nil { + return err + } + + return nil +} + +// go test -i; go test -test.run TestAccTencentCloudTeoZone_basic -v +func TestAccTencentCloudTeoZone_basic(t *testing.T) { + t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckZoneDestroy, Steps: []resource.TestStep{ { Config: testAccTeoZone, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_teo_zone.zone", "id"), + testAccCheckZoneExists("tencentcloud_teo_zone.basic"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "zone_name", "tf-teo.xyz"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "plan_type", "ent_with_bot"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "type", "full"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "paused", "false"), + resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "cname_speed_up", "enabled"), + //resource.TestCheckResourceAttr("tencentcloud_teo_zone.basic", "vanity_name_servers.0.servers", ""), ), }, - { - ResourceName: "tencentcloud_teo_zone.zone", - ImportState: true, - ImportStateVerify: true, - }, + //{ + // ResourceName: "tencentcloud_teo_zone.basic", + // ImportState: true, + // ImportStateVerify: true, + //}, }, }) } +func testAccCheckZoneDestroy(s *terraform.State) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_zone" { + continue + } + + agents, err := service.DescribeTeoZone(ctx, rs.Primary.ID) + if agents != nil { + return fmt.Errorf("zone %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckZoneExists(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) + } + + service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + agents, err := service.DescribeTeoZone(ctx, rs.Primary.ID) + if agents == nil { + return fmt.Errorf("zone %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + const testAccTeoZone = ` -resource "tencentcloud_teo_zone" "zone" { - name = "sfurnace.work" - plan_type = "ent_cm_with_bot" - type = "full" - paused = false - cname_speed_up = "enabled" - - # vanity_name_servers { - # switch = "on" - # servers = ["2.2.2.2"] - # } +resource "tencentcloud_teo_zone" "basic" { + cname_speed_up = "enabled" + plan_type = "ent_with_bot" + paused = false + tags = {} + type = "full" + zone_name = "tf-teo.xyz" + + #tags = { + # "TestKey" = "terraform" + #} } ` diff --git a/website/docs/r/teo_ddos_policy.html.markdown b/website/docs/r/teo_ddos_policy.html.markdown index 0e25345b92..a314e15fa6 100644 --- a/website/docs/r/teo_ddos_policy.html.markdown +++ b/website/docs/r/teo_ddos_policy.html.markdown @@ -180,8 +180,8 @@ In addition to all arguments above, the following attributes are exported: ## Import -teo ddos_policy can be imported using the id, e.g. +teo ddos_policy can be imported using the id#ddosPolicy_id, e.g. ``` -$ terraform import tencentcloud_teo_ddos_policy.ddos_policy ddosPolicy_id +$ terraform import tencentcloud_teo_ddos_policy.ddos_policy zone-2a1u0y616jz6#11587 ``` diff --git a/website/docs/r/teo_dns_sec.html.markdown b/website/docs/r/teo_dns_sec.html.markdown index c9039b7074..82929c67b3 100644 --- a/website/docs/r/teo_dns_sec.html.markdown +++ b/website/docs/r/teo_dns_sec.html.markdown @@ -26,22 +26,16 @@ The following arguments are supported: * `status` - (Required, String) DNSSEC status. Valid values: `enabled`, `disabled`. * `zone_id` - (Required, String, ForceNew) Site ID. +* `dnssec` - (Optional, List) DNSSEC infos. + +The `dnssec` object supports the following: + ## Attributes Reference In addition to all arguments above, the following attributes are exported: * `id` - ID of the resource. -* `dnssec` - DNSSEC infos. - * `algorithm` - Encryption algorithm. - * `d_s` - DS record value. - * `digest_algorithm` - Digest algorithm. - * `digest_type` - Digest type. - * `digest` - Digest message. - * `flags` - Flag. - * `key_tag` - Key tag. - * `key_type` - Encryption type. - * `public_key` - Public key. * `modified_on` - Last modification date.