github.com/paulmey/terraform@v0.5.2-0.20150519145237-046e9b4c884d/builtin/providers/aws/resource_aws_sqs_queue_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/awslabs/aws-sdk-go/aws"
     8  	"github.com/awslabs/aws-sdk-go/service/sqs"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAWSSQSQueue(t *testing.T) {
    14  	resource.Test(t, resource.TestCase{
    15  		PreCheck:     func() { testAccPreCheck(t) },
    16  		Providers:    testAccProviders,
    17  		CheckDestroy: testAccCheckAWSSQSQueueDestroy,
    18  		Steps: []resource.TestStep{
    19  			resource.TestStep{
    20  				Config: testAccAWSSQSConfigWithDefaults,
    21  				Check: resource.ComposeTestCheckFunc(
    22  					testAccCheckAWSSQSExistsWithDefaults("aws_sqs_queue.queue-with-defaults"),
    23  				),
    24  			},
    25  			resource.TestStep{
    26  				Config: testAccAWSSQSConfigWithOverrides,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckAWSSQSExistsWithOverrides("aws_sqs_queue.queue-with-overrides"),
    29  				),
    30  			},
    31  		},
    32  	})
    33  }
    34  
    35  
    36  func testAccCheckAWSSQSQueueDestroy(s *terraform.State) error {
    37  	conn := testAccProvider.Meta().(*AWSClient).sqsconn
    38  
    39  	for _, rs := range s.RootModule().Resources {
    40  		if rs.Type != "aws_sqs_queue" {
    41  			continue
    42  		}
    43  
    44  		// Check if queue exists by checking for its attributes
    45  		params := &sqs.GetQueueAttributesInput{
    46  			QueueURL: aws.String(rs.Primary.ID),
    47  		}
    48  		_, err := conn.GetQueueAttributes(params)
    49  		if err == nil {
    50  			return fmt.Errorf("Queue %s still exists. Failing!", rs.Primary.ID)
    51  		}
    52  
    53  		// Verify the error is what we want
    54  		_, ok := err.(aws.APIError)
    55  		if !ok {
    56  			return err
    57  		}
    58  	}
    59  
    60  	return nil
    61  }
    62  
    63  
    64  func testAccCheckAWSSQSExistsWithDefaults(n string) resource.TestCheckFunc {
    65  	return func(s *terraform.State) error {
    66  		rs, ok := s.RootModule().Resources[n]
    67  		if !ok {
    68  			return fmt.Errorf("Not found: %s", n)
    69  		}
    70  
    71  		if rs.Primary.ID == "" {
    72  			return fmt.Errorf("No Queue URL specified!")
    73  		}
    74  
    75  		conn := testAccProvider.Meta().(*AWSClient).sqsconn
    76  
    77  		params := &sqs.GetQueueAttributesInput{
    78  			QueueURL: aws.String(rs.Primary.ID),
    79  			AttributeNames: []*string{aws.String("All")},
    80  		}
    81  		resp, err := conn.GetQueueAttributes(params)
    82  
    83  		if err != nil {
    84  			return err
    85  		}
    86  
    87  		// checking if attributes are defaults
    88  		for k, v := range *resp.Attributes {
    89  			if k == "VisibilityTimeout" && *v != "30" {
    90  				return fmt.Errorf("VisibilityTimeout (%s) was not set to 30", *v)
    91  			}
    92  
    93  			if k == "MessageRetentionPeriod" && *v != "345600" {
    94  				return fmt.Errorf("MessageRetentionPeriod (%s) was not set to 345600", *v)
    95  			}
    96  
    97  			if k == "MaximumMessageSize" && *v != "262144" {
    98  				return fmt.Errorf("MaximumMessageSize (%s) was not set to 262144", *v)
    99  			}
   100  
   101  			if k == "DelaySeconds" && *v != "0" {
   102  				return fmt.Errorf("DelaySeconds (%s) was not set to 0", *v)
   103  			}
   104  
   105  			if k == "ReceiveMessageWaitTimeSeconds" && *v != "0" {
   106  				return fmt.Errorf("ReceiveMessageWaitTimeSeconds (%s) was not set to 0", *v)
   107  			}
   108  		}
   109  
   110  		return nil
   111  	}
   112  }
   113  
   114  func testAccCheckAWSSQSExistsWithOverrides(n string) resource.TestCheckFunc {
   115  	return func(s *terraform.State) error {
   116  		rs, ok := s.RootModule().Resources[n]
   117  		if !ok {
   118  			return fmt.Errorf("Not found: %s", n)
   119  		}
   120  
   121  		if rs.Primary.ID == "" {
   122  			return fmt.Errorf("No Queue URL specified!")
   123  		}
   124  
   125  		conn := testAccProvider.Meta().(*AWSClient).sqsconn
   126  
   127  		params := &sqs.GetQueueAttributesInput{
   128  			QueueURL: aws.String(rs.Primary.ID),
   129  			AttributeNames: []*string{aws.String("All")},
   130  		}
   131  		resp, err := conn.GetQueueAttributes(params)
   132  
   133  		if err != nil {
   134  			return err
   135  		}
   136  
   137  		// checking if attributes match our overrides
   138  		for k, v := range *resp.Attributes {
   139  			if k == "VisibilityTimeout" && *v != "60" {
   140  				return fmt.Errorf("VisibilityTimeout (%s) was not set to 60", *v)
   141  			}
   142  
   143  			if k == "MessageRetentionPeriod" && *v != "86400" {
   144  				return fmt.Errorf("MessageRetentionPeriod (%s) was not set to 86400", *v)
   145  			}
   146  
   147  			if k == "MaximumMessageSize" && *v != "2048" {
   148  				return fmt.Errorf("MaximumMessageSize (%s) was not set to 2048", *v)
   149  			}
   150  
   151  			if k == "DelaySeconds" && *v != "90" {
   152  				return fmt.Errorf("DelaySeconds (%s) was not set to 90", *v)
   153  			}
   154  
   155  			if k == "ReceiveMessageWaitTimeSeconds" && *v != "10" {
   156  				return fmt.Errorf("ReceiveMessageWaitTimeSeconds (%s) was not set to 10", *v)
   157  			}
   158  		}
   159  
   160  		return nil
   161  	}
   162  }
   163  
   164  const testAccAWSSQSConfigWithDefaults = `
   165  resource "aws_sqs_queue" "queue-with-defaults" {
   166      name = "test-sqs-queue-with-defaults"
   167  }
   168  `
   169  
   170  const testAccAWSSQSConfigWithOverrides = `
   171  resource "aws_sqs_queue" "queue-with-overrides" {
   172  	name = "test-sqs-queue-with-overrides"
   173  	delay_seconds = 90
   174    	max_message_size = 2048
   175    	message_retention_seconds = 86400
   176    	receive_wait_time_seconds = 10
   177    	visibility_timeout_seconds = 60
   178  }
   179  `