github.com/hobbeswalsh/terraform@v0.3.7-0.20150619183303-ad17cf55a0fa/builtin/providers/digitalocean/resource_digitalocean_record_test.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/pearkes/digitalocean" 10 ) 11 12 func TestAccDigitalOceanRecord_Basic(t *testing.T) { 13 var record digitalocean.Record 14 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckDigitalOceanRecordDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccCheckDigitalOceanRecordConfig_basic, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 24 testAccCheckDigitalOceanRecordAttributes(&record), 25 resource.TestCheckResourceAttr( 26 "digitalocean_record.foobar", "name", "terraform"), 27 resource.TestCheckResourceAttr( 28 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 29 resource.TestCheckResourceAttr( 30 "digitalocean_record.foobar", "value", "192.168.0.10"), 31 ), 32 }, 33 }, 34 }) 35 } 36 37 func TestAccDigitalOceanRecord_Updated(t *testing.T) { 38 var record digitalocean.Record 39 40 resource.Test(t, resource.TestCase{ 41 PreCheck: func() { testAccPreCheck(t) }, 42 Providers: testAccProviders, 43 CheckDestroy: testAccCheckDigitalOceanRecordDestroy, 44 Steps: []resource.TestStep{ 45 resource.TestStep{ 46 Config: testAccCheckDigitalOceanRecordConfig_basic, 47 Check: resource.ComposeTestCheckFunc( 48 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 49 testAccCheckDigitalOceanRecordAttributes(&record), 50 resource.TestCheckResourceAttr( 51 "digitalocean_record.foobar", "name", "terraform"), 52 resource.TestCheckResourceAttr( 53 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 54 resource.TestCheckResourceAttr( 55 "digitalocean_record.foobar", "value", "192.168.0.10"), 56 resource.TestCheckResourceAttr( 57 "digitalocean_record.foobar", "type", "A"), 58 ), 59 }, 60 resource.TestStep{ 61 Config: testAccCheckDigitalOceanRecordConfig_new_value, 62 Check: resource.ComposeTestCheckFunc( 63 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 64 testAccCheckDigitalOceanRecordAttributesUpdated(&record), 65 resource.TestCheckResourceAttr( 66 "digitalocean_record.foobar", "name", "terraform"), 67 resource.TestCheckResourceAttr( 68 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 69 resource.TestCheckResourceAttr( 70 "digitalocean_record.foobar", "value", "192.168.0.11"), 71 resource.TestCheckResourceAttr( 72 "digitalocean_record.foobar", "type", "A"), 73 ), 74 }, 75 }, 76 }) 77 } 78 79 func TestAccDigitalOceanRecord_HostnameValue(t *testing.T) { 80 var record digitalocean.Record 81 82 resource.Test(t, resource.TestCase{ 83 PreCheck: func() { testAccPreCheck(t) }, 84 Providers: testAccProviders, 85 CheckDestroy: testAccCheckDigitalOceanRecordDestroy, 86 Steps: []resource.TestStep{ 87 resource.TestStep{ 88 Config: testAccCheckDigitalOceanRecordConfig_cname, 89 Check: resource.ComposeTestCheckFunc( 90 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 91 testAccCheckDigitalOceanRecordAttributesHostname("a", &record), 92 resource.TestCheckResourceAttr( 93 "digitalocean_record.foobar", "name", "terraform"), 94 resource.TestCheckResourceAttr( 95 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 96 resource.TestCheckResourceAttr( 97 "digitalocean_record.foobar", "value", "a.foobar-test-terraform.com."), 98 resource.TestCheckResourceAttr( 99 "digitalocean_record.foobar", "type", "CNAME"), 100 ), 101 }, 102 }, 103 }) 104 } 105 106 func TestAccDigitalOceanRecord_RelativeHostnameValue(t *testing.T) { 107 var record digitalocean.Record 108 109 resource.Test(t, resource.TestCase{ 110 PreCheck: func() { testAccPreCheck(t) }, 111 Providers: testAccProviders, 112 CheckDestroy: testAccCheckDigitalOceanRecordDestroy, 113 Steps: []resource.TestStep{ 114 resource.TestStep{ 115 Config: testAccCheckDigitalOceanRecordConfig_relative_cname, 116 Check: resource.ComposeTestCheckFunc( 117 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 118 testAccCheckDigitalOceanRecordAttributesHostname("a.b", &record), 119 resource.TestCheckResourceAttr( 120 "digitalocean_record.foobar", "name", "terraform"), 121 resource.TestCheckResourceAttr( 122 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 123 resource.TestCheckResourceAttr( 124 "digitalocean_record.foobar", "value", "a.b"), 125 resource.TestCheckResourceAttr( 126 "digitalocean_record.foobar", "type", "CNAME"), 127 ), 128 }, 129 }, 130 }) 131 } 132 133 func TestAccDigitalOceanRecord_ExternalHostnameValue(t *testing.T) { 134 var record digitalocean.Record 135 136 resource.Test(t, resource.TestCase{ 137 PreCheck: func() { testAccPreCheck(t) }, 138 Providers: testAccProviders, 139 CheckDestroy: testAccCheckDigitalOceanRecordDestroy, 140 Steps: []resource.TestStep{ 141 resource.TestStep{ 142 Config: testAccCheckDigitalOceanRecordConfig_external_cname, 143 Check: resource.ComposeTestCheckFunc( 144 testAccCheckDigitalOceanRecordExists("digitalocean_record.foobar", &record), 145 testAccCheckDigitalOceanRecordAttributesHostname("a.foobar-test-terraform.net", &record), 146 resource.TestCheckResourceAttr( 147 "digitalocean_record.foobar", "name", "terraform"), 148 resource.TestCheckResourceAttr( 149 "digitalocean_record.foobar", "domain", "foobar-test-terraform.com"), 150 resource.TestCheckResourceAttr( 151 "digitalocean_record.foobar", "value", "a.foobar-test-terraform.net."), 152 resource.TestCheckResourceAttr( 153 "digitalocean_record.foobar", "type", "CNAME"), 154 ), 155 }, 156 }, 157 }) 158 } 159 160 func testAccCheckDigitalOceanRecordDestroy(s *terraform.State) error { 161 client := testAccProvider.Meta().(*digitalocean.Client) 162 163 for _, rs := range s.RootModule().Resources { 164 if rs.Type != "digitalocean_record" { 165 continue 166 } 167 168 _, err := client.RetrieveRecord(rs.Primary.Attributes["domain"], rs.Primary.ID) 169 170 if err == nil { 171 return fmt.Errorf("Record still exists") 172 } 173 } 174 175 return nil 176 } 177 178 func testAccCheckDigitalOceanRecordAttributes(record *digitalocean.Record) resource.TestCheckFunc { 179 return func(s *terraform.State) error { 180 181 if record.Data != "192.168.0.10" { 182 return fmt.Errorf("Bad value: %s", record.Data) 183 } 184 185 return nil 186 } 187 } 188 189 func testAccCheckDigitalOceanRecordAttributesUpdated(record *digitalocean.Record) resource.TestCheckFunc { 190 return func(s *terraform.State) error { 191 192 if record.Data != "192.168.0.11" { 193 return fmt.Errorf("Bad value: %s", record.Data) 194 } 195 196 return nil 197 } 198 } 199 200 func testAccCheckDigitalOceanRecordExists(n string, record *digitalocean.Record) resource.TestCheckFunc { 201 return func(s *terraform.State) error { 202 rs, ok := s.RootModule().Resources[n] 203 204 if !ok { 205 return fmt.Errorf("Not found: %s", n) 206 } 207 208 if rs.Primary.ID == "" { 209 return fmt.Errorf("No Record ID is set") 210 } 211 212 client := testAccProvider.Meta().(*digitalocean.Client) 213 214 foundRecord, err := client.RetrieveRecord(rs.Primary.Attributes["domain"], rs.Primary.ID) 215 216 if err != nil { 217 return err 218 } 219 220 if foundRecord.StringId() != rs.Primary.ID { 221 return fmt.Errorf("Record not found") 222 } 223 224 *record = foundRecord 225 226 return nil 227 } 228 } 229 230 func testAccCheckDigitalOceanRecordAttributesHostname(data string, record *digitalocean.Record) resource.TestCheckFunc { 231 return func(s *terraform.State) error { 232 233 if record.Data != data { 234 return fmt.Errorf("Bad value: expected %s, got %s", data, record.Data) 235 } 236 237 return nil 238 } 239 } 240 241 const testAccCheckDigitalOceanRecordConfig_basic = ` 242 resource "digitalocean_domain" "foobar" { 243 name = "foobar-test-terraform.com" 244 ip_address = "192.168.0.10" 245 } 246 247 resource "digitalocean_record" "foobar" { 248 domain = "${digitalocean_domain.foobar.name}" 249 250 name = "terraform" 251 value = "192.168.0.10" 252 type = "A" 253 }` 254 255 const testAccCheckDigitalOceanRecordConfig_new_value = ` 256 resource "digitalocean_domain" "foobar" { 257 name = "foobar-test-terraform.com" 258 ip_address = "192.168.0.10" 259 } 260 261 resource "digitalocean_record" "foobar" { 262 domain = "${digitalocean_domain.foobar.name}" 263 264 name = "terraform" 265 value = "192.168.0.11" 266 type = "A" 267 }` 268 269 const testAccCheckDigitalOceanRecordConfig_cname = ` 270 resource "digitalocean_domain" "foobar" { 271 name = "foobar-test-terraform.com" 272 ip_address = "192.168.0.10" 273 } 274 275 resource "digitalocean_record" "foobar" { 276 domain = "${digitalocean_domain.foobar.name}" 277 278 name = "terraform" 279 value = "a.foobar-test-terraform.com." 280 type = "CNAME" 281 }` 282 283 const testAccCheckDigitalOceanRecordConfig_relative_cname = ` 284 resource "digitalocean_domain" "foobar" { 285 name = "foobar-test-terraform.com" 286 ip_address = "192.168.0.10" 287 } 288 289 resource "digitalocean_record" "foobar" { 290 domain = "${digitalocean_domain.foobar.name}" 291 292 name = "terraform" 293 value = "a.b" 294 type = "CNAME" 295 }` 296 297 const testAccCheckDigitalOceanRecordConfig_external_cname = ` 298 resource "digitalocean_domain" "foobar" { 299 name = "foobar-test-terraform.com" 300 ip_address = "192.168.0.10" 301 } 302 303 resource "digitalocean_record" "foobar" { 304 domain = "${digitalocean_domain.foobar.name}" 305 306 name = "terraform" 307 value = "a.foobar-test-terraform.net." 308 type = "CNAME" 309 }`