github.com/ns1/terraform@v0.7.10-0.20161109153551-8949419bef40/builtin/providers/aws/resource_aws_load_balancer_listener_policy_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/elb" 11 12 "github.com/hashicorp/terraform/helper/resource" 13 "github.com/hashicorp/terraform/terraform" 14 ) 15 16 func TestAccAWSLoadBalancerListenerPolicy_basic(t *testing.T) { 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSLoadBalancerListenerPolicyDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSLoadBalancerListenerPolicyConfig_basic0, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSLoadBalancerPolicyState("aws_elb.test-lb", "aws_load_balancer_policy.magic-cookie-sticky"), 26 testAccCheckAWSLoadBalancerListenerPolicyState("test-aws-policies-lb", int64(80), "magic-cookie-sticky-policy", true), 27 ), 28 }, 29 resource.TestStep{ 30 Config: testAccAWSLoadBalancerListenerPolicyConfig_basic1, 31 Check: resource.ComposeTestCheckFunc( 32 testAccCheckAWSLoadBalancerPolicyState("aws_elb.test-lb", "aws_load_balancer_policy.magic-cookie-sticky"), 33 testAccCheckAWSLoadBalancerListenerPolicyState("test-aws-policies-lb", int64(80), "magic-cookie-sticky-policy", true), 34 ), 35 }, 36 resource.TestStep{ 37 Config: testAccAWSLoadBalancerListenerPolicyConfig_basic2, 38 Check: resource.ComposeTestCheckFunc( 39 testAccCheckAWSLoadBalancerListenerPolicyState("test-aws-policies-lb", int64(80), "magic-cookie-sticky-policy", false), 40 ), 41 }, 42 }, 43 }) 44 } 45 46 func policyInListenerPolicies(str string, list []string) bool { 47 for _, v := range list { 48 if v == str { 49 return true 50 } 51 } 52 return false 53 } 54 55 func testAccCheckAWSLoadBalancerListenerPolicyDestroy(s *terraform.State) error { 56 conn := testAccProvider.Meta().(*AWSClient).elbconn 57 58 for _, rs := range s.RootModule().Resources { 59 switch { 60 case rs.Type == "aws_load_balancer_policy": 61 loadBalancerName, policyName := resourceAwsLoadBalancerListenerPoliciesParseId(rs.Primary.ID) 62 out, err := conn.DescribeLoadBalancerPolicies( 63 &elb.DescribeLoadBalancerPoliciesInput{ 64 LoadBalancerName: aws.String(loadBalancerName), 65 PolicyNames: []*string{aws.String(policyName)}, 66 }) 67 if err != nil { 68 if ec2err, ok := err.(awserr.Error); ok && (ec2err.Code() == "PolicyNotFound" || ec2err.Code() == "LoadBalancerNotFound") { 69 continue 70 } 71 return err 72 } 73 if len(out.PolicyDescriptions) > 0 { 74 return fmt.Errorf("Policy still exists") 75 } 76 case rs.Type == "aws_load_listener_policy": 77 loadBalancerName, _ := resourceAwsLoadBalancerListenerPoliciesParseId(rs.Primary.ID) 78 out, err := conn.DescribeLoadBalancers( 79 &elb.DescribeLoadBalancersInput{ 80 LoadBalancerNames: []*string{aws.String(loadBalancerName)}, 81 }) 82 if err != nil { 83 if ec2err, ok := err.(awserr.Error); ok && (ec2err.Code() == "LoadBalancerNotFound") { 84 continue 85 } 86 return err 87 } 88 policyNames := []string{} 89 for k, _ := range rs.Primary.Attributes { 90 if strings.HasPrefix(k, "policy_names.") && strings.HasSuffix(k, ".name") { 91 value_key := fmt.Sprintf("%s.value", strings.TrimSuffix(k, ".name")) 92 policyNames = append(policyNames, rs.Primary.Attributes[value_key]) 93 } 94 } 95 for _, policyName := range policyNames { 96 for _, listener := range out.LoadBalancerDescriptions[0].ListenerDescriptions { 97 policyStrings := []string{} 98 for _, pol := range listener.PolicyNames { 99 policyStrings = append(policyStrings, *pol) 100 } 101 if policyInListenerPolicies(policyName, policyStrings) { 102 return fmt.Errorf("Policy still exists and is assigned") 103 } 104 } 105 } 106 default: 107 continue 108 } 109 } 110 return nil 111 } 112 113 func testAccCheckAWSLoadBalancerListenerPolicyState(loadBalancerName string, loadBalancerListenerPort int64, loadBalancerListenerPolicyName string, assigned bool) resource.TestCheckFunc { 114 return func(s *terraform.State) error { 115 elbconn := testAccProvider.Meta().(*AWSClient).elbconn 116 117 loadBalancerDescription, err := elbconn.DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{ 118 LoadBalancerNames: []*string{aws.String(loadBalancerName)}, 119 }) 120 if err != nil { 121 return err 122 } 123 124 for _, listener := range loadBalancerDescription.LoadBalancerDescriptions[0].ListenerDescriptions { 125 if *listener.Listener.LoadBalancerPort != loadBalancerListenerPort { 126 continue 127 } 128 policyStrings := []string{} 129 for _, pol := range listener.PolicyNames { 130 policyStrings = append(policyStrings, *pol) 131 } 132 if policyInListenerPolicies(loadBalancerListenerPolicyName, policyStrings) != assigned { 133 if assigned { 134 return fmt.Errorf("Policy no longer assigned %s not in %+v", loadBalancerListenerPolicyName, policyStrings) 135 } else { 136 return fmt.Errorf("Policy exists and is assigned") 137 } 138 } 139 } 140 141 return nil 142 } 143 } 144 145 const testAccAWSLoadBalancerListenerPolicyConfig_basic0 = ` 146 resource "aws_elb" "test-lb" { 147 name = "test-aws-policies-lb" 148 availability_zones = ["us-west-2a"] 149 150 listener { 151 instance_port = 80 152 instance_protocol = "http" 153 lb_port = 80 154 lb_protocol = "http" 155 } 156 157 tags { 158 Name = "tf-acc-test" 159 } 160 } 161 162 resource "aws_load_balancer_policy" "magic-cookie-sticky" { 163 load_balancer_name = "${aws_elb.test-lb.name}" 164 policy_name = "magic-cookie-sticky-policy" 165 policy_type_name = "AppCookieStickinessPolicyType" 166 policy_attribute = { 167 name = "CookieName" 168 value = "magic_cookie" 169 } 170 } 171 172 resource "aws_load_balancer_listener_policy" "test-lb-listener-policies-80" { 173 load_balancer_name = "${aws_elb.test-lb.name}" 174 load_balancer_port = 80 175 policy_names = [ 176 "${aws_load_balancer_policy.magic-cookie-sticky.policy_name}", 177 ] 178 } 179 ` 180 181 const testAccAWSLoadBalancerListenerPolicyConfig_basic1 = ` 182 resource "aws_elb" "test-lb" { 183 name = "test-aws-policies-lb" 184 availability_zones = ["us-west-2a"] 185 186 listener { 187 instance_port = 80 188 instance_protocol = "http" 189 lb_port = 80 190 lb_protocol = "http" 191 } 192 193 tags { 194 Name = "tf-acc-test" 195 } 196 } 197 198 resource "aws_load_balancer_policy" "magic-cookie-sticky" { 199 load_balancer_name = "${aws_elb.test-lb.name}" 200 policy_name = "magic-cookie-sticky-policy" 201 policy_type_name = "AppCookieStickinessPolicyType" 202 policy_attribute = { 203 name = "CookieName" 204 value = "unicorn_cookie" 205 } 206 } 207 208 resource "aws_load_balancer_listener_policy" "test-lb-listener-policies-80" { 209 load_balancer_name = "${aws_elb.test-lb.name}" 210 load_balancer_port = 80 211 policy_names = [ 212 "${aws_load_balancer_policy.magic-cookie-sticky.policy_name}" 213 ] 214 } 215 ` 216 217 const testAccAWSLoadBalancerListenerPolicyConfig_basic2 = ` 218 resource "aws_elb" "test-lb" { 219 name = "test-aws-policies-lb" 220 availability_zones = ["us-west-2a"] 221 222 listener { 223 instance_port = 80 224 instance_protocol = "http" 225 lb_port = 80 226 lb_protocol = "http" 227 } 228 229 tags { 230 Name = "tf-acc-test" 231 } 232 } 233 `