github.com/sathiyas/terraform@v0.6.9-0.20151210233947-3330da00b997/builtin/providers/openstack/resource_openstack_networking_network_v2_test.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  
    11  	"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups"
    12  	"github.com/rackspace/gophercloud/openstack/compute/v2/servers"
    13  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/routers"
    14  	"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
    15  	"github.com/rackspace/gophercloud/openstack/networking/v2/ports"
    16  	"github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
    17  )
    18  
    19  func TestAccNetworkingV2Network_basic(t *testing.T) {
    20  	region := os.Getenv(OS_REGION_NAME)
    21  
    22  	var network networks.Network
    23  
    24  	var testAccNetworkingV2Network_basic = fmt.Sprintf(`
    25  		resource "openstack_networking_network_v2" "foo" {
    26  			region = "%s"
    27  			name = "network_1"
    28  			admin_state_up = "true"
    29  		}`, region)
    30  
    31  	var testAccNetworkingV2Network_update = fmt.Sprintf(`
    32  		resource "openstack_networking_network_v2" "foo" {
    33  			region = "%s"
    34  			name = "network_2"
    35  			admin_state_up = "true"
    36  		}`, region)
    37  
    38  	resource.Test(t, resource.TestCase{
    39  		PreCheck:     func() { testAccPreCheck(t) },
    40  		Providers:    testAccProviders,
    41  		CheckDestroy: testAccCheckNetworkingV2NetworkDestroy,
    42  		Steps: []resource.TestStep{
    43  			resource.TestStep{
    44  				Config: testAccNetworkingV2Network_basic,
    45  				Check: resource.ComposeTestCheckFunc(
    46  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.foo", &network),
    47  				),
    48  			},
    49  			resource.TestStep{
    50  				Config: testAccNetworkingV2Network_update,
    51  				Check: resource.ComposeTestCheckFunc(
    52  					resource.TestCheckResourceAttr("openstack_networking_network_v2.foo", "name", "network_2"),
    53  				),
    54  			},
    55  		},
    56  	})
    57  }
    58  
    59  func TestAccNetworkingV2Network_netstack(t *testing.T) {
    60  	region := os.Getenv(OS_REGION_NAME)
    61  
    62  	var network networks.Network
    63  	var subnet subnets.Subnet
    64  	var router routers.Router
    65  
    66  	var testAccNetworkingV2Network_netstack = fmt.Sprintf(`
    67  		resource "openstack_networking_network_v2" "foo" {
    68  			region = "%s"
    69  			name = "network_1"
    70  			admin_state_up = "true"
    71  		}
    72  
    73  		resource "openstack_networking_subnet_v2" "foo" {
    74  			region = "%s"
    75  			name = "subnet_1"
    76  			network_id = "${openstack_networking_network_v2.foo.id}"
    77  			cidr = "192.168.10.0/24"
    78  			ip_version = 4
    79  		}
    80  
    81  		resource "openstack_networking_router_v2" "foo" {
    82  			region = "%s"
    83  			name = "router_1"
    84  		}
    85  
    86  		resource "openstack_networking_router_interface_v2" "foo" {
    87  			region = "%s"
    88  			router_id = "${openstack_networking_router_v2.foo.id}"
    89  			subnet_id = "${openstack_networking_subnet_v2.foo.id}"
    90  		}`, region, region, region, region)
    91  
    92  	resource.Test(t, resource.TestCase{
    93  		PreCheck:     func() { testAccPreCheck(t) },
    94  		Providers:    testAccProviders,
    95  		CheckDestroy: testAccCheckNetworkingV2NetworkDestroy,
    96  		Steps: []resource.TestStep{
    97  			resource.TestStep{
    98  				Config: testAccNetworkingV2Network_netstack,
    99  				Check: resource.ComposeTestCheckFunc(
   100  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.foo", &network),
   101  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.foo", &subnet),
   102  					testAccCheckNetworkingV2RouterExists(t, "openstack_networking_router_v2.foo", &router),
   103  					testAccCheckNetworkingV2RouterInterfaceExists(t, "openstack_networking_router_interface_v2.foo"),
   104  				),
   105  			},
   106  		},
   107  	})
   108  }
   109  
   110  func TestAccNetworkingV2Network_fullstack(t *testing.T) {
   111  	region := os.Getenv(OS_REGION_NAME)
   112  
   113  	var instance servers.Server
   114  	var network networks.Network
   115  	var port ports.Port
   116  	var secgroup secgroups.SecurityGroup
   117  	var subnet subnets.Subnet
   118  
   119  	var testAccNetworkingV2Network_fullstack = fmt.Sprintf(`
   120  		resource "openstack_networking_network_v2" "foo" {
   121  			region = "%s"
   122  			name = "network_1"
   123  			admin_state_up = "true"
   124  		}
   125  
   126  		resource "openstack_networking_subnet_v2" "foo" {
   127  			region = "%s"
   128  			name = "subnet_1"
   129  			network_id = "${openstack_networking_network_v2.foo.id}"
   130  			cidr = "192.168.199.0/24"
   131  			ip_version = 4
   132  		}
   133  
   134  		resource "openstack_compute_secgroup_v2" "foo" {
   135  			region = "%s"
   136  			name = "secgroup_1"
   137  			description = "a security group"
   138  			rule {
   139  				from_port = 22
   140  				to_port = 22
   141  				ip_protocol = "tcp"
   142  				cidr = "0.0.0.0/0"
   143  			}
   144  		}
   145  
   146  		resource "openstack_networking_port_v2" "foo" {
   147  			region = "%s"
   148  			name = "port_1"
   149  			network_id = "${openstack_networking_network_v2.foo.id}"
   150  			admin_state_up = "true"
   151  			security_group_ids = ["${openstack_compute_secgroup_v2.foo.id}"]
   152  			fixed_ip {
   153  				"subnet_id" =  "${openstack_networking_subnet_v2.foo.id}"
   154  				"ip_address" =  "192.168.199.23"
   155  			}
   156  		}
   157  
   158  		resource "openstack_compute_instance_v2" "foo" {
   159  			region = "%s"
   160  			name = "terraform-test"
   161  			security_groups = ["${openstack_compute_secgroup_v2.foo.name}"]
   162  
   163  			network {
   164  				port = "${openstack_networking_port_v2.foo.id}"
   165  			}
   166  		}`, region, region, region, region, region)
   167  
   168  	resource.Test(t, resource.TestCase{
   169  		PreCheck:     func() { testAccPreCheck(t) },
   170  		Providers:    testAccProviders,
   171  		CheckDestroy: testAccCheckNetworkingV2NetworkDestroy,
   172  		Steps: []resource.TestStep{
   173  			resource.TestStep{
   174  				Config: testAccNetworkingV2Network_fullstack,
   175  				Check: resource.ComposeTestCheckFunc(
   176  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.foo", &network),
   177  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.foo", &subnet),
   178  					testAccCheckComputeV2SecGroupExists(t, "openstack_compute_secgroup_v2.foo", &secgroup),
   179  					testAccCheckNetworkingV2PortExists(t, "openstack_networking_port_v2.foo", &port),
   180  					testAccCheckComputeV2InstanceExists(t, "openstack_compute_instance_v2.foo", &instance),
   181  				),
   182  			},
   183  		},
   184  	})
   185  }
   186  
   187  func testAccCheckNetworkingV2NetworkDestroy(s *terraform.State) error {
   188  	config := testAccProvider.Meta().(*Config)
   189  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   190  	if err != nil {
   191  		return fmt.Errorf("(testAccCheckNetworkingV2NetworkDestroy) Error creating OpenStack networking client: %s", err)
   192  	}
   193  
   194  	for _, rs := range s.RootModule().Resources {
   195  		if rs.Type != "openstack_networking_network_v2" {
   196  			continue
   197  		}
   198  
   199  		_, err := networks.Get(networkingClient, rs.Primary.ID).Extract()
   200  		if err == nil {
   201  			return fmt.Errorf("Network still exists")
   202  		}
   203  	}
   204  
   205  	return nil
   206  }
   207  
   208  func testAccCheckNetworkingV2NetworkExists(t *testing.T, n string, network *networks.Network) resource.TestCheckFunc {
   209  	return func(s *terraform.State) error {
   210  		rs, ok := s.RootModule().Resources[n]
   211  		if !ok {
   212  			return fmt.Errorf("Not found: %s", n)
   213  		}
   214  
   215  		if rs.Primary.ID == "" {
   216  			return fmt.Errorf("No ID is set")
   217  		}
   218  
   219  		config := testAccProvider.Meta().(*Config)
   220  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   221  		if err != nil {
   222  			return fmt.Errorf("(testAccCheckNetworkingV2NetworkExists) Error creating OpenStack networking client: %s", err)
   223  		}
   224  
   225  		found, err := networks.Get(networkingClient, rs.Primary.ID).Extract()
   226  		if err != nil {
   227  			return err
   228  		}
   229  
   230  		if found.ID != rs.Primary.ID {
   231  			return fmt.Errorf("Network not found")
   232  		}
   233  
   234  		*network = *found
   235  
   236  		return nil
   237  	}
   238  }
   239  
   240  var testAccNetworkingV2Network_basic = fmt.Sprintf(`
   241  	resource "openstack_networking_network_v2" "foo" {
   242  		region = "%s"
   243  		name = "network_1"
   244  		admin_state_up = "true"
   245  	}`,
   246  	OS_REGION_NAME)
   247  
   248  var testAccNetworkingV2Network_update = fmt.Sprintf(`
   249  		resource "openstack_networking_network_v2" "foo" {
   250  			region = "%s"
   251  			name = "network_2"
   252  			admin_state_up = "true"
   253  			}`,
   254  	OS_REGION_NAME)