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  `