github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/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/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups" 11 "github.com/rackspace/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 }`)