public async Task ImplicitOpen_SubjWasNotOpen_SubjIsOpen() { var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(false).Returns(t => TaskConstants.Completed); innerHandlerMock.SendEventAsync(Arg.Any <Message>()).Returns(t => TaskConstants.Completed); innerHandlerMock.SendEventAsync(Arg.Any <IEnumerable <Message> >()).Returns(t => TaskConstants.Completed); innerHandlerMock.ReceiveAsync().Returns(t => Task.FromResult(new Message())); innerHandlerMock.ReceiveAsync(Arg.Any <TimeSpan>()).Returns(t => Task.FromResult(new Message())); innerHandlerMock.AbandonAsync(Arg.Any <string>()).Returns(t => TaskConstants.Completed); innerHandlerMock.CompleteAsync(Arg.Any <string>()).Returns(t => TaskConstants.Completed); innerHandlerMock.RejectAsync(Arg.Any <string>()).Returns(t => TaskConstants.Completed); var actions = new Func <IDelegatingHandler, Task>[] { sut => sut.SendEventAsync(new Message()), sut => sut.SendEventAsync(new[] { new Message() }), sut => sut.ReceiveAsync(), sut => sut.ReceiveAsync(TimeSpan.FromSeconds(1)), sut => sut.AbandonAsync(string.Empty), sut => sut.CompleteAsync(string.Empty), sut => sut.RejectAsync(string.Empty), }; foreach (Func <IDelegatingHandler, Task> action in actions) { var sut = new GateKeeperDelegatingHandler(innerHandlerMock); await action(sut); } await innerHandlerMock.Received(actions.Length).OpenAsync(false); }
public async Task OpenAsyncTwoCallersOnlyOneOpenCalled() { var contextMock = Substitute.For <IPipelineContext>(); var tcs = new TaskCompletionSource(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); int callCounter = 0; innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(t => { callCounter++; return(tcs.Task); }); var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; var cancellationToken = new CancellationToken(); Task firstOpen = sut.OpenAsync(cancellationToken); Task secondOpen = sut.OpenAsync(cancellationToken); tcs.Complete(); await Task.WhenAll(firstOpen, secondOpen).ConfigureAwait(false); Assert.AreEqual(1, callCounter); }
public async Task ImplicitOpenSubjWasNotOpenSubjIsOpen() { var contextMock = Substitute.For <IPipelineContext>(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(false, Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); innerHandlerMock.SendEventAsync(Arg.Any <Message>(), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); innerHandlerMock.SendEventAsync(Arg.Any <IEnumerable <Message> >(), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); innerHandlerMock.ReceiveAsync(Arg.Any <CancellationToken>()).Returns(t => Task.FromResult(new Message())); innerHandlerMock.ReceiveAsync(Arg.Any <TimeSpan>(), Arg.Any <CancellationToken>()).Returns(t => Task.FromResult(new Message())); innerHandlerMock.AbandonAsync(Arg.Any <string>(), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); innerHandlerMock.CompleteAsync(Arg.Any <string>(), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); innerHandlerMock.RejectAsync(Arg.Any <string>(), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); var cancellationToken = new CancellationToken(); var actions = new Func <IDelegatingHandler, Task>[] { sut => sut.SendEventAsync(new Message(), cancellationToken), sut => sut.SendEventAsync(new[] { new Message() }, cancellationToken), sut => sut.ReceiveAsync(cancellationToken), sut => sut.ReceiveAsync(TimeSpan.FromSeconds(1), cancellationToken), sut => sut.AbandonAsync(string.Empty, cancellationToken), sut => sut.CompleteAsync(string.Empty, cancellationToken), sut => sut.RejectAsync(string.Empty, cancellationToken), }; foreach (Func <IDelegatingHandler, Task> action in actions) { var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; await action(sut).ConfigureAwait(false); } await innerHandlerMock.Received(actions.Length).OpenAsync(false, Arg.Any <CancellationToken>()).ConfigureAwait(false); }
public async Task OpenAsync_InnerCompleted_SutIsOpen() { var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(true).Returns(t => TaskConstants.Completed); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); await sut.OpenAsync(); }
public async Task OpenAsync_InnerCompleted_SutIsOpen() { var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); var cancellationToken = new CancellationToken(); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); await sut.OpenAsync(cancellationToken); }
public async Task OpenAsync_ClosedCannotBeReopened_Throws() { var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.CloseAsync().Returns(t => TaskConstants.Completed); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); await sut.CloseAsync(); await((Func <Task>)sut.OpenAsync).ExpectedAsync <ObjectDisposedException>(); }
public async Task OpenAsyncInnerCompletedSubjIsOpen() { var contextMock = Substitute.For <IPipelineContext>(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); var cancellationToken = new CancellationToken(); var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; await sut.OpenAsync(cancellationToken).ConfigureAwait(false); }
public async Task OpenAsyncClosedCannotBeReopenedThrows() { var contextMock = Substitute.For <IPipelineContext>(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.CloseAsync().Returns(t => TaskConstants.Completed); var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; await sut.CloseAsync().ConfigureAwait(false); var cancellationToken = new CancellationToken(); await((Func <Task>)(() => sut.OpenAsync(cancellationToken))).ExpectedAsync <ObjectDisposedException>().ConfigureAwait(false); }
public async Task OpenAsync_InnerCancelled_SutIsOpenAndCanBeReopen() { var tcs = new TaskCompletionSource(); tcs.SetCanceled(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(tcs.Task); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); var cancellationToken = new CancellationToken(); await sut.OpenAsync(cancellationToken).ExpectedAsync <TaskCanceledException>(); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); await sut.OpenAsync(cancellationToken); }
public async Task OpenAsync_InnerFailed_SutIsOpenAndCanBeReopen() { var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(Arg.Is(true)).Returns(ci => { throw new IOException(); }); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); await((Func <Task>)sut.OpenAsync).ExpectedAsync <IOException>(); innerHandlerMock.OpenAsync(Arg.Is(true)).Returns(t => TaskConstants.Completed); await sut.OpenAsync(); }
public async Task OpenAsyncInnerCancelledSutIsOpenAndCanBeReopen() { var contextMock = Substitute.For <IPipelineContext>(); var tcs = new TaskCompletionSource(); tcs.SetCanceled(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(tcs.Task); var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; var cancellationToken = new CancellationToken(); await sut.OpenAsync(cancellationToken).ExpectedAsync <TaskCanceledException>().ConfigureAwait(false); innerHandlerMock.OpenAsync(true, Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); await sut.OpenAsync(cancellationToken).ConfigureAwait(false); }
public async Task OpenAsyncInnerFailedSutIsOpenAndCanBeReopen() { var contextMock = Substitute.For <IPipelineContext>(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); innerHandlerMock.OpenAsync(Arg.Is(true), Arg.Any <CancellationToken>()).Returns(ci => { throw new IOException(); }); var sut = new GateKeeperDelegatingHandler(contextMock); sut.ContinuationFactory = c => innerHandlerMock; var cancellationToken = new CancellationToken(); await((Func <Task>)(() => sut.OpenAsync(cancellationToken))).ExpectedAsync <IOException>().ConfigureAwait(false); innerHandlerMock.OpenAsync(Arg.Is(true), Arg.Any <CancellationToken>()).Returns(t => TaskConstants.Completed); await sut.OpenAsync(cancellationToken).ConfigureAwait(false); }
public async Task OpenAsync_TwoCallers_OnlyOneOpenCalled() { var tcs = new TaskCompletionSource(); var innerHandlerMock = Substitute.For <IDelegatingHandler>(); int callCounter = 0; innerHandlerMock.OpenAsync(true).Returns(t => { callCounter++; return(tcs.Task); }); var sut = new GateKeeperDelegatingHandler(innerHandlerMock); Task firstOpen = sut.OpenAsync(); Task secondOpen = sut.OpenAsync(); tcs.Complete(); await Task.WhenAll(firstOpen, secondOpen); Assert.AreEqual(1, callCounter); }