github.com/hobbeswalsh/terraform@v0.3.7-0.20150619183303-ad17cf55a0fa/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  `