github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/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  }`