github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/builtin/providers/aws/resource_aws_db_instance_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 10 "github.com/hashicorp/aws-sdk-go/aws" 11 "github.com/hashicorp/aws-sdk-go/gen/rds" 12 ) 13 14 func TestAccAWSDBInstance(t *testing.T) { 15 var v rds.DBInstance 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSDBInstanceDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSDBInstanceConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSDBInstanceExists("aws_db_instance.bar", &v), 26 testAccCheckAWSDBInstanceAttributes(&v), 27 resource.TestCheckResourceAttr( 28 "aws_db_instance.bar", "identifier", "foobarbaz-test-terraform"), 29 resource.TestCheckResourceAttr( 30 "aws_db_instance.bar", "allocated_storage", "10"), 31 resource.TestCheckResourceAttr( 32 "aws_db_instance.bar", "engine", "mysql"), 33 resource.TestCheckResourceAttr( 34 "aws_db_instance.bar", "engine_version", "5.6.21"), 35 resource.TestCheckResourceAttr( 36 "aws_db_instance.bar", "instance_class", "db.t1.micro"), 37 resource.TestCheckResourceAttr( 38 "aws_db_instance.bar", "name", "baz"), 39 resource.TestCheckResourceAttr( 40 "aws_db_instance.bar", "username", "foo"), 41 resource.TestCheckResourceAttr( 42 "aws_db_instance.bar", "parameter_group_name", "default.mysql5.6"), 43 ), 44 }, 45 }, 46 }) 47 } 48 49 func testAccCheckAWSDBInstanceDestroy(s *terraform.State) error { 50 conn := testAccProvider.Meta().(*AWSClient).rdsconn 51 52 for _, rs := range s.RootModule().Resources { 53 if rs.Type != "aws_db_instance" { 54 continue 55 } 56 57 // Try to find the Group 58 resp, err := conn.DescribeDBInstances( 59 &rds.DescribeDBInstancesMessage{ 60 DBInstanceIdentifier: aws.String(rs.Primary.ID), 61 }) 62 63 if err == nil { 64 if len(resp.DBInstances) != 0 && 65 *resp.DBInstances[0].DBInstanceIdentifier == rs.Primary.ID { 66 return fmt.Errorf("DB Instance still exists") 67 } 68 } 69 70 // Verify the error 71 newerr, ok := err.(*aws.APIError) 72 if !ok { 73 return err 74 } 75 if newerr.Code != "InvalidDBInstance.NotFound" { 76 return err 77 } 78 } 79 80 return nil 81 } 82 83 func testAccCheckAWSDBInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc { 84 return func(s *terraform.State) error { 85 86 if *v.Engine != "mysql" { 87 return fmt.Errorf("bad engine: %#v", *v.Engine) 88 } 89 90 if *v.EngineVersion != "5.6.21" { 91 return fmt.Errorf("bad engine_version: %#v", *v.EngineVersion) 92 } 93 94 if *v.BackupRetentionPeriod != 0 { 95 return fmt.Errorf("bad backup_retention_period: %#v", *v.BackupRetentionPeriod) 96 } 97 98 return nil 99 } 100 } 101 102 func testAccCheckAWSDBInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc { 103 return func(s *terraform.State) error { 104 rs, ok := s.RootModule().Resources[n] 105 if !ok { 106 return fmt.Errorf("Not found: %s", n) 107 } 108 109 if rs.Primary.ID == "" { 110 return fmt.Errorf("No DB Instance ID is set") 111 } 112 113 conn := testAccProvider.Meta().(*AWSClient).rdsconn 114 115 opts := rds.DescribeDBInstancesMessage{ 116 DBInstanceIdentifier: aws.String(rs.Primary.ID), 117 } 118 119 resp, err := conn.DescribeDBInstances(&opts) 120 121 if err != nil { 122 return err 123 } 124 125 if len(resp.DBInstances) != 1 || 126 *resp.DBInstances[0].DBInstanceIdentifier != rs.Primary.ID { 127 return fmt.Errorf("DB Instance not found") 128 } 129 130 *v = resp.DBInstances[0] 131 132 return nil 133 } 134 } 135 136 const testAccAWSDBInstanceConfig = ` 137 resource "aws_db_instance" "bar" { 138 identifier = "foobarbaz-test-terraform" 139 140 allocated_storage = 10 141 engine = "mysql" 142 engine_version = "5.6.21" 143 instance_class = "db.t1.micro" 144 name = "baz" 145 password = "barbarbarbar" 146 username = "foo" 147 148 backup_retention_period = 0 149 150 parameter_group_name = "default.mysql5.6" 151 } 152 `