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 }