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  `