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