github.com/darmach/terratest@v0.34.8-0.20210517103231-80931f95e3ff/modules/aws/sqs_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/aws/aws-sdk-go/aws"
     9  	"github.com/aws/aws-sdk-go/service/sqs"
    10  	"github.com/gruntwork-io/terratest/modules/random"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestSqsQueueMethods(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	region := GetRandomStableRegion(t, nil, nil)
    18  	uniqueID := random.UniqueId()
    19  	namePrefix := fmt.Sprintf("sqs-queue-test-%s", uniqueID)
    20  
    21  	url := CreateRandomQueue(t, region, namePrefix)
    22  	defer deleteQueue(t, region, url)
    23  
    24  	assert.True(t, queueExists(t, region, url))
    25  
    26  	message := fmt.Sprintf("test-message-%s", uniqueID)
    27  	timeoutSec := 20
    28  
    29  	SendMessageToQueue(t, region, url, message)
    30  
    31  	firstResponse := WaitForQueueMessage(t, region, url, timeoutSec)
    32  	assert.NoError(t, firstResponse.Error)
    33  	assert.Equal(t, message, firstResponse.MessageBody)
    34  
    35  	DeleteMessageFromQueue(t, region, url, firstResponse.ReceiptHandle)
    36  
    37  	secondResponse := WaitForQueueMessage(t, region, url, timeoutSec)
    38  	assert.Error(t, secondResponse.Error, ReceiveMessageTimeout{QueueUrl: url, TimeoutSec: timeoutSec})
    39  }
    40  
    41  func TestFifoSqsQueueMethods(t *testing.T) {
    42  	t.Parallel()
    43  
    44  	region := GetRandomStableRegion(t, nil, nil)
    45  	uniqueID := random.UniqueId()
    46  	namePrefix := fmt.Sprintf("sqs-queue-test-%s", uniqueID)
    47  	fifoMessageGroupID := "g1"
    48  
    49  	url := CreateRandomFifoQueue(t, region, namePrefix)
    50  	defer deleteQueue(t, region, url)
    51  
    52  	assert.True(t, queueExists(t, region, url))
    53  
    54  	message := fmt.Sprintf("test-message-%s", uniqueID)
    55  	timeoutSec := 20
    56  
    57  	SendMessageFifoToQueue(t, region, url, message, fifoMessageGroupID)
    58  
    59  	firstResponse := WaitForQueueMessage(t, region, url, timeoutSec)
    60  	assert.NoError(t, firstResponse.Error)
    61  	assert.Equal(t, message, firstResponse.MessageBody)
    62  
    63  	DeleteMessageFromQueue(t, region, url, firstResponse.ReceiptHandle)
    64  
    65  	secondResponse := WaitForQueueMessage(t, region, url, timeoutSec)
    66  	assert.Error(t, secondResponse.Error, ReceiveMessageTimeout{QueueUrl: url, TimeoutSec: timeoutSec})
    67  }
    68  
    69  func queueExists(t *testing.T, region string, url string) bool {
    70  	sqsClient := NewSqsClient(t, region)
    71  
    72  	input := sqs.GetQueueAttributesInput{QueueUrl: aws.String(url)}
    73  
    74  	if _, err := sqsClient.GetQueueAttributes(&input); err != nil {
    75  		if strings.Contains(err.Error(), "NonExistentQueue") {
    76  			return false
    77  		}
    78  		t.Fatal(err)
    79  	}
    80  
    81  	return true
    82  }
    83  
    84  func deleteQueue(t *testing.T, region string, url string) {
    85  	DeleteQueue(t, region, url)
    86  	assert.False(t, queueExists(t, region, url))
    87  }