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  `