github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azure/resource_azure_virtual_network_test.go (about) 1 package azure 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/Azure/azure-sdk-for-go/management" 8 "github.com/Azure/azure-sdk-for-go/management/virtualnetwork" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccAzureVirtualNetwork_basic(t *testing.T) { 14 var network virtualnetwork.VirtualNetworkSite 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckAzureVirtualNetworkDestroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccAzureVirtualNetwork_basic, 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckAzureVirtualNetworkExists( 25 "azure_virtual_network.foo", &network), 26 testAccCheckAzureVirtualNetworkAttributes(&network), 27 resource.TestCheckResourceAttr( 28 "azure_virtual_network.foo", "name", "terraform-vnet"), 29 resource.TestCheckResourceAttr( 30 "azure_virtual_network.foo", "location", "West US"), 31 resource.TestCheckResourceAttr( 32 "azure_virtual_network.foo", "address_space.0", "10.1.2.0/24"), 33 resource.TestCheckResourceAttr( 34 "azure_virtual_network.foo", "subnet.1787288781.name", "subnet1"), 35 resource.TestCheckResourceAttr( 36 "azure_virtual_network.foo", "subnet.1787288781.address_prefix", "10.1.2.0/25"), 37 ), 38 }, 39 }, 40 }) 41 } 42 43 func TestAccAzureVirtualNetwork_advanced(t *testing.T) { 44 var network virtualnetwork.VirtualNetworkSite 45 46 resource.Test(t, resource.TestCase{ 47 PreCheck: func() { testAccPreCheck(t) }, 48 Providers: testAccProviders, 49 CheckDestroy: testAccCheckAzureVirtualNetworkDestroy, 50 Steps: []resource.TestStep{ 51 resource.TestStep{ 52 Config: testAccAzureVirtualNetwork_advanced, 53 Check: resource.ComposeTestCheckFunc( 54 testAccCheckAzureVirtualNetworkExists( 55 "azure_virtual_network.foo", &network), 56 testAccCheckAzureVirtualNetworkAttributes(&network), 57 resource.TestCheckResourceAttr( 58 "azure_virtual_network.foo", "name", "terraform-vnet"), 59 resource.TestCheckResourceAttr( 60 "azure_virtual_network.foo", "location", "West US"), 61 resource.TestCheckResourceAttr( 62 "azure_virtual_network.foo", "address_space.0", "10.1.2.0/24"), 63 resource.TestCheckResourceAttr( 64 "azure_virtual_network.foo", "subnet.33778499.name", "subnet1"), 65 resource.TestCheckResourceAttr( 66 "azure_virtual_network.foo", "subnet.33778499.address_prefix", "10.1.2.0/25"), 67 resource.TestCheckResourceAttr( 68 "azure_virtual_network.foo", "subnet.33778499.security_group", "terraform-security-group1"), 69 ), 70 }, 71 }, 72 }) 73 } 74 75 func TestAccAzureVirtualNetwork_update(t *testing.T) { 76 var network virtualnetwork.VirtualNetworkSite 77 78 resource.Test(t, resource.TestCase{ 79 PreCheck: func() { testAccPreCheck(t) }, 80 Providers: testAccProviders, 81 CheckDestroy: testAccCheckAzureVirtualNetworkDestroy, 82 Steps: []resource.TestStep{ 83 resource.TestStep{ 84 Config: testAccAzureVirtualNetwork_advanced, 85 Check: resource.ComposeTestCheckFunc( 86 testAccCheckAzureVirtualNetworkExists( 87 "azure_virtual_network.foo", &network), 88 testAccCheckAzureVirtualNetworkAttributes(&network), 89 resource.TestCheckResourceAttr( 90 "azure_virtual_network.foo", "name", "terraform-vnet"), 91 resource.TestCheckResourceAttr( 92 "azure_virtual_network.foo", "location", "West US"), 93 resource.TestCheckResourceAttr( 94 "azure_virtual_network.foo", "address_space.0", "10.1.2.0/24"), 95 resource.TestCheckResourceAttr( 96 "azure_virtual_network.foo", "subnet.33778499.name", "subnet1"), 97 resource.TestCheckResourceAttr( 98 "azure_virtual_network.foo", "subnet.33778499.address_prefix", "10.1.2.0/25"), 99 resource.TestCheckResourceAttr( 100 "azure_virtual_network.foo", "subnet.33778499.security_group", "terraform-security-group1"), 101 ), 102 }, 103 104 resource.TestStep{ 105 Config: testAccAzureVirtualNetwork_update, 106 Check: resource.ComposeTestCheckFunc( 107 testAccCheckAzureVirtualNetworkExists( 108 "azure_virtual_network.foo", &network), 109 testAccCheckAzureVirtualNetworkAttributes(&network), 110 resource.TestCheckResourceAttr( 111 "azure_virtual_network.foo", "name", "terraform-vnet"), 112 resource.TestCheckResourceAttr( 113 "azure_virtual_network.foo", "location", "West US"), 114 resource.TestCheckResourceAttr( 115 "azure_virtual_network.foo", "address_space.0", "10.1.3.0/24"), 116 resource.TestCheckResourceAttr( 117 "azure_virtual_network.foo", "subnet.514595123.name", "subnet1"), 118 resource.TestCheckResourceAttr( 119 "azure_virtual_network.foo", "subnet.514595123.address_prefix", "10.1.3.128/25"), 120 resource.TestCheckResourceAttr( 121 "azure_virtual_network.foo", "subnet.514595123.security_group", "terraform-security-group2"), 122 ), 123 }, 124 }, 125 }) 126 } 127 128 func testAccCheckAzureVirtualNetworkExists( 129 n string, 130 network *virtualnetwork.VirtualNetworkSite) resource.TestCheckFunc { 131 return func(s *terraform.State) error { 132 rs, ok := s.RootModule().Resources[n] 133 if !ok { 134 return fmt.Errorf("Not found: %s", n) 135 } 136 137 if rs.Primary.ID == "" { 138 return fmt.Errorf("No Virtual Network ID is set") 139 } 140 141 vnetClient := testAccProvider.Meta().(*Client).vnetClient 142 nc, err := vnetClient.GetVirtualNetworkConfiguration() 143 if err != nil { 144 return err 145 } 146 147 for _, n := range nc.Configuration.VirtualNetworkSites { 148 if n.Name == rs.Primary.ID { 149 *network = n 150 151 return nil 152 } 153 } 154 155 return fmt.Errorf("Virtual Network not found") 156 } 157 } 158 159 func testAccCheckAzureVirtualNetworkAttributes( 160 network *virtualnetwork.VirtualNetworkSite) resource.TestCheckFunc { 161 return func(s *terraform.State) error { 162 163 if network.Name != "terraform-vnet" { 164 return fmt.Errorf("Bad name: %s", network.Name) 165 } 166 167 if network.Location != "West US" { 168 return fmt.Errorf("Bad location: %s", network.Location) 169 } 170 171 return nil 172 } 173 } 174 175 func testAccCheckAzureVirtualNetworkDestroy(s *terraform.State) error { 176 vnetClient := testAccProvider.Meta().(*Client).vnetClient 177 178 for _, rs := range s.RootModule().Resources { 179 if rs.Type != "azure_virtual_network" { 180 continue 181 } 182 183 if rs.Primary.ID == "" { 184 return fmt.Errorf("No Virtual Network ID is set") 185 } 186 187 nc, err := vnetClient.GetVirtualNetworkConfiguration() 188 if err != nil { 189 if management.IsResourceNotFoundError(err) { 190 // This is desirable - no configuration = no networks 191 continue 192 } 193 return fmt.Errorf("Error retrieving Virtual Network Configuration: %s", err) 194 } 195 196 for _, n := range nc.Configuration.VirtualNetworkSites { 197 if n.Name == rs.Primary.ID { 198 return fmt.Errorf("Virtual Network %s still exists", rs.Primary.ID) 199 } 200 } 201 } 202 203 return nil 204 } 205 206 const testAccAzureVirtualNetwork_basic = ` 207 resource "azure_virtual_network" "foo" { 208 name = "terraform-vnet" 209 address_space = ["10.1.2.0/24"] 210 location = "West US" 211 212 subnet { 213 name = "subnet1" 214 address_prefix = "10.1.2.0/25" 215 } 216 }` 217 218 const testAccAzureVirtualNetwork_advanced = ` 219 resource "azure_security_group" "foo" { 220 name = "terraform-security-group1" 221 location = "West US" 222 } 223 224 resource "azure_security_group_rule" "foo" { 225 name = "terraform-secgroup-rule" 226 security_group_names = ["${azure_security_group.foo.name}"] 227 type = "Inbound" 228 action = "Deny" 229 priority = 200 230 source_address_prefix = "100.0.0.0/32" 231 source_port_range = "1000" 232 destination_address_prefix = "10.0.0.0/32" 233 destination_port_range = "1000" 234 protocol = "TCP" 235 } 236 237 resource "azure_virtual_network" "foo" { 238 name = "terraform-vnet" 239 address_space = ["10.1.2.0/24"] 240 location = "West US" 241 242 subnet { 243 name = "subnet1" 244 address_prefix = "10.1.2.0/25" 245 security_group = "${azure_security_group.foo.name}" 246 } 247 }` 248 249 const testAccAzureVirtualNetwork_update = ` 250 resource "azure_security_group" "foo" { 251 name = "terraform-security-group1" 252 location = "West US" 253 } 254 255 resource "azure_security_group_rule" "foo" { 256 name = "terraform-secgroup-rule" 257 security_group_names = ["${azure_security_group.foo.name}"] 258 type = "Inbound" 259 action = "Deny" 260 priority = 200 261 source_address_prefix = "100.0.0.0/32" 262 source_port_range = "1000" 263 destination_address_prefix = "10.0.0.0/32" 264 destination_port_range = "1000" 265 protocol = "TCP" 266 } 267 268 resource "azure_security_group" "bar" { 269 name = "terraform-security-group2" 270 location = "West US" 271 } 272 273 resource "azure_virtual_network" "foo" { 274 name = "terraform-vnet" 275 address_space = ["10.1.3.0/24"] 276 location = "West US" 277 278 subnet { 279 name = "subnet1" 280 address_prefix = "10.1.3.128/25" 281 security_group = "${azure_security_group.bar.name}" 282 } 283 }`