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

     1  package azurerm
     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  	"github.com/jen20/riviera/dns"
    11  )
    12  
    13  func TestAccAzureRMDnsMxRecord_basic(t *testing.T) {
    14  	ri := acctest.RandInt()
    15  	config := fmt.Sprintf(testAccAzureRMDnsMxRecord_basic, ri, ri, ri)
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testCheckAzureRMDnsMxRecordDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: config,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testCheckAzureRMDnsMxRecordExists("azurerm_dns_mx_record.test"),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func TestAccAzureRMDnsMxRecord_updateRecords(t *testing.T) {
    33  	ri := acctest.RandInt()
    34  	preConfig := fmt.Sprintf(testAccAzureRMDnsMxRecord_basic, ri, ri, ri)
    35  	postConfig := fmt.Sprintf(testAccAzureRMDnsMxRecord_updateRecords, ri, ri, ri)
    36  
    37  	resource.Test(t, resource.TestCase{
    38  		PreCheck:     func() { testAccPreCheck(t) },
    39  		Providers:    testAccProviders,
    40  		CheckDestroy: testCheckAzureRMDnsMxRecordDestroy,
    41  		Steps: []resource.TestStep{
    42  			resource.TestStep{
    43  				Config: preConfig,
    44  				Check: resource.ComposeTestCheckFunc(
    45  					testCheckAzureRMDnsMxRecordExists("azurerm_dns_mx_record.test"),
    46  					resource.TestCheckResourceAttr(
    47  						"azurerm_dns_mx_record.test", "record.#", "2"),
    48  				),
    49  			},
    50  
    51  			resource.TestStep{
    52  				Config: postConfig,
    53  				Check: resource.ComposeTestCheckFunc(
    54  					testCheckAzureRMDnsMxRecordExists("azurerm_dns_mx_record.test"),
    55  					resource.TestCheckResourceAttr(
    56  						"azurerm_dns_mx_record.test", "record.#", "3"),
    57  				),
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func TestAccAzureRMDnsMxRecord_withTags(t *testing.T) {
    64  	ri := acctest.RandInt()
    65  	preConfig := fmt.Sprintf(testAccAzureRMDnsMxRecord_withTags, ri, ri, ri)
    66  	postConfig := fmt.Sprintf(testAccAzureRMDnsMxRecord_withTagsUpdate, ri, ri, ri)
    67  
    68  	resource.Test(t, resource.TestCase{
    69  		PreCheck:     func() { testAccPreCheck(t) },
    70  		Providers:    testAccProviders,
    71  		CheckDestroy: testCheckAzureRMDnsMxRecordDestroy,
    72  		Steps: []resource.TestStep{
    73  			resource.TestStep{
    74  				Config: preConfig,
    75  				Check: resource.ComposeTestCheckFunc(
    76  					testCheckAzureRMDnsMxRecordExists("azurerm_dns_mx_record.test"),
    77  					resource.TestCheckResourceAttr(
    78  						"azurerm_dns_mx_record.test", "tags.%", "2"),
    79  				),
    80  			},
    81  
    82  			resource.TestStep{
    83  				Config: postConfig,
    84  				Check: resource.ComposeTestCheckFunc(
    85  					testCheckAzureRMDnsMxRecordExists("azurerm_dns_mx_record.test"),
    86  					resource.TestCheckResourceAttr(
    87  						"azurerm_dns_mx_record.test", "tags.%", "1"),
    88  				),
    89  			},
    90  		},
    91  	})
    92  }
    93  
    94  func testCheckAzureRMDnsMxRecordExists(name string) resource.TestCheckFunc {
    95  	return func(s *terraform.State) error {
    96  		// Ensure we have enough information in state to look up in API
    97  		rs, ok := s.RootModule().Resources[name]
    98  		if !ok {
    99  			return fmt.Errorf("Not found: %s", name)
   100  		}
   101  
   102  		conn := testAccProvider.Meta().(*ArmClient).rivieraClient
   103  
   104  		readRequest := conn.NewRequestForURI(rs.Primary.ID)
   105  		readRequest.Command = &dns.GetMXRecordSet{}
   106  
   107  		readResponse, err := readRequest.Execute()
   108  		if err != nil {
   109  			return fmt.Errorf("Bad: GetMXRecordSet: %s", err)
   110  		}
   111  		if !readResponse.IsSuccessful() {
   112  			return fmt.Errorf("Bad: GetMXRecordSet: %s", readResponse.Error)
   113  		}
   114  
   115  		return nil
   116  	}
   117  }
   118  
   119  func testCheckAzureRMDnsMxRecordDestroy(s *terraform.State) error {
   120  	conn := testAccProvider.Meta().(*ArmClient).rivieraClient
   121  
   122  	for _, rs := range s.RootModule().Resources {
   123  		if rs.Type != "azurerm_dns_mx_record" {
   124  			continue
   125  		}
   126  
   127  		readRequest := conn.NewRequestForURI(rs.Primary.ID)
   128  		readRequest.Command = &dns.GetMXRecordSet{}
   129  
   130  		readResponse, err := readRequest.Execute()
   131  		if err != nil {
   132  			return fmt.Errorf("Bad: GetMXRecordSet: %s", err)
   133  		}
   134  
   135  		if readResponse.IsSuccessful() {
   136  			return fmt.Errorf("Bad: DNS MX Record still exists: %s", readResponse.Error)
   137  		}
   138  	}
   139  
   140  	return nil
   141  }
   142  
   143  var testAccAzureRMDnsMxRecord_basic = `
   144  resource "azurerm_resource_group" "test" {
   145      name = "acctestRG_%d"
   146      location = "West US"
   147  }
   148  resource "azurerm_dns_zone" "test" {
   149      name = "acctestzone%d.com"
   150      resource_group_name = "${azurerm_resource_group.test.name}"
   151  }
   152  
   153  resource "azurerm_dns_mx_record" "test" {
   154      name = "myarecord%d"
   155      resource_group_name = "${azurerm_resource_group.test.name}"
   156      zone_name = "${azurerm_dns_zone.test.name}"
   157      ttl = "300"
   158  
   159      record {
   160  	preference = "10"
   161  	exchange = "mail1.contoso.com"
   162      }
   163  
   164      record {
   165  	preference = "20"
   166  	exchange = "mail2.contoso.com"
   167      }
   168  }
   169  `
   170  
   171  var testAccAzureRMDnsMxRecord_updateRecords = `
   172  resource "azurerm_resource_group" "test" {
   173      name = "acctestRG_%d"
   174      location = "West US"
   175  }
   176  resource "azurerm_dns_zone" "test" {
   177      name = "acctestzone%d.com"
   178      resource_group_name = "${azurerm_resource_group.test.name}"
   179  }
   180  
   181  resource "azurerm_dns_mx_record" "test" {
   182      name = "myarecord%d"
   183      resource_group_name = "${azurerm_resource_group.test.name}"
   184      zone_name = "${azurerm_dns_zone.test.name}"
   185      ttl = "300"
   186  
   187      record {
   188  	preference = "10"
   189  	exchange = "mail1.contoso.com"
   190      }
   191  
   192      record {
   193  	preference = "20"
   194  	exchange = "mail2.contoso.com"
   195      }
   196  
   197      record {
   198  	preference = "50"
   199  	exchange = "mail3.contoso.com"
   200      }
   201  }
   202  `
   203  
   204  var testAccAzureRMDnsMxRecord_withTags = `
   205  resource "azurerm_resource_group" "test" {
   206      name = "acctestRG_%d"
   207      location = "West US"
   208  }
   209  resource "azurerm_dns_zone" "test" {
   210      name = "acctestzone%d.com"
   211      resource_group_name = "${azurerm_resource_group.test.name}"
   212  }
   213  
   214  resource "azurerm_dns_mx_record" "test" {
   215      name = "myarecord%d"
   216      resource_group_name = "${azurerm_resource_group.test.name}"
   217      zone_name = "${azurerm_dns_zone.test.name}"
   218      ttl = "300"
   219  
   220      record {
   221  	preference = "10"
   222  	exchange = "mail1.contoso.com"
   223      }
   224  
   225      record {
   226  	preference = "20"
   227  	exchange = "mail2.contoso.com"
   228      }
   229  
   230      tags {
   231  	environment = "Production"
   232  	cost_center = "MSFT"
   233      }
   234  }
   235  `
   236  
   237  var testAccAzureRMDnsMxRecord_withTagsUpdate = `
   238  resource "azurerm_resource_group" "test" {
   239      name = "acctestRG_%d"
   240      location = "West US"
   241  }
   242  resource "azurerm_dns_zone" "test" {
   243      name = "acctestzone%d.com"
   244      resource_group_name = "${azurerm_resource_group.test.name}"
   245  }
   246  
   247  resource "azurerm_dns_mx_record" "test" {
   248      name = "myarecord%d"
   249      resource_group_name = "${azurerm_resource_group.test.name}"
   250      zone_name = "${azurerm_dns_zone.test.name}"
   251      ttl = "300"
   252  
   253      record {
   254  	preference = "10"
   255  	exchange = "mail1.contoso.com"
   256      }
   257  
   258      record {
   259  	preference = "20"
   260  	exchange = "mail2.contoso.com"
   261      }
   262  
   263      tags {
   264  	environment = "staging"
   265      }
   266  }
   267  `