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 `