github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/openstack/resource_openstack_networking_secgroup_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  )
    12  
    13  func TestAccNetworkingV2SecGroup_basic(t *testing.T) {
    14  	var security_group groups.SecGroup
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckNetworkingV2SecGroupDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccNetworkingV2SecGroup_basic,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckNetworkingV2SecGroupExists(
    25  						"openstack_networking_secgroup_v2.secgroup_1", &security_group),
    26  					testAccCheckNetworkingV2SecGroupRuleCount(&security_group, 2),
    27  				),
    28  			},
    29  			resource.TestStep{
    30  				Config: testAccNetworkingV2SecGroup_update,
    31  				Check: resource.ComposeTestCheckFunc(
    32  					resource.TestCheckResourceAttrPtr(
    33  						"openstack_networking_secgroup_v2.secgroup_1", "id", &security_group.ID),
    34  					resource.TestCheckResourceAttr(
    35  						"openstack_networking_secgroup_v2.secgroup_1", "name", "security_group_2"),
    36  				),
    37  			},
    38  		},
    39  	})
    40  }
    41  
    42  func TestAccNetworkingV2SecGroup_noDefaultRules(t *testing.T) {
    43  	var security_group groups.SecGroup
    44  
    45  	resource.Test(t, resource.TestCase{
    46  		PreCheck:     func() { testAccPreCheck(t) },
    47  		Providers:    testAccProviders,
    48  		CheckDestroy: testAccCheckNetworkingV2SecGroupDestroy,
    49  		Steps: []resource.TestStep{
    50  			resource.TestStep{
    51  				Config: testAccNetworkingV2SecGroup_noDefaultRules,
    52  				Check: resource.ComposeTestCheckFunc(
    53  					testAccCheckNetworkingV2SecGroupExists(
    54  						"openstack_networking_secgroup_v2.secgroup_1", &security_group),
    55  					testAccCheckNetworkingV2SecGroupRuleCount(&security_group, 0),
    56  				),
    57  			},
    58  		},
    59  	})
    60  }
    61  
    62  func TestAccNetworkingV2SecGroup_timeout(t *testing.T) {
    63  	var security_group groups.SecGroup
    64  
    65  	resource.Test(t, resource.TestCase{
    66  		PreCheck:     func() { testAccPreCheck(t) },
    67  		Providers:    testAccProviders,
    68  		CheckDestroy: testAccCheckNetworkingV2SecGroupDestroy,
    69  		Steps: []resource.TestStep{
    70  			resource.TestStep{
    71  				Config: testAccNetworkingV2SecGroup_timeout,
    72  				Check: resource.ComposeTestCheckFunc(
    73  					testAccCheckNetworkingV2SecGroupExists(
    74  						"openstack_networking_secgroup_v2.secgroup_1", &security_group),
    75  				),
    76  			},
    77  		},
    78  	})
    79  }
    80  
    81  func testAccCheckNetworkingV2SecGroupDestroy(s *terraform.State) error {
    82  	config := testAccProvider.Meta().(*Config)
    83  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    84  	if err != nil {
    85  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    86  	}
    87  
    88  	for _, rs := range s.RootModule().Resources {
    89  		if rs.Type != "openstack_networking_secgroup_v2" {
    90  			continue
    91  		}
    92  
    93  		_, err := groups.Get(networkingClient, rs.Primary.ID).Extract()
    94  		if err == nil {
    95  			return fmt.Errorf("Security group still exists")
    96  		}
    97  	}
    98  
    99  	return nil
   100  }
   101  
   102  func testAccCheckNetworkingV2SecGroupExists(n string, security_group *groups.SecGroup) resource.TestCheckFunc {
   103  	return func(s *terraform.State) error {
   104  		rs, ok := s.RootModule().Resources[n]
   105  		if !ok {
   106  			return fmt.Errorf("Not found: %s", n)
   107  		}
   108  
   109  		if rs.Primary.ID == "" {
   110  			return fmt.Errorf("No ID is set")
   111  		}
   112  
   113  		config := testAccProvider.Meta().(*Config)
   114  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   115  		if err != nil {
   116  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   117  		}
   118  
   119  		found, err := groups.Get(networkingClient, rs.Primary.ID).Extract()
   120  		if err != nil {
   121  			return err
   122  		}
   123  
   124  		if found.ID != rs.Primary.ID {
   125  			return fmt.Errorf("Security group not found")
   126  		}
   127  
   128  		*security_group = *found
   129  
   130  		return nil
   131  	}
   132  }
   133  
   134  func testAccCheckNetworkingV2SecGroupRuleCount(
   135  	sg *groups.SecGroup, count int) resource.TestCheckFunc {
   136  	return func(s *terraform.State) error {
   137  		if len(sg.Rules) == count {
   138  			return nil
   139  		}
   140  
   141  		return fmt.Errorf("Unexpected number of rules in group %s. Expected %d, got %d",
   142  			sg.ID, count, len(sg.Rules))
   143  	}
   144  }
   145  
   146  const testAccNetworkingV2SecGroup_basic = `
   147  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   148    name = "security_group"
   149    description = "terraform security group acceptance test"
   150  }
   151  `
   152  
   153  const testAccNetworkingV2SecGroup_update = `
   154  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   155    name = "security_group_2"
   156    description = "terraform security group acceptance test"
   157  }
   158  `
   159  
   160  const testAccNetworkingV2SecGroup_noDefaultRules = `
   161  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   162  	name = "security_group_1"
   163  	description = "terraform security group acceptance test"
   164  	delete_default_rules = true
   165  }
   166  `
   167  
   168  const testAccNetworkingV2SecGroup_timeout = `
   169  resource "openstack_networking_secgroup_v2" "secgroup_1" {
   170    name = "security_group"
   171    description = "terraform security group acceptance test"
   172  
   173    timeouts {
   174      delete = "5m"
   175    }
   176  }
   177  `