github.com/maheshbr/terraform@v0.3.1-0.20141020033300-deec7194a3ea/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 testAccCheckDigitalOceanRecordDestroy(s *terraform.State) error { 80 client := testAccProvider.client 81 82 for _, rs := range s.RootModule().Resources { 83 if rs.Type != "digitalocean_record" { 84 continue 85 } 86 87 _, err := client.RetrieveRecord(rs.Primary.Attributes["domain"], rs.Primary.ID) 88 89 if err == nil { 90 return fmt.Errorf("Record still exists") 91 } 92 } 93 94 return nil 95 } 96 97 func testAccCheckDigitalOceanRecordAttributes(record *digitalocean.Record) resource.TestCheckFunc { 98 return func(s *terraform.State) error { 99 100 if record.Data != "192.168.0.10" { 101 return fmt.Errorf("Bad value: %s", record.Data) 102 } 103 104 return nil 105 } 106 } 107 108 func testAccCheckDigitalOceanRecordAttributesUpdated(record *digitalocean.Record) resource.TestCheckFunc { 109 return func(s *terraform.State) error { 110 111 if record.Data != "192.168.0.11" { 112 return fmt.Errorf("Bad value: %s", record.Data) 113 } 114 115 return nil 116 } 117 } 118 119 func testAccCheckDigitalOceanRecordExists(n string, record *digitalocean.Record) resource.TestCheckFunc { 120 return func(s *terraform.State) error { 121 rs, ok := s.RootModule().Resources[n] 122 123 if !ok { 124 return fmt.Errorf("Not found: %s", n) 125 } 126 127 if rs.Primary.ID == "" { 128 return fmt.Errorf("No Record ID is set") 129 } 130 131 client := testAccProvider.client 132 133 foundRecord, err := client.RetrieveRecord(rs.Primary.Attributes["domain"], rs.Primary.ID) 134 135 if err != nil { 136 return err 137 } 138 139 if foundRecord.StringId() != rs.Primary.ID { 140 return fmt.Errorf("Record not found") 141 } 142 143 *record = foundRecord 144 145 return nil 146 } 147 } 148 149 const testAccCheckDigitalOceanRecordConfig_basic = ` 150 resource "digitalocean_domain" "foobar" { 151 name = "foobar-test-terraform.com" 152 ip_address = "192.168.0.10" 153 } 154 155 resource "digitalocean_record" "foobar" { 156 domain = "${digitalocean_domain.foobar.name}" 157 158 name = "terraform" 159 value = "192.168.0.10" 160 type = "A" 161 }` 162 163 const testAccCheckDigitalOceanRecordConfig_new_value = ` 164 resource "digitalocean_domain" "foobar" { 165 name = "foobar-test-terraform.com" 166 ip_address = "192.168.0.10" 167 } 168 169 resource "digitalocean_record" "foobar" { 170 domain = "${digitalocean_domain.foobar.name}" 171 172 name = "terraform" 173 value = "192.168.0.11" 174 type = "A" 175 }`