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 }