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