github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ssm_parameter_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/service/ssm"
     9  	"github.com/hashicorp/terraform/helper/acctest"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSSSMParameter_basic(t *testing.T) {
    15  	name := acctest.RandString(10)
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckAWSSSMParameterDestroy,
    20  		Steps: []resource.TestStep{
    21  			{
    22  				Config: testAccAWSSSMParameterBasicConfig(name, "bar"),
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckAWSSSMParameterHasValue("aws_ssm_parameter.foo", "bar"),
    25  					testAccCheckAWSSSMParameterType("aws_ssm_parameter.foo", "String"),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func TestAccAWSSSMParameter_update(t *testing.T) {
    33  	name := acctest.RandString(10)
    34  	resource.Test(t, resource.TestCase{
    35  		PreCheck:     func() { testAccPreCheck(t) },
    36  		Providers:    testAccProviders,
    37  		CheckDestroy: testAccCheckAWSSSMParameterDestroy,
    38  		Steps: []resource.TestStep{
    39  			{
    40  				Config: testAccAWSSSMParameterBasicConfig(name, "bar"),
    41  			},
    42  			{
    43  				Config: testAccAWSSSMParameterBasicConfig(name, "baz"),
    44  				Check: resource.ComposeTestCheckFunc(
    45  					testAccCheckAWSSSMParameterHasValue("aws_ssm_parameter.foo", "baz"),
    46  					testAccCheckAWSSSMParameterType("aws_ssm_parameter.foo", "String"),
    47  				),
    48  			},
    49  		},
    50  	})
    51  }
    52  
    53  func TestAccAWSSSMParameter_secure(t *testing.T) {
    54  	name := acctest.RandString(10)
    55  	resource.Test(t, resource.TestCase{
    56  		PreCheck:     func() { testAccPreCheck(t) },
    57  		Providers:    testAccProviders,
    58  		CheckDestroy: testAccCheckAWSSSMParameterDestroy,
    59  		Steps: []resource.TestStep{
    60  			{
    61  				Config: testAccAWSSSMParameterSecureConfig(name, "secret"),
    62  				Check: resource.ComposeTestCheckFunc(
    63  					testAccCheckAWSSSMParameterHasValue("aws_ssm_parameter.secret_foo", "secret"),
    64  					testAccCheckAWSSSMParameterType("aws_ssm_parameter.secret_foo", "SecureString"),
    65  				),
    66  			},
    67  		},
    68  	})
    69  }
    70  
    71  func TestAccAWSSSMParameter_secure_with_key(t *testing.T) {
    72  	name := acctest.RandString(10)
    73  	resource.Test(t, resource.TestCase{
    74  		PreCheck:     func() { testAccPreCheck(t) },
    75  		Providers:    testAccProviders,
    76  		CheckDestroy: testAccCheckAWSSSMParameterDestroy,
    77  		Steps: []resource.TestStep{
    78  			{
    79  				Config: testAccAWSSSMParameterSecureConfigWithKey(name, "secret"),
    80  				Check: resource.ComposeTestCheckFunc(
    81  					testAccCheckAWSSSMParameterHasValue("aws_ssm_parameter.secret_foo", "secret"),
    82  					testAccCheckAWSSSMParameterType("aws_ssm_parameter.secret_foo", "SecureString"),
    83  				),
    84  			},
    85  		},
    86  	})
    87  }
    88  
    89  func testAccCheckAWSSSMGetParameter(s *terraform.State, n string) ([]*ssm.Parameter, error) {
    90  	rs, ok := s.RootModule().Resources[n]
    91  	if !ok {
    92  		return []*ssm.Parameter{}, fmt.Errorf("Not found: %s", n)
    93  	}
    94  
    95  	if rs.Primary.ID == "" {
    96  		return []*ssm.Parameter{}, fmt.Errorf("No SSM Parameter ID is set")
    97  	}
    98  
    99  	conn := testAccProvider.Meta().(*AWSClient).ssmconn
   100  
   101  	paramInput := &ssm.GetParametersInput{
   102  		Names: []*string{
   103  			aws.String(rs.Primary.Attributes["name"]),
   104  		},
   105  		WithDecryption: aws.Bool(true),
   106  	}
   107  
   108  	resp, _ := conn.GetParameters(paramInput)
   109  
   110  	if len(resp.Parameters) == 0 {
   111  		return resp.Parameters, fmt.Errorf("Expected AWS SSM Parameter to be created, but wasn't found")
   112  	}
   113  	return resp.Parameters, nil
   114  }
   115  
   116  func testAccCheckAWSSSMParameterHasValue(n string, v string) resource.TestCheckFunc {
   117  	return func(s *terraform.State) error {
   118  		parameters, err := testAccCheckAWSSSMGetParameter(s, n)
   119  		if err != nil {
   120  			return err
   121  		}
   122  
   123  		parameterValue := parameters[0].Value
   124  
   125  		if *parameterValue != v {
   126  			return fmt.Errorf("Expected AWS SSM Parameter to have value %s but had %s", v, *parameterValue)
   127  		}
   128  
   129  		return nil
   130  	}
   131  }
   132  
   133  func testAccCheckAWSSSMParameterType(n string, v string) resource.TestCheckFunc {
   134  	return func(s *terraform.State) error {
   135  		parameters, err := testAccCheckAWSSSMGetParameter(s, n)
   136  		if err != nil {
   137  			return err
   138  		}
   139  
   140  		parameterValue := parameters[0].Type
   141  
   142  		if *parameterValue != v {
   143  			return fmt.Errorf("Expected AWS SSM Parameter to have type %s but had %s", v, *parameterValue)
   144  		}
   145  
   146  		return nil
   147  	}
   148  }
   149  
   150  func testAccCheckAWSSSMParameterDestroy(s *terraform.State) error {
   151  	conn := testAccProvider.Meta().(*AWSClient).ssmconn
   152  
   153  	for _, rs := range s.RootModule().Resources {
   154  		if rs.Type != "aws_ssm_parameter" {
   155  			continue
   156  		}
   157  
   158  		paramInput := &ssm.GetParametersInput{
   159  			Names: []*string{
   160  				aws.String(rs.Primary.Attributes["name"]),
   161  			},
   162  		}
   163  
   164  		resp, _ := conn.GetParameters(paramInput)
   165  
   166  		if len(resp.Parameters) > 0 {
   167  			return fmt.Errorf("Expected AWS SSM Parameter to be gone, but was still found")
   168  		}
   169  
   170  		return nil
   171  	}
   172  
   173  	return fmt.Errorf("Default error in SSM Parameter Test")
   174  }
   175  
   176  func testAccAWSSSMParameterBasicConfig(rName string, value string) string {
   177  	return fmt.Sprintf(`
   178  resource "aws_ssm_parameter" "foo" {
   179    name  = "test_parameter-%s"
   180    type  = "String"
   181    value = "%s"
   182  }
   183  `, rName, value)
   184  }
   185  
   186  func testAccAWSSSMParameterSecureConfig(rName string, value string) string {
   187  	return fmt.Sprintf(`
   188  resource "aws_ssm_parameter" "secret_foo" {
   189    name  = "test_secure_parameter-%s"
   190    type  = "SecureString"
   191    value = "%s"
   192  }
   193  `, rName, value)
   194  }
   195  
   196  func testAccAWSSSMParameterSecureConfigWithKey(rName string, value string) string {
   197  	return fmt.Sprintf(`
   198  resource "aws_ssm_parameter" "secret_foo" {
   199    name  = "test_secure_parameter-%s"
   200    type  = "SecureString"
   201    value = "%s"
   202  	key_id = "${aws_kms_key.test_key.id}"
   203  }
   204  
   205  resource "aws_kms_key" "test_key" {
   206    description             = "KMS key 1"
   207    deletion_window_in_days = 7
   208  }
   209  `, rName, value)
   210  }