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