public async Task GivenNonCompletedSystemMessage_ShouldHaltProcessingUntilCompletion() { var mailboxHandler = new TestMailboxHandler(); var userMailbox = new UnboundedMailboxQueue(); var systemMessages = new UnboundedMailboxQueue(); var mailbox = new DefaultMailbox(systemMessages, userMailbox); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); var msg2 = new TestMessageWithTaskCompletionSource(); mailbox.PostSystemMessage(msg1); mailbox.PostSystemMessage(msg2); Assert.True(systemMessages.HasMessages, "Mailbox should not have processed msg2 because processing of msg1 is not completed." ); msg2.TaskCompletionSource.SetResult(0); msg1.TaskCompletionSource.SetResult(0); await Task.Delay(1000); Assert.False(systemMessages.HasMessages, "Mailbox should have processed msg2 because processing of msg1 is completed." ); }
public async Task GivenNonCompletedSystemMessageTaskThrewException_ShouldEscalateFailure() { var mailboxHandler = new TestMailboxHandler(); var mailbox = UnboundedMailbox.Create(); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); mailbox.PostSystemMessage(msg1); //make sure the message is being processed by the mailboxHandler //e.g. await mailboxHandler.GotMessage() await Task.Delay(10); //fail the current task being processed var taskException = new Exception(); msg1.TaskCompletionSource.SetException(taskException); await mailboxHandler.HasFailures; Assert.Single(mailboxHandler.EscalatedFailures); var e = Assert.IsType <Exception>(mailboxHandler.EscalatedFailures[0]); Assert.Equal(taskException, e); }
public void GivenCompletedUserMessage_ShouldInvokeMessageReceivedImmediately() { var msg1 = new TestMessageWithTaskCompletionSource(); msg1.TaskCompletionSource.SetResult(0); _mailbox.PostUserMessage(msg1); Assert.Contains(msg1, _mailboxStatistics.Posted); }
public async Task GivenSystemMessage_ShouldInvokeMessagePosted() { var msg1 = new TestMessageWithTaskCompletionSource(); _mailbox.PostSystemMessage(msg1); await Task.Delay(1000); Assert.Contains(msg1, _mailboxStatistics.Posted); }
public void GivenCompletedUserMessageThrewException_ShouldNotInvokeMessageReceived() { var msg1 = new TestMessageWithTaskCompletionSource(); msg1.TaskCompletionSource.SetException(new Exception()); _mailbox.PostUserMessage(msg1); Assert.DoesNotContain(msg1, _mailboxStatistics.Received); }
public async Task GivenNonCompletedSystemMessageThrewException_ShouldNotInvokeMessageReceived() { var msg1 = new TestMessageWithTaskCompletionSource(); _mailbox.PostSystemMessage(msg1); msg1.TaskCompletionSource.SetException(new Exception()); await Task.Delay(1000); Assert.DoesNotContain(msg1, _mailboxStatistics.Received); }
public async Task GivenNonCompletedUserMessage_ShouldInvokeMessageReceivedAfterCompletion() { var msg1 = new TestMessageWithTaskCompletionSource(); _mailbox.PostUserMessage(msg1); Assert.DoesNotContain(msg1, _mailboxStatistics.Received); msg1.TaskCompletionSource.SetResult(0); await Task.Delay(1000); Assert.Contains(msg1, _mailboxStatistics.Posted); }
public async Task GivenCompletedSystemMessageTaskGotCancelled_ShouldEscalateFailure() { var mailboxHandler = new TestMailboxHandler(); var mailbox = UnboundedMailbox.Create(); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); msg1.TaskCompletionSource.SetCanceled(); mailbox.PostSystemMessage(msg1); await mailboxHandler.HasFailures; Assert.Single(mailboxHandler.EscalatedFailures); Assert.IsType <TaskCanceledException>(mailboxHandler.EscalatedFailures[0]); }
public async Task GivenCompletedSystemMessageTaskThrewException_ShouldEscalateFailure() { var mailboxHandler = new TestMailboxHandler(); var mailbox = UnboundedMailbox.Create(); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); var taskException = new Exception(); msg1.TaskCompletionSource.SetException(taskException); mailbox.PostSystemMessage(msg1); await mailboxHandler.HasFailures; Assert.Single(mailboxHandler.EscalatedFailures); var e = Assert.IsType <Exception>(mailboxHandler.EscalatedFailures[0]); Assert.Equal(taskException, e); }
public async Task GivenNonCompletedUserMessage_ShouldSetMailboxToIdleAfterCompletion() { var mailboxHandler = new TestMailboxHandler(); var userMailbox = new UnboundedMailboxQueue(); var systemMessages = new UnboundedMailboxQueue(); var mailbox = new DefaultMailbox(systemMessages, userMailbox); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); mailbox.PostUserMessage(msg1); await Task.Delay(1000); msg1.TaskCompletionSource.SetResult(0); await Task.Delay(1000); Assert.True(mailbox.Status == MailboxStatus.Idle, "Mailbox should be set back to Idle after completion of message." ); }
public async Task GivenCompletedSystemMessage_ShouldContinueProcessing() { var mailboxHandler = new TestMailboxHandler(); var userMailbox = new UnboundedMailboxQueue(); var systemMessages = new UnboundedMailboxQueue(); var mailbox = new DefaultMailbox(systemMessages, userMailbox); mailbox.RegisterHandlers(mailboxHandler, mailboxHandler); var msg1 = new TestMessageWithTaskCompletionSource(); var msg2 = new TestMessageWithTaskCompletionSource(); msg1.TaskCompletionSource.SetResult(0); msg2.TaskCompletionSource.SetResult(0); mailbox.PostSystemMessage(msg1); mailbox.PostSystemMessage(msg2); await Task.Delay(1000); Assert.False(systemMessages.HasMessages, "Mailbox should have processed both messages because they were already completed." ); }