second first commit
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"floci-sdk-test-go/internal/testutil"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||
s3types "github.com/aws/aws-sdk-go-v2/service/s3/types"
|
||||
"github.com/aws/aws-sdk-go-v2/service/sns"
|
||||
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestS3Notifications(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
s3Svc := testutil.S3Client()
|
||||
sqsSvc := testutil.SQSClient()
|
||||
snsSvc := testutil.SNSClient()
|
||||
|
||||
queueName := "s3-notif-filter-queue"
|
||||
topicName := "s3-notif-filter-topic"
|
||||
bucketName := "s3-notif-filter-bucket"
|
||||
queueArn := "arn:aws:sqs:us-east-1:000000000000:" + queueName
|
||||
var topicArn string
|
||||
var queueURL string
|
||||
|
||||
t.Cleanup(func() {
|
||||
s3Svc.DeleteBucket(ctx, &s3.DeleteBucketInput{Bucket: aws.String(bucketName)})
|
||||
if queueURL != "" {
|
||||
sqsSvc.DeleteQueue(ctx, &sqs.DeleteQueueInput{QueueUrl: aws.String(queueURL)})
|
||||
}
|
||||
if topicArn != "" {
|
||||
snsSvc.DeleteTopic(ctx, &sns.DeleteTopicInput{TopicArn: aws.String(topicArn)})
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Setup", func(t *testing.T) {
|
||||
// Create SQS queue
|
||||
qr, err := sqsSvc.CreateQueue(ctx, &sqs.CreateQueueInput{QueueName: aws.String(queueName)})
|
||||
require.NoError(t, err)
|
||||
queueURL = aws.ToString(qr.QueueUrl)
|
||||
|
||||
// Create SNS topic
|
||||
tr, err := snsSvc.CreateTopic(ctx, &sns.CreateTopicInput{Name: aws.String(topicName)})
|
||||
require.NoError(t, err)
|
||||
topicArn = aws.ToString(tr.TopicArn)
|
||||
|
||||
// Create S3 bucket
|
||||
_, err = s3Svc.CreateBucket(ctx, &s3.CreateBucketInput{Bucket: aws.String(bucketName)})
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("PutBucketNotificationConfiguration", func(t *testing.T) {
|
||||
_, err := s3Svc.PutBucketNotificationConfiguration(ctx, &s3.PutBucketNotificationConfigurationInput{
|
||||
Bucket: aws.String(bucketName),
|
||||
NotificationConfiguration: &s3types.NotificationConfiguration{
|
||||
QueueConfigurations: []s3types.QueueConfiguration{
|
||||
{
|
||||
Id: aws.String("sqs-filtered"),
|
||||
QueueArn: aws.String(queueArn),
|
||||
Events: []s3types.Event{s3types.EventS3ObjectCreated},
|
||||
Filter: &s3types.NotificationConfigurationFilter{
|
||||
Key: &s3types.S3KeyFilter{
|
||||
FilterRules: []s3types.FilterRule{
|
||||
{Name: s3types.FilterRuleNamePrefix, Value: aws.String("incoming/")},
|
||||
{Name: s3types.FilterRuleNameSuffix, Value: aws.String(".csv")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
TopicConfigurations: []s3types.TopicConfiguration{
|
||||
{
|
||||
Id: aws.String("sns-filtered"),
|
||||
TopicArn: aws.String(topicArn),
|
||||
Events: []s3types.Event{s3types.EventS3ObjectRemoved},
|
||||
Filter: &s3types.NotificationConfigurationFilter{
|
||||
Key: &s3types.S3KeyFilter{
|
||||
FilterRules: []s3types.FilterRule{
|
||||
{Name: s3types.FilterRuleNamePrefix, Value: aws.String("")},
|
||||
{Name: s3types.FilterRuleNameSuffix, Value: aws.String(".txt")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("GetBucketNotificationConfiguration", func(t *testing.T) {
|
||||
r, err := s3Svc.GetBucketNotificationConfiguration(ctx, &s3.GetBucketNotificationConfigurationInput{
|
||||
Bucket: aws.String(bucketName),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Assert queue config
|
||||
require.NotEmpty(t, r.QueueConfigurations)
|
||||
assert.Equal(t, queueArn, aws.ToString(r.QueueConfigurations[0].QueueArn))
|
||||
require.NotNil(t, r.QueueConfigurations[0].Filter)
|
||||
require.NotNil(t, r.QueueConfigurations[0].Filter.Key)
|
||||
assert.Len(t, r.QueueConfigurations[0].Filter.Key.FilterRules, 2)
|
||||
|
||||
// Assert topic config
|
||||
require.NotEmpty(t, r.TopicConfigurations)
|
||||
assert.Equal(t, topicArn, aws.ToString(r.TopicConfigurations[0].TopicArn))
|
||||
require.NotNil(t, r.TopicConfigurations[0].Filter)
|
||||
require.NotNil(t, r.TopicConfigurations[0].Filter.Key)
|
||||
assert.Len(t, r.TopicConfigurations[0].Filter.Key.FilterRules, 2)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user