terraform-provider-greenhost/digitalocean/resource_digitalocean_cdn_t...

178 lines
4.8 KiB
Go

package digitalocean
import (
"context"
"fmt"
"testing"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
)
const originSuffix = ".ams3.digitaloceanspaces.com"
func TestAccDigitalOceanCDN_Create(t *testing.T) {
bucketName := generateBucketName()
cdnCreateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_Create, bucketName)
expectedOrigin := bucketName + originSuffix
expectedTTL := "3600"
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: testAccProviderFactories,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnCreateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", expectedOrigin),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", expectedTTL),
),
},
},
})
}
func TestAccDigitalOceanCDN_Create_with_TTL(t *testing.T) {
bucketName := generateBucketName()
ttl := 1800
cdnCreateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_Create_with_TTL, bucketName, ttl)
expectedOrigin := bucketName + originSuffix
expectedTTL := "1800"
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: testAccProviderFactories,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnCreateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", expectedOrigin),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", expectedTTL),
),
},
},
})
}
func TestAccDigitalOceanCDN_Create_and_Update(t *testing.T) {
bucketName := generateBucketName()
ttl := 1800
cdnCreateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_Create, bucketName)
cdnUpdateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_Create_with_TTL, bucketName, ttl)
expectedOrigin := bucketName + originSuffix
expectedTTL := "1800"
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: testAccProviderFactories,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnCreateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", expectedOrigin),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", "3600"),
),
},
{
Config: cdnUpdateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", expectedOrigin),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", expectedTTL),
),
},
},
})
}
func testAccCheckDigitalOceanCDNDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*CombinedConfig).godoClient()
for _, rs := range s.RootModule().Resources {
if rs.Type != "digitalocean_cdn" {
continue
}
_, _, err := client.CDNs.Get(context.Background(), rs.Primary.ID)
if err == nil {
return fmt.Errorf("CDN resource still exists")
}
}
return nil
}
func testAccCheckDigitalOceanCDNExists(resource string) resource.TestCheckFunc {
return func(s *terraform.State) error {
client := testAccProvider.Meta().(*CombinedConfig).godoClient()
rs, ok := s.RootModule().Resources[resource]
if !ok {
return fmt.Errorf("Not found: %s", resource)
}
if rs.Primary.ID == "" {
return fmt.Errorf("No ID set for resource: %s", resource)
}
foundCDN, _, err := client.CDNs.Get(context.Background(), rs.Primary.ID)
if err != nil {
return err
}
if foundCDN.ID != rs.Primary.ID {
return fmt.Errorf("Resource not found: %s : %s", resource, rs.Primary.ID)
}
return nil
}
}
func generateBucketName() string {
return fmt.Sprintf("tf-cdn-test-bucket-%d", acctest.RandInt())
}
const testAccCheckDigitalOceanCDNConfig_Create = `
resource "digitalocean_spaces_bucket" "bucket" {
name = "%s"
region = "ams3"
acl = "public-read"
}
resource "digitalocean_cdn" "foobar" {
origin = "${digitalocean_spaces_bucket.bucket.bucket_domain_name}"
}`
const testAccCheckDigitalOceanCDNConfig_Create_with_TTL = `
resource "digitalocean_spaces_bucket" "bucket" {
name = "%s"
region = "ams3"
acl = "public-read"
}
resource "digitalocean_cdn" "foobar" {
origin = "${digitalocean_spaces_bucket.bucket.bucket_domain_name}"
ttl = %d
}`