github.com/simonswine/terraform@v0.9.0-beta2/builtin/providers/ns1/resource_record_test.go (about) 1 package ns1 2 3 import ( 4 "fmt" 5 "reflect" 6 "sort" 7 "testing" 8 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 12 ns1 "gopkg.in/ns1/ns1-go.v2/rest" 13 "gopkg.in/ns1/ns1-go.v2/rest/model/dns" 14 ) 15 16 func TestAccRecord_basic(t *testing.T) { 17 var record dns.Record 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckRecordDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccRecordBasic, 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckRecordExists("ns1_record.it", &record), 27 testAccCheckRecordDomain(&record, "test.terraform-record-test.io"), 28 testAccCheckRecordTTL(&record, 60), 29 testAccCheckRecordRegionName(&record, []string{"cal"}), 30 // testAccCheckRecordAnswerMetaWeight(&record, 10), 31 testAccCheckRecordAnswerRdata(&record, "test1.terraform-record-test.io"), 32 ), 33 }, 34 }, 35 }) 36 } 37 38 func TestAccRecord_updated(t *testing.T) { 39 var record dns.Record 40 resource.Test(t, resource.TestCase{ 41 PreCheck: func() { testAccPreCheck(t) }, 42 Providers: testAccProviders, 43 CheckDestroy: testAccCheckRecordDestroy, 44 Steps: []resource.TestStep{ 45 resource.TestStep{ 46 Config: testAccRecordBasic, 47 Check: resource.ComposeTestCheckFunc( 48 testAccCheckRecordExists("ns1_record.it", &record), 49 testAccCheckRecordDomain(&record, "test.terraform-record-test.io"), 50 testAccCheckRecordTTL(&record, 60), 51 testAccCheckRecordRegionName(&record, []string{"cal"}), 52 // testAccCheckRecordAnswerMetaWeight(&record, 10), 53 testAccCheckRecordAnswerRdata(&record, "test1.terraform-record-test.io"), 54 ), 55 }, 56 resource.TestStep{ 57 Config: testAccRecordUpdated, 58 Check: resource.ComposeTestCheckFunc( 59 testAccCheckRecordExists("ns1_record.it", &record), 60 testAccCheckRecordDomain(&record, "test.terraform-record-test.io"), 61 testAccCheckRecordTTL(&record, 120), 62 testAccCheckRecordRegionName(&record, []string{"ny", "wa"}), 63 // testAccCheckRecordAnswerMetaWeight(&record, 5), 64 testAccCheckRecordAnswerRdata(&record, "test2.terraform-record-test.io"), 65 ), 66 }, 67 }, 68 }) 69 } 70 71 func testAccCheckRecordExists(n string, record *dns.Record) resource.TestCheckFunc { 72 return func(s *terraform.State) error { 73 rs, ok := s.RootModule().Resources[n] 74 if !ok { 75 return fmt.Errorf("Not found: %v", n) 76 } 77 78 if rs.Primary.ID == "" { 79 return fmt.Errorf("NoID is set") 80 } 81 82 client := testAccProvider.Meta().(*ns1.Client) 83 84 p := rs.Primary 85 86 foundRecord, _, err := client.Records.Get(p.Attributes["zone"], p.Attributes["domain"], p.Attributes["type"]) 87 if err != nil { 88 return fmt.Errorf("Record not found") 89 } 90 91 if foundRecord.Domain != p.Attributes["domain"] { 92 return fmt.Errorf("Record not found") 93 } 94 95 *record = *foundRecord 96 97 return nil 98 } 99 } 100 101 func testAccCheckRecordDestroy(s *terraform.State) error { 102 client := testAccProvider.Meta().(*ns1.Client) 103 104 var recordDomain string 105 var recordZone string 106 var recordType string 107 108 for _, rs := range s.RootModule().Resources { 109 if rs.Type != "ns1_record" { 110 continue 111 } 112 113 if rs.Type == "ns1_record" { 114 recordType = rs.Primary.Attributes["type"] 115 recordDomain = rs.Primary.Attributes["domain"] 116 recordZone = rs.Primary.Attributes["zone"] 117 } 118 } 119 120 foundRecord, _, err := client.Records.Get(recordDomain, recordZone, recordType) 121 if err != nil { 122 return fmt.Errorf("Record still exists: %#v", foundRecord) 123 } 124 125 return nil 126 } 127 128 func testAccCheckRecordDomain(r *dns.Record, expected string) resource.TestCheckFunc { 129 return func(s *terraform.State) error { 130 if r.Domain != expected { 131 return fmt.Errorf("Domain: got: %#v want: %#v", r.Domain, expected) 132 } 133 return nil 134 } 135 } 136 137 func testAccCheckRecordTTL(r *dns.Record, expected int) resource.TestCheckFunc { 138 return func(s *terraform.State) error { 139 if r.TTL != expected { 140 return fmt.Errorf("TTL: got: %#v want: %#v", r.TTL, expected) 141 } 142 return nil 143 } 144 } 145 146 func testAccCheckRecordRegionName(r *dns.Record, expected []string) resource.TestCheckFunc { 147 return func(s *terraform.State) error { 148 regions := make([]string, len(r.Regions)) 149 150 i := 0 151 for k := range r.Regions { 152 regions[i] = k 153 i++ 154 } 155 sort.Strings(regions) 156 sort.Strings(expected) 157 if !reflect.DeepEqual(regions, expected) { 158 return fmt.Errorf("Regions: got: %#v want: %#v", regions, expected) 159 } 160 return nil 161 } 162 } 163 164 func testAccCheckRecordAnswerMetaWeight(r *dns.Record, expected float64) resource.TestCheckFunc { 165 return func(s *terraform.State) error { 166 recordAnswer := r.Answers[0] 167 recordMetas := recordAnswer.Meta 168 weight := recordMetas.Weight.(float64) 169 if weight != expected { 170 return fmt.Errorf("Answers[0].Meta.Weight: got: %#v want: %#v", weight, expected) 171 } 172 return nil 173 } 174 } 175 176 func testAccCheckRecordAnswerRdata(r *dns.Record, expected string) resource.TestCheckFunc { 177 return func(s *terraform.State) error { 178 recordAnswer := r.Answers[0] 179 recordAnswerString := recordAnswer.Rdata[0] 180 if recordAnswerString != expected { 181 return fmt.Errorf("Answers[0].Rdata[0]: got: %#v want: %#v", recordAnswerString, expected) 182 } 183 return nil 184 } 185 } 186 187 const testAccRecordBasic = ` 188 resource "ns1_record" "it" { 189 zone = "${ns1_zone.test.zone}" 190 domain = "test.${ns1_zone.test.zone}" 191 type = "CNAME" 192 ttl = 60 193 194 // meta { 195 // weight = 5 196 // connections = 3 197 // // up = false // Ignored by d.GetOk("meta.0.up") due to known issue 198 // } 199 200 answers { 201 answer = "test1.terraform-record-test.io" 202 region = "cal" 203 204 // meta { 205 // weight = 10 206 // up = true 207 // } 208 } 209 210 regions { 211 name = "cal" 212 // meta { 213 // up = true 214 // us_state = ["CA"] 215 // } 216 } 217 218 filters { 219 filter = "up" 220 } 221 222 filters { 223 filter = "geotarget_country" 224 } 225 226 filters { 227 filter = "select_first_n" 228 config = {N=1} 229 } 230 } 231 232 resource "ns1_zone" "test" { 233 zone = "terraform-record-test.io" 234 } 235 ` 236 237 const testAccRecordUpdated = ` 238 resource "ns1_record" "it" { 239 zone = "${ns1_zone.test.zone}" 240 domain = "test.${ns1_zone.test.zone}" 241 type = "CNAME" 242 ttl = 120 243 use_client_subnet = true 244 245 // meta { 246 // weight = 5 247 // connections = 3 248 // // up = false // Ignored by d.GetOk("meta.0.up") due to known issue 249 // } 250 251 answers { 252 answer = "test2.terraform-record-test.io" 253 region = "ny" 254 255 // meta { 256 // weight = 5 257 // up = true 258 // } 259 } 260 261 regions { 262 name = "wa" 263 // meta { 264 // us_state = ["WA"] 265 // } 266 } 267 268 regions { 269 name = "ny" 270 // meta { 271 // us_state = ["NY"] 272 // } 273 } 274 275 filters { 276 filter = "up" 277 } 278 279 filters { 280 filter = "geotarget_country" 281 } 282 } 283 284 resource "ns1_zone" "test" { 285 zone = "terraform-record-test.io" 286 } 287 `