github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/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  			{
    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  			{
    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  		_, error := conn.Delete(resourceGroup, virtualNetworkName, make(chan struct{}))
   141  		err := <-error
   142  		if err != nil {
   143  			return fmt.Errorf("Bad: Delete on vnetClient: %s", err)
   144  		}
   145  
   146  		return nil
   147  	}
   148  }
   149  
   150  func testCheckAzureRMVirtualNetworkDestroy(s *terraform.State) error {
   151  	conn := testAccProvider.Meta().(*ArmClient).vnetClient
   152  
   153  	for _, rs := range s.RootModule().Resources {
   154  		if rs.Type != "azurerm_virtual_network" {
   155  			continue
   156  		}
   157  
   158  		name := rs.Primary.Attributes["name"]
   159  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   160  
   161  		resp, err := conn.Get(resourceGroup, name, "")
   162  
   163  		if err != nil {
   164  			return nil
   165  		}
   166  
   167  		if resp.StatusCode != http.StatusNotFound {
   168  			return fmt.Errorf("Virtual Network sitll exists:\n%#v", resp.VirtualNetworkPropertiesFormat)
   169  		}
   170  	}
   171  
   172  	return nil
   173  }
   174  
   175  var testAccAzureRMVirtualNetwork_basic = `
   176  resource "azurerm_resource_group" "test" {
   177      name = "acctestRG-%d"
   178      location = "West US"
   179  }
   180  
   181  resource "azurerm_virtual_network" "test" {
   182      name = "acctestvirtnet%d"
   183      address_space = ["10.0.0.0/16"]
   184      location = "West US"
   185      resource_group_name = "${azurerm_resource_group.test.name}"
   186  
   187      subnet {
   188          name = "subnet1"
   189          address_prefix = "10.0.1.0/24"
   190      }
   191  }
   192  `
   193  
   194  var testAccAzureRMVirtualNetwork_withTags = `
   195  resource "azurerm_resource_group" "test" {
   196      name = "acctestRG-%d"
   197      location = "West US"
   198  }
   199  
   200  resource "azurerm_virtual_network" "test" {
   201      name = "acctestvirtnet%d"
   202      address_space = ["10.0.0.0/16"]
   203      location = "West US"
   204      resource_group_name = "${azurerm_resource_group.test.name}"
   205  
   206      subnet {
   207          name = "subnet1"
   208          address_prefix = "10.0.1.0/24"
   209      }
   210  
   211      tags {
   212  		environment = "Production"
   213  		cost_center = "MSFT"
   214      }
   215  }
   216  `
   217  
   218  var testAccAzureRMVirtualNetwork_withTagsUpdated = `
   219  resource "azurerm_resource_group" "test" {
   220      name = "acctestRG-%d"
   221      location = "West US"
   222  }
   223  
   224  resource "azurerm_virtual_network" "test" {
   225      name = "acctestvirtnet%d"
   226      address_space = ["10.0.0.0/16"]
   227      location = "West US"
   228      resource_group_name = "${azurerm_resource_group.test.name}"
   229  
   230      subnet {
   231          name = "subnet1"
   232          address_prefix = "10.0.1.0/24"
   233      }
   234  
   235      tags {
   236  		environment = "staging"
   237      }
   238  }
   239  `