provider/gce: Set defaults for http_health_check

In order to fix the failing test in the preceding commit when optional
params are changed from their default "computed" values.

These weren't working well with `HttpHealthCheck.Patch()` because it was
attempting to set all unspecified params to Go's type defaults (eg. 0 for
int64) which the API rejected.

Changing the call to `HttpHealthCheck.Update()` seemed to fix this but it
still didn't allow you to reset a param back to it's default by no longer
specifying it.

Settings defaults like this, which match the Terraform docs, seems like the
best all round solution. Includes two additional tests for the acceptance
tests which verify the params are really getting set correctly.
This commit is contained in:
Dan Carley 2015-05-07 10:21:21 +01:00
parent 13e9e6f51d
commit 579c37cd74
2 changed files with 49 additions and 8 deletions

View File

@ -21,7 +21,7 @@ func resourceComputeHttpHealthCheck() *schema.Resource {
"check_interval_sec": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Computed: true,
Default: 5,
},
"description": &schema.Schema{
@ -32,7 +32,7 @@ func resourceComputeHttpHealthCheck() *schema.Resource {
"healthy_threshold": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Computed: true,
Default: 2,
},
"host": &schema.Schema{
@ -49,13 +49,13 @@ func resourceComputeHttpHealthCheck() *schema.Resource {
"port": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Computed: true,
Default: 80,
},
"request_path": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Computed: true,
Default: "/",
},
"self_link": &schema.Schema{
@ -66,13 +66,13 @@ func resourceComputeHttpHealthCheck() *schema.Resource {
"timeout_sec": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Computed: true,
Default: 5,
},
"unhealthy_threshold": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Computed: true,
Default: 2,
},
},
}

View File

@ -6,9 +6,12 @@ import (
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"google.golang.org/api/compute/v1"
)
func TestAccComputeHttpHealthCheck_basic(t *testing.T) {
var healthCheck compute.HttpHealthCheck
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
@ -18,7 +21,11 @@ func TestAccComputeHttpHealthCheck_basic(t *testing.T) {
Config: testAccComputeHttpHealthCheck_basic,
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeHttpHealthCheckExists(
"google_compute_http_health_check.foobar"),
"google_compute_http_health_check.foobar", &healthCheck),
testAccCheckComputeHttpHealthCheckRequestPath(
"/health_check", &healthCheck),
testAccCheckComputeHttpHealthCheckThresholds(
3, 3, &healthCheck),
),
},
},
@ -38,6 +45,10 @@ func TestAccComputeHttpHealthCheck_update(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeHttpHealthCheckExists(
"google_compute_http_health_check.foobar", &healthCheck),
testAccCheckComputeHttpHealthCheckRequestPath(
"/not_default", &healthCheck),
testAccCheckComputeHttpHealthCheckThresholds(
2, 2, &healthCheck),
),
},
resource.TestStep{
@ -45,6 +56,10 @@ func TestAccComputeHttpHealthCheck_update(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeHttpHealthCheckExists(
"google_compute_http_health_check.foobar", &healthCheck),
testAccCheckComputeHttpHealthCheckRequestPath(
"/", &healthCheck),
testAccCheckComputeHttpHealthCheckThresholds(
10, 10, &healthCheck),
),
},
},
@ -69,7 +84,7 @@ func testAccCheckComputeHttpHealthCheckDestroy(s *terraform.State) error {
return nil
}
func testAccCheckComputeHttpHealthCheckExists(n string) resource.TestCheckFunc {
func testAccCheckComputeHttpHealthCheckExists(n string, healthCheck *compute.HttpHealthCheck) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
@ -92,6 +107,32 @@ func testAccCheckComputeHttpHealthCheckExists(n string) resource.TestCheckFunc {
return fmt.Errorf("HttpHealthCheck not found")
}
*healthCheck = *found
return nil
}
}
func testAccCheckComputeHttpHealthCheckRequestPath(path string, healthCheck *compute.HttpHealthCheck) resource.TestCheckFunc {
return func(s *terraform.State) error {
if healthCheck.RequestPath != path {
return fmt.Errorf("RequestPath doesn't match: expected %d, got %d", path, healthCheck.RequestPath)
}
return nil
}
}
func testAccCheckComputeHttpHealthCheckThresholds(healthy, unhealthy int64, healthCheck *compute.HttpHealthCheck) resource.TestCheckFunc {
return func(s *terraform.State) error {
if healthCheck.HealthyThreshold != healthy {
return fmt.Errorf("HealthyThreshold doesn't match: expected %d, got %d", healthy, healthCheck.HealthyThreshold)
}
if healthCheck.UnhealthyThreshold != unhealthy {
return fmt.Errorf("UnhealthyThreshold doesn't match: expected %d, got %d", unhealthy, healthCheck.UnhealthyThreshold)
}
return nil
}
}