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  `