github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 12 "github.com/aws/aws-sdk-go/aws" 13 "github.com/aws/aws-sdk-go/aws/awserr" 14 "github.com/aws/aws-sdk-go/service/rds" 15 ) 16 17 func TestAccAWSRDSClusterInstance_basic(t *testing.T) { 18 var v rds.DBInstance 19 20 resource.Test(t, resource.TestCase{ 21 PreCheck: func() { testAccPreCheck(t) }, 22 Providers: testAccProviders, 23 CheckDestroy: testAccCheckAWSClusterDestroy, 24 Steps: []resource.TestStep{ 25 resource.TestStep{ 26 Config: testAccAWSClusterInstanceConfig, 27 Check: resource.ComposeTestCheckFunc( 28 testAccCheckAWSClusterInstanceExists("aws_rds_cluster_instance.cluster_instances", &v), 29 testAccCheckAWSDBClusterInstanceAttributes(&v), 30 ), 31 }, 32 }, 33 }) 34 } 35 36 func testAccCheckAWSClusterInstanceDestroy(s *terraform.State) error { 37 for _, rs := range s.RootModule().Resources { 38 if rs.Type != "aws_rds_cluster" { 39 continue 40 } 41 42 // Try to find the Group 43 conn := testAccProvider.Meta().(*AWSClient).rdsconn 44 var err error 45 resp, err := conn.DescribeDBInstances( 46 &rds.DescribeDBInstancesInput{ 47 DBInstanceIdentifier: aws.String(rs.Primary.ID), 48 }) 49 50 if err == nil { 51 if len(resp.DBInstances) != 0 && 52 *resp.DBInstances[0].DBInstanceIdentifier == rs.Primary.ID { 53 return fmt.Errorf("DB Cluster Instance %s still exists", rs.Primary.ID) 54 } 55 } 56 57 // Return nil if the Cluster Instance is already destroyed 58 if awsErr, ok := err.(awserr.Error); ok { 59 if awsErr.Code() == "DBInstanceNotFound" { 60 return nil 61 } 62 } 63 64 return err 65 66 } 67 68 return nil 69 } 70 71 func testAccCheckAWSDBClusterInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc { 72 return func(s *terraform.State) error { 73 74 if *v.Engine != "aurora" { 75 return fmt.Errorf("bad engine, expected \"aurora\": %#v", *v.Engine) 76 } 77 78 if !strings.HasPrefix(*v.DBClusterIdentifier, "tf-aurora-cluster") { 79 return fmt.Errorf("Bad Cluster Identifier prefix:\nexpected: %s\ngot: %s", "tf-aurora-cluster", *v.DBClusterIdentifier) 80 } 81 82 return nil 83 } 84 } 85 86 func testAccCheckAWSClusterInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc { 87 return func(s *terraform.State) error { 88 rs, ok := s.RootModule().Resources[n] 89 if !ok { 90 return fmt.Errorf("Not found: %s", n) 91 } 92 93 if rs.Primary.ID == "" { 94 return fmt.Errorf("No DB Instance ID is set") 95 } 96 97 conn := testAccProvider.Meta().(*AWSClient).rdsconn 98 resp, err := conn.DescribeDBInstances(&rds.DescribeDBInstancesInput{ 99 DBInstanceIdentifier: aws.String(rs.Primary.ID), 100 }) 101 102 if err != nil { 103 return err 104 } 105 106 for _, d := range resp.DBInstances { 107 if *d.DBInstanceIdentifier == rs.Primary.ID { 108 *v = *d 109 return nil 110 } 111 } 112 113 return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID) 114 } 115 } 116 117 // Add some random to the name, to avoid collision 118 var testAccAWSClusterInstanceConfig = fmt.Sprintf(` 119 resource "aws_rds_cluster" "default" { 120 cluster_identifier = "tf-aurora-cluster-test-%d" 121 availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"] 122 database_name = "mydb" 123 master_username = "foo" 124 master_password = "mustbeeightcharaters" 125 } 126 127 resource "aws_rds_cluster_instance" "cluster_instances" { 128 identifier = "tf-cluster-instance-%d" 129 cluster_identifier = "${aws_rds_cluster.default.id}" 130 instance_class = "db.r3.large" 131 } 132 133 `, acctest.RandInt(), acctest.RandInt())