public void FaultedWriteFailsPendingTasks() { var fake = new FakeWriter(); var writer = new BufferedClientStreamWriter <string>(fake, 5); var task1 = writer.WriteAsync("1"); var task2 = writer.WriteAsync("2"); var task3 = writer.WriteAsync("3"); var completionTask = writer.WriteCompleteAsync(); AssertNotCompleted(task1, task2, task3, completionTask); // Server handles first message successfully fake.CompleteCurrentTask(); AssertCompletedWithStatus(task1, TaskStatus.RanToCompletion); AssertNotCompleted(task2, task3, completionTask); // Server fails second message. All pending tasks become faulted with the same exception. var exception = new Exception("Bang"); fake.FailCurrentTask(exception); foreach (var task in new[] { task2, task3, completionTask }) { AssertCompletedWithStatus(task, TaskStatus.Faulted); Assert.Same(exception, task.Exception.InnerExceptions[0]); } }
public void FaultedWriteFailsFutureTasks() { var fake = new FakeWriter(); var writer = new BufferedClientStreamWriter <string>(fake, 5); var task1 = writer.WriteAsync("1"); // Server fails first message var exception = new Exception("Bang"); fake.FailCurrentTask(exception); // Subsequent calls to Write and Complete fail var task2 = writer.WriteAsync("2"); var task3 = writer.WriteAsync("3"); var completionTask = writer.WriteCompleteAsync(); foreach (var task in new[] { task1, task2, task3, completionTask }) { AssertCompletedWithStatus(task, TaskStatus.Faulted); Assert.Same(exception, task.Exception.InnerExceptions[0]); } }