github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/builtin/providers/aws/resource_aws_db_parameter_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 TestAccAWSDBParameterGroup_basic(t *testing.T) { 15 var v rds.DBParameterGroup 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSDBParameterGroupConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 26 testAccCheckAWSDBParameterGroupAttributes(&v), 27 resource.TestCheckResourceAttr( 28 "aws_db_parameter_group.bar", "name", "parameter-group-test-terraform"), 29 resource.TestCheckResourceAttr( 30 "aws_db_parameter_group.bar", "family", "mysql5.6"), 31 resource.TestCheckResourceAttr( 32 "aws_db_parameter_group.bar", "description", "Test parameter group for terraform"), 33 resource.TestCheckResourceAttr( 34 "aws_db_parameter_group.bar", "parameter.1708034931.name", "character_set_results"), 35 resource.TestCheckResourceAttr( 36 "aws_db_parameter_group.bar", "parameter.1708034931.value", "utf8"), 37 resource.TestCheckResourceAttr( 38 "aws_db_parameter_group.bar", "parameter.2421266705.name", "character_set_server"), 39 resource.TestCheckResourceAttr( 40 "aws_db_parameter_group.bar", "parameter.2421266705.value", "utf8"), 41 resource.TestCheckResourceAttr( 42 "aws_db_parameter_group.bar", "parameter.2478663599.name", "character_set_client"), 43 resource.TestCheckResourceAttr( 44 "aws_db_parameter_group.bar", "parameter.2478663599.value", "utf8"), 45 ), 46 }, 47 resource.TestStep{ 48 Config: testAccAWSDBParameterGroupAddParametersConfig, 49 Check: resource.ComposeTestCheckFunc( 50 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 51 testAccCheckAWSDBParameterGroupAttributes(&v), 52 resource.TestCheckResourceAttr( 53 "aws_db_parameter_group.bar", "name", "parameter-group-test-terraform"), 54 resource.TestCheckResourceAttr( 55 "aws_db_parameter_group.bar", "family", "mysql5.6"), 56 resource.TestCheckResourceAttr( 57 "aws_db_parameter_group.bar", "description", "Test parameter group for terraform"), 58 resource.TestCheckResourceAttr( 59 "aws_db_parameter_group.bar", "parameter.1706463059.name", "collation_connection"), 60 resource.TestCheckResourceAttr( 61 "aws_db_parameter_group.bar", "parameter.1706463059.value", "utf8_unicode_ci"), 62 resource.TestCheckResourceAttr( 63 "aws_db_parameter_group.bar", "parameter.1708034931.name", "character_set_results"), 64 resource.TestCheckResourceAttr( 65 "aws_db_parameter_group.bar", "parameter.1708034931.value", "utf8"), 66 resource.TestCheckResourceAttr( 67 "aws_db_parameter_group.bar", "parameter.2421266705.name", "character_set_server"), 68 resource.TestCheckResourceAttr( 69 "aws_db_parameter_group.bar", "parameter.2421266705.value", "utf8"), 70 resource.TestCheckResourceAttr( 71 "aws_db_parameter_group.bar", "parameter.2475805061.name", "collation_server"), 72 resource.TestCheckResourceAttr( 73 "aws_db_parameter_group.bar", "parameter.2475805061.value", "utf8_unicode_ci"), 74 resource.TestCheckResourceAttr( 75 "aws_db_parameter_group.bar", "parameter.2478663599.name", "character_set_client"), 76 resource.TestCheckResourceAttr( 77 "aws_db_parameter_group.bar", "parameter.2478663599.value", "utf8"), 78 ), 79 }, 80 }, 81 }) 82 } 83 84 func TestAccAWSDBParameterGroupOnly(t *testing.T) { 85 var v rds.DBParameterGroup 86 87 resource.Test(t, resource.TestCase{ 88 PreCheck: func() { testAccPreCheck(t) }, 89 Providers: testAccProviders, 90 CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, 91 Steps: []resource.TestStep{ 92 resource.TestStep{ 93 Config: testAccAWSDBParameterGroupOnlyConfig, 94 Check: resource.ComposeTestCheckFunc( 95 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 96 testAccCheckAWSDBParameterGroupAttributes(&v), 97 resource.TestCheckResourceAttr( 98 "aws_db_parameter_group.bar", "name", "parameter-group-test-terraform"), 99 resource.TestCheckResourceAttr( 100 "aws_db_parameter_group.bar", "family", "mysql5.6"), 101 resource.TestCheckResourceAttr( 102 "aws_db_parameter_group.bar", "description", "Test parameter group for terraform"), 103 ), 104 }, 105 }, 106 }) 107 } 108 109 func testAccCheckAWSDBParameterGroupDestroy(s *terraform.State) error { 110 conn := testAccProvider.Meta().(*AWSClient).rdsconn 111 112 for _, rs := range s.RootModule().Resources { 113 if rs.Type != "aws_db_parameter_group" { 114 continue 115 } 116 117 // Try to find the Group 118 resp, err := conn.DescribeDBParameterGroups( 119 &rds.DescribeDBParameterGroupsInput{ 120 DBParameterGroupName: aws.String(rs.Primary.ID), 121 }) 122 123 if err == nil { 124 if len(resp.DBParameterGroups) != 0 && 125 *resp.DBParameterGroups[0].DBParameterGroupName == rs.Primary.ID { 126 return fmt.Errorf("DB Parameter Group still exists") 127 } 128 } 129 130 // Verify the error 131 newerr, ok := err.(awserr.Error) 132 if !ok { 133 return err 134 } 135 if newerr.Code() != "InvalidDBParameterGroup.NotFound" { 136 return err 137 } 138 } 139 140 return nil 141 } 142 143 func testAccCheckAWSDBParameterGroupAttributes(v *rds.DBParameterGroup) resource.TestCheckFunc { 144 return func(s *terraform.State) error { 145 146 if *v.DBParameterGroupName != "parameter-group-test-terraform" { 147 return fmt.Errorf("bad name: %#v", v.DBParameterGroupName) 148 } 149 150 if *v.DBParameterGroupFamily != "mysql5.6" { 151 return fmt.Errorf("bad family: %#v", v.DBParameterGroupFamily) 152 } 153 154 if *v.Description != "Test parameter group for terraform" { 155 return fmt.Errorf("bad description: %#v", v.Description) 156 } 157 158 return nil 159 } 160 } 161 162 func testAccCheckAWSDBParameterGroupExists(n string, v *rds.DBParameterGroup) resource.TestCheckFunc { 163 return func(s *terraform.State) error { 164 rs, ok := s.RootModule().Resources[n] 165 if !ok { 166 return fmt.Errorf("Not found: %s", n) 167 } 168 169 if rs.Primary.ID == "" { 170 return fmt.Errorf("No DB Parameter Group ID is set") 171 } 172 173 conn := testAccProvider.Meta().(*AWSClient).rdsconn 174 175 opts := rds.DescribeDBParameterGroupsInput{ 176 DBParameterGroupName: aws.String(rs.Primary.ID), 177 } 178 179 resp, err := conn.DescribeDBParameterGroups(&opts) 180 181 if err != nil { 182 return err 183 } 184 185 if len(resp.DBParameterGroups) != 1 || 186 *resp.DBParameterGroups[0].DBParameterGroupName != rs.Primary.ID { 187 return fmt.Errorf("DB Parameter Group not found") 188 } 189 190 *v = *resp.DBParameterGroups[0] 191 192 return nil 193 } 194 } 195 196 const testAccAWSDBParameterGroupConfig = ` 197 resource "aws_db_parameter_group" "bar" { 198 name = "parameter-group-test-terraform" 199 family = "mysql5.6" 200 description = "Test parameter group for terraform" 201 parameter { 202 name = "character_set_server" 203 value = "utf8" 204 } 205 parameter { 206 name = "character_set_client" 207 value = "utf8" 208 } 209 parameter{ 210 name = "character_set_results" 211 value = "utf8" 212 } 213 } 214 ` 215 216 const testAccAWSDBParameterGroupAddParametersConfig = ` 217 resource "aws_db_parameter_group" "bar" { 218 name = "parameter-group-test-terraform" 219 family = "mysql5.6" 220 description = "Test parameter group for terraform" 221 parameter { 222 name = "character_set_server" 223 value = "utf8" 224 } 225 parameter { 226 name = "character_set_client" 227 value = "utf8" 228 } 229 parameter{ 230 name = "character_set_results" 231 value = "utf8" 232 } 233 parameter { 234 name = "collation_server" 235 value = "utf8_unicode_ci" 236 } 237 parameter { 238 name = "collation_connection" 239 value = "utf8_unicode_ci" 240 } 241 } 242 ` 243 244 const testAccAWSDBParameterGroupOnlyConfig = ` 245 resource "aws_db_parameter_group" "bar" { 246 name = "parameter-group-test-terraform" 247 family = "mysql5.6" 248 description = "Test parameter group for terraform" 249 } 250 `