示例#1
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        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);
        }
示例#10
0
        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);
        }
示例#13
0
        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);
        }