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