Files
opentf/builtin/providers/aws/resource_aws_dms_replication_instance_test.go
Paul Stack 5cad27bb2e provider/aws: Migrate aws_dms_* resources away from AWS waiters (#13291)
The AWS waiter package has changed location in the 1.8.0 version of the
SDK. DMS will need to mitigate a breaking change because of this

Between @radeksimko and myself, we think that we should migrate the DMS
resources to using the Terraform state refresh func pattern that is used
across the entire of the AWS provider. DMS is the *only* resource that
currently uses the AWS waiters, so the LOE to migrate is pretty low
2017-04-05 06:48:37 +01:00

198 lines
5.5 KiB
Go

package aws
import (
"fmt"
"testing"
"github.com/aws/aws-sdk-go/aws"
dms "github.com/aws/aws-sdk-go/service/databasemigrationservice"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
func TestAccAwsDmsReplicationInstanceBasic(t *testing.T) {
resourceName := "aws_dms_replication_instance.dms_replication_instance"
randId := acctest.RandString(8)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: dmsReplicationInstanceDestroy,
Steps: []resource.TestStep{
{
Config: dmsReplicationInstanceConfig(randId),
Check: resource.ComposeTestCheckFunc(
checkDmsReplicationInstanceExists(resourceName),
resource.TestCheckResourceAttrSet(resourceName, "replication_instance_arn"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: dmsReplicationInstanceConfigUpdate(randId),
Check: resource.ComposeTestCheckFunc(
checkDmsReplicationInstanceExists(resourceName),
resource.TestCheckResourceAttrSet(resourceName, "apply_immediately"),
resource.TestCheckResourceAttr(resourceName, "auto_minor_version_upgrade", "false"),
resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "mon:00:30-mon:02:30"),
),
},
},
})
}
func checkDmsReplicationInstanceExists(n string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
return fmt.Errorf("Not found: %s", n)
}
if rs.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}
conn := testAccProvider.Meta().(*AWSClient).dmsconn
resp, err := conn.DescribeReplicationInstances(&dms.DescribeReplicationInstancesInput{
Filters: []*dms.Filter{
{
Name: aws.String("replication-instance-id"),
Values: []*string{aws.String(rs.Primary.ID)},
},
},
})
if err != nil {
return fmt.Errorf("DMS replication instance error: %v", err)
}
if resp.ReplicationInstances == nil {
return fmt.Errorf("DMS replication instance not found")
}
return nil
}
}
func dmsReplicationInstanceDestroy(s *terraform.State) error {
for _, rs := range s.RootModule().Resources {
if rs.Type != "aws_dms_replication_instance" {
continue
}
err := checkDmsReplicationInstanceExists(rs.Primary.ID)
if err == nil {
return fmt.Errorf("Found replication instance that was not destroyed: %s", rs.Primary.ID)
}
}
return nil
}
func dmsReplicationInstanceConfig(randId string) string {
return fmt.Sprintf(`
resource "aws_vpc" "dms_vpc" {
cidr_block = "10.1.0.0/16"
tags {
Name = "tf-test-dms-vpc-%[1]s"
}
}
resource "aws_subnet" "dms_subnet_1" {
cidr_block = "10.1.1.0/24"
availability_zone = "us-west-2a"
vpc_id = "${aws_vpc.dms_vpc.id}"
tags {
Name = "tf-test-dms-subnet-%[1]s"
}
depends_on = ["aws_vpc.dms_vpc"]
}
resource "aws_subnet" "dms_subnet_2" {
cidr_block = "10.1.2.0/24"
availability_zone = "us-west-2b"
vpc_id = "${aws_vpc.dms_vpc.id}"
tags {
Name = "tf-test-dms-subnet-%[1]s"
}
depends_on = ["aws_vpc.dms_vpc"]
}
resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" {
replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s"
replication_subnet_group_description = "terraform test for replication subnet group"
subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"]
}
resource "aws_dms_replication_instance" "dms_replication_instance" {
allocated_storage = 5
auto_minor_version_upgrade = true
replication_instance_class = "dms.t2.micro"
replication_instance_id = "tf-test-dms-replication-instance-%[1]s"
preferred_maintenance_window = "sun:00:30-sun:02:30"
publicly_accessible = false
replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}"
tags {
Name = "tf-test-dms-replication-instance-%[1]s"
Update = "to-update"
Remove = "to-remove"
}
}
`, randId)
}
func dmsReplicationInstanceConfigUpdate(randId string) string {
return fmt.Sprintf(`
resource "aws_vpc" "dms_vpc" {
cidr_block = "10.1.0.0/16"
tags {
Name = "tf-test-dms-vpc-%[1]s"
}
}
resource "aws_subnet" "dms_subnet_1" {
cidr_block = "10.1.1.0/24"
availability_zone = "us-west-2a"
vpc_id = "${aws_vpc.dms_vpc.id}"
tags {
Name = "tf-test-dms-subnet-%[1]s"
}
depends_on = ["aws_vpc.dms_vpc"]
}
resource "aws_subnet" "dms_subnet_2" {
cidr_block = "10.1.2.0/24"
availability_zone = "us-west-2b"
vpc_id = "${aws_vpc.dms_vpc.id}"
tags {
Name = "tf-test-dms-subnet-%[1]s"
}
depends_on = ["aws_vpc.dms_vpc"]
}
resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" {
replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s"
replication_subnet_group_description = "terraform test for replication subnet group"
subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"]
}
resource "aws_dms_replication_instance" "dms_replication_instance" {
allocated_storage = 5
apply_immediately = true
auto_minor_version_upgrade = false
replication_instance_class = "dms.t2.micro"
replication_instance_id = "tf-test-dms-replication-instance-%[1]s"
preferred_maintenance_window = "mon:00:30-mon:02:30"
publicly_accessible = false
replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}"
tags {
Name = "tf-test-dms-replication-instance-%[1]s"
Update = "updated"
Add = "added"
}
}
`, randId)
}