github.com/jdextraze/terraform@v0.6.17-0.20160511153921-e33847c8a8af/builtin/providers/aws/resource_aws_db_option_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/aws/awserr" 9 "github.com/aws/aws-sdk-go/service/rds" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSDBOptionGroup_basic(t *testing.T) { 15 var v rds.OptionGroup 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSDBOptionGroupDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSDBOptionGroupBasicConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v), 26 testAccCheckAWSDBOptionGroupAttributes(&v), 27 resource.TestCheckResourceAttr( 28 "aws_db_option_group.bar", "name", "option-group-test-terraform"), 29 ), 30 }, 31 }, 32 }) 33 } 34 35 func TestAccAWSDBOptionGroup_sqlServerOptionsUpdate(t *testing.T) { 36 var v rds.OptionGroup 37 38 resource.Test(t, resource.TestCase{ 39 PreCheck: func() { testAccPreCheck(t) }, 40 Providers: testAccProviders, 41 CheckDestroy: testAccCheckAWSDBOptionGroupDestroy, 42 Steps: []resource.TestStep{ 43 resource.TestStep{ 44 Config: testAccAWSDBOptionGroupSqlServerEEOptions, 45 Check: resource.ComposeTestCheckFunc( 46 testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v), 47 resource.TestCheckResourceAttr( 48 "aws_db_option_group.bar", "name", "option-group-test-terraform"), 49 ), 50 }, 51 52 resource.TestStep{ 53 Config: testAccAWSDBOptionGroupSqlServerEEOptions_update, 54 Check: resource.ComposeTestCheckFunc( 55 testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v), 56 resource.TestCheckResourceAttr( 57 "aws_db_option_group.bar", "name", "option-group-test-terraform"), 58 resource.TestCheckResourceAttr( 59 "aws_db_option_group.bar", "option.#", "1"), 60 ), 61 }, 62 }, 63 }) 64 } 65 66 func TestAccAWSDBOptionGroup_multipleOptions(t *testing.T) { 67 var v rds.OptionGroup 68 69 resource.Test(t, resource.TestCase{ 70 PreCheck: func() { testAccPreCheck(t) }, 71 Providers: testAccProviders, 72 CheckDestroy: testAccCheckAWSDBOptionGroupDestroy, 73 Steps: []resource.TestStep{ 74 resource.TestStep{ 75 Config: testAccAWSDBOptionGroupMultipleOptions, 76 Check: resource.ComposeTestCheckFunc( 77 testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v), 78 resource.TestCheckResourceAttr( 79 "aws_db_option_group.bar", "name", "option-group-test-terraform"), 80 resource.TestCheckResourceAttr( 81 "aws_db_option_group.bar", "option.#", "2"), 82 ), 83 }, 84 }, 85 }) 86 } 87 88 func testAccCheckAWSDBOptionGroupAttributes(v *rds.OptionGroup) resource.TestCheckFunc { 89 return func(s *terraform.State) error { 90 91 if *v.EngineName != "mysql" { 92 return fmt.Errorf("bad engine_name: %#v", *v.EngineName) 93 } 94 95 if *v.MajorEngineVersion != "5.6" { 96 return fmt.Errorf("bad major_engine_version: %#v", *v.MajorEngineVersion) 97 } 98 99 if *v.OptionGroupDescription != "Test option group for terraform" { 100 return fmt.Errorf("bad option_group_description: %#v", *v.OptionGroupDescription) 101 } 102 103 return nil 104 } 105 } 106 107 func TestResourceAWSDBOptionGroupName_validation(t *testing.T) { 108 cases := []struct { 109 Value string 110 ErrCount int 111 }{ 112 { 113 Value: "testing123!", 114 ErrCount: 1, 115 }, 116 { 117 Value: "1testing123", 118 ErrCount: 1, 119 }, 120 { 121 Value: "testing--123", 122 ErrCount: 1, 123 }, 124 { 125 Value: "testing123-", 126 ErrCount: 1, 127 }, 128 { 129 Value: randomString(256), 130 ErrCount: 1, 131 }, 132 } 133 134 for _, tc := range cases { 135 _, errors := validateDbOptionGroupName(tc.Value, "aws_db_option_group_name") 136 137 if len(errors) != tc.ErrCount { 138 t.Fatalf("Expected the DB Option Group Name to trigger a validation error") 139 } 140 } 141 } 142 143 func testAccCheckAWSDBOptionGroupExists(n string, v *rds.OptionGroup) resource.TestCheckFunc { 144 return func(s *terraform.State) error { 145 rs, ok := s.RootModule().Resources[n] 146 if !ok { 147 return fmt.Errorf("Not found: %s", n) 148 } 149 150 if rs.Primary.ID == "" { 151 return fmt.Errorf("No DB Option Group Name is set") 152 } 153 154 conn := testAccProvider.Meta().(*AWSClient).rdsconn 155 156 opts := rds.DescribeOptionGroupsInput{ 157 OptionGroupName: aws.String(rs.Primary.ID), 158 } 159 160 resp, err := conn.DescribeOptionGroups(&opts) 161 162 if err != nil { 163 return err 164 } 165 166 if len(resp.OptionGroupsList) != 1 || 167 *resp.OptionGroupsList[0].OptionGroupName != rs.Primary.ID { 168 return fmt.Errorf("DB Option Group not found") 169 } 170 171 *v = *resp.OptionGroupsList[0] 172 173 return nil 174 } 175 } 176 177 func testAccCheckAWSDBOptionGroupDestroy(s *terraform.State) error { 178 conn := testAccProvider.Meta().(*AWSClient).rdsconn 179 180 for _, rs := range s.RootModule().Resources { 181 if rs.Type != "aws_db_option_group" { 182 continue 183 } 184 185 resp, err := conn.DescribeOptionGroups( 186 &rds.DescribeOptionGroupsInput{ 187 OptionGroupName: aws.String(rs.Primary.ID), 188 }) 189 190 if err == nil { 191 if len(resp.OptionGroupsList) != 0 && 192 *resp.OptionGroupsList[0].OptionGroupName == rs.Primary.ID { 193 return fmt.Errorf("DB Option Group still exists") 194 } 195 } 196 197 // Verify the error 198 newerr, ok := err.(awserr.Error) 199 if !ok { 200 return err 201 } 202 if newerr.Code() != "OptionGroupNotFoundFault" { 203 return err 204 } 205 } 206 207 return nil 208 } 209 210 const testAccAWSDBOptionGroupBasicConfig = ` 211 resource "aws_db_option_group" "bar" { 212 name = "option-group-test-terraform" 213 option_group_description = "Test option group for terraform" 214 engine_name = "mysql" 215 major_engine_version = "5.6" 216 } 217 ` 218 219 const testAccAWSDBOptionGroupSqlServerEEOptions = ` 220 resource "aws_db_option_group" "bar" { 221 name = "option-group-test-terraform" 222 option_group_description = "Test option group for terraform" 223 engine_name = "sqlserver-ee" 224 major_engine_version = "11.00" 225 } 226 ` 227 228 const testAccAWSDBOptionGroupSqlServerEEOptions_update = ` 229 resource "aws_db_option_group" "bar" { 230 name = "option-group-test-terraform" 231 option_group_description = "Test option group for terraform" 232 engine_name = "sqlserver-ee" 233 major_engine_version = "11.00" 234 235 option { 236 option_name = "Mirroring" 237 } 238 } 239 ` 240 241 const testAccAWSDBOptionGroupMultipleOptions = ` 242 resource "aws_db_option_group" "bar" { 243 name = "option-group-test-terraform" 244 option_group_description = "Test option group for terraform" 245 engine_name = "oracle-se" 246 major_engine_version = "11.2" 247 248 option { 249 option_name = "STATSPACK" 250 } 251 252 option { 253 option_name = "XMLDB" 254 } 255 } 256 `