github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/aws/resource_aws_rds_cluster_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "math/rand" 6 "testing" 7 "time" 8 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 TestAccAWSRDSCluster_basic(t *testing.T) { 18 var v rds.DBCluster 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: testAccAWSClusterConfig, 27 Check: resource.ComposeTestCheckFunc( 28 testAccCheckAWSClusterExists("aws_rds_cluster.default", &v), 29 ), 30 }, 31 }, 32 }) 33 } 34 35 func testAccCheckAWSClusterDestroy(s *terraform.State) error { 36 for _, rs := range s.RootModule().Resources { 37 if rs.Type != "aws_rds_cluster" { 38 continue 39 } 40 41 // Try to find the Group 42 conn := testAccProvider.Meta().(*AWSClient).rdsconn 43 var err error 44 resp, err := conn.DescribeDBClusters( 45 &rds.DescribeDBClustersInput{ 46 DBClusterIdentifier: aws.String(rs.Primary.ID), 47 }) 48 49 if err == nil { 50 if len(resp.DBClusters) != 0 && 51 *resp.DBClusters[0].DBClusterIdentifier == rs.Primary.ID { 52 return fmt.Errorf("DB Cluster %s still exists", rs.Primary.ID) 53 } 54 } 55 56 // Return nil if the cluster is already destroyed 57 if awsErr, ok := err.(awserr.Error); ok { 58 if awsErr.Code() == "DBClusterNotFound" { 59 return nil 60 } 61 } 62 63 return err 64 } 65 66 return nil 67 } 68 69 func testAccCheckAWSClusterExists(n string, v *rds.DBCluster) resource.TestCheckFunc { 70 return func(s *terraform.State) error { 71 rs, ok := s.RootModule().Resources[n] 72 if !ok { 73 return fmt.Errorf("Not found: %s", n) 74 } 75 76 if rs.Primary.ID == "" { 77 return fmt.Errorf("No DB Instance ID is set") 78 } 79 80 conn := testAccProvider.Meta().(*AWSClient).rdsconn 81 resp, err := conn.DescribeDBClusters(&rds.DescribeDBClustersInput{ 82 DBClusterIdentifier: aws.String(rs.Primary.ID), 83 }) 84 85 if err != nil { 86 return err 87 } 88 89 for _, c := range resp.DBClusters { 90 if *c.DBClusterIdentifier == rs.Primary.ID { 91 *v = *c 92 return nil 93 } 94 } 95 96 return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID) 97 } 98 } 99 100 // Add some random to the name, to avoid collision 101 var testAccAWSClusterConfig = fmt.Sprintf(` 102 resource "aws_rds_cluster" "default" { 103 cluster_identifier = "tf-aurora-cluster-%d" 104 availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] 105 database_name = "mydb" 106 master_username = "foo" 107 master_password = "mustbeeightcharaters" 108 }`, rand.New(rand.NewSource(time.Now().UnixNano())).Int())