github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/google/resource_compute_disk_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	"google.golang.org/api/compute/v1"
    11  )
    12  
    13  func TestAccComputeDisk_basic(t *testing.T) {
    14  	diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    15  	var disk compute.Disk
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckComputeDiskDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: testAccComputeDisk_basic(diskName),
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckComputeDiskExists(
    26  						"google_compute_disk.foobar", &disk),
    27  				),
    28  			},
    29  		},
    30  	})
    31  }
    32  
    33  func TestAccComputeDisk_encryption(t *testing.T) {
    34  	diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    35  	var disk compute.Disk
    36  
    37  	resource.Test(t, resource.TestCase{
    38  		PreCheck:     func() { testAccPreCheck(t) },
    39  		Providers:    testAccProviders,
    40  		CheckDestroy: testAccCheckComputeDiskDestroy,
    41  		Steps: []resource.TestStep{
    42  			resource.TestStep{
    43  				Config: testAccComputeDisk_encryption(diskName),
    44  				Check: resource.ComposeTestCheckFunc(
    45  					testAccCheckComputeDiskExists(
    46  						"google_compute_disk.foobar", &disk),
    47  					testAccCheckEncryptionKey(
    48  						"google_compute_disk.foobar", &disk),
    49  				),
    50  			},
    51  		},
    52  	})
    53  }
    54  
    55  func testAccCheckComputeDiskDestroy(s *terraform.State) error {
    56  	config := testAccProvider.Meta().(*Config)
    57  
    58  	for _, rs := range s.RootModule().Resources {
    59  		if rs.Type != "google_compute_disk" {
    60  			continue
    61  		}
    62  
    63  		_, err := config.clientCompute.Disks.Get(
    64  			config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
    65  		if err == nil {
    66  			return fmt.Errorf("Disk still exists")
    67  		}
    68  	}
    69  
    70  	return nil
    71  }
    72  
    73  func testAccCheckComputeDiskExists(n string, disk *compute.Disk) resource.TestCheckFunc {
    74  	return func(s *terraform.State) error {
    75  		rs, ok := s.RootModule().Resources[n]
    76  		if !ok {
    77  			return fmt.Errorf("Not found: %s", n)
    78  		}
    79  
    80  		if rs.Primary.ID == "" {
    81  			return fmt.Errorf("No ID is set")
    82  		}
    83  
    84  		config := testAccProvider.Meta().(*Config)
    85  
    86  		found, err := config.clientCompute.Disks.Get(
    87  			config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
    88  		if err != nil {
    89  			return err
    90  		}
    91  
    92  		if found.Name != rs.Primary.ID {
    93  			return fmt.Errorf("Disk not found")
    94  		}
    95  
    96  		*disk = *found
    97  
    98  		return nil
    99  	}
   100  }
   101  
   102  func testAccCheckEncryptionKey(n string, disk *compute.Disk) resource.TestCheckFunc {
   103  	return func(s *terraform.State) error {
   104  		rs, ok := s.RootModule().Resources[n]
   105  		if !ok {
   106  			return fmt.Errorf("Not found: %s", n)
   107  		}
   108  
   109  		attr := rs.Primary.Attributes["disk_encryption_key_sha256"]
   110  		if disk.DiskEncryptionKey == nil && attr != "" {
   111  			return fmt.Errorf("Disk %s has mismatched encryption key.\nTF State: %+v\nGCP State: <empty>", n, attr)
   112  		}
   113  
   114  		if attr != disk.DiskEncryptionKey.Sha256 {
   115  			return fmt.Errorf("Disk %s has mismatched encryption key.\nTF State: %+v.\nGCP State: %+v",
   116  				n, attr, disk.DiskEncryptionKey.Sha256)
   117  		}
   118  		return nil
   119  	}
   120  }
   121  
   122  func testAccComputeDisk_basic(diskName string) string {
   123  	return fmt.Sprintf(`
   124  resource "google_compute_disk" "foobar" {
   125  	name = "%s"
   126  	image = "debian-8-jessie-v20160803"
   127  	size = 50
   128  	type = "pd-ssd"
   129  	zone = "us-central1-a"
   130  }`, diskName)
   131  }
   132  
   133  func testAccComputeDisk_encryption(diskName string) string {
   134  	return fmt.Sprintf(`
   135  resource "google_compute_disk" "foobar" {
   136  	name = "%s"
   137  	image = "debian-8-jessie-v20160803"
   138  	size = 50
   139  	type = "pd-ssd"
   140  	zone = "us-central1-a"
   141  	disk_encryption_key_raw = "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
   142  }`, diskName)
   143  }