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  }