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