github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/digitalocean/resource_digitalocean_volume_test.go (about)

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