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

     1  package digitalocean
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/digitalocean/godo"
     8  	"github.com/hashicorp/terraform/helper/acctest"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccDigitalOceanVolume_Basic(t *testing.T) {
    14  	name := fmt.Sprintf("volume-%s", acctest.RandString(10))
    15  
    16  	volume := godo.Volume{
    17  		Name: name,
    18  	}
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckDigitalOceanVolumeDestroy,
    24  		Steps: []resource.TestStep{
    25  			{
    26  				Config: fmt.Sprintf(testAccCheckDigitalOceanVolumeConfig_basic, name),
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckDigitalOceanVolumeExists("digitalocean_volume.foobar", &volume),
    29  					resource.TestCheckResourceAttr(
    30  						"digitalocean_volume.foobar", "name", name),
    31  					resource.TestCheckResourceAttr(
    32  						"digitalocean_volume.foobar", "size", "100"),
    33  					resource.TestCheckResourceAttr(
    34  						"digitalocean_volume.foobar", "region", "nyc1"),
    35  					resource.TestCheckResourceAttr(
    36  						"digitalocean_volume.foobar", "description", "peace makes plenty"),
    37  				),
    38  			},
    39  		},
    40  	})
    41  }
    42  
    43  const testAccCheckDigitalOceanVolumeConfig_basic = `
    44  resource "digitalocean_volume" "foobar" {
    45  	region      = "nyc1"
    46  	name        = "%s"
    47  	size        = 100
    48  	description = "peace makes plenty"
    49  }`
    50  
    51  func testAccCheckDigitalOceanVolumeExists(rn string, volume *godo.Volume) resource.TestCheckFunc {
    52  	return func(s *terraform.State) error {
    53  		rs, ok := s.RootModule().Resources[rn]
    54  		if !ok {
    55  			return fmt.Errorf("not found: %s", rn)
    56  		}
    57  		if rs.Primary.ID == "" {
    58  			return fmt.Errorf("no volume ID is set")
    59  		}
    60  
    61  		client := testAccProvider.Meta().(*godo.Client)
    62  
    63  		got, _, err := client.Storage.GetVolume(rs.Primary.ID)
    64  		if err != nil {
    65  			return err
    66  		}
    67  		if got.Name != volume.Name {
    68  			return fmt.Errorf("wrong volume found, want %q got %q", volume.Name, got.Name)
    69  		}
    70  		// get the computed volume details
    71  		*volume = *got
    72  		return nil
    73  	}
    74  }
    75  
    76  func testAccCheckDigitalOceanVolumeDestroy(s *terraform.State) error {
    77  	client := testAccProvider.Meta().(*godo.Client)
    78  
    79  	for _, rs := range s.RootModule().Resources {
    80  		if rs.Type != "digitalocean_volume" {
    81  			continue
    82  		}
    83  
    84  		// Try to find the volume
    85  		_, _, err := client.Storage.GetVolume(rs.Primary.ID)
    86  
    87  		if err == nil {
    88  			return fmt.Errorf("Volume still exists")
    89  		}
    90  	}
    91  
    92  	return nil
    93  }
    94  
    95  func TestAccDigitalOceanVolume_Droplet(t *testing.T) {
    96  	var (
    97  		volume  = godo.Volume{Name: fmt.Sprintf("volume-%s", acctest.RandString(10))}
    98  		droplet godo.Droplet
    99  	)
   100  	rInt := acctest.RandInt()
   101  
   102  	resource.Test(t, resource.TestCase{
   103  		PreCheck:     func() { testAccPreCheck(t) },
   104  		Providers:    testAccProviders,
   105  		CheckDestroy: testAccCheckDigitalOceanVolumeDestroy,
   106  		Steps: []resource.TestStep{
   107  			{
   108  				Config: testAccCheckDigitalOceanVolumeConfig_droplet(rInt, volume.Name),
   109  				Check: resource.ComposeTestCheckFunc(
   110  					testAccCheckDigitalOceanVolumeExists("digitalocean_volume.foobar", &volume),
   111  					testAccCheckDigitalOceanDropletExists("digitalocean_droplet.foobar", &droplet),
   112  					// the droplet should see an attached volume
   113  					resource.TestCheckResourceAttr(
   114  						"digitalocean_droplet.foobar", "volume_ids.#", "1"),
   115  				),
   116  			},
   117  		},
   118  	})
   119  }
   120  
   121  func testAccCheckDigitalOceanVolumeConfig_droplet(rInt int, vName string) string {
   122  	return fmt.Sprintf(`
   123  resource "digitalocean_volume" "foobar" {
   124  	region      = "nyc1"
   125  	name        = "%s"
   126  	size        = 100
   127  	description = "peace makes plenty"
   128  }
   129  
   130  resource "digitalocean_droplet" "foobar" {
   131    name               = "baz-%d"
   132    size               = "1gb"
   133    image              = "centos-7-x64"
   134    region             = "nyc1"
   135    ipv6               = true
   136    private_networking = true
   137    volume_ids         = ["${digitalocean_volume.foobar.id}"]
   138  }`, vName, rInt)
   139  }