github.com/daveadams/terraform@v0.6.4-0.20160830094355-13ce74975936/builtin/providers/aws/resource_aws_db_parameter_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "math/rand" 6 "testing" 7 "time" 8 9 "github.com/aws/aws-sdk-go/aws" 10 "github.com/aws/aws-sdk-go/aws/awserr" 11 "github.com/aws/aws-sdk-go/service/rds" 12 "github.com/hashicorp/terraform/helper/acctest" 13 "github.com/hashicorp/terraform/helper/resource" 14 "github.com/hashicorp/terraform/terraform" 15 ) 16 17 func TestAccAWSDBParameterGroup_limit(t *testing.T) { 18 var v rds.DBParameterGroup 19 20 groupName := fmt.Sprintf("parameter-group-test-terraform-%d", acctest.RandInt()) 21 22 resource.Test(t, resource.TestCase{ 23 PreCheck: func() { testAccPreCheck(t) }, 24 Providers: testAccProviders, 25 CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, 26 Steps: []resource.TestStep{ 27 resource.TestStep{ 28 Config: createAwsDbParameterGroupsExceedDefaultAwsLimit(groupName), 29 Check: resource.ComposeTestCheckFunc( 30 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.large", &v), 31 testAccCheckAWSDBParameterGroupAttributes(&v, groupName), 32 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "name", groupName), 33 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "family", "mysql5.6"), 34 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "description", "RDS default parameter group: Exceed default AWS parameter group limit of twenty"), 35 36 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2421266705.name", "character_set_server"), 37 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2421266705.value", "utf8"), 38 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2478663599.name", "character_set_client"), 39 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2478663599.value", "utf8"), 40 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1680942586.name", "collation_server"), 41 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1680942586.value", "utf8_general_ci"), 42 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2450940716.name", "collation_connection"), 43 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2450940716.value", "utf8_general_ci"), 44 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.242489837.name", "join_buffer_size"), 45 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.242489837.value", "16777216"), 46 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2026669454.name", "key_buffer_size"), 47 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2026669454.value", "67108864"), 48 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2705275319.name", "max_connections"), 49 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2705275319.value", "3200"), 50 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3512697936.name", "max_heap_table_size"), 51 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3512697936.value", "67108864"), 52 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.780730667.name", "performance_schema"), 53 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.780730667.value", "1"), 54 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2020346918.name", "performance_schema_users_size"), 55 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2020346918.value", "1048576"), 56 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1460834103.name", "query_cache_limit"), 57 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1460834103.value", "2097152"), 58 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.484865451.name", "query_cache_size"), 59 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.484865451.value", "67108864"), 60 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.255276438.name", "sort_buffer_size"), 61 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.255276438.value", "16777216"), 62 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2981725119.name", "table_open_cache"), 63 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2981725119.value", "4096"), 64 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2703661820.name", "tmp_table_size"), 65 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2703661820.value", "67108864"), 66 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2386583229.name", "binlog_cache_size"), 67 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2386583229.value", "131072"), 68 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.4012389720.name", "innodb_flush_log_at_trx_commit"), 69 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.4012389720.value", "0"), 70 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2688783017.name", "innodb_open_files"), 71 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2688783017.value", "4000"), 72 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.782983977.name", "innodb_read_io_threads"), 73 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.782983977.value", "64"), 74 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2809980413.name", "innodb_thread_concurrency"), 75 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2809980413.value", "0"), 76 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3599115250.name", "innodb_write_io_threads"), 77 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3599115250.value", "64"), 78 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2557156277.name", "character_set_connection"), 79 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2557156277.value", "utf8"), 80 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2475346812.name", "character_set_database"), 81 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2475346812.value", "utf8"), 82 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1986528518.name", "character_set_filesystem"), 83 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1986528518.value", "utf8"), 84 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.name", "character_set_results"), 85 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.value", "utf8"), 86 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.name", "event_scheduler"), 87 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "on"), 88 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.name", "innodb_buffer_pool_dump_at_shutdown"), 89 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.value", "1"), 90 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.name", "innodb_file_format"), 91 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "barracuda"), 92 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.name", "innodb_io_capacity"), 93 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.value", "2000"), 94 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.name", "innodb_io_capacity_max"), 95 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.value", "3000"), 96 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1411161182.name", "innodb_lock_wait_timeout"), 97 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1411161182.value", "120"), 98 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3133315879.name", "innodb_max_dirty_pages_pct"), 99 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3133315879.value", "90"), 100 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.950177639.name", "log_bin_trust_function_creators"), 101 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.950177639.value", "1"), 102 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.name", "log_warnings"), 103 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.value", "2"), 104 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.name", "log_output"), 105 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "file"), 106 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.name", "max_allowed_packet"), 107 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.value", "1073741824"), 108 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.name", "max_connect_errors"), 109 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.value", "100"), 110 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2839701698.name", "query_cache_min_res_unit"), 111 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2839701698.value", "512"), 112 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.427634017.name", "slow_query_log"), 113 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.427634017.value", "1"), 114 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.name", "sync_binlog"), 115 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.value", "0"), 116 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.name", "tx_isolation"), 117 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "repeatable-read"), 118 ), 119 }, 120 resource.TestStep{ 121 Config: updateAwsDbParameterGroupsExceedDefaultAwsLimit(groupName), 122 Check: resource.ComposeTestCheckFunc( 123 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.large", &v), 124 testAccCheckAWSDBParameterGroupAttributes(&v, groupName), 125 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "name", groupName), 126 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "family", "mysql5.6"), 127 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "description", "Updated RDS default parameter group: Exceed default AWS parameter group limit of twenty"), 128 129 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2421266705.name", "character_set_server"), 130 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2421266705.value", "utf8"), 131 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2478663599.name", "character_set_client"), 132 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2478663599.value", "utf8"), 133 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1680942586.name", "collation_server"), 134 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1680942586.value", "utf8_general_ci"), 135 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2450940716.name", "collation_connection"), 136 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2450940716.value", "utf8_general_ci"), 137 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.242489837.name", "join_buffer_size"), 138 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.242489837.value", "16777216"), 139 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2026669454.name", "key_buffer_size"), 140 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2026669454.value", "67108864"), 141 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2705275319.name", "max_connections"), 142 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2705275319.value", "3200"), 143 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3512697936.name", "max_heap_table_size"), 144 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3512697936.value", "67108864"), 145 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.780730667.name", "performance_schema"), 146 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.780730667.value", "1"), 147 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2020346918.name", "performance_schema_users_size"), 148 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2020346918.value", "1048576"), 149 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1460834103.name", "query_cache_limit"), 150 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1460834103.value", "2097152"), 151 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.484865451.name", "query_cache_size"), 152 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.484865451.value", "67108864"), 153 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.255276438.name", "sort_buffer_size"), 154 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.255276438.value", "16777216"), 155 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2981725119.name", "table_open_cache"), 156 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2981725119.value", "4096"), 157 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2703661820.name", "tmp_table_size"), 158 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2703661820.value", "67108864"), 159 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2386583229.name", "binlog_cache_size"), 160 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2386583229.value", "131072"), 161 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.4012389720.name", "innodb_flush_log_at_trx_commit"), 162 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.4012389720.value", "0"), 163 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2688783017.name", "innodb_open_files"), 164 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2688783017.value", "4000"), 165 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.782983977.name", "innodb_read_io_threads"), 166 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.782983977.value", "64"), 167 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2809980413.name", "innodb_thread_concurrency"), 168 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2809980413.value", "0"), 169 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3599115250.name", "innodb_write_io_threads"), 170 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3599115250.value", "64"), 171 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2557156277.name", "character_set_connection"), 172 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2557156277.value", "utf8"), 173 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2475346812.name", "character_set_database"), 174 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2475346812.value", "utf8"), 175 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1986528518.name", "character_set_filesystem"), 176 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1986528518.value", "utf8"), 177 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.name", "character_set_results"), 178 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.value", "utf8"), 179 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.name", "event_scheduler"), 180 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "on"), 181 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.name", "innodb_buffer_pool_dump_at_shutdown"), 182 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.value", "1"), 183 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.name", "innodb_file_format"), 184 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "barracuda"), 185 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.name", "innodb_io_capacity"), 186 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.value", "2000"), 187 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.name", "innodb_io_capacity_max"), 188 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.value", "3000"), 189 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1411161182.name", "innodb_lock_wait_timeout"), 190 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1411161182.value", "120"), 191 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3133315879.name", "innodb_max_dirty_pages_pct"), 192 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3133315879.value", "90"), 193 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.950177639.name", "log_bin_trust_function_creators"), 194 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.950177639.value", "1"), 195 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.name", "log_warnings"), 196 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.value", "2"), 197 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.name", "log_output"), 198 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "file"), 199 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.name", "max_allowed_packet"), 200 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.value", "1073741824"), 201 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.name", "max_connect_errors"), 202 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.value", "100"), 203 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2839701698.name", "query_cache_min_res_unit"), 204 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.2839701698.value", "512"), 205 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.427634017.name", "slow_query_log"), 206 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.427634017.value", "1"), 207 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.name", "sync_binlog"), 208 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.value", "0"), 209 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.name", "tx_isolation"), 210 resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "repeatable-read"), 211 ), 212 }, 213 }, 214 }) 215 } 216 217 func TestAccAWSDBParameterGroup_basic(t *testing.T) { 218 var v rds.DBParameterGroup 219 220 groupName := fmt.Sprintf("parameter-group-test-terraform-%d", acctest.RandInt()) 221 222 resource.Test(t, resource.TestCase{ 223 PreCheck: func() { testAccPreCheck(t) }, 224 Providers: testAccProviders, 225 CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, 226 Steps: []resource.TestStep{ 227 resource.TestStep{ 228 Config: testAccAWSDBParameterGroupConfig(groupName), 229 Check: resource.ComposeTestCheckFunc( 230 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 231 testAccCheckAWSDBParameterGroupAttributes(&v, groupName), 232 resource.TestCheckResourceAttr( 233 "aws_db_parameter_group.bar", "name", groupName), 234 resource.TestCheckResourceAttr( 235 "aws_db_parameter_group.bar", "family", "mysql5.6"), 236 resource.TestCheckResourceAttr( 237 "aws_db_parameter_group.bar", "description", "Managed by Terraform"), 238 resource.TestCheckResourceAttr( 239 "aws_db_parameter_group.bar", "parameter.1708034931.name", "character_set_results"), 240 resource.TestCheckResourceAttr( 241 "aws_db_parameter_group.bar", "parameter.1708034931.value", "utf8"), 242 resource.TestCheckResourceAttr( 243 "aws_db_parameter_group.bar", "parameter.2421266705.name", "character_set_server"), 244 resource.TestCheckResourceAttr( 245 "aws_db_parameter_group.bar", "parameter.2421266705.value", "utf8"), 246 resource.TestCheckResourceAttr( 247 "aws_db_parameter_group.bar", "parameter.2478663599.name", "character_set_client"), 248 resource.TestCheckResourceAttr( 249 "aws_db_parameter_group.bar", "parameter.2478663599.value", "utf8"), 250 resource.TestCheckResourceAttr( 251 "aws_db_parameter_group.bar", "tags.%", "1"), 252 ), 253 }, 254 resource.TestStep{ 255 Config: testAccAWSDBParameterGroupAddParametersConfig(groupName), 256 Check: resource.ComposeTestCheckFunc( 257 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 258 testAccCheckAWSDBParameterGroupAttributes(&v, groupName), 259 resource.TestCheckResourceAttr( 260 "aws_db_parameter_group.bar", "name", groupName), 261 resource.TestCheckResourceAttr( 262 "aws_db_parameter_group.bar", "family", "mysql5.6"), 263 resource.TestCheckResourceAttr( 264 "aws_db_parameter_group.bar", "description", "Test parameter group for terraform"), 265 resource.TestCheckResourceAttr( 266 "aws_db_parameter_group.bar", "parameter.1706463059.name", "collation_connection"), 267 resource.TestCheckResourceAttr( 268 "aws_db_parameter_group.bar", "parameter.1706463059.value", "utf8_unicode_ci"), 269 resource.TestCheckResourceAttr( 270 "aws_db_parameter_group.bar", "parameter.1708034931.name", "character_set_results"), 271 resource.TestCheckResourceAttr( 272 "aws_db_parameter_group.bar", "parameter.1708034931.value", "utf8"), 273 resource.TestCheckResourceAttr( 274 "aws_db_parameter_group.bar", "parameter.2421266705.name", "character_set_server"), 275 resource.TestCheckResourceAttr( 276 "aws_db_parameter_group.bar", "parameter.2421266705.value", "utf8"), 277 resource.TestCheckResourceAttr( 278 "aws_db_parameter_group.bar", "parameter.2475805061.name", "collation_server"), 279 resource.TestCheckResourceAttr( 280 "aws_db_parameter_group.bar", "parameter.2475805061.value", "utf8_unicode_ci"), 281 resource.TestCheckResourceAttr( 282 "aws_db_parameter_group.bar", "parameter.2478663599.name", "character_set_client"), 283 resource.TestCheckResourceAttr( 284 "aws_db_parameter_group.bar", "parameter.2478663599.value", "utf8"), 285 resource.TestCheckResourceAttr( 286 "aws_db_parameter_group.bar", "tags.%", "2"), 287 ), 288 }, 289 }, 290 }) 291 } 292 293 func TestAccAWSDBParameterGroup_Only(t *testing.T) { 294 var v rds.DBParameterGroup 295 296 groupName := fmt.Sprintf("parameter-group-test-terraform-%d", acctest.RandInt()) 297 resource.Test(t, resource.TestCase{ 298 PreCheck: func() { testAccPreCheck(t) }, 299 Providers: testAccProviders, 300 CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, 301 Steps: []resource.TestStep{ 302 resource.TestStep{ 303 Config: testAccAWSDBParameterGroupOnlyConfig(groupName), 304 Check: resource.ComposeTestCheckFunc( 305 testAccCheckAWSDBParameterGroupExists("aws_db_parameter_group.bar", &v), 306 testAccCheckAWSDBParameterGroupAttributes(&v, groupName), 307 resource.TestCheckResourceAttr( 308 "aws_db_parameter_group.bar", "name", groupName), 309 resource.TestCheckResourceAttr( 310 "aws_db_parameter_group.bar", "family", "mysql5.6"), 311 ), 312 }, 313 }, 314 }) 315 } 316 317 func TestResourceAWSDBParameterGroupName_validation(t *testing.T) { 318 cases := []struct { 319 Value string 320 ErrCount int 321 }{ 322 { 323 Value: "tEsting123", 324 ErrCount: 1, 325 }, 326 { 327 Value: "testing123!", 328 ErrCount: 1, 329 }, 330 { 331 Value: "1testing123", 332 ErrCount: 1, 333 }, 334 { 335 Value: "testing--123", 336 ErrCount: 1, 337 }, 338 { 339 Value: "testing123-", 340 ErrCount: 1, 341 }, 342 { 343 Value: randomString(256), 344 ErrCount: 1, 345 }, 346 } 347 348 for _, tc := range cases { 349 _, errors := validateDbParamGroupName(tc.Value, "aws_db_parameter_group_name") 350 351 if len(errors) != tc.ErrCount { 352 t.Fatalf("Expected the DB Parameter Group Name to trigger a validation error") 353 } 354 } 355 } 356 357 func testAccCheckAWSDBParameterGroupDestroy(s *terraform.State) error { 358 conn := testAccProvider.Meta().(*AWSClient).rdsconn 359 360 for _, rs := range s.RootModule().Resources { 361 if rs.Type != "aws_db_parameter_group" { 362 continue 363 } 364 365 // Try to find the Group 366 resp, err := conn.DescribeDBParameterGroups( 367 &rds.DescribeDBParameterGroupsInput{ 368 DBParameterGroupName: aws.String(rs.Primary.ID), 369 }) 370 371 if err == nil { 372 if len(resp.DBParameterGroups) != 0 && 373 *resp.DBParameterGroups[0].DBParameterGroupName == rs.Primary.ID { 374 return fmt.Errorf("DB Parameter Group still exists") 375 } 376 } 377 378 // Verify the error 379 newerr, ok := err.(awserr.Error) 380 if !ok { 381 return err 382 } 383 if newerr.Code() != "DBParameterGroupNotFound" { 384 return err 385 } 386 } 387 388 return nil 389 } 390 391 func testAccCheckAWSDBParameterGroupAttributes(v *rds.DBParameterGroup, name string) resource.TestCheckFunc { 392 return func(s *terraform.State) error { 393 394 if *v.DBParameterGroupName != name { 395 return fmt.Errorf("Bad Parameter Group name, expected (%s), got (%s)", name, *v.DBParameterGroupName) 396 } 397 398 if *v.DBParameterGroupFamily != "mysql5.6" { 399 return fmt.Errorf("bad family: %#v", v.DBParameterGroupFamily) 400 } 401 402 return nil 403 } 404 } 405 406 func testAccCheckAWSDBParameterGroupExists(n string, v *rds.DBParameterGroup) resource.TestCheckFunc { 407 return func(s *terraform.State) error { 408 rs, ok := s.RootModule().Resources[n] 409 if !ok { 410 return fmt.Errorf("Not found: %s", n) 411 } 412 413 if rs.Primary.ID == "" { 414 return fmt.Errorf("No DB Parameter Group ID is set") 415 } 416 417 conn := testAccProvider.Meta().(*AWSClient).rdsconn 418 419 opts := rds.DescribeDBParameterGroupsInput{ 420 DBParameterGroupName: aws.String(rs.Primary.ID), 421 } 422 423 resp, err := conn.DescribeDBParameterGroups(&opts) 424 425 if err != nil { 426 return err 427 } 428 429 if len(resp.DBParameterGroups) != 1 || 430 *resp.DBParameterGroups[0].DBParameterGroupName != rs.Primary.ID { 431 return fmt.Errorf("DB Parameter Group not found") 432 } 433 434 *v = *resp.DBParameterGroups[0] 435 436 return nil 437 } 438 } 439 440 func randomString(strlen int) string { 441 rand.Seed(time.Now().UTC().UnixNano()) 442 const chars = "abcdefghijklmnopqrstuvwxyz" 443 result := make([]byte, strlen) 444 for i := 0; i < strlen; i++ { 445 result[i] = chars[rand.Intn(len(chars))] 446 } 447 return string(result) 448 } 449 450 func testAccAWSDBParameterGroupConfig(n string) string { 451 return fmt.Sprintf(` 452 resource "aws_db_parameter_group" "bar" { 453 name = "%s" 454 family = "mysql5.6" 455 parameter { 456 name = "character_set_server" 457 value = "utf8" 458 } 459 parameter { 460 name = "character_set_client" 461 value = "utf8" 462 } 463 parameter{ 464 name = "character_set_results" 465 value = "utf8" 466 } 467 tags { 468 foo = "bar" 469 } 470 }`, n) 471 } 472 473 func testAccAWSDBParameterGroupAddParametersConfig(n string) string { 474 return fmt.Sprintf(` 475 resource "aws_db_parameter_group" "bar" { 476 name = "%s" 477 family = "mysql5.6" 478 description = "Test parameter group for terraform" 479 parameter { 480 name = "character_set_server" 481 value = "utf8" 482 } 483 parameter { 484 name = "character_set_client" 485 value = "utf8" 486 } 487 parameter{ 488 name = "character_set_results" 489 value = "utf8" 490 } 491 parameter { 492 name = "collation_server" 493 value = "utf8_unicode_ci" 494 } 495 parameter { 496 name = "collation_connection" 497 value = "utf8_unicode_ci" 498 } 499 tags { 500 foo = "bar" 501 baz = "foo" 502 } 503 }`, n) 504 } 505 506 func testAccAWSDBParameterGroupOnlyConfig(n string) string { 507 return fmt.Sprintf(` 508 resource "aws_db_parameter_group" "bar" { 509 name = "%s" 510 family = "mysql5.6" 511 description = "Test parameter group for terraform" 512 }`, n) 513 } 514 515 func createAwsDbParameterGroupsExceedDefaultAwsLimit(n string) string { 516 return fmt.Sprintf(` 517 resource "aws_db_parameter_group" "large" { 518 name = "%s" 519 family = "mysql5.6" 520 description = "RDS default parameter group: Exceed default AWS parameter group limit of twenty" 521 522 parameter { name = "binlog_cache_size" value = 131072 } 523 parameter { name = "character_set_client" value = "utf8" } 524 parameter { name = "character_set_connection" value = "utf8" } 525 parameter { name = "character_set_database" value = "utf8" } 526 parameter { name = "character_set_filesystem" value = "utf8" } 527 parameter { name = "character_set_results" value = "utf8" } 528 parameter { name = "character_set_server" value = "utf8" } 529 parameter { name = "collation_connection" value = "utf8_general_ci" } 530 parameter { name = "collation_server" value = "utf8_general_ci" } 531 parameter { name = "event_scheduler" value = "ON" } 532 parameter { name = "innodb_buffer_pool_dump_at_shutdown" value = 1 } 533 parameter { name = "innodb_file_format" value = "Barracuda" } 534 parameter { name = "innodb_flush_log_at_trx_commit" value = 0 } 535 parameter { name = "innodb_io_capacity" value = 2000 } 536 parameter { name = "innodb_io_capacity_max" value = 3000 } 537 parameter { name = "innodb_lock_wait_timeout" value = 120 } 538 parameter { name = "innodb_max_dirty_pages_pct" value = 90 } 539 parameter { name = "innodb_open_files" value = 4000 apply_method = "pending-reboot" } 540 parameter { name = "innodb_read_io_threads" value = 64 apply_method = "pending-reboot" } 541 parameter { name = "innodb_thread_concurrency" value = 0 } 542 parameter { name = "innodb_write_io_threads" value = 64 apply_method = "pending-reboot" } 543 parameter { name = "join_buffer_size" value = 16777216 } 544 parameter { name = "key_buffer_size" value = 67108864 } 545 parameter { name = "log_bin_trust_function_creators" value = 1 } 546 parameter { name = "log_warnings" value = 2 } 547 parameter { name = "log_output" value = "FILE" } 548 parameter { name = "max_allowed_packet" value = 1073741824 } 549 parameter { name = "max_connect_errors" value = 100 } 550 parameter { name = "max_connections" value = 3200 } 551 parameter { name = "max_heap_table_size" value = 67108864 } 552 parameter { name = "performance_schema" value = 1 apply_method = "pending-reboot" } 553 parameter { name = "performance_schema_users_size" value = 1048576 apply_method = "pending-reboot" } 554 parameter { name = "query_cache_limit" value = 2097152 } 555 parameter { name = "query_cache_min_res_unit" value = 512 } 556 parameter { name = "query_cache_size" value = 67108864 } 557 parameter { name = "slow_query_log" value = 1 } 558 parameter { name = "sort_buffer_size" value = 16777216 } 559 parameter { name = "sync_binlog" value = 0 } 560 parameter { name = "table_open_cache" value = 4096 } 561 parameter { name = "tmp_table_size" value = 67108864 } 562 parameter { name = "tx_isolation" value = "REPEATABLE-READ" } 563 }`, n) 564 } 565 566 func updateAwsDbParameterGroupsExceedDefaultAwsLimit(n string) string { 567 return fmt.Sprintf(` 568 resource "aws_db_parameter_group" "large" { 569 name = "%s" 570 family = "mysql5.6" 571 description = "Updated RDS default parameter group: Exceed default AWS parameter group limit of twenty" 572 parameter { name = "binlog_cache_size" value = 131072 } 573 parameter { name = "character_set_client" value = "utf8" } 574 parameter { name = "character_set_connection" value = "utf8" } 575 parameter { name = "character_set_database" value = "utf8" } 576 parameter { name = "character_set_filesystem" value = "utf8" } 577 parameter { name = "character_set_results" value = "utf8" } 578 parameter { name = "character_set_server" value = "utf8" } 579 parameter { name = "collation_connection" value = "utf8_general_ci" } 580 parameter { name = "collation_server" value = "utf8_general_ci" } 581 parameter { name = "event_scheduler" value = "ON" } 582 parameter { name = "innodb_buffer_pool_dump_at_shutdown" value = 1 } 583 parameter { name = "innodb_file_format" value = "Barracuda" } 584 parameter { name = "innodb_flush_log_at_trx_commit" value = 0 } 585 parameter { name = "innodb_io_capacity" value = 2000 } 586 parameter { name = "innodb_io_capacity_max" value = 3000 } 587 parameter { name = "innodb_lock_wait_timeout" value = 120 } 588 parameter { name = "innodb_max_dirty_pages_pct" value = 90 } 589 parameter { name = "innodb_open_files" value = 4000 apply_method = "pending-reboot" } 590 parameter { name = "innodb_read_io_threads" value = 64 apply_method = "pending-reboot" } 591 parameter { name = "innodb_thread_concurrency" value = 0 } 592 parameter { name = "innodb_write_io_threads" value = 64 apply_method = "pending-reboot" } 593 parameter { name = "join_buffer_size" value = 16777216 } 594 parameter { name = "key_buffer_size" value = 67108864 } 595 parameter { name = "log_bin_trust_function_creators" value = 1 } 596 parameter { name = "log_warnings" value = 2 } 597 parameter { name = "log_output" value = "FILE" } 598 parameter { name = "max_allowed_packet" value = 1073741824 } 599 parameter { name = "max_connect_errors" value = 100 } 600 parameter { name = "max_connections" value = 3200 } 601 parameter { name = "max_heap_table_size" value = 67108864 } 602 parameter { name = "performance_schema" value = 1 apply_method = "pending-reboot" } 603 parameter { name = "performance_schema_users_size" value = 1048576 apply_method = "pending-reboot" } 604 parameter { name = "query_cache_limit" value = 2097152 } 605 parameter { name = "query_cache_min_res_unit" value = 512 } 606 parameter { name = "query_cache_size" value = 67108864 } 607 parameter { name = "slow_query_log" value = 1 } 608 parameter { name = "sort_buffer_size" value = 16777216 } 609 parameter { name = "sync_binlog" value = 0 } 610 parameter { name = "table_open_cache" value = 4096 } 611 parameter { name = "tmp_table_size" value = 67108864 } 612 parameter { name = "tx_isolation" value = "REPEATABLE-READ" } 613 }`, n) 614 }