github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/google/resource_dns_record_set_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestAccDnsRecordSet_basic(t *testing.T) {
    13  	zoneName := fmt.Sprintf("dnszone-test-%s", acctest.RandString(10))
    14  	resource.Test(t, resource.TestCase{
    15  		PreCheck:     func() { testAccPreCheck(t) },
    16  		Providers:    testAccProviders,
    17  		CheckDestroy: testAccCheckDnsRecordSetDestroy,
    18  		Steps: []resource.TestStep{
    19  			resource.TestStep{
    20  				Config: testAccDnsRecordSet_basic(zoneName, "127.0.0.10", 300),
    21  				Check: resource.ComposeTestCheckFunc(
    22  					testAccCheckDnsRecordSetExists(
    23  						"google_dns_record_set.foobar", zoneName),
    24  				),
    25  			},
    26  		},
    27  	})
    28  }
    29  
    30  func TestAccDnsRecordSet_modify(t *testing.T) {
    31  	zoneName := fmt.Sprintf("dnszone-test-%s", acctest.RandString(10))
    32  	resource.Test(t, resource.TestCase{
    33  		PreCheck:     func() { testAccPreCheck(t) },
    34  		Providers:    testAccProviders,
    35  		CheckDestroy: testAccCheckDnsRecordSetDestroy,
    36  		Steps: []resource.TestStep{
    37  			resource.TestStep{
    38  				Config: testAccDnsRecordSet_basic(zoneName, "127.0.0.10", 300),
    39  				Check: resource.ComposeTestCheckFunc(
    40  					testAccCheckDnsRecordSetExists(
    41  						"google_dns_record_set.foobar", zoneName),
    42  				),
    43  			},
    44  			resource.TestStep{
    45  				Config: testAccDnsRecordSet_basic(zoneName, "127.0.0.11", 300),
    46  				Check: resource.ComposeTestCheckFunc(
    47  					testAccCheckDnsRecordSetExists(
    48  						"google_dns_record_set.foobar", zoneName),
    49  				),
    50  			},
    51  			resource.TestStep{
    52  				Config: testAccDnsRecordSet_basic(zoneName, "127.0.0.11", 600),
    53  				Check: resource.ComposeTestCheckFunc(
    54  					testAccCheckDnsRecordSetExists(
    55  						"google_dns_record_set.foobar", zoneName),
    56  				),
    57  			},
    58  		},
    59  	})
    60  }
    61  
    62  func TestAccDnsRecordSet_changeType(t *testing.T) {
    63  	zoneName := fmt.Sprintf("dnszone-test-%s", acctest.RandString(10))
    64  	resource.Test(t, resource.TestCase{
    65  		PreCheck:     func() { testAccPreCheck(t) },
    66  		Providers:    testAccProviders,
    67  		CheckDestroy: testAccCheckDnsRecordSetDestroy,
    68  		Steps: []resource.TestStep{
    69  			resource.TestStep{
    70  				Config: testAccDnsRecordSet_basic(zoneName, "127.0.0.10", 300),
    71  				Check: resource.ComposeTestCheckFunc(
    72  					testAccCheckDnsRecordSetExists(
    73  						"google_dns_record_set.foobar", zoneName),
    74  				),
    75  			},
    76  			resource.TestStep{
    77  				Config: testAccDnsRecordSet_bigChange(zoneName, 600),
    78  				Check: resource.ComposeTestCheckFunc(
    79  					testAccCheckDnsRecordSetExists(
    80  						"google_dns_record_set.foobar", zoneName),
    81  				),
    82  			},
    83  		},
    84  	})
    85  }
    86  
    87  func testAccCheckDnsRecordSetDestroy(s *terraform.State) error {
    88  	config := testAccProvider.Meta().(*Config)
    89  
    90  	for _, rs := range s.RootModule().Resources {
    91  		// Deletion of the managed_zone implies everything is gone
    92  		if rs.Type == "google_dns_managed_zone" {
    93  			_, err := config.clientDns.ManagedZones.Get(
    94  				config.Project, rs.Primary.ID).Do()
    95  			if err == nil {
    96  				return fmt.Errorf("DNS ManagedZone still exists")
    97  			}
    98  		}
    99  	}
   100  
   101  	return nil
   102  }
   103  
   104  func testAccCheckDnsRecordSetExists(resourceType, resourceName string) resource.TestCheckFunc {
   105  	return func(s *terraform.State) error {
   106  		rs, ok := s.RootModule().Resources[resourceType]
   107  		if !ok {
   108  			return fmt.Errorf("Not found: %s", resourceName)
   109  		}
   110  
   111  		dnsName := rs.Primary.Attributes["name"]
   112  		dnsType := rs.Primary.Attributes["type"]
   113  
   114  		if rs.Primary.ID == "" {
   115  			return fmt.Errorf("No ID is set")
   116  		}
   117  
   118  		config := testAccProvider.Meta().(*Config)
   119  
   120  		resp, err := config.clientDns.ResourceRecordSets.List(
   121  			config.Project, resourceName).Name(dnsName).Type(dnsType).Do()
   122  		if err != nil {
   123  			return fmt.Errorf("Error confirming DNS RecordSet existence: %#v", err)
   124  		}
   125  		switch len(resp.Rrsets) {
   126  		case 0:
   127  			// The resource doesn't exist anymore
   128  			return fmt.Errorf("DNS RecordSet not found")
   129  		case 1:
   130  			return nil
   131  		default:
   132  			return fmt.Errorf("Only expected 1 record set, got %d", len(resp.Rrsets))
   133  		}
   134  	}
   135  }
   136  
   137  func testAccDnsRecordSet_basic(zoneName string, addr2 string, ttl int) string {
   138  	return fmt.Sprintf(`
   139  	resource "google_dns_managed_zone" "parent-zone" {
   140  		name = "%s"
   141  		dns_name = "hashicorptest.com."
   142  		description = "Test Description"
   143  	}
   144  	resource "google_dns_record_set" "foobar" {
   145  		managed_zone = "${google_dns_managed_zone.parent-zone.name}"
   146  		name = "test-record.hashicorptest.com."
   147  		type = "A"
   148  		rrdatas = ["127.0.0.1", "%s"]
   149  		ttl = %d
   150  	}
   151  	`, zoneName, addr2, ttl)
   152  }
   153  
   154  func testAccDnsRecordSet_bigChange(zoneName string, ttl int) string {
   155  	return fmt.Sprintf(`
   156  	resource "google_dns_managed_zone" "parent-zone" {
   157  		name = "%s"
   158  		dns_name = "hashicorptest.com."
   159  		description = "Test Description"
   160  	}
   161  	resource "google_dns_record_set" "foobar" {
   162  		managed_zone = "${google_dns_managed_zone.parent-zone.name}"
   163  		name = "test-record.hashicorptest.com."
   164  		type = "CNAME"
   165  		rrdatas = ["www.terraform.io."]
   166  		ttl = %d
   167  	}
   168  	`, zoneName, ttl)
   169  }