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  }`