github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/azurerm/resource_arm_virtual_network_peering_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 TestAccAzureRMVirtualNetworkPeering_basic(t *testing.T) {
    14  	ri := acctest.RandInt()
    15  	config := fmt.Sprintf(testAccAzureRMVirtualNetworkPeering_basic, ri, ri, ri, ri, ri)
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testCheckAzureRMVirtualNetworkPeeringDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: config,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test1"),
    26  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test2"),
    27  					resource.TestCheckResourceAttr(
    28  						"azurerm_virtual_network_peering.test1", "allow_virtual_network_access", "true"),
    29  					resource.TestCheckResourceAttr(
    30  						"azurerm_virtual_network_peering.test2", "allow_virtual_network_access", "true"),
    31  				),
    32  			},
    33  		},
    34  	})
    35  }
    36  
    37  func TestAccAzureRMVirtualNetworkPeering_disappears(t *testing.T) {
    38  	ri := acctest.RandInt()
    39  	config := fmt.Sprintf(testAccAzureRMVirtualNetworkPeering_basic, ri, ri, ri, ri, ri)
    40  
    41  	resource.Test(t, resource.TestCase{
    42  		PreCheck:     func() { testAccPreCheck(t) },
    43  		Providers:    testAccProviders,
    44  		CheckDestroy: testCheckAzureRMVirtualNetworkPeeringDestroy,
    45  		Steps: []resource.TestStep{
    46  			resource.TestStep{
    47  				Config: config,
    48  				Check: resource.ComposeTestCheckFunc(
    49  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test1"),
    50  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test2"),
    51  					resource.TestCheckResourceAttr(
    52  						"azurerm_virtual_network_peering.test1", "allow_virtual_network_access", "true"),
    53  					resource.TestCheckResourceAttr(
    54  						"azurerm_virtual_network_peering.test2", "allow_virtual_network_access", "true"),
    55  					testCheckAzureRMVirtualNetworkPeeringDisappears("azurerm_virtual_network_peering.test1"),
    56  				),
    57  				ExpectNonEmptyPlan: true,
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func TestAccAzureRMVirtualNetworkPeering_update(t *testing.T) {
    64  	ri := acctest.RandInt()
    65  	preConfig := fmt.Sprintf(testAccAzureRMVirtualNetworkPeering_basic, ri, ri, ri, ri, ri)
    66  	postConfig := fmt.Sprintf(testAccAzureRMVirtualNetworkPeering_basicUpdate, ri, ri, ri, ri, ri)
    67  
    68  	resource.Test(t, resource.TestCase{
    69  		PreCheck:     func() { testAccPreCheck(t) },
    70  		Providers:    testAccProviders,
    71  		CheckDestroy: testCheckAzureRMVirtualNetworkPeeringDestroy,
    72  		Steps: []resource.TestStep{
    73  			resource.TestStep{
    74  				Config: preConfig,
    75  				Check: resource.ComposeTestCheckFunc(
    76  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test1"),
    77  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test2"),
    78  					resource.TestCheckResourceAttr(
    79  						"azurerm_virtual_network_peering.test1", "allow_virtual_network_access", "true"),
    80  					resource.TestCheckResourceAttr(
    81  						"azurerm_virtual_network_peering.test2", "allow_virtual_network_access", "true"),
    82  					resource.TestCheckResourceAttr(
    83  						"azurerm_virtual_network_peering.test1", "allow_forwarded_traffic", "false"),
    84  					resource.TestCheckResourceAttr(
    85  						"azurerm_virtual_network_peering.test2", "allow_forwarded_traffic", "false"),
    86  				),
    87  			},
    88  
    89  			resource.TestStep{
    90  				Config: postConfig,
    91  				Check: resource.ComposeTestCheckFunc(
    92  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test1"),
    93  					testCheckAzureRMVirtualNetworkPeeringExists("azurerm_virtual_network_peering.test2"),
    94  					resource.TestCheckResourceAttr(
    95  						"azurerm_virtual_network_peering.test1", "allow_virtual_network_access", "true"),
    96  					resource.TestCheckResourceAttr(
    97  						"azurerm_virtual_network_peering.test2", "allow_virtual_network_access", "true"),
    98  					resource.TestCheckResourceAttr(
    99  						"azurerm_virtual_network_peering.test1", "allow_forwarded_traffic", "true"),
   100  					resource.TestCheckResourceAttr(
   101  						"azurerm_virtual_network_peering.test2", "allow_forwarded_traffic", "true"),
   102  				),
   103  			},
   104  		},
   105  	})
   106  }
   107  
   108  func testCheckAzureRMVirtualNetworkPeeringExists(name string) resource.TestCheckFunc {
   109  	return func(s *terraform.State) error {
   110  		// Ensure we have enough information in state to look up in API
   111  		rs, ok := s.RootModule().Resources[name]
   112  		if !ok {
   113  			return fmt.Errorf("Not found: %s", name)
   114  		}
   115  
   116  		name := rs.Primary.Attributes["name"]
   117  		vnetName := rs.Primary.Attributes["virtual_network_name"]
   118  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   119  		if !hasResourceGroup {
   120  			return fmt.Errorf("Bad: no resource group found in state for virtual network peering: %s", name)
   121  		}
   122  
   123  		// Ensure resource group/virtual network peering combination exists in API
   124  		conn := testAccProvider.Meta().(*ArmClient).vnetPeeringsClient
   125  
   126  		resp, err := conn.Get(resourceGroup, vnetName, name)
   127  		if err != nil {
   128  			return fmt.Errorf("Bad: Get on vnetPeeringsClient: %s", err)
   129  		}
   130  
   131  		if resp.StatusCode == http.StatusNotFound {
   132  			return fmt.Errorf("Bad: Virtual Network Peering %q (resource group: %q) does not exist", name, resourceGroup)
   133  		}
   134  
   135  		return nil
   136  	}
   137  }
   138  
   139  func testCheckAzureRMVirtualNetworkPeeringDisappears(name string) resource.TestCheckFunc {
   140  	return func(s *terraform.State) error {
   141  		// Ensure we have enough information in state to look up in API
   142  		rs, ok := s.RootModule().Resources[name]
   143  		if !ok {
   144  			return fmt.Errorf("Not found: %s", name)
   145  		}
   146  
   147  		name := rs.Primary.Attributes["name"]
   148  		vnetName := rs.Primary.Attributes["virtual_network_name"]
   149  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   150  		if !hasResourceGroup {
   151  			return fmt.Errorf("Bad: no resource group found in state for virtual network peering: %s", name)
   152  		}
   153  
   154  		// Ensure resource group/virtual network peering combination exists in API
   155  		conn := testAccProvider.Meta().(*ArmClient).vnetPeeringsClient
   156  
   157  		_, error := conn.Delete(resourceGroup, vnetName, name, make(chan struct{}))
   158  		err := <-error
   159  		if err != nil {
   160  			return fmt.Errorf("Bad: Delete on vnetPeeringsClient: %s", err)
   161  		}
   162  
   163  		return nil
   164  	}
   165  }
   166  
   167  func testCheckAzureRMVirtualNetworkPeeringDestroy(s *terraform.State) error {
   168  	conn := testAccProvider.Meta().(*ArmClient).vnetPeeringsClient
   169  
   170  	for _, rs := range s.RootModule().Resources {
   171  		if rs.Type != "azurerm_virtual_network_peering" {
   172  			continue
   173  		}
   174  
   175  		name := rs.Primary.Attributes["name"]
   176  		vnetName := rs.Primary.Attributes["virtual_network_name"]
   177  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   178  
   179  		resp, err := conn.Get(resourceGroup, vnetName, name)
   180  		if err != nil {
   181  			return nil
   182  		}
   183  
   184  		if resp.StatusCode != http.StatusNotFound {
   185  			return fmt.Errorf("Virtual Network Peering sitll exists:\n%#v", resp.VirtualNetworkPeeringPropertiesFormat)
   186  		}
   187  	}
   188  
   189  	return nil
   190  }
   191  
   192  var testAccAzureRMVirtualNetworkPeering_basic = `
   193  resource "azurerm_resource_group" "test" {
   194    name     = "acctestRG-%d"
   195    location = "West US"
   196  }
   197  
   198  resource "azurerm_virtual_network" "test1" {
   199    name                = "acctestvirtnet-1-%d"
   200    resource_group_name = "${azurerm_resource_group.test.name}"
   201    address_space       = ["10.0.1.0/24"]
   202    location            = "${azurerm_resource_group.test.location}"
   203  }
   204  
   205  resource "azurerm_virtual_network" "test2" {
   206    name                = "acctestvirtnet-2-%d"
   207    resource_group_name = "${azurerm_resource_group.test.name}"
   208    address_space       = ["10.0.2.0/24"]
   209    location            = "${azurerm_resource_group.test.location}"
   210  }
   211  
   212  resource "azurerm_virtual_network_peering" "test1" {
   213      name = "acctestpeer-1-%d"
   214      resource_group_name = "${azurerm_resource_group.test.name}"
   215      virtual_network_name = "${azurerm_virtual_network.test1.name}"
   216      remote_virtual_network_id = "${azurerm_virtual_network.test2.id}"
   217      allow_virtual_network_access = true
   218  }
   219  
   220  resource "azurerm_virtual_network_peering" "test2" {
   221      name = "acctestpeer-2-%d"
   222      resource_group_name = "${azurerm_resource_group.test.name}"
   223      virtual_network_name = "${azurerm_virtual_network.test2.name}"
   224      remote_virtual_network_id = "${azurerm_virtual_network.test1.id}"
   225      allow_virtual_network_access = true
   226  }
   227  `
   228  
   229  var testAccAzureRMVirtualNetworkPeering_basicUpdate = `
   230  resource "azurerm_resource_group" "test" {
   231    name     = "acctestRG-%d"
   232    location = "West US"
   233  }
   234  
   235  resource "azurerm_virtual_network" "test1" {
   236    name                = "acctestvirtnet-1-%d"
   237    resource_group_name = "${azurerm_resource_group.test.name}"
   238    address_space       = ["10.0.1.0/24"]
   239    location            = "${azurerm_resource_group.test.location}"
   240  }
   241  
   242  resource "azurerm_virtual_network" "test2" {
   243    name                = "acctestvirtnet-2-%d"
   244    resource_group_name = "${azurerm_resource_group.test.name}"
   245    address_space       = ["10.0.2.0/24"]
   246    location            = "${azurerm_resource_group.test.location}"
   247  }
   248  
   249  resource "azurerm_virtual_network_peering" "test1" {
   250      name = "acctestpeer-1-%d"
   251      resource_group_name = "${azurerm_resource_group.test.name}"
   252      virtual_network_name = "${azurerm_virtual_network.test1.name}"
   253      remote_virtual_network_id = "${azurerm_virtual_network.test2.id}"
   254      allow_forwarded_traffic = true
   255      allow_virtual_network_access = true
   256  }
   257  
   258  resource "azurerm_virtual_network_peering" "test2" {
   259      name = "acctestpeer-2-%d"
   260      resource_group_name = "${azurerm_resource_group.test.name}"
   261      virtual_network_name = "${azurerm_virtual_network.test2.name}"
   262      remote_virtual_network_id = "${azurerm_virtual_network.test1.id}"
   263      allow_forwarded_traffic = true
   264      allow_virtual_network_access = true
   265  }
   266  `