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