github.com/ezbercih/terraform@v0.1.1-0.20140729011846-3c33865e0839/builtin/providers/digitalocean/resource_digitalocean_droplet_test.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 "github.com/pearkes/digitalocean" 11 ) 12 13 func TestAccDigitalOceanDroplet_Basic(t *testing.T) { 14 var droplet digitalocean.Droplet 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckDigitalOceanDropletDestroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccCheckDigitalOceanDropletConfig_basic, 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckDigitalOceanDropletExists("digitalocean_droplet.foobar", &droplet), 25 testAccCheckDigitalOceanDropletAttributes(&droplet), 26 resource.TestCheckResourceAttr( 27 "digitalocean_droplet.foobar", "name", "foo"), 28 resource.TestCheckResourceAttr( 29 "digitalocean_droplet.foobar", "size", "512mb"), 30 resource.TestCheckResourceAttr( 31 "digitalocean_droplet.foobar", "image", "centos-5-8-x32"), 32 resource.TestCheckResourceAttr( 33 "digitalocean_droplet.foobar", "region", "nyc2"), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func TestAccDigitalOceanDroplet_Update(t *testing.T) { 41 var droplet digitalocean.Droplet 42 43 resource.Test(t, resource.TestCase{ 44 PreCheck: func() { testAccPreCheck(t) }, 45 Providers: testAccProviders, 46 CheckDestroy: testAccCheckDigitalOceanDropletDestroy, 47 Steps: []resource.TestStep{ 48 resource.TestStep{ 49 Config: testAccCheckDigitalOceanDropletConfig_basic, 50 Check: resource.ComposeTestCheckFunc( 51 testAccCheckDigitalOceanDropletExists("digitalocean_droplet.foobar", &droplet), 52 testAccCheckDigitalOceanDropletAttributes(&droplet), 53 ), 54 }, 55 56 resource.TestStep{ 57 Config: testAccCheckDigitalOceanDropletConfig_RenameAndResize, 58 Check: resource.ComposeTestCheckFunc( 59 testAccCheckDigitalOceanDropletExists("digitalocean_droplet.foobar", &droplet), 60 testAccCheckDigitalOceanDropletRenamedAndResized(&droplet), 61 resource.TestCheckResourceAttr( 62 "digitalocean_droplet.foobar", "name", "baz"), 63 resource.TestCheckResourceAttr( 64 "digitalocean_droplet.foobar", "size", "1gb"), 65 ), 66 }, 67 }, 68 }) 69 } 70 71 func testAccCheckDigitalOceanDropletDestroy(s *terraform.State) error { 72 client := testAccProvider.client 73 74 for _, rs := range s.Resources { 75 if rs.Type != "digitalocean_droplet" { 76 continue 77 } 78 79 // Try to find the Droplet 80 _, err := client.RetrieveDroplet(rs.ID) 81 82 // Wait 83 84 if err != nil && !strings.Contains(err.Error(), "404") { 85 return fmt.Errorf( 86 "Error waiting for droplet (%s) to be destroyed: %s", 87 rs.ID, err) 88 } 89 } 90 91 return nil 92 } 93 94 func testAccCheckDigitalOceanDropletAttributes(droplet *digitalocean.Droplet) resource.TestCheckFunc { 95 return func(s *terraform.State) error { 96 97 if droplet.ImageSlug() != "centos-5-8-x32" { 98 return fmt.Errorf("Bad image_slug: %s", droplet.ImageSlug()) 99 } 100 101 if droplet.SizeSlug() != "512mb" { 102 return fmt.Errorf("Bad size_slug: %s", droplet.SizeSlug()) 103 } 104 105 if droplet.RegionSlug() != "nyc2" { 106 return fmt.Errorf("Bad region_slug: %s", droplet.RegionSlug()) 107 } 108 109 if droplet.Name != "foo" { 110 return fmt.Errorf("Bad name: %s", droplet.Name) 111 } 112 return nil 113 } 114 } 115 116 func testAccCheckDigitalOceanDropletRenamedAndResized(droplet *digitalocean.Droplet) resource.TestCheckFunc { 117 return func(s *terraform.State) error { 118 119 if droplet.SizeSlug() != "1gb" { 120 return fmt.Errorf("Bad size_slug: %s", droplet.SizeSlug()) 121 } 122 123 if droplet.Name != "baz" { 124 return fmt.Errorf("Bad name: %s", droplet.Name) 125 } 126 127 return nil 128 } 129 } 130 func testAccCheckDigitalOceanDropletExists(n string, droplet *digitalocean.Droplet) resource.TestCheckFunc { 131 return func(s *terraform.State) error { 132 rs, ok := s.Resources[n] 133 if !ok { 134 return fmt.Errorf("Not found: %s", n) 135 } 136 137 if rs.ID == "" { 138 return fmt.Errorf("No Droplet ID is set") 139 } 140 141 client := testAccProvider.client 142 143 retrieveDroplet, err := client.RetrieveDroplet(rs.ID) 144 145 if err != nil { 146 return err 147 } 148 149 if retrieveDroplet.StringId() != rs.ID { 150 return fmt.Errorf("Droplet not found") 151 } 152 153 *droplet = retrieveDroplet 154 155 return nil 156 } 157 } 158 159 func Test_new_droplet_state_refresh_func(t *testing.T) { 160 droplet := digitalocean.Droplet{ 161 Name: "foobar", 162 } 163 resourceMap, _ := resource_digitalocean_droplet_update_state( 164 &terraform.ResourceState{Attributes: map[string]string{}}, &droplet) 165 166 // See if we can access our attribute 167 if _, ok := resourceMap.Attributes["name"]; !ok { 168 t.Fatalf("bad name: %s", resourceMap.Attributes) 169 } 170 171 } 172 173 const testAccCheckDigitalOceanDropletConfig_basic = ` 174 resource "digitalocean_droplet" "foobar" { 175 name = "foo" 176 size = "512mb" 177 image = "centos-5-8-x32" 178 region = "nyc2" 179 } 180 ` 181 182 const testAccCheckDigitalOceanDropletConfig_RenameAndResize = ` 183 resource "digitalocean_droplet" "foobar" { 184 name = "baz" 185 size = "1gb" 186 image = "centos-5-8-x32" 187 region = "nyc2" 188 } 189 `