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