github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_route53_health_check_test.go (about)

     1  package aws
     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/aws/aws-sdk-go/service/route53"
    11  )
    12  
    13  func TestAccAWSRoute53HealthCheck_basic(t *testing.T) {
    14  	resource.Test(t, resource.TestCase{
    15  		PreCheck:      func() { testAccPreCheck(t) },
    16  		IDRefreshName: "aws_route53_health_check.foo",
    17  		Providers:     testAccProviders,
    18  		CheckDestroy:  testAccCheckRoute53HealthCheckDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccRoute53HealthCheckConfig,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
    24  					resource.TestCheckResourceAttr(
    25  						"aws_route53_health_check.foo", "measure_latency", "true"),
    26  					resource.TestCheckResourceAttr(
    27  						"aws_route53_health_check.foo", "invert_healthcheck", "true"),
    28  				),
    29  			},
    30  			resource.TestStep{
    31  				Config: testAccRoute53HealthCheckConfigUpdate,
    32  				Check: resource.ComposeTestCheckFunc(
    33  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
    34  					resource.TestCheckResourceAttr(
    35  						"aws_route53_health_check.foo", "failure_threshold", "5"),
    36  					resource.TestCheckResourceAttr(
    37  						"aws_route53_health_check.foo", "invert_healthcheck", "false"),
    38  				),
    39  			},
    40  		},
    41  	})
    42  }
    43  
    44  func TestAccAWSRoute53HealthCheck_withSearchString(t *testing.T) {
    45  	resource.Test(t, resource.TestCase{
    46  		PreCheck:      func() { testAccPreCheck(t) },
    47  		IDRefreshName: "aws_route53_health_check.foo",
    48  		Providers:     testAccProviders,
    49  		CheckDestroy:  testAccCheckRoute53HealthCheckDestroy,
    50  		Steps: []resource.TestStep{
    51  			resource.TestStep{
    52  				Config: testAccRoute53HealthCheckConfigWithSearchString,
    53  				Check: resource.ComposeTestCheckFunc(
    54  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
    55  					resource.TestCheckResourceAttr(
    56  						"aws_route53_health_check.foo", "invert_healthcheck", "false"),
    57  					resource.TestCheckResourceAttr(
    58  						"aws_route53_health_check.foo", "search_string", "OK"),
    59  				),
    60  			},
    61  			resource.TestStep{
    62  				Config: testAccRoute53HealthCheckConfigWithSearchStringUpdate,
    63  				Check: resource.ComposeTestCheckFunc(
    64  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
    65  					resource.TestCheckResourceAttr(
    66  						"aws_route53_health_check.foo", "invert_healthcheck", "true"),
    67  					resource.TestCheckResourceAttr(
    68  						"aws_route53_health_check.foo", "search_string", "FAILED"),
    69  				),
    70  			},
    71  		},
    72  	})
    73  }
    74  
    75  func TestAccAWSRoute53HealthCheck_withChildHealthChecks(t *testing.T) {
    76  	resource.Test(t, resource.TestCase{
    77  		PreCheck:     func() { testAccPreCheck(t) },
    78  		Providers:    testAccProviders,
    79  		CheckDestroy: testAccCheckRoute53HealthCheckDestroy,
    80  		Steps: []resource.TestStep{
    81  			resource.TestStep{
    82  				Config: testAccRoute53HealthCheckConfig_withChildHealthChecks,
    83  				Check: resource.ComposeTestCheckFunc(
    84  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
    85  				),
    86  			},
    87  		},
    88  	})
    89  }
    90  
    91  func TestAccAWSRoute53HealthCheck_IpConfig(t *testing.T) {
    92  	resource.Test(t, resource.TestCase{
    93  		PreCheck:     func() { testAccPreCheck(t) },
    94  		Providers:    testAccProviders,
    95  		CheckDestroy: testAccCheckRoute53HealthCheckDestroy,
    96  		Steps: []resource.TestStep{
    97  			resource.TestStep{
    98  				Config: testAccRoute53HealthCheckIpConfig,
    99  				Check: resource.ComposeTestCheckFunc(
   100  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.bar"),
   101  				),
   102  			},
   103  		},
   104  	})
   105  }
   106  
   107  func TestAccAWSRoute53HealthCheck_CloudWatchAlarmCheck(t *testing.T) {
   108  	resource.Test(t, resource.TestCase{
   109  		PreCheck:     func() { testAccPreCheck(t) },
   110  		Providers:    testAccProviders,
   111  		CheckDestroy: testAccCheckRoute53HealthCheckDestroy,
   112  		Steps: []resource.TestStep{
   113  			resource.TestStep{
   114  				Config: testAccRoute53HealthCheckCloudWatchAlarm,
   115  				Check: resource.ComposeTestCheckFunc(
   116  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
   117  					resource.TestCheckResourceAttr(
   118  						"aws_route53_health_check.foo", "cloudwatch_alarm_name", "cloudwatch-healthcheck-alarm"),
   119  				),
   120  			},
   121  		},
   122  	})
   123  }
   124  
   125  func TestAccAWSRoute53HealthCheck_withSNI(t *testing.T) {
   126  	resource.Test(t, resource.TestCase{
   127  		PreCheck:      func() { testAccPreCheck(t) },
   128  		IDRefreshName: "aws_route53_health_check.foo",
   129  		Providers:     testAccProviders,
   130  		CheckDestroy:  testAccCheckRoute53HealthCheckDestroy,
   131  		Steps: []resource.TestStep{
   132  			resource.TestStep{
   133  				Config: testAccRoute53HealthCheckConfigWithoutSNI,
   134  				Check: resource.ComposeTestCheckFunc(
   135  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
   136  					resource.TestCheckResourceAttr(
   137  						"aws_route53_health_check.foo", "enable_sni", "true"),
   138  				),
   139  			},
   140  			resource.TestStep{
   141  				Config: testAccRoute53HealthCheckConfigWithSNIDisabled,
   142  				Check: resource.ComposeTestCheckFunc(
   143  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
   144  					resource.TestCheckResourceAttr(
   145  						"aws_route53_health_check.foo", "enable_sni", "false"),
   146  				),
   147  			},
   148  			resource.TestStep{
   149  				Config: testAccRoute53HealthCheckConfigWithSNI,
   150  				Check: resource.ComposeTestCheckFunc(
   151  					testAccCheckRoute53HealthCheckExists("aws_route53_health_check.foo"),
   152  					resource.TestCheckResourceAttr(
   153  						"aws_route53_health_check.foo", "enable_sni", "true"),
   154  				),
   155  			},
   156  		},
   157  	})
   158  }
   159  
   160  func testAccCheckRoute53HealthCheckDestroy(s *terraform.State) error {
   161  	conn := testAccProvider.Meta().(*AWSClient).r53conn
   162  
   163  	for _, rs := range s.RootModule().Resources {
   164  		if rs.Type != "aws_route53_health_check" {
   165  			continue
   166  		}
   167  
   168  		lopts := &route53.ListHealthChecksInput{}
   169  		resp, err := conn.ListHealthChecks(lopts)
   170  		if err != nil {
   171  			return err
   172  		}
   173  		if len(resp.HealthChecks) == 0 {
   174  			return nil
   175  		}
   176  
   177  		for _, check := range resp.HealthChecks {
   178  			if *check.Id == rs.Primary.ID {
   179  				return fmt.Errorf("Record still exists: %#v", check)
   180  			}
   181  
   182  		}
   183  
   184  	}
   185  	return nil
   186  }
   187  
   188  func testAccCheckRoute53HealthCheckExists(n string) resource.TestCheckFunc {
   189  	return func(s *terraform.State) error {
   190  		conn := testAccProvider.Meta().(*AWSClient).r53conn
   191  
   192  		rs, ok := s.RootModule().Resources[n]
   193  		if !ok {
   194  			return fmt.Errorf("Not found: %s", n)
   195  		}
   196  
   197  		fmt.Print(rs.Primary.ID)
   198  
   199  		if rs.Primary.ID == "" {
   200  			return fmt.Errorf("No health check ID is set")
   201  		}
   202  
   203  		lopts := &route53.ListHealthChecksInput{}
   204  		resp, err := conn.ListHealthChecks(lopts)
   205  		if err != nil {
   206  			return err
   207  		}
   208  		if len(resp.HealthChecks) == 0 {
   209  			return fmt.Errorf("Health Check does not exist")
   210  		}
   211  
   212  		for _, check := range resp.HealthChecks {
   213  			if *check.Id == rs.Primary.ID {
   214  				return nil
   215  			}
   216  
   217  		}
   218  		return fmt.Errorf("Health Check does not exist")
   219  	}
   220  }
   221  
   222  func testUpdateHappened(n string) resource.TestCheckFunc {
   223  	return nil
   224  }
   225  
   226  const testAccRoute53HealthCheckConfig = `
   227  resource "aws_route53_health_check" "foo" {
   228    fqdn = "dev.notexample.com"
   229    port = 80
   230    type = "HTTP"
   231    resource_path = "/"
   232    failure_threshold = "2"
   233    request_interval = "30"
   234    measure_latency = true
   235    invert_healthcheck = true
   236  
   237    tags = {
   238      Name = "tf-test-health-check"
   239     }
   240  }
   241  `
   242  
   243  const testAccRoute53HealthCheckConfigUpdate = `
   244  resource "aws_route53_health_check" "foo" {
   245    fqdn = "dev.notexample.com"
   246    port = 80
   247    type = "HTTP"
   248    resource_path = "/"
   249    failure_threshold = "5"
   250    request_interval = "30"
   251    measure_latency = true
   252    invert_healthcheck = false
   253  
   254    tags = {
   255      Name = "tf-test-health-check"
   256     }
   257  }
   258  `
   259  
   260  const testAccRoute53HealthCheckIpConfig = `
   261  resource "aws_route53_health_check" "bar" {
   262    ip_address = "1.2.3.4"
   263    port = 80
   264    type = "HTTP"
   265    resource_path = "/"
   266    failure_threshold = "2"
   267    request_interval = "30"
   268  
   269    tags = {
   270      Name = "tf-test-health-check"
   271     }
   272  }
   273  `
   274  
   275  const testAccRoute53HealthCheckConfig_withChildHealthChecks = `
   276  resource "aws_route53_health_check" "child1" {
   277    fqdn = "child1.notexample.com"
   278    port = 80
   279    type = "HTTP"
   280    resource_path = "/"
   281    failure_threshold = "2"
   282    request_interval = "30"
   283  }
   284  
   285  resource "aws_route53_health_check" "foo" {
   286    type = "CALCULATED"
   287    child_health_threshold = 1
   288    child_healthchecks = ["${aws_route53_health_check.child1.id}"]
   289  
   290    tags = {
   291      Name = "tf-test-calculated-health-check"
   292     }
   293  }
   294  `
   295  
   296  const testAccRoute53HealthCheckCloudWatchAlarm = `
   297  resource "aws_cloudwatch_metric_alarm" "foobar" {
   298      alarm_name = "cloudwatch-healthcheck-alarm"
   299      comparison_operator = "GreaterThanOrEqualToThreshold"
   300      evaluation_periods = "2"
   301      metric_name = "CPUUtilization"
   302      namespace = "AWS/EC2"
   303      period = "120"
   304      statistic = "Average"
   305      threshold = "80"
   306      alarm_description = "This metric monitor ec2 cpu utilization"
   307  }
   308  
   309  resource "aws_route53_health_check" "foo" {
   310    type = "CLOUDWATCH_METRIC"
   311    cloudwatch_alarm_name = "${aws_cloudwatch_metric_alarm.foobar.alarm_name}"
   312    cloudwatch_alarm_region = "us-west-2"
   313    insufficient_data_health_status = "Healthy"
   314  }
   315  `
   316  
   317  const testAccRoute53HealthCheckConfigWithSearchString = `
   318  resource "aws_route53_health_check" "foo" {
   319    fqdn = "dev.notexample.com"
   320    port = 80
   321    type = "HTTP_STR_MATCH"
   322    resource_path = "/"
   323    failure_threshold = "2"
   324    request_interval = "30"
   325    measure_latency = true
   326    invert_healthcheck = false
   327    search_string = "OK"
   328  
   329    tags = {
   330      Name = "tf-test-health-check"
   331     }
   332  }
   333  `
   334  
   335  const testAccRoute53HealthCheckConfigWithSearchStringUpdate = `
   336  resource "aws_route53_health_check" "foo" {
   337    fqdn = "dev.notexample.com"
   338    port = 80
   339    type = "HTTP_STR_MATCH"
   340    resource_path = "/"
   341    failure_threshold = "5"
   342    request_interval = "30"
   343    measure_latency = true
   344    invert_healthcheck = true
   345    search_string = "FAILED"
   346  
   347    tags = {
   348      Name = "tf-test-health-check"
   349     }
   350  }
   351  `
   352  
   353  const testAccRoute53HealthCheckConfigWithoutSNI = `
   354  resource "aws_route53_health_check" "foo" {
   355    fqdn = "dev.notexample.com"
   356    port = 443
   357    type = "HTTPS"
   358    resource_path = "/"
   359    failure_threshold = "2"
   360    request_interval = "30"
   361    measure_latency = true
   362    invert_healthcheck = true
   363  
   364    tags = {
   365      Name = "tf-test-health-check"
   366     }
   367  }
   368  `
   369  
   370  const testAccRoute53HealthCheckConfigWithSNI = `
   371  resource "aws_route53_health_check" "foo" {
   372  	fqdn = "dev.notexample.com"
   373    port = 443
   374    type = "HTTPS"
   375    resource_path = "/"
   376    failure_threshold = "2"
   377    request_interval = "30"
   378    measure_latency = true
   379    invert_healthcheck = true
   380    enable_sni = true
   381  
   382    tags = {
   383      Name = "tf-test-health-check"
   384     }
   385  }
   386  `
   387  
   388  const testAccRoute53HealthCheckConfigWithSNIDisabled = `
   389  resource "aws_route53_health_check" "foo" {
   390  	fqdn = "dev.notexample.com"
   391    port = 443
   392    type = "HTTPS"
   393    resource_path = "/"
   394    failure_threshold = "2"
   395    request_interval = "30"
   396    measure_latency = true
   397    invert_healthcheck = true
   398    enable_sni = false
   399  
   400    tags = {
   401      Name = "tf-test-health-check"
   402     }
   403  }
   404  `