github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_virtual_network_test.go (about)

     1  package azurerm
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/acctest"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAzureRMVirtualNetwork_basic(t *testing.T) {
    14  
    15  	ri := acctest.RandInt()
    16  	config := fmt.Sprintf(testAccAzureRMVirtualNetwork_basic, ri, ri)
    17  
    18  	resource.Test(t, resource.TestCase{
    19  		PreCheck:     func() { testAccPreCheck(t) },
    20  		Providers:    testAccProviders,
    21  		CheckDestroy: testCheckAzureRMVirtualNetworkDestroy,
    22  		Steps: []resource.TestStep{
    23  			resource.TestStep{
    24  				Config: config,
    25  				Check: resource.ComposeTestCheckFunc(
    26  					testCheckAzureRMVirtualNetworkExists("azurerm_virtual_network.test"),
    27  				),
    28  			},
    29  		},
    30  	})
    31  }
    32  
    33  func TestAccAzureRMVirtualNetwork_disappears(t *testing.T) {
    34  
    35  	ri := acctest.RandInt()
    36  	config := fmt.Sprintf(testAccAzureRMVirtualNetwork_basic, ri, ri)
    37  
    38  	resource.Test(t, resource.TestCase{
    39  		PreCheck:     func() { testAccPreCheck(t) },
    40  		Providers:    testAccProviders,
    41  		CheckDestroy: testCheckAzureRMVirtualNetworkDestroy,
    42  		Steps: []resource.TestStep{
    43  			resource.TestStep{
    44  				Config: config,
    45  				Check: resource.ComposeTestCheckFunc(
    46  					testCheckAzureRMVirtualNetworkExists("azurerm_virtual_network.test"),
    47  					testCheckAzureRMVirtualNetworkDisappears("azurerm_virtual_network.test"),
    48  				),
    49  				ExpectNonEmptyPlan: true,
    50  			},
    51  		},
    52  	})
    53  }
    54  
    55  func TestAccAzureRMVirtualNetwork_withTags(t *testing.T) {
    56  
    57  	ri := acctest.RandInt()
    58  	preConfig := fmt.Sprintf(testAccAzureRMVirtualNetwork_withTags, ri, ri)
    59  	postConfig := fmt.Sprintf(testAccAzureRMVirtualNetwork_withTagsUpdated, ri, ri)
    60  
    61  	resource.Test(t, resource.TestCase{
    62  		PreCheck:     func() { testAccPreCheck(t) },
    63  		Providers:    testAccProviders,
    64  		CheckDestroy: testCheckAzureRMVirtualNetworkDestroy,
    65  		Steps: []resource.TestStep{
    66  			resource.TestStep{
    67  				Config: preConfig,
    68  				Check: resource.ComposeTestCheckFunc(
    69  					testCheckAzureRMVirtualNetworkExists("azurerm_virtual_network.test"),
    70  					resource.TestCheckResourceAttr(
    71  						"azurerm_virtual_network.test", "tags.%", "2"),
    72  					resource.TestCheckResourceAttr(
    73  						"azurerm_virtual_network.test", "tags.environment", "Production"),
    74  					resource.TestCheckResourceAttr(
    75  						"azurerm_virtual_network.test", "tags.cost_center", "MSFT"),
    76  				),
    77  			},
    78  
    79  			resource.TestStep{
    80  				Config: postConfig,
    81  				Check: resource.ComposeTestCheckFunc(
    82  					testCheckAzureRMVirtualNetworkExists("azurerm_virtual_network.test"),
    83  					resource.TestCheckResourceAttr(
    84  						"azurerm_virtual_network.test", "tags.%", "1"),
    85  					resource.TestCheckResourceAttr(
    86  						"azurerm_virtual_network.test", "tags.environment", "staging"),
    87  				),
    88  			},
    89  		},
    90  	})
    91  }
    92  
    93  func testCheckAzureRMVirtualNetworkExists(name string) resource.TestCheckFunc {
    94  	return func(s *terraform.State) error {
    95  		// Ensure we have enough information in state to look up in API
    96  		rs, ok := s.RootModule().Resources[name]
    97  		if !ok {
    98  			return fmt.Errorf("Not found: %s", name)
    99  		}
   100  
   101  		virtualNetworkName := rs.Primary.Attributes["name"]
   102  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   103  		if !hasResourceGroup {
   104  			return fmt.Errorf("Bad: no resource group found in state for virtual network: %s", virtualNetworkName)
   105  		}
   106  
   107  		// Ensure resource group/virtual network combination exists in API
   108  		conn := testAccProvider.Meta().(*ArmClient).vnetClient
   109  
   110  		resp, err := conn.Get(resourceGroup, virtualNetworkName, "")
   111  		if err != nil {
   112  			return fmt.Errorf("Bad: Get on vnetClient: %s", err)
   113  		}
   114  
   115  		if resp.StatusCode == http.StatusNotFound {
   116  			return fmt.Errorf("Bad: Virtual Network %q (resource group: %q) does not exist", name, resourceGroup)
   117  		}
   118  
   119  		return nil
   120  	}
   121  }
   122  
   123  func testCheckAzureRMVirtualNetworkDisappears(name string) resource.TestCheckFunc {
   124  	return func(s *terraform.State) error {
   125  		// Ensure we have enough information in state to look up in API
   126  		rs, ok := s.RootModule().Resources[name]
   127  		if !ok {
   128  			return fmt.Errorf("Not found: %s", name)
   129  		}
   130  
   131  		virtualNetworkName := rs.Primary.Attributes["name"]
   132  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   133  		if !hasResourceGroup {
   134  			return fmt.Errorf("Bad: no resource group found in state for virtual network: %s", virtualNetworkName)
   135  		}
   136  
   137  		// Ensure resource group/virtual network combination exists in API
   138  		conn := testAccProvider.Meta().(*ArmClient).vnetClient
   139  
   140  		_, err := conn.Delete(resourceGroup, virtualNetworkName, make(chan struct{}))
   141  		if err != nil {
   142  			return fmt.Errorf("Bad: Delete on vnetClient: %s", err)
   143  		}
   144  
   145  		return nil
   146  	}
   147  }
   148  
   149  func testCheckAzureRMVirtualNetworkDestroy(s *terraform.State) error {
   150  	conn := testAccProvider.Meta().(*ArmClient).vnetClient
   151  
   152  	for _, rs := range s.RootModule().Resources {
   153  		if rs.Type != "azurerm_virtual_network" {
   154  			continue
   155  		}
   156  
   157  		name := rs.Primary.Attributes["name"]
   158  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   159  
   160  		resp, err := conn.Get(resourceGroup, name, "")
   161  
   162  		if err != nil {
   163  			return nil
   164  		}
   165  
   166  		if resp.StatusCode != http.StatusNotFound {
   167  			return fmt.Errorf("Virtual Network sitll exists:\n%#v", resp.VirtualNetworkPropertiesFormat)
   168  		}
   169  	}
   170  
   171  	return nil
   172  }
   173  
   174  var testAccAzureRMVirtualNetwork_basic = `
   175  resource "azurerm_resource_group" "test" {
   176      name = "acctestRG-%d"
   177      location = "West US"
   178  }
   179  
   180  resource "azurerm_virtual_network" "test" {
   181      name = "acctestvirtnet%d"
   182      address_space = ["10.0.0.0/16"]
   183      location = "West US"
   184      resource_group_name = "${azurerm_resource_group.test.name}"
   185  
   186      subnet {
   187          name = "subnet1"
   188          address_prefix = "10.0.1.0/24"
   189      }
   190  }
   191  `
   192  
   193  var testAccAzureRMVirtualNetwork_withTags = `
   194  resource "azurerm_resource_group" "test" {
   195      name = "acctestRG-%d"
   196      location = "West US"
   197  }
   198  
   199  resource "azurerm_virtual_network" "test" {
   200      name = "acctestvirtnet%d"
   201      address_space = ["10.0.0.0/16"]
   202      location = "West US"
   203      resource_group_name = "${azurerm_resource_group.test.name}"
   204  
   205      subnet {
   206          name = "subnet1"
   207          address_prefix = "10.0.1.0/24"
   208      }
   209  
   210      tags {
   211  	environment = "Production"
   212  	cost_center = "MSFT"
   213      }
   214  }
   215  `
   216  
   217  var testAccAzureRMVirtualNetwork_withTagsUpdated = `
   218  resource "azurerm_resource_group" "test" {
   219      name = "acctestRG-%d"
   220      location = "West US"
   221  }
   222  
   223  resource "azurerm_virtual_network" "test" {
   224      name = "acctestvirtnet%d"
   225      address_space = ["10.0.0.0/16"]
   226      location = "West US"
   227      resource_group_name = "${azurerm_resource_group.test.name}"
   228  
   229      subnet {
   230          name = "subnet1"
   231          address_prefix = "10.0.1.0/24"
   232      }
   233  
   234      tags {
   235  	environment = "staging"
   236      }
   237  }
   238  `