github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_storage_account_test.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestValidateArmStorageAccountType(t *testing.T) { 14 testCases := []struct { 15 input string 16 shouldError bool 17 }{ 18 {"standard_lrs", false}, 19 {"invalid", true}, 20 } 21 22 for _, test := range testCases { 23 _, es := validateArmStorageAccountType(test.input, "account_type") 24 25 if test.shouldError && len(es) == 0 { 26 t.Fatalf("Expected validating account_type %q to fail", test.input) 27 } 28 } 29 } 30 31 func TestValidateArmStorageAccountName(t *testing.T) { 32 testCases := []struct { 33 input string 34 shouldError bool 35 }{ 36 {"ab", true}, 37 {"ABC", true}, 38 {"abc", false}, 39 {"123456789012345678901234", false}, 40 {"1234567890123456789012345", true}, 41 {"abc12345", false}, 42 } 43 44 for _, test := range testCases { 45 _, es := validateArmStorageAccountName(test.input, "name") 46 47 if test.shouldError && len(es) == 0 { 48 t.Fatalf("Expected validating name %q to fail", test.input) 49 } 50 } 51 } 52 53 func TestAccAzureRMStorageAccount_basic(t *testing.T) { 54 ri := acctest.RandInt() 55 rs := acctest.RandString(4) 56 preConfig := fmt.Sprintf(testAccAzureRMStorageAccount_basic, ri, rs) 57 postConfig := fmt.Sprintf(testAccAzureRMStorageAccount_update, ri, rs) 58 59 resource.Test(t, resource.TestCase{ 60 PreCheck: func() { testAccPreCheck(t) }, 61 Providers: testAccProviders, 62 CheckDestroy: testCheckAzureRMStorageAccountDestroy, 63 Steps: []resource.TestStep{ 64 resource.TestStep{ 65 Config: preConfig, 66 Check: resource.ComposeTestCheckFunc( 67 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 68 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "account_type", "Standard_LRS"), 69 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.%", "1"), 70 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.environment", "production"), 71 ), 72 }, 73 74 resource.TestStep{ 75 Config: postConfig, 76 Check: resource.ComposeTestCheckFunc( 77 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 78 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "account_type", "Standard_GRS"), 79 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.%", "1"), 80 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.environment", "staging"), 81 ), 82 }, 83 }, 84 }) 85 } 86 87 func TestAccAzureRMStorageAccount_disappears(t *testing.T) { 88 ri := acctest.RandInt() 89 rs := acctest.RandString(4) 90 preConfig := fmt.Sprintf(testAccAzureRMStorageAccount_basic, ri, rs) 91 92 resource.Test(t, resource.TestCase{ 93 PreCheck: func() { testAccPreCheck(t) }, 94 Providers: testAccProviders, 95 CheckDestroy: testCheckAzureRMStorageAccountDestroy, 96 Steps: []resource.TestStep{ 97 resource.TestStep{ 98 Config: preConfig, 99 Check: resource.ComposeTestCheckFunc( 100 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 101 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "account_type", "Standard_LRS"), 102 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.%", "1"), 103 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "tags.environment", "production"), 104 testCheckAzureRMStorageAccountDisappears("azurerm_storage_account.testsa"), 105 ), 106 ExpectNonEmptyPlan: true, 107 }, 108 }, 109 }) 110 } 111 112 func TestAccAzureRMStorageAccount_blobEncryption(t *testing.T) { 113 ri := acctest.RandInt() 114 rs := acctest.RandString(4) 115 preConfig := fmt.Sprintf(testAccAzureRMStorageAccount_blobEncryption, ri, rs) 116 postConfig := fmt.Sprintf(testAccAzureRMStorageAccount_blobEncryptionDisabled, ri, rs) 117 118 resource.Test(t, resource.TestCase{ 119 PreCheck: func() { testAccPreCheck(t) }, 120 Providers: testAccProviders, 121 CheckDestroy: testCheckAzureRMStorageAccountDestroy, 122 Steps: []resource.TestStep{ 123 resource.TestStep{ 124 Config: preConfig, 125 Check: resource.ComposeTestCheckFunc( 126 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 127 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "enable_blob_encryption", "true"), 128 ), 129 }, 130 131 resource.TestStep{ 132 Config: postConfig, 133 Check: resource.ComposeTestCheckFunc( 134 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 135 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "enable_blob_encryption", "false"), 136 ), 137 }, 138 }, 139 }) 140 } 141 142 func TestAccAzureRMStorageAccount_blobStorageWithUpdate(t *testing.T) { 143 ri := acctest.RandInt() 144 rs := acctest.RandString(4) 145 preConfig := fmt.Sprintf(testAccAzureRMStorageAccount_blobStorage, ri, rs) 146 postConfig := fmt.Sprintf(testAccAzureRMStorageAccount_blobStorageUpdate, ri, rs) 147 148 resource.Test(t, resource.TestCase{ 149 PreCheck: func() { testAccPreCheck(t) }, 150 Providers: testAccProviders, 151 CheckDestroy: testCheckAzureRMStorageAccountDestroy, 152 Steps: []resource.TestStep{ 153 resource.TestStep{ 154 Config: preConfig, 155 Check: resource.ComposeTestCheckFunc( 156 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 157 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "account_kind", "BlobStorage"), 158 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "access_tier", "Hot"), 159 ), 160 }, 161 162 resource.TestStep{ 163 Config: postConfig, 164 Check: resource.ComposeTestCheckFunc( 165 testCheckAzureRMStorageAccountExists("azurerm_storage_account.testsa"), 166 resource.TestCheckResourceAttr("azurerm_storage_account.testsa", "access_tier", "Cool"), 167 ), 168 }, 169 }, 170 }) 171 } 172 173 func testCheckAzureRMStorageAccountExists(name string) resource.TestCheckFunc { 174 return func(s *terraform.State) error { 175 // Ensure we have enough information in state to look up in API 176 rs, ok := s.RootModule().Resources[name] 177 if !ok { 178 return fmt.Errorf("Not found: %s", name) 179 } 180 181 storageAccount := rs.Primary.Attributes["name"] 182 resourceGroup := rs.Primary.Attributes["resource_group_name"] 183 184 // Ensure resource group exists in API 185 conn := testAccProvider.Meta().(*ArmClient).storageServiceClient 186 187 resp, err := conn.GetProperties(resourceGroup, storageAccount) 188 if err != nil { 189 return fmt.Errorf("Bad: Get on storageServiceClient: %s", err) 190 } 191 192 if resp.StatusCode == http.StatusNotFound { 193 return fmt.Errorf("Bad: StorageAccount %q (resource group: %q) does not exist", name, resourceGroup) 194 } 195 196 return nil 197 } 198 } 199 200 func testCheckAzureRMStorageAccountDisappears(name string) resource.TestCheckFunc { 201 return func(s *terraform.State) error { 202 // Ensure we have enough information in state to look up in API 203 rs, ok := s.RootModule().Resources[name] 204 if !ok { 205 return fmt.Errorf("Not found: %s", name) 206 } 207 208 storageAccount := rs.Primary.Attributes["name"] 209 resourceGroup := rs.Primary.Attributes["resource_group_name"] 210 211 // Ensure resource group exists in API 212 conn := testAccProvider.Meta().(*ArmClient).storageServiceClient 213 214 _, err := conn.Delete(resourceGroup, storageAccount) 215 if err != nil { 216 return fmt.Errorf("Bad: Delete on storageServiceClient: %s", err) 217 } 218 219 return nil 220 } 221 } 222 223 func testCheckAzureRMStorageAccountDestroy(s *terraform.State) error { 224 conn := testAccProvider.Meta().(*ArmClient).storageServiceClient 225 226 for _, rs := range s.RootModule().Resources { 227 if rs.Type != "azurerm_storage_account" { 228 continue 229 } 230 231 name := rs.Primary.Attributes["name"] 232 resourceGroup := rs.Primary.Attributes["resource_group_name"] 233 234 resp, err := conn.GetProperties(resourceGroup, name) 235 if err != nil { 236 return nil 237 } 238 239 if resp.StatusCode != http.StatusNotFound { 240 return fmt.Errorf("Storage Account still exists:\n%#v", resp.AccountProperties) 241 } 242 } 243 244 return nil 245 } 246 247 var testAccAzureRMStorageAccount_basic = ` 248 resource "azurerm_resource_group" "testrg" { 249 name = "testAccAzureRMSA-%d" 250 location = "westus" 251 } 252 253 resource "azurerm_storage_account" "testsa" { 254 name = "unlikely23exst2acct%s" 255 resource_group_name = "${azurerm_resource_group.testrg.name}" 256 257 location = "westus" 258 account_type = "Standard_LRS" 259 260 tags { 261 environment = "production" 262 } 263 }` 264 265 var testAccAzureRMStorageAccount_update = ` 266 resource "azurerm_resource_group" "testrg" { 267 name = "testAccAzureRMSA-%d" 268 location = "westus" 269 } 270 271 resource "azurerm_storage_account" "testsa" { 272 name = "unlikely23exst2acct%s" 273 resource_group_name = "${azurerm_resource_group.testrg.name}" 274 275 location = "westus" 276 account_type = "Standard_GRS" 277 278 tags { 279 environment = "staging" 280 } 281 }` 282 283 var testAccAzureRMStorageAccount_blobEncryption = ` 284 resource "azurerm_resource_group" "testrg" { 285 name = "testAccAzureRMSA-%d" 286 location = "westus" 287 } 288 289 resource "azurerm_storage_account" "testsa" { 290 name = "unlikely23exst2acct%s" 291 resource_group_name = "${azurerm_resource_group.testrg.name}" 292 293 location = "westus" 294 account_type = "Standard_LRS" 295 enable_blob_encryption = true 296 297 tags { 298 environment = "production" 299 } 300 }` 301 302 var testAccAzureRMStorageAccount_blobEncryptionDisabled = ` 303 resource "azurerm_resource_group" "testrg" { 304 name = "testAccAzureRMSA-%d" 305 location = "westus" 306 } 307 308 resource "azurerm_storage_account" "testsa" { 309 name = "unlikely23exst2acct%s" 310 resource_group_name = "${azurerm_resource_group.testrg.name}" 311 312 location = "westus" 313 account_type = "Standard_LRS" 314 enable_blob_encryption = false 315 316 tags { 317 environment = "production" 318 } 319 }` 320 321 // BlobStorage accounts are not available in WestUS 322 var testAccAzureRMStorageAccount_blobStorage = ` 323 resource "azurerm_resource_group" "testrg" { 324 name = "testAccAzureRMSA-%d" 325 location = "northeurope" 326 } 327 328 resource "azurerm_storage_account" "testsa" { 329 name = "unlikely23exst2acct%s" 330 resource_group_name = "${azurerm_resource_group.testrg.name}" 331 332 location = "northeurope" 333 account_kind = "BlobStorage" 334 account_type = "Standard_LRS" 335 336 tags { 337 environment = "production" 338 } 339 }` 340 341 var testAccAzureRMStorageAccount_blobStorageUpdate = ` 342 resource "azurerm_resource_group" "testrg" { 343 name = "testAccAzureRMSA-%d" 344 location = "northeurope" 345 } 346 347 resource "azurerm_storage_account" "testsa" { 348 name = "unlikely23exst2acct%s" 349 resource_group_name = "${azurerm_resource_group.testrg.name}" 350 351 location = "northeurope" 352 account_kind = "BlobStorage" 353 account_type = "Standard_LRS" 354 access_tier = "Cool" 355 356 tags { 357 environment = "production" 358 } 359 }`