github.com/simonswine/terraform@v0.9.0-beta2/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, 0), 27 ), 28 }, 29 resource.TestStep{ 30 Config: testAccNetworkingV2SecGroup_update, 31 Check: resource.ComposeTestCheckFunc( 32 resource.TestCheckResourceAttr( 33 "openstack_networking_secgroup_v2.secgroup_1", "name", "security_group_2"), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func testAccCheckNetworkingV2SecGroupDestroy(s *terraform.State) error { 41 config := testAccProvider.Meta().(*Config) 42 networkingClient, err := config.networkingV2Client(OS_REGION_NAME) 43 if err != nil { 44 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 45 } 46 47 for _, rs := range s.RootModule().Resources { 48 if rs.Type != "openstack_networking_secgroup_v2" { 49 continue 50 } 51 52 _, err := groups.Get(networkingClient, rs.Primary.ID).Extract() 53 if err == nil { 54 return fmt.Errorf("Security group still exists") 55 } 56 } 57 58 return nil 59 } 60 61 func testAccCheckNetworkingV2SecGroupExists(n string, security_group *groups.SecGroup) resource.TestCheckFunc { 62 return func(s *terraform.State) error { 63 rs, ok := s.RootModule().Resources[n] 64 if !ok { 65 return fmt.Errorf("Not found: %s", n) 66 } 67 68 if rs.Primary.ID == "" { 69 return fmt.Errorf("No ID is set") 70 } 71 72 config := testAccProvider.Meta().(*Config) 73 networkingClient, err := config.networkingV2Client(OS_REGION_NAME) 74 if err != nil { 75 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 76 } 77 78 found, err := groups.Get(networkingClient, rs.Primary.ID).Extract() 79 if err != nil { 80 return err 81 } 82 83 if found.ID != rs.Primary.ID { 84 return fmt.Errorf("Security group not found") 85 } 86 87 *security_group = *found 88 89 return nil 90 } 91 } 92 93 func testAccCheckNetworkingV2SecGroupRuleCount( 94 sg *groups.SecGroup, count int) resource.TestCheckFunc { 95 return func(s *terraform.State) error { 96 if len(sg.Rules) == count { 97 return nil 98 } 99 100 return fmt.Errorf("Unexpected number of rules in group %s. Expected %d, got %d", 101 sg.ID, count, len(sg.Rules)) 102 } 103 } 104 105 const testAccNetworkingV2SecGroup_basic = ` 106 resource "openstack_networking_secgroup_v2" "secgroup_1" { 107 name = "security_group" 108 description = "terraform security group acceptance test" 109 } 110 ` 111 112 const testAccNetworkingV2SecGroup_update = ` 113 resource "openstack_networking_secgroup_v2" "secgroup_1" { 114 name = "security_group_2" 115 description = "terraform security group acceptance test" 116 } 117 `