github.com/etecs-ru/gnomock@v0.13.2/preset/localstack/preset_test.go (about) 1 package localstack_test 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "testing" 8 9 "github.com/aws/aws-sdk-go/aws" 10 "github.com/aws/aws-sdk-go/aws/credentials" 11 "github.com/aws/aws-sdk-go/aws/session" 12 "github.com/aws/aws-sdk-go/service/s3" 13 "github.com/aws/aws-sdk-go/service/sns" 14 "github.com/aws/aws-sdk-go/service/sqs" 15 "github.com/etecs-ru/gnomock" 16 "github.com/etecs-ru/gnomock/preset/localstack" 17 "github.com/stretchr/testify/require" 18 ) 19 20 func TestPreset_s3(t *testing.T) { 21 t.Parallel() 22 23 p := localstack.Preset( 24 localstack.WithServices(localstack.S3), 25 ) 26 c, err := gnomock.Start(p) 27 28 defer func() { require.NoError(t, gnomock.Stop(c)) }() 29 30 require.NoError(t, err) 31 32 s3Endpoint := fmt.Sprintf("http://%s/", c.Address(localstack.APIPort)) 33 config := &aws.Config{ 34 Region: aws.String("us-east-1"), 35 Endpoint: aws.String(s3Endpoint), 36 S3ForcePathStyle: aws.Bool(true), 37 Credentials: credentials.NewStaticCredentials("a", "b", "c"), 38 } 39 sess, err := session.NewSession(config) 40 require.NoError(t, err) 41 42 svc := s3.New(sess) 43 44 _, err = svc.CreateBucket(&s3.CreateBucketInput{ 45 Bucket: aws.String("foo"), 46 }) 47 require.NoError(t, err) 48 49 out, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{ 50 Bucket: aws.String("foo"), 51 }) 52 require.NoError(t, err) 53 require.Empty(t, out.Contents) 54 55 _, err = svc.PutObject(&s3.PutObjectInput{ 56 Body: bytes.NewReader([]byte("this is a file")), 57 Key: aws.String("file"), 58 Bucket: aws.String("foo"), 59 }) 60 require.NoError(t, err) 61 62 out, err = svc.ListObjectsV2(&s3.ListObjectsV2Input{ 63 Bucket: aws.String("foo"), 64 }) 65 require.NoError(t, err) 66 require.Equal(t, 1, len(out.Contents)) 67 } 68 69 func TestPreset_wrongS3Path(t *testing.T) { 70 t.Parallel() 71 72 p := localstack.Preset( 73 localstack.WithServices(localstack.S3), 74 localstack.WithS3Files("./invalid"), 75 ) 76 c, err := gnomock.Start(p) 77 require.Error(t, err) 78 require.Contains(t, err.Error(), "can't read s3 initial files") 79 require.NoError(t, gnomock.Stop(c)) 80 } 81 82 func TestPreset_sqs_sns(t *testing.T) { 83 t.Parallel() 84 85 p := localstack.Preset( 86 localstack.WithServices(localstack.SNS, localstack.SQS), 87 localstack.WithVersion("0.11.0"), 88 ) 89 c, err := gnomock.Start(p) 90 91 defer func() { require.NoError(t, gnomock.Stop(c)) }() 92 93 require.NoError(t, err) 94 95 endpoint := fmt.Sprintf("http://%s", c.Address(localstack.APIPort)) 96 97 sess, err := session.NewSession(&aws.Config{ 98 Region: aws.String("us-east-1"), 99 Endpoint: aws.String(endpoint), 100 Credentials: credentials.NewStaticCredentials("a", "b", "c"), 101 }) 102 require.NoError(t, err) 103 104 sqsService := sqs.New(sess) 105 snsService := sns.New(sess) 106 107 _, err = sqsService.CreateQueue(&sqs.CreateQueueInput{ 108 QueueName: aws.String("my_queue"), 109 }) 110 require.NoError(t, err) 111 112 _, err = snsService.CreateTopic(&sns.CreateTopicInput{ 113 Name: aws.String("my_topic"), 114 }) 115 require.NoError(t, err) 116 117 queues, err := sqsService.ListQueues(&sqs.ListQueuesInput{}) 118 require.NoError(t, err) 119 require.Equal(t, 1, len(queues.QueueUrls)) 120 121 queueURL := queues.QueueUrls[0] 122 123 topics, err := snsService.ListTopics(&sns.ListTopicsInput{}) 124 require.NoError(t, err) 125 require.Equal(t, 1, len(topics.Topics)) 126 127 topic := topics.Topics[0] 128 129 _, err = snsService.Subscribe(&sns.SubscribeInput{ 130 Protocol: aws.String("sqs"), 131 Endpoint: queueURL, 132 TopicArn: topic.TopicArn, 133 }) 134 require.NoError(t, err) 135 136 _, err = snsService.Publish(&sns.PublishInput{ 137 TopicArn: topic.TopicArn, 138 Message: aws.String("foobar"), 139 }) 140 require.NoError(t, err) 141 142 messages, err := sqsService.ReceiveMessage(&sqs.ReceiveMessageInput{ 143 QueueUrl: queueURL, 144 }) 145 require.NoError(t, err) 146 require.Equal(t, 1, len(messages.Messages)) 147 148 var msg map[string]string 149 150 err = json.Unmarshal([]byte(*messages.Messages[0].Body), &msg) 151 require.NoError(t, err) 152 require.Equal(t, "foobar", msg["Message"]) 153 }