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"))