package alicloud import ( "fmt" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "strconv" "testing" ) func TestAccAlicloudZonesDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccCheckAlicloudZonesDataSourceBasicConfig, Check: resource.ComposeTestCheckFunc( testAccCheckAlicloudDataSourceID("data.alicloud_zones.foo"), ), }, }, }) } func TestAccAlicloudZonesDataSource_filter(t *testing.T) { // the zone length changed occasionally // check by range to avoid test case failure testCheckZoneLength := func(name string) resource.TestCheckFunc { return func(s *terraform.State) error { ms := s.RootModule() rs, ok := ms.Resources[name] if !ok { return fmt.Errorf("Not found: %s", name) } is := rs.Primary if is == nil { return fmt.Errorf("No primary instance: %s", name) } i, err := strconv.Atoi(is.Attributes["zones.#"]) if err != nil { return fmt.Errorf("convert zone length err: %#v", err) } if i <= 0 { return fmt.Errorf("zone length expected greater than 0 got err: %d", i) } return nil } } resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccCheckAlicloudZonesDataSourceFilter, Check: resource.ComposeTestCheckFunc( testAccCheckAlicloudDataSourceID("data.alicloud_zones.foo"), testCheckZoneLength("data.alicloud_zones.foo"), ), }, resource.TestStep{ Config: testAccCheckAlicloudZonesDataSourceFilterIoOptimized, Check: resource.ComposeTestCheckFunc( testAccCheckAlicloudDataSourceID("data.alicloud_zones.foo"), testCheckZoneLength("data.alicloud_zones.foo"), ), }, }, }) } const testAccCheckAlicloudZonesDataSourceBasicConfig = ` data "alicloud_zones" "foo" { } ` const testAccCheckAlicloudZonesDataSourceFilter = ` data "alicloud_zones" "foo" { "available_instance_type"= "ecs.c2.xlarge" "available_resource_creation"= "VSwitch" "available_disk_category"= "cloud_efficiency" } ` const testAccCheckAlicloudZonesDataSourceFilterIoOptimized = ` data "alicloud_zones" "foo" { "available_instance_type"= "ecs.c2.xlarge" "available_resource_creation"= "IoOptimized" "available_disk_category"= "cloud" } `