github.com/jdextraze/terraform@v0.6.17-0.20160511153921-e33847c8a8af/builtin/providers/aws/resource_aws_db_option_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 TestAccAWSDBOptionGroup_basic(t *testing.T) {
    15  	var v rds.OptionGroup
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckAWSDBOptionGroupDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: testAccAWSDBOptionGroupBasicConfig,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v),
    26  					testAccCheckAWSDBOptionGroupAttributes(&v),
    27  					resource.TestCheckResourceAttr(
    28  						"aws_db_option_group.bar", "name", "option-group-test-terraform"),
    29  				),
    30  			},
    31  		},
    32  	})
    33  }
    34  
    35  func TestAccAWSDBOptionGroup_sqlServerOptionsUpdate(t *testing.T) {
    36  	var v rds.OptionGroup
    37  
    38  	resource.Test(t, resource.TestCase{
    39  		PreCheck:     func() { testAccPreCheck(t) },
    40  		Providers:    testAccProviders,
    41  		CheckDestroy: testAccCheckAWSDBOptionGroupDestroy,
    42  		Steps: []resource.TestStep{
    43  			resource.TestStep{
    44  				Config: testAccAWSDBOptionGroupSqlServerEEOptions,
    45  				Check: resource.ComposeTestCheckFunc(
    46  					testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v),
    47  					resource.TestCheckResourceAttr(
    48  						"aws_db_option_group.bar", "name", "option-group-test-terraform"),
    49  				),
    50  			},
    51  
    52  			resource.TestStep{
    53  				Config: testAccAWSDBOptionGroupSqlServerEEOptions_update,
    54  				Check: resource.ComposeTestCheckFunc(
    55  					testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v),
    56  					resource.TestCheckResourceAttr(
    57  						"aws_db_option_group.bar", "name", "option-group-test-terraform"),
    58  					resource.TestCheckResourceAttr(
    59  						"aws_db_option_group.bar", "option.#", "1"),
    60  				),
    61  			},
    62  		},
    63  	})
    64  }
    65  
    66  func TestAccAWSDBOptionGroup_multipleOptions(t *testing.T) {
    67  	var v rds.OptionGroup
    68  
    69  	resource.Test(t, resource.TestCase{
    70  		PreCheck:     func() { testAccPreCheck(t) },
    71  		Providers:    testAccProviders,
    72  		CheckDestroy: testAccCheckAWSDBOptionGroupDestroy,
    73  		Steps: []resource.TestStep{
    74  			resource.TestStep{
    75  				Config: testAccAWSDBOptionGroupMultipleOptions,
    76  				Check: resource.ComposeTestCheckFunc(
    77  					testAccCheckAWSDBOptionGroupExists("aws_db_option_group.bar", &v),
    78  					resource.TestCheckResourceAttr(
    79  						"aws_db_option_group.bar", "name", "option-group-test-terraform"),
    80  					resource.TestCheckResourceAttr(
    81  						"aws_db_option_group.bar", "option.#", "2"),
    82  				),
    83  			},
    84  		},
    85  	})
    86  }
    87  
    88  func testAccCheckAWSDBOptionGroupAttributes(v *rds.OptionGroup) resource.TestCheckFunc {
    89  	return func(s *terraform.State) error {
    90  
    91  		if *v.EngineName != "mysql" {
    92  			return fmt.Errorf("bad engine_name: %#v", *v.EngineName)
    93  		}
    94  
    95  		if *v.MajorEngineVersion != "5.6" {
    96  			return fmt.Errorf("bad major_engine_version: %#v", *v.MajorEngineVersion)
    97  		}
    98  
    99  		if *v.OptionGroupDescription != "Test option group for terraform" {
   100  			return fmt.Errorf("bad option_group_description: %#v", *v.OptionGroupDescription)
   101  		}
   102  
   103  		return nil
   104  	}
   105  }
   106  
   107  func TestResourceAWSDBOptionGroupName_validation(t *testing.T) {
   108  	cases := []struct {
   109  		Value    string
   110  		ErrCount int
   111  	}{
   112  		{
   113  			Value:    "testing123!",
   114  			ErrCount: 1,
   115  		},
   116  		{
   117  			Value:    "1testing123",
   118  			ErrCount: 1,
   119  		},
   120  		{
   121  			Value:    "testing--123",
   122  			ErrCount: 1,
   123  		},
   124  		{
   125  			Value:    "testing123-",
   126  			ErrCount: 1,
   127  		},
   128  		{
   129  			Value:    randomString(256),
   130  			ErrCount: 1,
   131  		},
   132  	}
   133  
   134  	for _, tc := range cases {
   135  		_, errors := validateDbOptionGroupName(tc.Value, "aws_db_option_group_name")
   136  
   137  		if len(errors) != tc.ErrCount {
   138  			t.Fatalf("Expected the DB Option Group Name to trigger a validation error")
   139  		}
   140  	}
   141  }
   142  
   143  func testAccCheckAWSDBOptionGroupExists(n string, v *rds.OptionGroup) resource.TestCheckFunc {
   144  	return func(s *terraform.State) error {
   145  		rs, ok := s.RootModule().Resources[n]
   146  		if !ok {
   147  			return fmt.Errorf("Not found: %s", n)
   148  		}
   149  
   150  		if rs.Primary.ID == "" {
   151  			return fmt.Errorf("No DB Option Group Name is set")
   152  		}
   153  
   154  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
   155  
   156  		opts := rds.DescribeOptionGroupsInput{
   157  			OptionGroupName: aws.String(rs.Primary.ID),
   158  		}
   159  
   160  		resp, err := conn.DescribeOptionGroups(&opts)
   161  
   162  		if err != nil {
   163  			return err
   164  		}
   165  
   166  		if len(resp.OptionGroupsList) != 1 ||
   167  			*resp.OptionGroupsList[0].OptionGroupName != rs.Primary.ID {
   168  			return fmt.Errorf("DB Option Group not found")
   169  		}
   170  
   171  		*v = *resp.OptionGroupsList[0]
   172  
   173  		return nil
   174  	}
   175  }
   176  
   177  func testAccCheckAWSDBOptionGroupDestroy(s *terraform.State) error {
   178  	conn := testAccProvider.Meta().(*AWSClient).rdsconn
   179  
   180  	for _, rs := range s.RootModule().Resources {
   181  		if rs.Type != "aws_db_option_group" {
   182  			continue
   183  		}
   184  
   185  		resp, err := conn.DescribeOptionGroups(
   186  			&rds.DescribeOptionGroupsInput{
   187  				OptionGroupName: aws.String(rs.Primary.ID),
   188  			})
   189  
   190  		if err == nil {
   191  			if len(resp.OptionGroupsList) != 0 &&
   192  				*resp.OptionGroupsList[0].OptionGroupName == rs.Primary.ID {
   193  				return fmt.Errorf("DB Option Group still exists")
   194  			}
   195  		}
   196  
   197  		// Verify the error
   198  		newerr, ok := err.(awserr.Error)
   199  		if !ok {
   200  			return err
   201  		}
   202  		if newerr.Code() != "OptionGroupNotFoundFault" {
   203  			return err
   204  		}
   205  	}
   206  
   207  	return nil
   208  }
   209  
   210  const testAccAWSDBOptionGroupBasicConfig = `
   211  resource "aws_db_option_group" "bar" {
   212    name                     = "option-group-test-terraform"
   213    option_group_description = "Test option group for terraform"
   214    engine_name              = "mysql"
   215    major_engine_version     = "5.6"
   216  }
   217  `
   218  
   219  const testAccAWSDBOptionGroupSqlServerEEOptions = `
   220  resource "aws_db_option_group" "bar" {
   221    name                     = "option-group-test-terraform"
   222    option_group_description = "Test option group for terraform"
   223    engine_name              = "sqlserver-ee"
   224    major_engine_version     = "11.00"
   225  }
   226  `
   227  
   228  const testAccAWSDBOptionGroupSqlServerEEOptions_update = `
   229  resource "aws_db_option_group" "bar" {
   230    name                     = "option-group-test-terraform"
   231    option_group_description = "Test option group for terraform"
   232    engine_name              = "sqlserver-ee"
   233    major_engine_version     = "11.00"
   234  
   235    option {
   236      option_name = "Mirroring"
   237    }
   238  }
   239  `
   240  
   241  const testAccAWSDBOptionGroupMultipleOptions = `
   242  resource "aws_db_option_group" "bar" {
   243    name                     = "option-group-test-terraform"
   244    option_group_description = "Test option group for terraform"
   245    engine_name              = "oracle-se"
   246    major_engine_version     = "11.2"
   247  
   248    option {
   249      option_name = "STATSPACK"
   250    }
   251  
   252    option {
   253      option_name = "XMLDB"
   254    }
   255  }
   256  `