github.com/mohanarpit/terraform@v0.6.16-0.20160909104007-291f29853544/builtin/providers/aws/resource_aws_alb_listener_test.go (about) 1 package aws 2 3 import ( 4 "errors" 5 "fmt" 6 "math/rand" 7 "testing" 8 "time" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/service/elbv2" 12 "github.com/hashicorp/errwrap" 13 "github.com/hashicorp/terraform/helper/acctest" 14 "github.com/hashicorp/terraform/helper/resource" 15 "github.com/hashicorp/terraform/terraform" 16 ) 17 18 func TestAccAWSALBListener_basic(t *testing.T) { 19 var conf elbv2.Listener 20 albName := fmt.Sprintf("testlistener-basic-%s", acctest.RandStringFromCharSet(13, acctest.CharSetAlphaNum)) 21 targetGroupName := fmt.Sprintf("testtargetgroup-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) 22 23 resource.Test(t, resource.TestCase{ 24 PreCheck: func() { testAccPreCheck(t) }, 25 IDRefreshName: "aws_alb_listener.front_end", 26 Providers: testAccProviders, 27 CheckDestroy: testAccCheckAWSALBListenerDestroy, 28 Steps: []resource.TestStep{ 29 { 30 Config: testAccAWSALBListenerConfig_basic(albName, targetGroupName), 31 Check: resource.ComposeAggregateTestCheckFunc( 32 testAccCheckAWSALBListenerExists("aws_alb_listener.front_end", &conf), 33 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "load_balancer_arn"), 34 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "arn"), 35 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "protocol", "HTTP"), 36 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "port", "80"), 37 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "default_action.#", "1"), 38 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "default_action.0.type", "forward"), 39 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "default_action.0.target_group_arn"), 40 ), 41 }, 42 }, 43 }) 44 } 45 46 func TestAccAWSALBListener_https(t *testing.T) { 47 var conf elbv2.Listener 48 albName := fmt.Sprintf("testlistener-https-%s", acctest.RandStringFromCharSet(13, acctest.CharSetAlphaNum)) 49 targetGroupName := fmt.Sprintf("testtargetgroup-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) 50 51 resource.Test(t, resource.TestCase{ 52 PreCheck: func() { testAccPreCheck(t) }, 53 IDRefreshName: "aws_alb_listener.front_end", 54 Providers: testAccProviders, 55 CheckDestroy: testAccCheckAWSALBListenerDestroy, 56 Steps: []resource.TestStep{ 57 { 58 Config: testAccAWSALBListenerConfig_https(albName, targetGroupName), 59 Check: resource.ComposeAggregateTestCheckFunc( 60 testAccCheckAWSALBListenerExists("aws_alb_listener.front_end", &conf), 61 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "load_balancer_arn"), 62 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "arn"), 63 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "protocol", "HTTPS"), 64 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "port", "443"), 65 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "default_action.#", "1"), 66 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "default_action.0.type", "forward"), 67 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "default_action.0.target_group_arn"), 68 resource.TestCheckResourceAttrSet("aws_alb_listener.front_end", "certificate_arn"), 69 resource.TestCheckResourceAttr("aws_alb_listener.front_end", "ssl_policy", "ELBSecurityPolicy-2015-05"), 70 ), 71 }, 72 }, 73 }) 74 } 75 76 func testAccCheckAWSALBListenerExists(n string, res *elbv2.Listener) resource.TestCheckFunc { 77 return func(s *terraform.State) error { 78 rs, ok := s.RootModule().Resources[n] 79 if !ok { 80 return fmt.Errorf("Not found: %s", n) 81 } 82 83 if rs.Primary.ID == "" { 84 return errors.New("No Listener ID is set") 85 } 86 87 conn := testAccProvider.Meta().(*AWSClient).elbv2conn 88 89 describe, err := conn.DescribeListeners(&elbv2.DescribeListenersInput{ 90 ListenerArns: []*string{aws.String(rs.Primary.ID)}, 91 }) 92 93 if err != nil { 94 return err 95 } 96 97 if len(describe.Listeners) != 1 || 98 *describe.Listeners[0].ListenerArn != rs.Primary.ID { 99 return errors.New("Listener not found") 100 } 101 102 *res = *describe.Listeners[0] 103 return nil 104 } 105 } 106 107 func testAccCheckAWSALBListenerDestroy(s *terraform.State) error { 108 conn := testAccProvider.Meta().(*AWSClient).elbv2conn 109 110 for _, rs := range s.RootModule().Resources { 111 if rs.Type != "aws_alb_listener" { 112 continue 113 } 114 115 describe, err := conn.DescribeListeners(&elbv2.DescribeListenersInput{ 116 ListenerArns: []*string{aws.String(rs.Primary.ID)}, 117 }) 118 119 if err == nil { 120 if len(describe.Listeners) != 0 && 121 *describe.Listeners[0].ListenerArn == rs.Primary.ID { 122 return fmt.Errorf("Listener %q still exists", rs.Primary.ID) 123 } 124 } 125 126 // Verify the error 127 if isListenerNotFound(err) { 128 return nil 129 } else { 130 return errwrap.Wrapf("Unexpected error checking ALB Listener destroyed: {{err}}", err) 131 } 132 } 133 134 return nil 135 } 136 137 func testAccAWSALBListenerConfig_basic(albName, targetGroupName string) string { 138 return fmt.Sprintf(`resource "aws_alb_listener" "front_end" { 139 load_balancer_arn = "${aws_alb.alb_test.id}" 140 protocol = "HTTP" 141 port = "80" 142 143 default_action { 144 target_group_arn = "${aws_alb_target_group.test.id}" 145 type = "forward" 146 } 147 } 148 149 resource "aws_alb" "alb_test" { 150 name = "%s" 151 internal = false 152 security_groups = ["${aws_security_group.alb_test.id}"] 153 subnets = ["${aws_subnet.alb_test.*.id}"] 154 155 idle_timeout = 30 156 enable_deletion_protection = false 157 158 tags { 159 TestName = "TestAccAWSALB_basic" 160 } 161 } 162 163 resource "aws_alb_target_group" "test" { 164 name = "%s" 165 port = 8080 166 protocol = "HTTP" 167 vpc_id = "${aws_vpc.alb_test.id}" 168 169 health_check { 170 path = "/health" 171 interval = 60 172 port = 8081 173 protocol = "HTTP" 174 timeout = 3 175 healthy_threshold = 3 176 unhealthy_threshold = 3 177 matcher = "200-299" 178 } 179 } 180 181 variable "subnets" { 182 default = ["10.0.1.0/24", "10.0.2.0/24"] 183 type = "list" 184 } 185 186 data "aws_availability_zones" "available" {} 187 188 resource "aws_vpc" "alb_test" { 189 cidr_block = "10.0.0.0/16" 190 191 tags { 192 TestName = "TestAccAWSALB_basic" 193 } 194 } 195 196 resource "aws_subnet" "alb_test" { 197 count = 2 198 vpc_id = "${aws_vpc.alb_test.id}" 199 cidr_block = "${element(var.subnets, count.index)}" 200 map_public_ip_on_launch = true 201 availability_zone = "${element(data.aws_availability_zones.available.names, count.index)}" 202 203 tags { 204 TestName = "TestAccAWSALB_basic" 205 } 206 } 207 208 resource "aws_security_group" "alb_test" { 209 name = "allow_all_alb_test" 210 description = "Used for ALB Testing" 211 vpc_id = "${aws_vpc.alb_test.id}" 212 213 ingress { 214 from_port = 0 215 to_port = 0 216 protocol = "-1" 217 cidr_blocks = ["0.0.0.0/0"] 218 } 219 220 egress { 221 from_port = 0 222 to_port = 0 223 protocol = "-1" 224 cidr_blocks = ["0.0.0.0/0"] 225 } 226 227 tags { 228 TestName = "TestAccAWSALB_basic" 229 } 230 }`, albName, targetGroupName) 231 } 232 233 func testAccAWSALBListenerConfig_https(albName, targetGroupName string) string { 234 return fmt.Sprintf(`resource "aws_alb_listener" "front_end" { 235 load_balancer_arn = "${aws_alb.alb_test.id}" 236 protocol = "HTTPS" 237 port = "443" 238 ssl_policy = "ELBSecurityPolicy-2015-05" 239 certificate_arn = "${aws_iam_server_certificate.test_cert.arn}" 240 241 default_action { 242 target_group_arn = "${aws_alb_target_group.test.id}" 243 type = "forward" 244 } 245 } 246 247 resource "aws_alb" "alb_test" { 248 name = "%s" 249 internal = false 250 security_groups = ["${aws_security_group.alb_test.id}"] 251 subnets = ["${aws_subnet.alb_test.*.id}"] 252 253 idle_timeout = 30 254 enable_deletion_protection = false 255 256 tags { 257 TestName = "TestAccAWSALB_basic" 258 } 259 } 260 261 resource "aws_alb_target_group" "test" { 262 name = "%s" 263 port = 8080 264 protocol = "HTTP" 265 vpc_id = "${aws_vpc.alb_test.id}" 266 267 health_check { 268 path = "/health" 269 interval = 60 270 port = 8081 271 protocol = "HTTP" 272 timeout = 3 273 healthy_threshold = 3 274 unhealthy_threshold = 3 275 matcher = "200-299" 276 } 277 } 278 279 variable "subnets" { 280 default = ["10.0.1.0/24", "10.0.2.0/24"] 281 type = "list" 282 } 283 284 data "aws_availability_zones" "available" {} 285 286 resource "aws_vpc" "alb_test" { 287 cidr_block = "10.0.0.0/16" 288 289 tags { 290 TestName = "TestAccAWSALB_basic" 291 } 292 } 293 294 resource "aws_subnet" "alb_test" { 295 count = 2 296 vpc_id = "${aws_vpc.alb_test.id}" 297 cidr_block = "${element(var.subnets, count.index)}" 298 map_public_ip_on_launch = true 299 availability_zone = "${element(data.aws_availability_zones.available.names, count.index)}" 300 301 tags { 302 TestName = "TestAccAWSALB_basic" 303 } 304 } 305 306 resource "aws_security_group" "alb_test" { 307 name = "allow_all_alb_test" 308 description = "Used for ALB Testing" 309 vpc_id = "${aws_vpc.alb_test.id}" 310 311 ingress { 312 from_port = 0 313 to_port = 0 314 protocol = "-1" 315 cidr_blocks = ["0.0.0.0/0"] 316 } 317 318 egress { 319 from_port = 0 320 to_port = 0 321 protocol = "-1" 322 cidr_blocks = ["0.0.0.0/0"] 323 } 324 325 tags { 326 TestName = "TestAccAWSALB_basic" 327 } 328 } 329 330 resource "aws_iam_server_certificate" "test_cert" { 331 name = "terraform-test-cert-%d" 332 certificate_body = <<EOF 333 -----BEGIN CERTIFICATE----- 334 MIIDBjCCAe4CCQCGWwBmOiHQdTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB 335 VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0 336 cyBQdHkgTHRkMB4XDTE2MDYyMTE2MzM0MVoXDTE3MDYyMTE2MzM0MVowRTELMAkG 337 A1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 338 IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB 339 AL+LFlsCJG5txZp4yuu+lQnuUrgBXRG+irQqcTXlV91Bp5hpmRIyhnGCtWxxDBUL 340 xrh4WN3VV/0jDzKT976oLgOy3hj56Cdqf+JlZ1qgMN5bHB3mm3aVWnrnsLbBsfwZ 341 SEbk3Kht/cE1nK2toNVW+rznS3m+eoV3Zn/DUNwGlZr42hGNs6ETn2jURY78ETqR 342 mW47xvjf86eIo7vULHJaY6xyarPqkL8DZazOmvY06hUGvGwGBny7gugfXqDG+I8n 343 cPBsGJGSAmHmVV8o0RCB9UjY+TvSMQRpEDoVlvyrGuglsD8to/4+7UcsuDGlRYN6 344 jmIOC37mOi/jwRfWL1YUa4MCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAPDxTH0oQ 345 JjKXoJgkmQxurB81RfnK/NrswJVzWbOv6ejcbhwh+/ZgJTMc15BrYcxU6vUW1V/i 346 Z7APU0qJ0icECACML+a2fRI7YdLCTiPIOmY66HY8MZHAn3dGjU5TeiUflC0n0zkP 347 mxKJe43kcYLNDItbfvUDo/GoxTXrC3EFVZyU0RhFzoVJdODlTHXMVFCzcbQEBrBJ 348 xKdShCEc8nFMneZcGFeEU488ntZoWzzms8/QpYrKa5S0Sd7umEU2Kwu4HTkvUFg/ 349 CqDUFjhydXxYRsxXBBrEiLOE5BdtJR1sH/QHxIJe23C9iHI2nS1NbLziNEApLwC4 350 GnSud83VUo9G9w== 351 -----END CERTIFICATE----- 352 EOF 353 354 private_key = <<EOF 355 -----BEGIN RSA PRIVATE KEY----- 356 MIIEowIBAAKCAQEAv4sWWwIkbm3FmnjK676VCe5SuAFdEb6KtCpxNeVX3UGnmGmZ 357 EjKGcYK1bHEMFQvGuHhY3dVX/SMPMpP3vqguA7LeGPnoJ2p/4mVnWqAw3lscHeab 358 dpVaeuewtsGx/BlIRuTcqG39wTWcra2g1Vb6vOdLeb56hXdmf8NQ3AaVmvjaEY2z 359 oROfaNRFjvwROpGZbjvG+N/zp4iju9QsclpjrHJqs+qQvwNlrM6a9jTqFQa8bAYG 360 fLuC6B9eoMb4jydw8GwYkZICYeZVXyjREIH1SNj5O9IxBGkQOhWW/Ksa6CWwPy2j 361 /j7tRyy4MaVFg3qOYg4LfuY6L+PBF9YvVhRrgwIDAQABAoIBAFqJ4h1Om+3e0WK8 362 6h4YzdYN4ue7LUTv7hxPW4gASlH5cMDoWURywX3yLNN/dBiWom4b5NWmvJqY8dwU 363 eSyTznxNFhJ0PjozaxOWnw4FXlQceOPhV2bsHgKudadNU1Y4lSN9lpe+tg2Xy+GE 364 ituM66RTKCf502w3DioiJpx6OEkxuhrnsQAWNcGB0MnTukm2f+629V+04R5MT5V1 365 nY+5Phx2BpHgYzWBKh6Px1puu7xFv5SMQda1ndlPIKb4cNp0yYn+1lHNjbOE7QL/ 366 oEpWgrauS5Zk/APK33v/p3wVYHrKocIFHlPiCW0uIJJLsOZDY8pQXpTlc+/xGLLy 367 WBu4boECgYEA6xO+1UNh6ndJ3xGuNippH+ucTi/uq1+0tG1bd63v+75tn5l4LyY2 368 CWHRaWVlVn+WnDslkQTJzFD68X+9M7Cc4oP6WnhTyPamG7HlGv5JxfFHTC9GOKmz 369 sSc624BDmqYJ7Xzyhe5kc3iHzqG/L72ZF1aijZdrodQMSY1634UX6aECgYEA0Jdr 370 cBPSN+mgmEY6ogN5h7sO5uNV3TQQtW2IslfWZn6JhSRF4Rf7IReng48CMy9ZhFBy 371 Q7H2I1pDGjEC9gQHhgVfm+FyMSVqXfCHEW/97pvvu9ougHA0MhPep1twzTGrqg+K 372 f3PLW8hVkGyCrTfWgbDlPsHgsocA/wTaQOheaqMCgYBat5z+WemQfQZh8kXDm2xE 373 KD2Cota9BcsLkeQpdFNXWC6f167cqydRSZFx1fJchhJOKjkeFLX3hgzBY6VVLEPu 374 2jWj8imLNTv3Fhiu6RD5NVppWRkFRuAUbmo1SPNN2+Oa5YwGCXB0a0Alip/oQYex 375 zPogIB4mLlmrjNCtL4SB4QKBgCEHKMrZSJrz0irqS9RlanPUaZqjenAJE3A2xMNA 376 Z0FZXdsIEEyA6JGn1i1dkoKaR7lMp5sSbZ/RZfiatBZSMwLEjQv4mYUwoHP5Ztma 377 +wEyDbaX6G8L1Sfsv3+OWgETkVPfHBXsNtH0mZ/BnrtgsQVeBh52wmZiPAUlNo26 378 fWCzAoGBAJOjqovLelLWzyQGqPFx/MwuI56UFXd1CmFlCIvF2WxCFmk3tlExoCN1 379 HqSpt92vsgYgV7+lAb4U7Uy/v012gwiU1LK+vyAE9geo3pTjG73BNzG4H547xtbY 380 dg+Sd4Wjm89UQoUUoiIcstY7FPbqfBtYKfh4RYHAHV2BwDFqzZCM 381 -----END RSA PRIVATE KEY----- 382 EOF 383 } 384 `, albName, targetGroupName, rand.New(rand.NewSource(time.Now().UnixNano())).Int()) 385 }