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  }