github.com/ggiamarchi/terraform@v0.3.7-0.20150607194748-ed2a66a46a71/builtin/providers/azure/resource_azure_data_disk_test.go (about) 1 package azure 2 3 import ( 4 "fmt" 5 "os" 6 "strconv" 7 "testing" 8 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 "github.com/svanharmelen/azure-sdk-for-go/management" 12 "github.com/svanharmelen/azure-sdk-for-go/management/virtualmachinedisk" 13 ) 14 15 func TestAccAzureDataDisk_basic(t *testing.T) { 16 var disk virtualmachinedisk.DataDiskResponse 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckAzureDataDiskDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccAzureDataDisk_basic, 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckAzureDataDiskExists( 27 "azure_data_disk.foo", &disk), 28 testAccCheckAzureDataDiskAttributes(&disk), 29 resource.TestCheckResourceAttr( 30 "azure_data_disk.foo", "label", "terraform-test-0"), 31 resource.TestCheckResourceAttr( 32 "azure_data_disk.foo", "size", "10"), 33 ), 34 }, 35 }, 36 }) 37 } 38 39 func TestAccAzureDataDisk_update(t *testing.T) { 40 var disk virtualmachinedisk.DataDiskResponse 41 42 resource.Test(t, resource.TestCase{ 43 PreCheck: func() { testAccPreCheck(t) }, 44 Providers: testAccProviders, 45 CheckDestroy: testAccCheckAzureDataDiskDestroy, 46 Steps: []resource.TestStep{ 47 resource.TestStep{ 48 Config: testAccAzureDataDisk_advanced, 49 Check: resource.ComposeTestCheckFunc( 50 testAccCheckAzureDataDiskExists( 51 "azure_data_disk.foo", &disk), 52 resource.TestCheckResourceAttr( 53 "azure_data_disk.foo", "label", "terraform-test1-1"), 54 resource.TestCheckResourceAttr( 55 "azure_data_disk.foo", "lun", "1"), 56 resource.TestCheckResourceAttr( 57 "azure_data_disk.foo", "size", "10"), 58 resource.TestCheckResourceAttr( 59 "azure_data_disk.foo", "caching", "ReadOnly"), 60 resource.TestCheckResourceAttr( 61 "azure_data_disk.foo", "virtual_machine", "terraform-test1"), 62 ), 63 }, 64 65 resource.TestStep{ 66 Config: testAccAzureDataDisk_update, 67 Check: resource.ComposeTestCheckFunc( 68 testAccCheckAzureDataDiskExists( 69 "azure_data_disk.foo", &disk), 70 resource.TestCheckResourceAttr( 71 "azure_data_disk.foo", "label", "terraform-test1-1"), 72 resource.TestCheckResourceAttr( 73 "azure_data_disk.foo", "lun", "2"), 74 resource.TestCheckResourceAttr( 75 "azure_data_disk.foo", "size", "20"), 76 resource.TestCheckResourceAttr( 77 "azure_data_disk.foo", "caching", "ReadWrite"), 78 resource.TestCheckResourceAttr( 79 "azure_data_disk.foo", "virtual_machine", "terraform-test2"), 80 ), 81 }, 82 }, 83 }) 84 } 85 86 func testAccCheckAzureDataDiskExists( 87 n string, 88 disk *virtualmachinedisk.DataDiskResponse) resource.TestCheckFunc { 89 return func(s *terraform.State) error { 90 rs, ok := s.RootModule().Resources[n] 91 if !ok { 92 return fmt.Errorf("Not found: %s", n) 93 } 94 95 if rs.Primary.ID == "" { 96 return fmt.Errorf("No Data Disk ID is set") 97 } 98 99 vm := rs.Primary.Attributes["virtual_machine"] 100 lun, err := strconv.Atoi(rs.Primary.Attributes["lun"]) 101 if err != nil { 102 return err 103 } 104 105 mc := testAccProvider.Meta().(*Client).mgmtClient 106 d, err := virtualmachinedisk.NewClient(mc).GetDataDisk(vm, vm, vm, lun) 107 if err != nil { 108 return err 109 } 110 111 if d.DiskName != rs.Primary.ID { 112 return fmt.Errorf("Data Disk not found") 113 } 114 115 *disk = d 116 117 return nil 118 } 119 } 120 121 func testAccCheckAzureDataDiskAttributes( 122 disk *virtualmachinedisk.DataDiskResponse) resource.TestCheckFunc { 123 return func(s *terraform.State) error { 124 125 if disk.Lun != 0 { 126 return fmt.Errorf("Bad lun: %d", disk.Lun) 127 } 128 129 if disk.LogicalDiskSizeInGB != 10 { 130 return fmt.Errorf("Bad size: %d", disk.LogicalDiskSizeInGB) 131 } 132 133 if disk.HostCaching != "None" { 134 return fmt.Errorf("Bad caching: %s", disk.HostCaching) 135 } 136 137 return nil 138 } 139 } 140 141 func testAccCheckAzureDataDiskDestroy(s *terraform.State) error { 142 mc := testAccProvider.Meta().(*Client).mgmtClient 143 144 for _, rs := range s.RootModule().Resources { 145 if rs.Type != "azure_data_disk" { 146 continue 147 } 148 149 if rs.Primary.ID == "" { 150 return fmt.Errorf("No Disk ID is set") 151 } 152 153 vm := rs.Primary.Attributes["virtual_machine"] 154 lun, err := strconv.Atoi(rs.Primary.Attributes["lun"]) 155 if err != nil { 156 return err 157 } 158 159 _, err = virtualmachinedisk.NewClient(mc).GetDataDisk(vm, vm, vm, lun) 160 if err == nil { 161 return fmt.Errorf("Resource %s still exists", rs.Primary.ID) 162 } 163 164 if !management.IsResourceNotFoundError(err) { 165 return err 166 } 167 } 168 169 return nil 170 } 171 172 var testAccAzureDataDisk_basic = fmt.Sprintf(` 173 resource "azure_instance" "foo" { 174 name = "terraform-test" 175 image = "Ubuntu Server 14.04 LTS" 176 size = "Basic_A1" 177 storage = "%s" 178 location = "West US" 179 username = "terraform" 180 password = "Pass!admin123" 181 } 182 183 resource "azure_data_disk" "foo" { 184 lun = 0 185 size = 10 186 storage = "${azure_instance.foo.storage}" 187 virtual_machine = "${azure_instance.foo.id}" 188 }`, os.Getenv("AZURE_STORAGE")) 189 190 var testAccAzureDataDisk_advanced = fmt.Sprintf(` 191 resource "azure_instance" "foo" { 192 name = "terraform-test1" 193 image = "Ubuntu Server 14.04 LTS" 194 size = "Basic_A1" 195 storage = "%s" 196 location = "West US" 197 username = "terraform" 198 password = "Pass!admin123" 199 } 200 201 resource "azure_data_disk" "foo" { 202 lun = 1 203 size = 10 204 caching = "ReadOnly" 205 storage = "${azure_instance.foo.storage}" 206 virtual_machine = "${azure_instance.foo.id}" 207 }`, os.Getenv("AZURE_STORAGE")) 208 209 var testAccAzureDataDisk_update = fmt.Sprintf(` 210 resource "azure_instance" "foo" { 211 name = "terraform-test1" 212 image = "Ubuntu Server 14.04 LTS" 213 size = "Basic_A1" 214 storage = "%s" 215 location = "West US" 216 username = "terraform" 217 password = "Pass!admin123" 218 } 219 220 resource "azure_instance" "bar" { 221 name = "terraform-test2" 222 image = "Ubuntu Server 14.04 LTS" 223 size = "Basic_A1" 224 storage = "${azure_instance.foo.storage}" 225 location = "West US" 226 username = "terraform" 227 password = "Pass!admin123" 228 } 229 230 resource "azure_data_disk" "foo" { 231 lun = 2 232 size = 20 233 caching = "ReadWrite" 234 storage = "${azure_instance.bar.storage}" 235 virtual_machine = "${azure_instance.bar.id}" 236 }`, os.Getenv("AZURE_STORAGE"))