github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/alicloud/resource_alicloud_disk_test.go (about) 1 package alicloud 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/denverdino/aliyungo/ecs" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 "log" 11 ) 12 13 func TestAccAlicloudDisk_basic(t *testing.T) { 14 var v ecs.DiskItemType 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { 18 testAccPreCheck(t) 19 }, 20 21 // module name 22 IDRefreshName: "alicloud_disk.foo", 23 24 Providers: testAccProviders, 25 CheckDestroy: testAccCheckDiskDestroy, 26 Steps: []resource.TestStep{ 27 resource.TestStep{ 28 Config: testAccDiskConfig, 29 Check: resource.ComposeTestCheckFunc( 30 testAccCheckDiskExists( 31 "alicloud_disk.foo", &v), 32 resource.TestCheckResourceAttr( 33 "alicloud_disk.foo", 34 "category", 35 "cloud_efficiency"), 36 resource.TestCheckResourceAttr( 37 "alicloud_disk.foo", 38 "size", 39 "30"), 40 ), 41 }, 42 }, 43 }) 44 45 } 46 47 func TestAccAlicloudDisk_withTags(t *testing.T) { 48 var v ecs.DiskItemType 49 50 resource.Test(t, resource.TestCase{ 51 PreCheck: func() { 52 testAccPreCheck(t) 53 }, 54 55 //module name 56 IDRefreshName: "alicloud_disk.bar", 57 58 Providers: testAccProviders, 59 CheckDestroy: testAccCheckDiskDestroy, 60 Steps: []resource.TestStep{ 61 resource.TestStep{ 62 Config: testAccDiskConfigWithTags, 63 Check: resource.ComposeTestCheckFunc( 64 testAccCheckDiskExists("alicloud_disk.bar", &v), 65 resource.TestCheckResourceAttr( 66 "alicloud_disk.bar", 67 "tags.Name", 68 "TerraformTest"), 69 ), 70 }, 71 }, 72 }) 73 } 74 75 func testAccCheckDiskExists(n string, disk *ecs.DiskItemType) resource.TestCheckFunc { 76 return func(s *terraform.State) error { 77 rs, ok := s.RootModule().Resources[n] 78 if !ok { 79 return fmt.Errorf("Not found: %s", n) 80 } 81 82 if rs.Primary.ID == "" { 83 return fmt.Errorf("No Disk ID is set") 84 } 85 86 client := testAccProvider.Meta().(*AliyunClient) 87 conn := client.ecsconn 88 89 request := &ecs.DescribeDisksArgs{ 90 RegionId: client.Region, 91 DiskIds: []string{rs.Primary.ID}, 92 } 93 94 response, _, err := conn.DescribeDisks(request) 95 log.Printf("[WARN] disk ids %#v", rs.Primary.ID) 96 97 if err == nil { 98 if response != nil && len(response) > 0 { 99 *disk = response[0] 100 return nil 101 } 102 } 103 return fmt.Errorf("Error finding ECS Disk %#v", rs.Primary.ID) 104 } 105 } 106 107 func testAccCheckDiskDestroy(s *terraform.State) error { 108 109 for _, rs := range s.RootModule().Resources { 110 if rs.Type != "alicloud_disk" { 111 continue 112 } 113 114 // Try to find the Disk 115 client := testAccProvider.Meta().(*AliyunClient) 116 conn := client.ecsconn 117 118 request := &ecs.DescribeDisksArgs{ 119 RegionId: client.Region, 120 DiskIds: []string{rs.Primary.ID}, 121 } 122 123 response, _, err := conn.DescribeDisks(request) 124 125 if response != nil && len(response) > 0 { 126 return fmt.Errorf("Error ECS Disk still exist") 127 } 128 129 if err != nil { 130 // Verify the error is what we want 131 return err 132 } 133 } 134 135 return nil 136 } 137 138 const testAccDiskConfig = ` 139 data "alicloud_zones" "default" { 140 "available_disk_category"= "cloud_efficiency" 141 } 142 143 resource "alicloud_disk" "foo" { 144 # cn-beijing 145 availability_zone = "${data.alicloud_zones.default.zones.0.id}" 146 name = "New-disk" 147 description = "Hello ecs disk." 148 category = "cloud_efficiency" 149 size = "30" 150 } 151 ` 152 const testAccDiskConfigWithTags = ` 153 data "alicloud_zones" "default" { 154 "available_disk_category"= "cloud_efficiency" 155 } 156 157 resource "alicloud_disk" "bar" { 158 # cn-beijing 159 availability_zone = "${data.alicloud_zones.default.zones.0.id}" 160 category = "cloud_efficiency" 161 size = "20" 162 tags { 163 Name = "TerraformTest" 164 } 165 } 166 `