Exemple #1
0
        public async Task ShouldPublishMessagesWithIdsToSQS(
            SNSEvent snsEvent,
            SNSEvent.SNSRecord record1,
            SNSEvent.SNSRecord record2,
            Request request1,
            Request request2,
            [Frozen] IAmazonSQS sqs,
            [Frozen] ISnsRecordMapper mapper,
            [Target] Handler handler,
            CancellationToken cancellationToken
            )
        {
            snsEvent.Records = new List <SNSEvent.SNSRecord> {
                record1, record2
            };

            mapper.MapToRequest(Is(record1)).Returns(request1);
            mapper.MapToRequest(Is(record2)).Returns(request2);

            await handler.Handle(snsEvent, cancellationToken);

            await sqs.Received().SendMessageBatchAsync(Any <SendMessageBatchRequest>(), Is(cancellationToken));

            var request = TestUtils.GetArg <SendMessageBatchRequest>(sqs, nameof(IAmazonSQS.SendMessageBatchAsync), 0);

            request.Entries.Should().Contain(entry => entry.Id == request1.Id.ToString());
            request.Entries.Should().Contain(entry => entry.Id == request2.Id.ToString());
        }
Exemple #2
0
        public async Task <bool> Handle(SNSEvent @event, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var entries = from record in @event.Records
                          let mappedRequest = mapper.MapToRequest(record)
                                              let message = serializer.Serialize(mappedRequest)
                                                            select new SendMessageBatchRequestEntry
            {
                Id          = mappedRequest.Id.ToString(),
                MessageBody = message,
            };

            var request = new SendMessageBatchRequest
            {
                QueueUrl = options.QueueUrl.ToString(),
                Entries  = entries.ToList(),
            };

            logger.LogInformation("Sending sqs:SendMessageBatch with request: {@request}", request);
            var response = await sqs.SendMessageBatchAsync(request, cancellationToken);

            logger.LogInformation("Received sqs:SendMessageBatch response: {@response}", response);
            return(true);
        }