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