github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/resource_aws_app_cookie_stickiness_policy_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/aws/awserr" 9 "github.com/aws/aws-sdk-go/service/elb" 10 11 "github.com/hashicorp/terraform/helper/acctest" 12 "github.com/hashicorp/terraform/helper/resource" 13 "github.com/hashicorp/terraform/terraform" 14 ) 15 16 func TestAccAWSAppCookieStickinessPolicy_basic(t *testing.T) { 17 lbName := fmt.Sprintf("tf-test-lb-%s", acctest.RandString(5)) 18 19 resource.Test(t, resource.TestCase{ 20 PreCheck: func() { testAccPreCheck(t) }, 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckAppCookieStickinessPolicyDestroy, 23 Steps: []resource.TestStep{ 24 resource.TestStep{ 25 Config: testAccAppCookieStickinessPolicyConfig(lbName), 26 Check: resource.ComposeTestCheckFunc( 27 testAccCheckAppCookieStickinessPolicy( 28 "aws_elb.lb", 29 "aws_app_cookie_stickiness_policy.foo", 30 ), 31 ), 32 }, 33 resource.TestStep{ 34 Config: testAccAppCookieStickinessPolicyConfigUpdate(lbName), 35 Check: resource.ComposeTestCheckFunc( 36 testAccCheckAppCookieStickinessPolicy( 37 "aws_elb.lb", 38 "aws_app_cookie_stickiness_policy.foo", 39 ), 40 ), 41 }, 42 }, 43 }) 44 } 45 46 func TestAccAWSAppCookieStickinessPolicy_missingLB(t *testing.T) { 47 lbName := fmt.Sprintf("tf-test-lb-%s", acctest.RandString(5)) 48 49 // check that we can destroy the policy if the LB is missing 50 removeLB := func() { 51 conn := testAccProvider.Meta().(*AWSClient).elbconn 52 deleteElbOpts := elb.DeleteLoadBalancerInput{ 53 LoadBalancerName: aws.String(lbName), 54 } 55 if _, err := conn.DeleteLoadBalancer(&deleteElbOpts); err != nil { 56 t.Fatalf("Error deleting ELB: %s", err) 57 } 58 } 59 60 resource.Test(t, resource.TestCase{ 61 PreCheck: func() { testAccPreCheck(t) }, 62 Providers: testAccProviders, 63 CheckDestroy: testAccCheckAppCookieStickinessPolicyDestroy, 64 Steps: []resource.TestStep{ 65 resource.TestStep{ 66 Config: testAccAppCookieStickinessPolicyConfig(lbName), 67 Check: resource.ComposeTestCheckFunc( 68 testAccCheckAppCookieStickinessPolicy( 69 "aws_elb.lb", 70 "aws_app_cookie_stickiness_policy.foo", 71 ), 72 ), 73 }, 74 resource.TestStep{ 75 PreConfig: removeLB, 76 Config: testAccAppCookieStickinessPolicyConfigDestroy(lbName), 77 }, 78 }, 79 }) 80 } 81 82 func testAccCheckAppCookieStickinessPolicyDestroy(s *terraform.State) error { 83 conn := testAccProvider.Meta().(*AWSClient).elbconn 84 85 for _, rs := range s.RootModule().Resources { 86 if rs.Type != "aws_app_cookie_stickiness_policy" { 87 continue 88 } 89 90 lbName, _, policyName := resourceAwsAppCookieStickinessPolicyParseId( 91 rs.Primary.ID) 92 out, err := conn.DescribeLoadBalancerPolicies( 93 &elb.DescribeLoadBalancerPoliciesInput{ 94 LoadBalancerName: aws.String(lbName), 95 PolicyNames: []*string{aws.String(policyName)}, 96 }) 97 if err != nil { 98 if ec2err, ok := err.(awserr.Error); ok && (ec2err.Code() == "PolicyNotFound" || ec2err.Code() == "LoadBalancerNotFound") { 99 continue 100 } 101 return err 102 } 103 104 if len(out.PolicyDescriptions) > 0 { 105 return fmt.Errorf("Policy still exists") 106 } 107 } 108 return nil 109 } 110 111 func testAccCheckAppCookieStickinessPolicy(elbResource string, policyResource string) resource.TestCheckFunc { 112 return func(s *terraform.State) error { 113 rs, ok := s.RootModule().Resources[elbResource] 114 if !ok { 115 return fmt.Errorf("Not found: %s", elbResource) 116 } 117 118 if rs.Primary.ID == "" { 119 return fmt.Errorf("No ID is set") 120 } 121 122 policy, ok := s.RootModule().Resources[policyResource] 123 if !ok { 124 return fmt.Errorf("Not found: %s", policyResource) 125 } 126 127 elbconn := testAccProvider.Meta().(*AWSClient).elbconn 128 elbName, _, policyName := resourceAwsAppCookieStickinessPolicyParseId(policy.Primary.ID) 129 _, err := elbconn.DescribeLoadBalancerPolicies(&elb.DescribeLoadBalancerPoliciesInput{ 130 LoadBalancerName: aws.String(elbName), 131 PolicyNames: []*string{aws.String(policyName)}, 132 }) 133 134 if err != nil { 135 return err 136 } 137 138 return nil 139 } 140 } 141 142 // ensure the policy is re-added is it goes missing 143 func TestAccAWSAppCookieStickinessPolicy_drift(t *testing.T) { 144 lbName := fmt.Sprintf("tf-test-lb-%s", acctest.RandString(5)) 145 146 // We only want to remove the reference to the policy from the listner, 147 // beacause that's all that can be done via the console. 148 removePolicy := func() { 149 conn := testAccProvider.Meta().(*AWSClient).elbconn 150 151 setLoadBalancerOpts := &elb.SetLoadBalancerPoliciesOfListenerInput{ 152 LoadBalancerName: aws.String(lbName), 153 LoadBalancerPort: aws.Int64(80), 154 PolicyNames: []*string{}, 155 } 156 157 if _, err := conn.SetLoadBalancerPoliciesOfListener(setLoadBalancerOpts); err != nil { 158 t.Fatalf("Error removing AppCookieStickinessPolicy: %s", err) 159 } 160 } 161 162 resource.Test(t, resource.TestCase{ 163 PreCheck: func() { testAccPreCheck(t) }, 164 Providers: testAccProviders, 165 CheckDestroy: testAccCheckAppCookieStickinessPolicyDestroy, 166 Steps: []resource.TestStep{ 167 resource.TestStep{ 168 Config: testAccAppCookieStickinessPolicyConfig(lbName), 169 Check: resource.ComposeTestCheckFunc( 170 testAccCheckAppCookieStickinessPolicy( 171 "aws_elb.lb", 172 "aws_app_cookie_stickiness_policy.foo", 173 ), 174 ), 175 }, 176 resource.TestStep{ 177 PreConfig: removePolicy, 178 Config: testAccAppCookieStickinessPolicyConfig(lbName), 179 Check: resource.ComposeTestCheckFunc( 180 testAccCheckAppCookieStickinessPolicy( 181 "aws_elb.lb", 182 "aws_app_cookie_stickiness_policy.foo", 183 ), 184 ), 185 }, 186 }, 187 }) 188 } 189 190 func testAccAppCookieStickinessPolicyConfig(rName string) string { 191 return fmt.Sprintf(` 192 resource "aws_elb" "lb" { 193 name = "%s" 194 availability_zones = ["us-west-2a"] 195 listener { 196 instance_port = 8000 197 instance_protocol = "http" 198 lb_port = 80 199 lb_protocol = "http" 200 } 201 } 202 203 resource "aws_app_cookie_stickiness_policy" "foo" { 204 name = "foo-policy" 205 load_balancer = "${aws_elb.lb.id}" 206 lb_port = 80 207 cookie_name = "MyAppCookie" 208 }`, rName) 209 } 210 211 // Change the cookie_name to "MyOtherAppCookie". 212 func testAccAppCookieStickinessPolicyConfigUpdate(rName string) string { 213 return fmt.Sprintf(` 214 resource "aws_elb" "lb" { 215 name = "%s" 216 availability_zones = ["us-west-2a"] 217 listener { 218 instance_port = 8000 219 instance_protocol = "http" 220 lb_port = 80 221 lb_protocol = "http" 222 } 223 } 224 225 resource "aws_app_cookie_stickiness_policy" "foo" { 226 name = "foo-policy" 227 load_balancer = "${aws_elb.lb.id}" 228 lb_port = 80 229 cookie_name = "MyOtherAppCookie" 230 }`, rName) 231 } 232 233 // attempt to destroy the policy, but we'll delete the LB in the PreConfig 234 func testAccAppCookieStickinessPolicyConfigDestroy(rName string) string { 235 return fmt.Sprintf(` 236 resource "aws_elb" "lb" { 237 name = "%s" 238 availability_zones = ["us-west-2a"] 239 listener { 240 instance_port = 8000 241 instance_protocol = "http" 242 lb_port = 80 243 lb_protocol = "http" 244 } 245 }`, rName) 246 }