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 }