github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/digitalocean/resource_digitalocean_floating_ip_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 TestAccDigitalOceanFloatingIP_Region(t *testing.T) {
    15  	var floatingIP godo.FloatingIP
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckDigitalOceanFloatingIPDestroy,
    21  		Steps: []resource.TestStep{
    22  			{
    23  				Config: testAccCheckDigitalOceanFloatingIPConfig_region,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckDigitalOceanFloatingIPExists("digitalocean_floating_ip.foobar", &floatingIP),
    26  					resource.TestCheckResourceAttr(
    27  						"digitalocean_floating_ip.foobar", "region", "nyc3"),
    28  				),
    29  			},
    30  		},
    31  	})
    32  }
    33  
    34  func TestAccDigitalOceanFloatingIP_Droplet(t *testing.T) {
    35  	var floatingIP godo.FloatingIP
    36  	rInt := acctest.RandInt()
    37  
    38  	resource.Test(t, resource.TestCase{
    39  		PreCheck:     func() { testAccPreCheck(t) },
    40  		Providers:    testAccProviders,
    41  		CheckDestroy: testAccCheckDigitalOceanFloatingIPDestroy,
    42  		Steps: []resource.TestStep{
    43  			{
    44  				Config: testAccCheckDigitalOceanFloatingIPConfig_droplet(rInt),
    45  				Check: resource.ComposeTestCheckFunc(
    46  					testAccCheckDigitalOceanFloatingIPExists("digitalocean_floating_ip.foobar", &floatingIP),
    47  					resource.TestCheckResourceAttr(
    48  						"digitalocean_floating_ip.foobar", "region", "nyc3"),
    49  				),
    50  			},
    51  		},
    52  	})
    53  }
    54  
    55  func testAccCheckDigitalOceanFloatingIPDestroy(s *terraform.State) error {
    56  	client := testAccProvider.Meta().(*godo.Client)
    57  
    58  	for _, rs := range s.RootModule().Resources {
    59  		if rs.Type != "digitalocean_floating_ip" {
    60  			continue
    61  		}
    62  
    63  		// Try to find the key
    64  		_, _, err := client.FloatingIPs.Get(context.Background(), rs.Primary.ID)
    65  
    66  		if err == nil {
    67  			return fmt.Errorf("Floating IP still exists")
    68  		}
    69  	}
    70  
    71  	return nil
    72  }
    73  
    74  func testAccCheckDigitalOceanFloatingIPExists(n string, floatingIP *godo.FloatingIP) resource.TestCheckFunc {
    75  	return func(s *terraform.State) error {
    76  		rs, ok := s.RootModule().Resources[n]
    77  
    78  		if !ok {
    79  			return fmt.Errorf("Not found: %s", n)
    80  		}
    81  
    82  		if rs.Primary.ID == "" {
    83  			return fmt.Errorf("No Record ID is set")
    84  		}
    85  
    86  		client := testAccProvider.Meta().(*godo.Client)
    87  
    88  		// Try to find the FloatingIP
    89  		foundFloatingIP, _, err := client.FloatingIPs.Get(context.Background(), rs.Primary.ID)
    90  
    91  		if err != nil {
    92  			return err
    93  		}
    94  
    95  		if foundFloatingIP.IP != rs.Primary.ID {
    96  			return fmt.Errorf("Record not found")
    97  		}
    98  
    99  		*floatingIP = *foundFloatingIP
   100  
   101  		return nil
   102  	}
   103  }
   104  
   105  var testAccCheckDigitalOceanFloatingIPConfig_region = `
   106  resource "digitalocean_floating_ip" "foobar" {
   107    region = "nyc3"
   108  }`
   109  
   110  func testAccCheckDigitalOceanFloatingIPConfig_droplet(rInt int) string {
   111  	return fmt.Sprintf(`
   112  resource "digitalocean_droplet" "foobar" {
   113    name               = "baz-%d"
   114    size               = "1gb"
   115    image              = "centos-7-x64"
   116    region             = "nyc3"
   117    ipv6               = true
   118    private_networking = true
   119  }
   120  
   121  resource "digitalocean_floating_ip" "foobar" {
   122    droplet_id = "${digitalocean_droplet.foobar.id}"
   123    region     = "${digitalocean_droplet.foobar.region}"
   124  }`, rInt)
   125  }