github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_rds_cluster_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/acctest" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 11 "github.com/aws/aws-sdk-go/aws" 12 "github.com/aws/aws-sdk-go/aws/awserr" 13 "github.com/aws/aws-sdk-go/service/rds" 14 ) 15 16 func TestAccAWSRDSCluster_basic(t *testing.T) { 17 var v rds.DBCluster 18 19 resource.Test(t, resource.TestCase{ 20 PreCheck: func() { testAccPreCheck(t) }, 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckAWSClusterDestroy, 23 Steps: []resource.TestStep{ 24 resource.TestStep{ 25 Config: testAccAWSClusterConfig(acctest.RandInt()), 26 Check: resource.ComposeTestCheckFunc( 27 testAccCheckAWSClusterExists("aws_rds_cluster.default", &v), 28 resource.TestCheckResourceAttr( 29 "aws_rds_cluster.default", "storage_encrypted", "false"), 30 ), 31 }, 32 }, 33 }) 34 } 35 36 func TestAccAWSRDSCluster_encrypted(t *testing.T) { 37 var v rds.DBCluster 38 39 resource.Test(t, resource.TestCase{ 40 PreCheck: func() { testAccPreCheck(t) }, 41 Providers: testAccProviders, 42 CheckDestroy: testAccCheckAWSClusterDestroy, 43 Steps: []resource.TestStep{ 44 resource.TestStep{ 45 Config: testAccAWSClusterConfig_encrypted(acctest.RandInt()), 46 Check: resource.ComposeTestCheckFunc( 47 testAccCheckAWSClusterExists("aws_rds_cluster.default", &v), 48 resource.TestCheckResourceAttr( 49 "aws_rds_cluster.default", "storage_encrypted", "true"), 50 ), 51 }, 52 }, 53 }) 54 } 55 56 func TestAccAWSRDSCluster_backupsUpdate(t *testing.T) { 57 var v rds.DBCluster 58 59 ri := acctest.RandInt() 60 resource.Test(t, resource.TestCase{ 61 PreCheck: func() { testAccPreCheck(t) }, 62 Providers: testAccProviders, 63 CheckDestroy: testAccCheckAWSClusterDestroy, 64 Steps: []resource.TestStep{ 65 resource.TestStep{ 66 Config: testAccAWSClusterConfig_backups(ri), 67 Check: resource.ComposeTestCheckFunc( 68 testAccCheckAWSClusterExists("aws_rds_cluster.default", &v), 69 resource.TestCheckResourceAttr( 70 "aws_rds_cluster.default", "preferred_backup_window", "07:00-09:00"), 71 resource.TestCheckResourceAttr( 72 "aws_rds_cluster.default", "backup_retention_period", "5"), 73 resource.TestCheckResourceAttr( 74 "aws_rds_cluster.default", "preferred_maintenance_window", "tue:04:00-tue:04:30"), 75 ), 76 }, 77 78 resource.TestStep{ 79 Config: testAccAWSClusterConfig_backupsUpdate(ri), 80 Check: resource.ComposeTestCheckFunc( 81 testAccCheckAWSClusterExists("aws_rds_cluster.default", &v), 82 resource.TestCheckResourceAttr( 83 "aws_rds_cluster.default", "preferred_backup_window", "03:00-09:00"), 84 resource.TestCheckResourceAttr( 85 "aws_rds_cluster.default", "backup_retention_period", "10"), 86 resource.TestCheckResourceAttr( 87 "aws_rds_cluster.default", "preferred_maintenance_window", "wed:01:00-wed:01:30"), 88 ), 89 }, 90 }, 91 }) 92 } 93 94 func testAccCheckAWSClusterDestroy(s *terraform.State) error { 95 for _, rs := range s.RootModule().Resources { 96 if rs.Type != "aws_rds_cluster" { 97 continue 98 } 99 100 // Try to find the Group 101 conn := testAccProvider.Meta().(*AWSClient).rdsconn 102 var err error 103 resp, err := conn.DescribeDBClusters( 104 &rds.DescribeDBClustersInput{ 105 DBClusterIdentifier: aws.String(rs.Primary.ID), 106 }) 107 108 if err == nil { 109 if len(resp.DBClusters) != 0 && 110 *resp.DBClusters[0].DBClusterIdentifier == rs.Primary.ID { 111 return fmt.Errorf("DB Cluster %s still exists", rs.Primary.ID) 112 } 113 } 114 115 // Return nil if the cluster is already destroyed 116 if awsErr, ok := err.(awserr.Error); ok { 117 if awsErr.Code() == "DBClusterNotFoundFault" { 118 return nil 119 } 120 } 121 122 return err 123 } 124 125 return nil 126 } 127 128 func testAccCheckAWSClusterExists(n string, v *rds.DBCluster) resource.TestCheckFunc { 129 return func(s *terraform.State) error { 130 rs, ok := s.RootModule().Resources[n] 131 if !ok { 132 return fmt.Errorf("Not found: %s", n) 133 } 134 135 if rs.Primary.ID == "" { 136 return fmt.Errorf("No DB Instance ID is set") 137 } 138 139 conn := testAccProvider.Meta().(*AWSClient).rdsconn 140 resp, err := conn.DescribeDBClusters(&rds.DescribeDBClustersInput{ 141 DBClusterIdentifier: aws.String(rs.Primary.ID), 142 }) 143 144 if err != nil { 145 return err 146 } 147 148 for _, c := range resp.DBClusters { 149 if *c.DBClusterIdentifier == rs.Primary.ID { 150 *v = *c 151 return nil 152 } 153 } 154 155 return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID) 156 } 157 } 158 159 func testAccAWSClusterConfig(n int) string { 160 return fmt.Sprintf(` 161 resource "aws_rds_cluster" "default" { 162 cluster_identifier = "tf-aurora-cluster-%d" 163 availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] 164 database_name = "mydb" 165 master_username = "foo" 166 master_password = "mustbeeightcharaters" 167 }`, n) 168 } 169 170 func testAccAWSClusterConfig_encrypted(n int) string { 171 return fmt.Sprintf(` 172 resource "aws_rds_cluster" "default" { 173 cluster_identifier = "tf-aurora-cluster-%d" 174 availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] 175 database_name = "mydb" 176 master_username = "foo" 177 master_password = "mustbeeightcharaters" 178 storage_encrypted = true 179 }`, n) 180 } 181 182 func testAccAWSClusterConfig_backups(n int) string { 183 return fmt.Sprintf(` 184 resource "aws_rds_cluster" "default" { 185 cluster_identifier = "tf-aurora-cluster-%d" 186 availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] 187 database_name = "mydb" 188 master_username = "foo" 189 master_password = "mustbeeightcharaters" 190 backup_retention_period = 5 191 preferred_backup_window = "07:00-09:00" 192 preferred_maintenance_window = "tue:04:00-tue:04:30" 193 }`, n) 194 } 195 196 func testAccAWSClusterConfig_backupsUpdate(n int) string { 197 return fmt.Sprintf(` 198 resource "aws_rds_cluster" "default" { 199 cluster_identifier = "tf-aurora-cluster-%d" 200 availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] 201 database_name = "mydb" 202 master_username = "foo" 203 master_password = "mustbeeightcharaters" 204 backup_retention_period = 10 205 preferred_backup_window = "03:00-09:00" 206 preferred_maintenance_window = "wed:01:00-wed:01:30" 207 apply_immediately = true 208 }`, n) 209 }