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

157 lines
4.6 KiB
Go
Raw Normal View History

package digitalocean
import (
"context"
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
func TestAccDigitalOceanCDN_Basic(t *testing.T) {
digitalOceanBucketName := fmt.Sprintf("tf-cdn-test-bucket-%d", acctest.RandInt())
cdnConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_basic, digitalOceanBucketName)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", digitalOceanBucketName+".ams3.digitaloceanspaces.com"),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", "3600"),
),
},
},
})
}
func TestAccDigitalOceanCDN_withTTL(t *testing.T) {
digitalOceanBucketName := fmt.Sprintf("tf-cdn-test-bucket-%d", acctest.RandInt())
cdnConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_withTTL, digitalOceanBucketName)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", digitalOceanBucketName+".ams3.digitaloceanspaces.com"),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", "1800"),
),
},
},
})
}
func TestAccDigitalOceanCDN_Create_And_Update(t *testing.T) {
digitalOceanBucketName := fmt.Sprintf("tf-cdn-test-bucket-%d", acctest.RandInt())
cdnCreateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_basic, digitalOceanBucketName)
cdnUpdateConfig := fmt.Sprintf(testAccCheckDigitalOceanCDNConfig_withTTL, digitalOceanBucketName)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckDigitalOceanCDNDestroy,
Steps: []resource.TestStep{
{
Config: cdnCreateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", digitalOceanBucketName+".ams3.digitaloceanspaces.com"),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", "3600"),
),
},
{
Config: cdnUpdateConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckDigitalOceanCDNExists("digitalocean_cdn.foobar"),
resource.TestCheckResourceAttr(
"digitalocean_cdn.foobar", "origin", digitalOceanBucketName+".ams3.digitaloceanspaces.com"),
resource.TestCheckResourceAttr("digitalocean_cdn.foobar", "ttl", "1800"),
),
},
},
})
}
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
}
}
const testAccCheckDigitalOceanCDNConfig_basic = `
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_withTTL = `
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 = 1800
}`