Merge pull request #11833 from hashicorp/f-redshift-cluster-acctests

provider/aws: Update redshift_cluster acceptance tests
This commit is contained in:
Jake Champlin 2017-02-09 16:20:52 -05:00 committed by GitHub
commit 3b372b649b

View File

@ -3,15 +3,16 @@ package aws
import ( import (
"fmt" "fmt"
"math/rand" "math/rand"
"regexp"
"testing" "testing"
"time" "time"
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/redshift" "github.com/aws/aws-sdk-go/service/redshift"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
"regexp"
) )
func TestValidateRedshiftClusterDbName(t *testing.T) { func TestValidateRedshiftClusterDbName(t *testing.T) {
@ -136,10 +137,7 @@ func TestAccAWSRedshiftCluster_enhancedVpcRoutingEnabled(t *testing.T) {
func TestAccAWSRedshiftCluster_loggingEnabled(t *testing.T) { func TestAccAWSRedshiftCluster_loggingEnabled(t *testing.T) {
var v redshift.Cluster var v redshift.Cluster
rInt := acctest.RandInt()
ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int()
preConfig := fmt.Sprintf(testAccAWSRedshiftClusterConfig_loggingEnabled, ri)
postConfig := fmt.Sprintf(testAccAWSRedshiftClusterConfig_loggingDisabled, ri)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -147,18 +145,18 @@ func TestAccAWSRedshiftCluster_loggingEnabled(t *testing.T) {
CheckDestroy: testAccCheckAWSRedshiftClusterDestroy, CheckDestroy: testAccCheckAWSRedshiftClusterDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
{ {
Config: preConfig, Config: testAccAWSRedshiftClusterConfig_loggingEnabled(rInt),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v), testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_redshift_cluster.default", "enable_logging", "true"), "aws_redshift_cluster.default", "enable_logging", "true"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_redshift_cluster.default", "bucket_name", "tf-redshift-logging-test-bucket"), "aws_redshift_cluster.default", "bucket_name", fmt.Sprintf("tf-redshift-logging-%d", rInt)),
), ),
}, },
{ {
Config: postConfig, Config: testAccAWSRedshiftClusterConfig_loggingDisabled(rInt),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v), testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -204,10 +202,7 @@ func TestAccAWSRedshiftCluster_iamRoles(t *testing.T) {
func TestAccAWSRedshiftCluster_publiclyAccessible(t *testing.T) { func TestAccAWSRedshiftCluster_publiclyAccessible(t *testing.T) {
var v redshift.Cluster var v redshift.Cluster
rInt := acctest.RandInt()
ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int()
preConfig := fmt.Sprintf(testAccAWSRedshiftClusterConfig_notPubliclyAccessible, ri)
postConfig := fmt.Sprintf(testAccAWSRedshiftClusterConfig_updatePubliclyAccessible, ri)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -215,7 +210,7 @@ func TestAccAWSRedshiftCluster_publiclyAccessible(t *testing.T) {
CheckDestroy: testAccCheckAWSRedshiftClusterDestroy, CheckDestroy: testAccCheckAWSRedshiftClusterDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
{ {
Config: preConfig, Config: testAccAWSRedshiftClusterConfig_notPubliclyAccessible(rInt),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v), testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -224,7 +219,7 @@ func TestAccAWSRedshiftCluster_publiclyAccessible(t *testing.T) {
}, },
{ {
Config: postConfig, Config: testAccAWSRedshiftClusterConfig_updatePubliclyAccessible(rInt),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v), testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &v),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -593,63 +588,66 @@ resource "aws_redshift_cluster" "default" {
} }
` `
var testAccAWSRedshiftClusterConfig_loggingDisabled = ` func testAccAWSRedshiftClusterConfig_loggingDisabled(rInt int) string {
resource "aws_redshift_cluster" "default" { return fmt.Sprintf(`
cluster_identifier = "tf-redshift-cluster-%d" resource "aws_redshift_cluster" "default" {
availability_zone = "us-west-2a" cluster_identifier = "tf-redshift-cluster-%d"
database_name = "mydb" availability_zone = "us-west-2a"
master_username = "foo_test" database_name = "mydb"
master_password = "Mustbe8characters" master_username = "foo_test"
node_type = "dc1.large" master_password = "Mustbe8characters"
automated_snapshot_retention_period = 0 node_type = "dc1.large"
allow_version_upgrade = false automated_snapshot_retention_period = 0
enable_logging = false allow_version_upgrade = false
enable_logging = false
}`, rInt)
} }
`
var testAccAWSRedshiftClusterConfig_loggingEnabled = ` func testAccAWSRedshiftClusterConfig_loggingEnabled(rInt int) string {
resource "aws_s3_bucket" "bucket" { return fmt.Sprintf(`
bucket = "tf-redshift-logging-test-bucket" resource "aws_s3_bucket" "bucket" {
force_destroy = true bucket = "tf-redshift-logging-%d"
policy = <<EOF force_destroy = true
policy = <<EOF
{ {
"Version": "2008-10-17", "Version": "2008-10-17",
"Statement": [ "Statement": [
{ {
"Sid": "Stmt1376526643067", "Sid": "Stmt1376526643067",
"Effect": "Allow", "Effect": "Allow",
"Principal": { "Principal": {
"AWS": "arn:aws:iam::902366379725:user/logs" "AWS": "arn:aws:iam::902366379725:user/logs"
}, },
"Action": "s3:PutObject", "Action": "s3:PutObject",
"Resource": "arn:aws:s3:::tf-redshift-logging-test-bucket/*" "Resource": "arn:aws:s3:::tf-redshift-logging-%d/*"
}, },
{ {
"Sid": "Stmt137652664067", "Sid": "Stmt137652664067",
"Effect": "Allow", "Effect": "Allow",
"Principal": { "Principal": {
"AWS": "arn:aws:iam::902366379725:user/logs" "AWS": "arn:aws:iam::902366379725:user/logs"
}, },
"Action": "s3:GetBucketAcl", "Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::tf-redshift-logging-test-bucket" "Resource": "arn:aws:s3:::tf-redshift-logging-%d"
} }
] ]
} }
EOF EOF
} }
resource "aws_redshift_cluster" "default" { resource "aws_redshift_cluster" "default" {
cluster_identifier = "tf-redshift-cluster-%d" cluster_identifier = "tf-redshift-cluster-%d"
availability_zone = "us-west-2a" availability_zone = "us-west-2a"
database_name = "mydb" database_name = "mydb"
master_username = "foo_test" master_username = "foo_test"
master_password = "Mustbe8characters" master_password = "Mustbe8characters"
node_type = "dc1.large" node_type = "dc1.large"
automated_snapshot_retention_period = 0 automated_snapshot_retention_period = 0
allow_version_upgrade = false allow_version_upgrade = false
enable_logging = true enable_logging = true
bucket_name = "${aws_s3_bucket.bucket.bucket}" bucket_name = "${aws_s3_bucket.bucket.bucket}"
}` }`, rInt, rInt, rInt, rInt)
}
var testAccAWSRedshiftClusterConfig_tags = ` var testAccAWSRedshiftClusterConfig_tags = `
resource "aws_redshift_cluster" "default" { resource "aws_redshift_cluster" "default" {
@ -683,109 +681,113 @@ resource "aws_redshift_cluster" "default" {
} }
}` }`
var testAccAWSRedshiftClusterConfig_notPubliclyAccessible = ` func testAccAWSRedshiftClusterConfig_notPubliclyAccessible(rInt int) string {
resource "aws_vpc" "foo" { return fmt.Sprintf(`
cidr_block = "10.1.0.0/16" resource "aws_vpc" "foo" {
} cidr_block = "10.1.0.0/16"
resource "aws_internet_gateway" "foo" {
vpc_id = "${aws_vpc.foo.id}"
tags {
foo = "bar"
} }
} resource "aws_internet_gateway" "foo" {
resource "aws_subnet" "foo" { vpc_id = "${aws_vpc.foo.id}"
cidr_block = "10.1.1.0/24" tags {
availability_zone = "us-west-2a" foo = "bar"
vpc_id = "${aws_vpc.foo.id}" }
tags {
Name = "tf-dbsubnet-test-1"
} }
} resource "aws_subnet" "foo" {
resource "aws_subnet" "bar" { cidr_block = "10.1.1.0/24"
cidr_block = "10.1.2.0/24" availability_zone = "us-west-2a"
availability_zone = "us-west-2b" vpc_id = "${aws_vpc.foo.id}"
vpc_id = "${aws_vpc.foo.id}" tags {
tags { Name = "tf-dbsubnet-test-1"
Name = "tf-dbsubnet-test-2" }
} }
} resource "aws_subnet" "bar" {
resource "aws_subnet" "foobar" { cidr_block = "10.1.2.0/24"
cidr_block = "10.1.3.0/24" availability_zone = "us-west-2b"
availability_zone = "us-west-2c" vpc_id = "${aws_vpc.foo.id}"
vpc_id = "${aws_vpc.foo.id}" tags {
tags { Name = "tf-dbsubnet-test-2"
Name = "tf-dbsubnet-test-3" }
} }
resource "aws_subnet" "foobar" {
cidr_block = "10.1.3.0/24"
availability_zone = "us-west-2c"
vpc_id = "${aws_vpc.foo.id}"
tags {
Name = "tf-dbsubnet-test-3"
}
}
resource "aws_redshift_subnet_group" "foo" {
name = "foo-%d"
description = "foo description"
subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}", "${aws_subnet.foobar.id}"]
}
resource "aws_redshift_cluster" "default" {
cluster_identifier = "tf-redshift-cluster-%d"
availability_zone = "us-west-2a"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
automated_snapshot_retention_period = 0
allow_version_upgrade = false
cluster_subnet_group_name = "${aws_redshift_subnet_group.foo.name}"
publicly_accessible = false
}`, rInt, rInt)
} }
resource "aws_redshift_subnet_group" "foo" {
name = "foo"
description = "foo description"
subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}", "${aws_subnet.foobar.id}"]
}
resource "aws_redshift_cluster" "default" {
cluster_identifier = "tf-redshift-cluster-%d"
availability_zone = "us-west-2a"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
automated_snapshot_retention_period = 0
allow_version_upgrade = false
cluster_subnet_group_name = "${aws_redshift_subnet_group.foo.name}"
publicly_accessible = false
}`
var testAccAWSRedshiftClusterConfig_updatePubliclyAccessible = ` func testAccAWSRedshiftClusterConfig_updatePubliclyAccessible(rInt int) string {
resource "aws_vpc" "foo" { return fmt.Sprintf(`
cidr_block = "10.1.0.0/16" resource "aws_vpc" "foo" {
} cidr_block = "10.1.0.0/16"
resource "aws_internet_gateway" "foo" {
vpc_id = "${aws_vpc.foo.id}"
tags {
foo = "bar"
} }
} resource "aws_internet_gateway" "foo" {
resource "aws_subnet" "foo" { vpc_id = "${aws_vpc.foo.id}"
cidr_block = "10.1.1.0/24" tags {
availability_zone = "us-west-2a" foo = "bar"
vpc_id = "${aws_vpc.foo.id}" }
tags {
Name = "tf-dbsubnet-test-1"
} }
} resource "aws_subnet" "foo" {
resource "aws_subnet" "bar" { cidr_block = "10.1.1.0/24"
cidr_block = "10.1.2.0/24" availability_zone = "us-west-2a"
availability_zone = "us-west-2b" vpc_id = "${aws_vpc.foo.id}"
vpc_id = "${aws_vpc.foo.id}" tags {
tags { Name = "tf-dbsubnet-test-1"
Name = "tf-dbsubnet-test-2" }
} }
} resource "aws_subnet" "bar" {
resource "aws_subnet" "foobar" { cidr_block = "10.1.2.0/24"
cidr_block = "10.1.3.0/24" availability_zone = "us-west-2b"
availability_zone = "us-west-2c" vpc_id = "${aws_vpc.foo.id}"
vpc_id = "${aws_vpc.foo.id}" tags {
tags { Name = "tf-dbsubnet-test-2"
Name = "tf-dbsubnet-test-3" }
} }
resource "aws_subnet" "foobar" {
cidr_block = "10.1.3.0/24"
availability_zone = "us-west-2c"
vpc_id = "${aws_vpc.foo.id}"
tags {
Name = "tf-dbsubnet-test-3"
}
}
resource "aws_redshift_subnet_group" "foo" {
name = "foo-%d"
description = "foo description"
subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}", "${aws_subnet.foobar.id}"]
}
resource "aws_redshift_cluster" "default" {
cluster_identifier = "tf-redshift-cluster-%d"
availability_zone = "us-west-2a"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
automated_snapshot_retention_period = 0
allow_version_upgrade = false
cluster_subnet_group_name = "${aws_redshift_subnet_group.foo.name}"
publicly_accessible = true
}`, rInt, rInt)
} }
resource "aws_redshift_subnet_group" "foo" {
name = "foo"
description = "foo description"
subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}", "${aws_subnet.foobar.id}"]
}
resource "aws_redshift_cluster" "default" {
cluster_identifier = "tf-redshift-cluster-%d"
availability_zone = "us-west-2a"
database_name = "mydb"
master_username = "foo"
master_password = "Mustbe8characters"
node_type = "dc1.large"
automated_snapshot_retention_period = 0
allow_version_upgrade = false
cluster_subnet_group_name = "${aws_redshift_subnet_group.foo.name}"
publicly_accessible = true
}`
var testAccAWSRedshiftClusterConfig_iamRoles = ` var testAccAWSRedshiftClusterConfig_iamRoles = `
resource "aws_iam_role" "ec2-role" { resource "aws_iam_role" "ec2-role" {