github.com/ezbercih/terraform@v0.1.1-0.20140729011846-3c33865e0839/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", "instance_identifier", "foobarbaz-test-terraform"), 27 resource.TestCheckResourceAttr( 28 "aws_db_instance.bar", "allocated_storage", "foobarbaz-test-terraform"), 29 resource.TestCheckResourceAttr( 30 "aws_db_instance.bar", "engine", "mysql"), 31 resource.TestCheckResourceAttr( 32 "aws_db_instance.bar", "engine_version", "5.6.17"), 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 "aws_db_instance.bar", "password", "barbarbarbar"), 39 resource.TestCheckResourceAttr( 40 "aws_db_instance.bar", "username", "foo"), 41 resource.TestCheckResourceAttr( 42 "aws_db_instance.bar", "skip_final_snapshot", "true"), 43 resource.TestCheckResourceAttr( 44 "aws_db_instance.bar", "security_group_names.0", "secfoobarbaz-test-terraform"), 45 ), 46 }, 47 }, 48 }) 49 } 50 51 func testAccCheckAWSDBInstanceDestroy(s *terraform.State) error { 52 conn := testAccProvider.rdsconn 53 54 for _, rs := range s.Resources { 55 if rs.Type != "aws_db_instance" { 56 continue 57 } 58 59 // Try to find the Group 60 resp, err := conn.DescribeDBInstances( 61 &rds.DescribeDBInstances{ 62 DBInstanceIdentifier: rs.ID, 63 }) 64 65 if err == nil { 66 if len(resp.DBInstances) != 0 && 67 resp.DBInstances[0].DBInstanceIdentifier == rs.ID { 68 return fmt.Errorf("DB Instance still exists") 69 } 70 } 71 72 // Verify the error 73 newerr, ok := err.(*rds.Error) 74 if !ok { 75 return err 76 } 77 if newerr.Code != "InvalidDBInstance.NotFound" { 78 return err 79 } 80 } 81 82 return nil 83 } 84 85 func testAccCheckAWSDBInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc { 86 return func(s *terraform.State) error { 87 88 if len(v.DBSecurityGroupNames) == 0 { 89 return fmt.Errorf("no sec names: %#v", v.DBSecurityGroupNames) 90 } 91 92 if v.Engine != "mysql" { 93 return fmt.Errorf("bad engine: %#v", v.Engine) 94 } 95 96 if v.EngineVersion != "5.6.17" { 97 return fmt.Errorf("bad engine_version: %#v", v.EngineVersion) 98 } 99 100 return nil 101 } 102 } 103 104 func testAccCheckAWSDBInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc { 105 return func(s *terraform.State) error { 106 rs, ok := s.Resources[n] 107 if !ok { 108 return fmt.Errorf("Not found: %s", n) 109 } 110 111 if rs.ID == "" { 112 return fmt.Errorf("No DB Instance ID is set") 113 } 114 115 conn := testAccProvider.rdsconn 116 117 opts := rds.DescribeDBInstances{ 118 DBInstanceIdentifier: rs.ID, 119 } 120 121 resp, err := conn.DescribeDBInstances(&opts) 122 123 if err != nil { 124 return err 125 } 126 127 if len(resp.DBInstances) != 1 || 128 resp.DBInstances[0].DBInstanceIdentifier != rs.ID { 129 return fmt.Errorf("DB Instance not found") 130 } 131 132 *v = resp.DBInstances[0] 133 134 return nil 135 } 136 } 137 138 const testAccAWSDBInstanceConfig = ` 139 resource "aws_db_security_group" "bar" { 140 name = "secfoobarbaz-test-terraform" 141 description = "just cuz" 142 143 ingress { 144 cidr = "10.0.0.1/24" 145 } 146 } 147 148 resource "aws_db_instance" "bar" { 149 identifier = "foobarbaz-test-terraform" 150 151 allocated_storage = 10 152 engine = "mysql" 153 engine_version = "5.6.17" 154 instance_class = "db.t1.micro" 155 name = "baz" 156 password = "barbarbarbar" 157 username = "foo" 158 159 skip_final_snapshot = true 160 161 security_group_names = [${aws_db_security_group.bar.name}] 162 } 163 `