github.com/grange74/terraform@v0.7.0-rc3.0.20160722171430-8c8803864753/builtin/providers/aws/resource_aws_sqs_queue_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/sqs" 10 "github.com/hashicorp/terraform/helper/acctest" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSSQSQueue_basic(t *testing.T) { 16 queueName := fmt.Sprintf("sqs-queue-%s", acctest.RandString(5)) 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSSQSQueueDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSSQSConfigWithDefaults(queueName), 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSSQSExistsWithDefaults("aws_sqs_queue.queue-with-defaults"), 26 ), 27 }, 28 resource.TestStep{ 29 Config: testAccAWSSQSConfigWithOverrides, 30 Check: resource.ComposeTestCheckFunc( 31 testAccCheckAWSSQSExistsWithOverrides("aws_sqs_queue.queue-with-overrides"), 32 ), 33 }, 34 }, 35 }) 36 } 37 38 func TestAccAWSSQSQueue_redrivePolicy(t *testing.T) { 39 resource.Test(t, resource.TestCase{ 40 PreCheck: func() { testAccPreCheck(t) }, 41 Providers: testAccProviders, 42 CheckDestroy: testAccCheckAWSSQSQueueDestroy, 43 Steps: []resource.TestStep{ 44 resource.TestStep{ 45 Config: testAccAWSSQSConfigWithRedrive(acctest.RandStringFromCharSet(5, acctest.CharSetAlpha)), 46 Check: resource.ComposeTestCheckFunc( 47 testAccCheckAWSSQSExistsWithDefaults("aws_sqs_queue.my_dead_letter_queue"), 48 ), 49 }, 50 }, 51 }) 52 } 53 54 // Tests formatting and compacting of Policy, Redrive json 55 func TestAccAWSSQSQueue_Policybasic(t *testing.T) { 56 resource.Test(t, resource.TestCase{ 57 PreCheck: func() { testAccPreCheck(t) }, 58 Providers: testAccProviders, 59 CheckDestroy: testAccCheckAWSSQSQueueDestroy, 60 Steps: []resource.TestStep{ 61 resource.TestStep{ 62 Config: testAccAWSSQSConfig_PolicyFormat, 63 Check: resource.ComposeTestCheckFunc( 64 testAccCheckAWSSQSExistsWithOverrides("aws_sqs_queue.test-email-events"), 65 ), 66 }, 67 }, 68 }) 69 } 70 71 func testAccCheckAWSSQSQueueDestroy(s *terraform.State) error { 72 conn := testAccProvider.Meta().(*AWSClient).sqsconn 73 74 for _, rs := range s.RootModule().Resources { 75 if rs.Type != "aws_sqs_queue" { 76 continue 77 } 78 79 // Check if queue exists by checking for its attributes 80 params := &sqs.GetQueueAttributesInput{ 81 QueueUrl: aws.String(rs.Primary.ID), 82 } 83 _, err := conn.GetQueueAttributes(params) 84 if err == nil { 85 return fmt.Errorf("Queue %s still exists. Failing!", rs.Primary.ID) 86 } 87 88 // Verify the error is what we want 89 _, ok := err.(awserr.Error) 90 if !ok { 91 return err 92 } 93 } 94 95 return nil 96 } 97 98 func testAccCheckAWSSQSExistsWithDefaults(n string) resource.TestCheckFunc { 99 return func(s *terraform.State) error { 100 rs, ok := s.RootModule().Resources[n] 101 if !ok { 102 return fmt.Errorf("Not found: %s", n) 103 } 104 105 if rs.Primary.ID == "" { 106 return fmt.Errorf("No Queue URL specified!") 107 } 108 109 conn := testAccProvider.Meta().(*AWSClient).sqsconn 110 111 params := &sqs.GetQueueAttributesInput{ 112 QueueUrl: aws.String(rs.Primary.ID), 113 AttributeNames: []*string{aws.String("All")}, 114 } 115 resp, err := conn.GetQueueAttributes(params) 116 117 if err != nil { 118 return err 119 } 120 121 // checking if attributes are defaults 122 for k, v := range resp.Attributes { 123 if k == "VisibilityTimeout" && *v != "30" { 124 return fmt.Errorf("VisibilityTimeout (%s) was not set to 30", *v) 125 } 126 127 if k == "MessageRetentionPeriod" && *v != "345600" { 128 return fmt.Errorf("MessageRetentionPeriod (%s) was not set to 345600", *v) 129 } 130 131 if k == "MaximumMessageSize" && *v != "262144" { 132 return fmt.Errorf("MaximumMessageSize (%s) was not set to 262144", *v) 133 } 134 135 if k == "DelaySeconds" && *v != "0" { 136 return fmt.Errorf("DelaySeconds (%s) was not set to 0", *v) 137 } 138 139 if k == "ReceiveMessageWaitTimeSeconds" && *v != "0" { 140 return fmt.Errorf("ReceiveMessageWaitTimeSeconds (%s) was not set to 0", *v) 141 } 142 } 143 144 return nil 145 } 146 } 147 148 func testAccCheckAWSSQSExistsWithOverrides(n string) resource.TestCheckFunc { 149 return func(s *terraform.State) error { 150 rs, ok := s.RootModule().Resources[n] 151 if !ok { 152 return fmt.Errorf("Not found: %s", n) 153 } 154 155 if rs.Primary.ID == "" { 156 return fmt.Errorf("No Queue URL specified!") 157 } 158 159 conn := testAccProvider.Meta().(*AWSClient).sqsconn 160 161 params := &sqs.GetQueueAttributesInput{ 162 QueueUrl: aws.String(rs.Primary.ID), 163 AttributeNames: []*string{aws.String("All")}, 164 } 165 resp, err := conn.GetQueueAttributes(params) 166 167 if err != nil { 168 return err 169 } 170 171 // checking if attributes match our overrides 172 for k, v := range resp.Attributes { 173 if k == "VisibilityTimeout" && *v != "60" { 174 return fmt.Errorf("VisibilityTimeout (%s) was not set to 60", *v) 175 } 176 177 if k == "MessageRetentionPeriod" && *v != "86400" { 178 return fmt.Errorf("MessageRetentionPeriod (%s) was not set to 86400", *v) 179 } 180 181 if k == "MaximumMessageSize" && *v != "2048" { 182 return fmt.Errorf("MaximumMessageSize (%s) was not set to 2048", *v) 183 } 184 185 if k == "DelaySeconds" && *v != "90" { 186 return fmt.Errorf("DelaySeconds (%s) was not set to 90", *v) 187 } 188 189 if k == "ReceiveMessageWaitTimeSeconds" && *v != "10" { 190 return fmt.Errorf("ReceiveMessageWaitTimeSeconds (%s) was not set to 10", *v) 191 } 192 } 193 194 return nil 195 } 196 } 197 198 func testAccAWSSQSConfigWithDefaults(r string) string { 199 return fmt.Sprintf(` 200 resource "aws_sqs_queue" "queue-with-defaults" { 201 name = "%s" 202 } 203 `, r) 204 } 205 206 const testAccAWSSQSConfigWithOverrides = ` 207 resource "aws_sqs_queue" "queue-with-overrides" { 208 name = "test-sqs-queue-with-overrides" 209 delay_seconds = 90 210 max_message_size = 2048 211 message_retention_seconds = 86400 212 receive_wait_time_seconds = 10 213 visibility_timeout_seconds = 60 214 } 215 ` 216 217 func testAccAWSSQSConfigWithRedrive(name string) string { 218 return fmt.Sprintf(` 219 resource "aws_sqs_queue" "my_queue" { 220 name = "tftestqueuq-%s" 221 delay_seconds = 0 222 visibility_timeout_seconds = 300 223 224 redrive_policy = <<EOF 225 { 226 "maxReceiveCount": 3, 227 "deadLetterTargetArn": "${aws_sqs_queue.my_dead_letter_queue.arn}" 228 } 229 EOF 230 } 231 232 resource "aws_sqs_queue" "my_dead_letter_queue" { 233 name = "tfotherqueuq-%s" 234 } 235 `, name, name) 236 } 237 238 const testAccAWSSQSConfig_PolicyFormat = ` 239 variable "sns_name" { 240 default = "tf-test-name-2" 241 } 242 243 variable "sqs_name" { 244 default = "tf-test-sqs-name-2" 245 } 246 247 resource "aws_sns_topic" "test_topic" { 248 name = "${var.sns_name}" 249 } 250 251 resource "aws_sqs_queue" "test-email-events" { 252 name = "${var.sqs_name}" 253 depends_on = ["aws_sns_topic.test_topic"] 254 delay_seconds = 90 255 max_message_size = 2048 256 message_retention_seconds = 86400 257 receive_wait_time_seconds = 10 258 visibility_timeout_seconds = 60 259 260 policy = <<EOF 261 { 262 "Version": "2012-10-17", 263 "Id": "sqspolicy", 264 "Statement": [ 265 { 266 "Sid": "Stmt1451501026839", 267 "Effect": "Allow", 268 "Principal": "*", 269 "Action": "sqs:SendMessage", 270 "Resource": "arn:aws:sqs:us-west-2:470663696735:${var.sqs_name}", 271 "Condition": { 272 "ArnEquals": { 273 "aws:SourceArn": "arn:aws:sns:us-west-2:470663696735:${var.sns_name}" 274 } 275 } 276 } 277 ] 278 } 279 EOF 280 } 281 282 resource "aws_sns_topic_subscription" "test_queue_target" { 283 topic_arn = "${aws_sns_topic.test_topic.arn}" 284 protocol = "sqs" 285 endpoint = "${aws_sqs_queue.test-email-events.arn}" 286 } 287 `