github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/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("openstack_networking_subnet_v2.subnet_1", &subnet),
    29  					testAccCheckNetworkingV2NetworkExists("openstack_networking_network_v2.network_1", &network),
    30  					testAccCheckNetworkingV2PortExists("openstack_networking_port_v2.port_1", &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("openstack_networking_subnet_v2.subnet_1", &subnet),
    51  					testAccCheckNetworkingV2NetworkExists("openstack_networking_network_v2.network_1", &network),
    52  					testAccCheckNetworkingV2PortExists("openstack_networking_port_v2.port_1", &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_1, vrrp_port_2, 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("openstack_networking_subnet_v2.vrrp_subnet", &subnet),
    73  					testAccCheckNetworkingV2NetworkExists("openstack_networking_network_v2.vrrp_network", &network),
    74  					testAccCheckNetworkingV2PortExists("openstack_networking_port_v2.vrrp_port_1", &vrrp_port_1),
    75  					testAccCheckNetworkingV2PortExists("openstack_networking_port_v2.vrrp_port_2", &vrrp_port_2),
    76  					testAccCheckNetworkingV2PortExists("openstack_networking_port_v2.instance_port", &instance_port),
    77  				),
    78  			},
    79  		},
    80  	})
    81  }
    82  
    83  func testAccCheckNetworkingV2PortDestroy(s *terraform.State) error {
    84  	config := testAccProvider.Meta().(*Config)
    85  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    86  	if err != nil {
    87  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    88  	}
    89  
    90  	for _, rs := range s.RootModule().Resources {
    91  		if rs.Type != "openstack_networking_port_v2" {
    92  			continue
    93  		}
    94  
    95  		_, err := ports.Get(networkingClient, rs.Primary.ID).Extract()
    96  		if err == nil {
    97  			return fmt.Errorf("Port still exists")
    98  		}
    99  	}
   100  
   101  	return nil
   102  }
   103  
   104  func testAccCheckNetworkingV2PortExists(n string, port *ports.Port) resource.TestCheckFunc {
   105  	return func(s *terraform.State) error {
   106  		rs, ok := s.RootModule().Resources[n]
   107  		if !ok {
   108  			return fmt.Errorf("Not found: %s", n)
   109  		}
   110  
   111  		if rs.Primary.ID == "" {
   112  			return fmt.Errorf("No ID is set")
   113  		}
   114  
   115  		config := testAccProvider.Meta().(*Config)
   116  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   117  		if err != nil {
   118  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   119  		}
   120  
   121  		found, err := ports.Get(networkingClient, rs.Primary.ID).Extract()
   122  		if err != nil {
   123  			return err
   124  		}
   125  
   126  		if found.ID != rs.Primary.ID {
   127  			return fmt.Errorf("Port not found")
   128  		}
   129  
   130  		*port = *found
   131  
   132  		return nil
   133  	}
   134  }
   135  
   136  const testAccNetworkingV2Port_basic = `
   137  resource "openstack_networking_network_v2" "network_1" {
   138    name = "network_1"
   139    admin_state_up = "true"
   140  }
   141  
   142  resource "openstack_networking_subnet_v2" "subnet_1" {
   143    name = "subnet_1"
   144    cidr = "192.168.199.0/24"
   145    ip_version = 4
   146    network_id = "${openstack_networking_network_v2.network_1.id}"
   147  }
   148  
   149  resource "openstack_networking_port_v2" "port_1" {
   150    name = "port_1"
   151    admin_state_up = "true"
   152    network_id = "${openstack_networking_network_v2.network_1.id}"
   153  
   154    fixed_ip {
   155      subnet_id =  "${openstack_networking_subnet_v2.subnet_1.id}"
   156      ip_address = "192.168.199.23"
   157    }
   158  }
   159  `
   160  
   161  const testAccNetworkingV2Port_noip = `
   162  resource "openstack_networking_network_v2" "network_1" {
   163    name = "network_1"
   164    admin_state_up = "true"
   165  }
   166  
   167  resource "openstack_networking_subnet_v2" "subnet_1" {
   168    name = "subnet_1"
   169    cidr = "192.168.199.0/24"
   170    ip_version = 4
   171    network_id = "${openstack_networking_network_v2.network_1.id}"
   172  }
   173  
   174  resource "openstack_networking_port_v2" "port_1" {
   175    name = "port_1"
   176    admin_state_up = "true"
   177    network_id = "${openstack_networking_network_v2.network_1.id}"
   178  
   179    fixed_ip {
   180      subnet_id =  "${openstack_networking_subnet_v2.subnet_1.id}"
   181    }
   182  }
   183  `
   184  
   185  const testAccNetworkingV2Port_allowedAddressPairs = `
   186  resource "openstack_networking_network_v2" "vrrp_network" {
   187    name = "vrrp_network"
   188    admin_state_up = "true"
   189  }
   190  
   191  resource "openstack_networking_subnet_v2" "vrrp_subnet" {
   192    name = "vrrp_subnet"
   193    cidr = "10.0.0.0/24"
   194    ip_version = 4
   195    network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   196  
   197    allocation_pools {
   198      start = "10.0.0.2"
   199      end = "10.0.0.200"
   200    }
   201  }
   202  
   203  resource "openstack_networking_router_v2" "vrrp_router" {
   204    name = "vrrp_router"
   205  }
   206  
   207  resource "openstack_networking_router_interface_v2" "vrrp_interface" {
   208    router_id = "${openstack_networking_router_v2.vrrp_router.id}"
   209    subnet_id = "${openstack_networking_subnet_v2.vrrp_subnet.id}"
   210  }
   211  
   212  resource "openstack_networking_port_v2" "vrrp_port_1" {
   213    name = "vrrp_port_1"
   214    admin_state_up = "true"
   215    network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   216  
   217    fixed_ip {
   218      subnet_id =  "${openstack_networking_subnet_v2.vrrp_subnet.id}"
   219      ip_address = "10.0.0.202"
   220    }
   221  }
   222  
   223  resource "openstack_networking_port_v2" "vrrp_port_2" {
   224    name = "vrrp_port_2"
   225    admin_state_up = "true"
   226    network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   227  
   228    fixed_ip {
   229      subnet_id =  "${openstack_networking_subnet_v2.vrrp_subnet.id}"
   230      ip_address = "10.0.0.201"
   231    }
   232  }
   233  
   234  resource "openstack_networking_port_v2" "instance_port" {
   235    name = "instance_port"
   236    admin_state_up = "true"
   237    network_id = "${openstack_networking_network_v2.vrrp_network.id}"
   238  
   239    allowed_address_pairs {
   240      ip_address = "${openstack_networking_port_v2.vrrp_port_1.fixed_ip.0.ip_address}"
   241      mac_address = "${openstack_networking_port_v2.vrrp_port_1.mac_address}"
   242    }
   243  
   244    allowed_address_pairs {
   245      ip_address = "${openstack_networking_port_v2.vrrp_port_2.fixed_ip.0.ip_address}"
   246      mac_address = "${openstack_networking_port_v2.vrrp_port_2.mac_address}"
   247    }
   248  }
   249  `