github.com/ns1/terraform@v0.7.10-0.20161109153551-8949419bef40/builtin/providers/openstack/resource_openstack_networking_port_v2_test.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  
    10  	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
    11  	"github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
    12  	"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
    13  )
    14  
    15  func TestAccNetworkingV2Port_basic(t *testing.T) {
    16  	var network networks.Network
    17  	var port ports.Port
    18  	var subnet subnets.Subnet
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckNetworkingV2PortDestroy,
    24  		Steps: []resource.TestStep{
    25  			resource.TestStep{
    26  				Config: testAccNetworkingV2Port_basic,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.foo", &subnet),
    29  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.foo", &network),
    30  					testAccCheckNetworkingV2PortExists(t, "openstack_networking_port_v2.foo", &port),
    31  				),
    32  			},
    33  		},
    34  	})
    35  }
    36  
    37  func TestAccNetworkingV2Port_noip(t *testing.T) {
    38  	var network networks.Network
    39  	var port ports.Port
    40  	var subnet subnets.Subnet
    41  
    42  	resource.Test(t, resource.TestCase{
    43  		PreCheck:     func() { testAccPreCheck(t) },
    44  		Providers:    testAccProviders,
    45  		CheckDestroy: testAccCheckNetworkingV2PortDestroy,
    46  		Steps: []resource.TestStep{
    47  			resource.TestStep{
    48  				Config: testAccNetworkingV2Port_noip,
    49  				Check: resource.ComposeTestCheckFunc(
    50  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.foo", &subnet),
    51  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.foo", &network),
    52  					testAccCheckNetworkingV2PortExists(t, "openstack_networking_port_v2.foo", &port),
    53  				),
    54  			},
    55  		},
    56  	})
    57  }
    58  
    59  func TestAccNetworkingV2Port_allowedAddressPairs(t *testing.T) {
    60  	var network networks.Network
    61  	var subnet subnets.Subnet
    62  	var vrrp_port, instance_port ports.Port
    63  
    64  	resource.Test(t, resource.TestCase{
    65  		PreCheck:     func() { testAccPreCheck(t) },
    66  		Providers:    testAccProviders,
    67  		CheckDestroy: testAccCheckNetworkingV2PortDestroy,
    68  		Steps: []resource.TestStep{
    69  			resource.TestStep{
    70  				Config: testAccNetworkingV2Port_allowedAddressPairs,
    71  				Check: resource.ComposeTestCheckFunc(
    72  					testAccCheckNetworkingV2SubnetExists(t, "openstack_networking_subnet_v2.vrrp_subnet", &subnet),
    73  					testAccCheckNetworkingV2NetworkExists(t, "openstack_networking_network_v2.vrrp_network", &network),
    74  					testAccCheckNetworkingV2PortExists(t, "openstack_networking_port_v2.vrrp_port", &vrrp_port),
    75  					testAccCheckNetworkingV2PortExists(t, "openstack_networking_port_v2.instance_port", &instance_port),
    76  				),
    77  			},
    78  		},
    79  	})
    80  }
    81  
    82  func testAccCheckNetworkingV2PortDestroy(s *terraform.State) error {
    83  	config := testAccProvider.Meta().(*Config)
    84  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    85  	if err != nil {
    86  		return fmt.Errorf("(testAccCheckNetworkingV2PortDestroy) Error creating OpenStack networking client: %s", err)
    87  	}
    88  
    89  	for _, rs := range s.RootModule().Resources {
    90  		if rs.Type != "openstack_networking_port_v2" {
    91  			continue
    92  		}
    93  
    94  		_, err := ports.Get(networkingClient, rs.Primary.ID).Extract()
    95  		if err == nil {
    96  			return fmt.Errorf("Port still exists")
    97  		}
    98  	}
    99  
   100  	return nil
   101  }
   102  
   103  func testAccCheckNetworkingV2PortExists(t *testing.T, n string, port *ports.Port) resource.TestCheckFunc {
   104  	return func(s *terraform.State) error {
   105  		rs, ok := s.RootModule().Resources[n]
   106  		if !ok {
   107  			return fmt.Errorf("Not found: %s", n)
   108  		}
   109  
   110  		if rs.Primary.ID == "" {
   111  			return fmt.Errorf("No ID is set")
   112  		}
   113  
   114  		config := testAccProvider.Meta().(*Config)
   115  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   116  		if err != nil {
   117  			return fmt.Errorf("(testAccCheckNetworkingV2PortExists) Error creating OpenStack networking client: %s", err)
   118  		}
   119  
   120  		found, err := ports.Get(networkingClient, rs.Primary.ID).Extract()
   121  		if err != nil {
   122  			return err
   123  		}
   124  
   125  		if found.ID != rs.Primary.ID {
   126  			return fmt.Errorf("Port not found")
   127  		}
   128  
   129  		*port = *found
   130  
   131  		return nil
   132  	}
   133  }
   134  
   135  var testAccNetworkingV2Port_basic = fmt.Sprintf(`
   136  		resource "openstack_networking_network_v2" "foo" {
   137  			name = "network_1"
   138  			admin_state_up = "true"
   139  		}
   140  
   141  		resource "openstack_networking_subnet_v2" "foo" {
   142  			name = "subnet_1"
   143  			network_id = "${openstack_networking_network_v2.foo.id}"
   144  			cidr = "192.168.199.0/24"
   145  			ip_version = 4
   146  		}
   147  
   148  		resource "openstack_networking_port_v2" "foo" {
   149  			name = "port_1"
   150  			network_id = "${openstack_networking_network_v2.foo.id}"
   151  			admin_state_up = "true"
   152  			fixed_ip {
   153  				subnet_id =  "${openstack_networking_subnet_v2.foo.id}"
   154  				ip_address = "192.168.199.23"
   155  			}
   156  		}`)
   157  
   158  var testAccNetworkingV2Port_noip = fmt.Sprintf(`
   159  		resource "openstack_networking_network_v2" "foo" {
   160  			name = "network_1"
   161  			admin_state_up = "true"
   162  		}
   163  		resource "openstack_networking_subnet_v2" "foo" {
   164  			name = "subnet_1"
   165  			network_id = "${openstack_networking_network_v2.foo.id}"
   166  			cidr = "192.168.199.0/24"
   167  			ip_version = 4
   168  		}
   169  		resource "openstack_networking_port_v2" "foo" {
   170  			name = "port_1"
   171  			network_id = "${openstack_networking_network_v2.foo.id}"
   172  			admin_state_up = "true"
   173  			fixed_ip {
   174  				subnet_id =  "${openstack_networking_subnet_v2.foo.id}"
   175  			}
   176  		}`)
   177  
   178  var testAccNetworkingV2Port_allowedAddressPairs = fmt.Sprintf(`
   179  		resource "openstack_networking_network_v2" "vrrp_network" {
   180  			name = "vrrp_network"
   181  			admin_state_up = "true"
   182  		}
   183  
   184  		resource "openstack_networking_subnet_v2" "vrrp_subnet" {
   185  			name = "vrrp_subnet"
   186  			network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   187  			cidr = "10.0.0.0/24"
   188  			ip_version = 4
   189  
   190  			allocation_pools {
   191  				start = "10.0.0.2"
   192  				end = "10.0.0.200"
   193  			}
   194  		}
   195  
   196  		resource "openstack_networking_router_v2" "vrrp_router" {
   197  			name = "vrrp_router"
   198  		}
   199  
   200  		resource "openstack_networking_router_interface_v2" "vrrp_interface" {
   201  			router_id = "${openstack_networking_router_v2.vrrp_router.id}"
   202  			subnet_id = "${openstack_networking_subnet_v2.vrrp_subnet.id}"
   203  		}
   204  
   205  		resource "openstack_networking_port_v2" "vrrp_port" {
   206  			name = "vrrp_port"
   207  			network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   208  			admin_state_up = "true"
   209  			fixed_ip {
   210  				subnet_id =  "${openstack_networking_subnet_v2.vrrp_subnet.id}"
   211  				ip_address = "10.0.0.201"
   212  			}
   213  		}
   214  
   215  		resource "openstack_networking_port_v2" "instance_port" {
   216  			name = "instance_port"
   217  			network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   218  			admin_state_up = "true"
   219  
   220  			allowed_address_pairs {
   221  				ip_address = "${openstack_networking_port_v2.vrrp_port.fixed_ip.0.ip_address}"
   222  				mac_address = "${openstack_networking_port_v2.vrrp_port.mac_address}"
   223  			}
   224  		}`)