github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/openstack/resource_openstack_networking_secgroup_rule_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/extensions/security/groups"
    11  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules"
    12  )
    13  
    14  func TestAccNetworkingV2SecGroupRule_basic(t *testing.T) {
    15  	var secgroup_1 groups.SecGroup
    16  	var secgroup_2 groups.SecGroup
    17  	var secgroup_rule_1 rules.SecGroupRule
    18  	var secgroup_rule_2 rules.SecGroupRule
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckNetworkingV2SecGroupRuleDestroy,
    24  		Steps: []resource.TestStep{
    25  			resource.TestStep{
    26  				Config: testAccNetworkingV2SecGroupRule_basic,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckNetworkingV2SecGroupExists(
    29  						"openstack_networking_secgroup_v2.secgroup_1", &secgroup_1),
    30  					testAccCheckNetworkingV2SecGroupExists(
    31  						"openstack_networking_secgroup_v2.secgroup_2", &secgroup_2),
    32  					testAccCheckNetworkingV2SecGroupRuleExists(
    33  						"openstack_networking_secgroup_rule_v2.secgroup_rule_1", &secgroup_rule_1),
    34  					testAccCheckNetworkingV2SecGroupRuleExists(
    35  						"openstack_networking_secgroup_rule_v2.secgroup_rule_2", &secgroup_rule_2),
    36  				),
    37  			},
    38  		},
    39  	})
    40  }
    41  
    42  func TestAccNetworkingV2SecGroupRule_lowerCaseCIDR(t *testing.T) {
    43  	var secgroup_1 groups.SecGroup
    44  	var secgroup_rule_1 rules.SecGroupRule
    45  
    46  	resource.Test(t, resource.TestCase{
    47  		PreCheck:     func() { testAccPreCheck(t) },
    48  		Providers:    testAccProviders,
    49  		CheckDestroy: testAccCheckNetworkingV2SecGroupRuleDestroy,
    50  		Steps: []resource.TestStep{
    51  			resource.TestStep{
    52  				Config: testAccNetworkingV2SecGroupRule_lowerCaseCIDR,
    53  				Check: resource.ComposeTestCheckFunc(
    54  					testAccCheckNetworkingV2SecGroupExists(
    55  						"openstack_networking_secgroup_v2.secgroup_1", &secgroup_1),
    56  					testAccCheckNetworkingV2SecGroupRuleExists(
    57  						"openstack_networking_secgroup_rule_v2.secgroup_rule_1", &secgroup_rule_1),
    58  					resource.TestCheckResourceAttr(
    59  						"openstack_networking_secgroup_rule_v2.secgroup_rule_1", "remote_ip_prefix", "2001:558:fc00::/39"),
    60  				),
    61  			},
    62  		},
    63  	})
    64  }
    65  
    66  func testAccCheckNetworkingV2SecGroupRuleDestroy(s *terraform.State) error {
    67  	config := testAccProvider.Meta().(*Config)
    68  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    69  	if err != nil {
    70  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    71  	}
    72  
    73  	for _, rs := range s.RootModule().Resources {
    74  		if rs.Type != "openstack_networking_secgroup_rule_v2" {
    75  			continue
    76  		}
    77  
    78  		_, err := rules.Get(networkingClient, rs.Primary.ID).Extract()
    79  		if err == nil {
    80  			return fmt.Errorf("Security group rule still exists")
    81  		}
    82  	}
    83  
    84  	return nil
    85  }
    86  
    87  func testAccCheckNetworkingV2SecGroupRuleExists(n string, security_group_rule *rules.SecGroupRule) resource.TestCheckFunc {
    88  	return func(s *terraform.State) error {
    89  		rs, ok := s.RootModule().Resources[n]
    90  		if !ok {
    91  			return fmt.Errorf("Not found: %s", n)
    92  		}
    93  
    94  		if rs.Primary.ID == "" {
    95  			return fmt.Errorf("No ID is set")
    96  		}
    97  
    98  		config := testAccProvider.Meta().(*Config)
    99  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   100  		if err != nil {
   101  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   102  		}
   103  
   104  		found, err := rules.Get(networkingClient, rs.Primary.ID).Extract()
   105  		if err != nil {
   106  			return err
   107  		}
   108  
   109  		if found.ID != rs.Primary.ID {
   110  			return fmt.Errorf("Security group rule not found")
   111  		}
   112  
   113  		*security_group_rule = *found
   114  
   115  		return nil
   116  	}
   117  }
   118  
   119  const testAccNetworkingV2SecGroupRule_basic = `
   120  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   121    name = "secgroup_1"
   122    description = "terraform security group rule acceptance test"
   123  }
   124  
   125  resource "openstack_networking_secgroup_v2" "secgroup_2" {
   126    name = "secgroup_2"
   127    description = "terraform security group rule acceptance test"
   128  }
   129  
   130  resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_1" {
   131    direction = "ingress"
   132    ethertype = "IPv4"
   133    port_range_max = 22
   134    port_range_min = 22
   135    protocol = "tcp"
   136    remote_ip_prefix = "0.0.0.0/0"
   137    security_group_id = "${openstack_networking_secgroup_v2.secgroup_1.id}"
   138  }
   139  
   140  resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_2" {
   141    direction = "ingress"
   142    ethertype = "IPv4"
   143    port_range_max = 80
   144    port_range_min = 80
   145    protocol = "tcp"
   146    remote_group_id = "${openstack_networking_secgroup_v2.secgroup_1.id}"
   147    security_group_id = "${openstack_networking_secgroup_v2.secgroup_2.id}"
   148  }
   149  `
   150  
   151  const testAccNetworkingV2SecGroupRule_lowerCaseCIDR = `
   152  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   153    name = "secgroup_1"
   154    description = "terraform security group rule acceptance test"
   155  }
   156  
   157  resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_1" {
   158    direction = "ingress"
   159    ethertype = "IPv6"
   160    port_range_max = 22
   161    port_range_min = 22
   162    protocol = "tcp"
   163    remote_ip_prefix = "2001:558:FC00::/39"
   164    security_group_id = "${openstack_networking_secgroup_v2.secgroup_1.id}"
   165  }
   166  `