public async Task <IEnumerable <AzureEmailQueueMessage> > ReceiveAsync(int number, CancellationToken cancellationToken) { _logger.LogTrace("Receiving {0} message(s)", number); if (!_initialized) { await InitializeAsync(cancellationToken); } if (number > MaxMessagesToRetrieve) { throw new ArgumentOutOfRangeException(nameof(number), $"The {GetType().Name} implementation of `IEmailQueueReceiver<TMessage>` can only dequeue up to {MaxMessagesToRetrieve} message(s) at a time"); } if (number < 1) { throw new ArgumentOutOfRangeException(nameof(number), $"The parameter `number` of `IEmailQueueReceiver` must be a positive integer greater than or equal to one, as you can't retrieve zero messages or less"); } var tokens = new List <AzureEmailQueueMessage>(); foreach (var message in await _queue.Value.GetMessagesAsync(number, null, null, null, cancellationToken)) { tokens.Add(new AzureEmailQueueMessage { Token = EmailQueueToken.DecodeBytes(message.AsBytes), MessageId = message.Id, PopReceipt = message.PopReceipt, DequeueCount = message.DequeueCount }); } return(tokens); }
public Task SendAsync(EmailQueueToken token, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var message = new BasicEmailQueueMessage { Token = token, DequeueCount = 0 }; Queue.Enqueue(message); return(Task.FromResult(0)); }
public Task <EmailMessageParams> GetAsync(EmailQueueToken token, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); EmailMessageParams message; if (!Blobs.TryGetValue(token, out message)) { message = null; } return(Task.FromResult(message)); }
public async Task SendAsync(EmailQueueToken token, CancellationToken cancellationToken) { _logger.LogTrace("Sending new queue message {0}", token); if (!_initialized) { await InitializeAsync(cancellationToken); } var message = CloudQueueMessage.CreateCloudQueueMessageFromByteArray(token.EncodeBytes()); await _queue.Value.AddMessageAsync(message, null, null, null, null, cancellationToken); }
public void EncodeBytes_ShouldReturnByteArrayOfCorrectLength() { // arrange int expected = ExpectedByteLength; int actual; var token = EmailQueueToken.Create(Application1); // act actual = token.EncodeBytes().Length; // assert Assert.Equal(expected, actual); }
public Task MoveToPoisonStoreAsync(EmailQueueToken token, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); EmailMessageParams message; if (Blobs.TryGetValue(token, out message)) { Blobs.Remove(token); Poison[token] = message; } return(Task.FromResult(0)); }
public TableProcessorLogEntry( EmailQueueToken token, int retryCount, ProcessingStatus status, DateTime startUtc, DateTime endUtc, string errorMessage) : base(token.RequestId.ToString(), retryCount.ToString()) { ErrorMessage = errorMessage; ProcessStartedUtc = startUtc; ProcessFinishedUtc = endUtc; Status = status.ToString(); RetryCount = retryCount; }
public async Task ProcessMessage_Should_CompleteMessage_IfBlobNotFound() { // arrange var token = new CancellationToken(); var message = new TestMessage { Token = EmailQueueToken.Create(Guid.NewGuid()) }; EmailMessageParams nullBlob = null; _blobStore.Setup(b => b.GetAsync(message.Token, token)).ReturnsAsync(nullBlob); // act await _target.ProcessMessage(message, token); // assert _receiver.Verify(t => t.CompleteAsync(message, token), Times.Once()); }
public async Task ProcessMessage_ShouldNot_SendEmail_IfBlobNotFound() { // arrange var token = new CancellationToken(); var message = new TestMessage { Token = EmailQueueToken.Create(Guid.NewGuid()) }; EmailMessageParams nullBlob = null; _blobStore.Setup(b => b.GetAsync(message.Token, token)).ReturnsAsync(nullBlob); // act await _target.ProcessMessage(message, token); // assert _transport.Verify(t => t.SendAsync(It.IsAny <SenderParams>()), Times.Never()); }
public async Task ProcessMessage_ShouldNot_LogMessageSent_IfBlobNotFound() { // arrange var token = new CancellationToken(); var message = new TestMessage { Token = EmailQueueToken.Create(Guid.NewGuid()) }; EmailMessageParams nullBlob = null; _blobStore.Setup(b => b.GetAsync(message.Token, token)).ReturnsAsync(nullBlob); // act await _target.ProcessMessage(message, token); // assert _logWriter.Verify(t => t.TryLogSentMessageAsync( It.IsAny <EmailQueueToken>(), It.IsAny <SentEmailInfo>(), token), Times.Never()); }
public async Task ProcessMessage_Should_MoveMessageToPoisonQueue_IfMaxDequeueReached() { // arrange var token = new CancellationToken(); var message = new TestMessage { Token = EmailQueueToken.Create(Guid.NewGuid()), DequeueCount = 10 }; _transport.Setup(t => t.SendAsync(It.IsAny <SenderParams>())) .ThrowsAsync(new Exception("Could not send email")); _blobStore.Setup(b => b.GetAsync(message.Token, token)) .ReturnsAsync(new EmailMessageParams()); // act await _target.ProcessMessage(message, token); // assert _receiver.Verify(r => r.MoveToPoisonQueueAsync(message, token)); _blobStore.Verify(r => r.MoveToPoisonStoreAsync(message.Token, token)); }
public Task RemoveAsync(EmailQueueToken token, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); Blobs.Remove(token); return(Task.FromResult(0)); }