From fb86998454e575a7ac10da8fc71b2a62ce2b8290 Mon Sep 17 00:00:00 2001 From: clint shryock Date: Thu, 12 May 2016 16:25:29 -0500 Subject: [PATCH] provider/fastly: Add simple custom VCL test --- .../fastly/resource_fastly_service_v1.go | 11 ++ .../resource_fastly_service_v1_vcl_test.go | 152 ++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 builtin/providers/fastly/resource_fastly_service_v1_vcl_test.go diff --git a/builtin/providers/fastly/resource_fastly_service_v1.go b/builtin/providers/fastly/resource_fastly_service_v1.go index 2d5452feba94..038c90a3bfc1 100644 --- a/builtin/providers/fastly/resource_fastly_service_v1.go +++ b/builtin/providers/fastly/resource_fastly_service_v1.go @@ -1,6 +1,8 @@ package fastly import ( + "crypto/sha1" + "encoding/hex" "errors" "fmt" "log" @@ -411,6 +413,15 @@ func resourceServiceV1() *schema.Resource { Type: schema.TypeString, Required: true, Description: "The contents of this VCL configuration", + StateFunc: func(v interface{}) string { + switch v.(type) { + case string: + hash := sha1.Sum([]byte(v.(string))) + return hex.EncodeToString(hash[:]) + default: + return "" + } + }, }, "main": &schema.Schema{ Type: schema.TypeBool, diff --git a/builtin/providers/fastly/resource_fastly_service_v1_vcl_test.go b/builtin/providers/fastly/resource_fastly_service_v1_vcl_test.go new file mode 100644 index 000000000000..5577b7756df7 --- /dev/null +++ b/builtin/providers/fastly/resource_fastly_service_v1_vcl_test.go @@ -0,0 +1,152 @@ +package fastly + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" + gofastly "github.com/sethvargo/go-fastly" +) + +func TestAccFastlyServiceV1_VCL_basic(t *testing.T) { + var service gofastly.ServiceDetail + name := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + domainName1 := fmt.Sprintf("%s.notadomain.com", acctest.RandString(10)) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckServiceV1Destroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccServiceV1VCLConfig(name, domainName1), + Check: resource.ComposeTestCheckFunc( + testAccCheckServiceV1Exists("fastly_service_v1.foo", &service), + testAccCheckFastlyServiceV1VCLAttributes(&service, name, 1), + resource.TestCheckResourceAttr( + "fastly_service_v1.foo", "name", name), + resource.TestCheckResourceAttr( + "fastly_service_v1.foo", "vcl.#", "1"), + ), + }, + + resource.TestStep{ + Config: testAccServiceV1VCLConfig_update(name, domainName1), + Check: resource.ComposeTestCheckFunc( + testAccCheckServiceV1Exists("fastly_service_v1.foo", &service), + testAccCheckFastlyServiceV1VCLAttributes(&service, name, 2), + resource.TestCheckResourceAttr( + "fastly_service_v1.foo", "name", name), + resource.TestCheckResourceAttr( + "fastly_service_v1.foo", "vcl.#", "2"), + ), + }, + }, + }) +} + +func testAccCheckFastlyServiceV1VCLAttributes(service *gofastly.ServiceDetail, name string, vclCount int) resource.TestCheckFunc { + return func(s *terraform.State) error { + + if service.Name != name { + return fmt.Errorf("Bad name, expected (%s), got (%s)", name, service.Name) + } + + conn := testAccProvider.Meta().(*FastlyClient).conn + vclList, err := conn.ListVCLs(&gofastly.ListVCLsInput{ + Service: service.ID, + Version: service.ActiveVersion.Number, + }) + + if err != nil { + return fmt.Errorf("[ERR] Error looking up VCL for (%s), version (%s): %s", service.Name, service.ActiveVersion.Number, err) + } + + if len(vclList) != vclCount { + return fmt.Errorf("VCL count mismatch, expected (%d), got (%d)", vclCount, len(vclList)) + } + + return nil + } +} + +func testAccServiceV1VCLConfig(name, domain string) string { + return fmt.Sprintf(` +resource "fastly_service_v1" "foo" { + name = "%s" + + domain { + name = "%s" + comment = "tf-testing-domain" + } + + backend { + address = "aws.amazon.com" + name = "amazon docs" + } + + vcl { + name = "my_custom_main_vcl" + content = <