Fail() 공개 메소드

public Fail ( ) : void
리턴 void
        public async Task InitTaskIsFailedIfFailureOccursAfterStartRequestStarted()
        {
            var mockTransportHelper = new Mock <TransportHelper>();
            var mockConnection      = new Mock <IConnection>();

            mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(0.5));
            mockConnection.Setup(c => c.JsonSerializer).Returns(JsonSerializer.CreateDefault());

            var initHandler = new TransportInitializationHandler(Mock.Of <IHttpClient>(), mockConnection.Object,
                                                                 string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            var onFailureInvoked = false;

            initHandler.OnFailure += () => onFailureInvoked = true;

            var exception = new Exception("test exception");

            mockTransportHelper.Setup(
                h => h.GetStartResponse(It.IsAny <IHttpClient>(), It.IsAny <IConnection>(),
                                        It.IsAny <string>(), It.IsAny <string>()))
            .Returns <IHttpClient, IConnection, string, string>(
                (httpClient, connection, connectionData, transport) =>
            {
                initHandler.Fail(exception);
                return(Task.FromResult("{ \"Response\" : \"started\" }"));
            });

            initHandler.InitReceived();

            var startException = await Assert.ThrowsAsync <StartException>(() => initHandler.Task);

            Assert.Same(exception, startException.InnerException);

            Assert.True(onFailureInvoked);
        }
        public async Task FailIsNoOpAfterStartCompletedSuccessfully()
        {
            var mockTransportHelper = new Mock <TransportHelper>();
            var mockConnection      = new Mock <IConnection>();

            mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromMilliseconds(200));
            mockConnection.Setup(c => c.JsonSerializer).Returns(JsonSerializer.CreateDefault());

            var initHandler = new TransportInitializationHandler(Mock.Of <IHttpClient>(), mockConnection.Object,
                                                                 string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            var onFailureInvoked = false;

            initHandler.OnFailure += () => onFailureInvoked = true;

            mockTransportHelper.Setup(
                h => h.GetStartResponse(It.IsAny <IHttpClient>(), It.IsAny <IConnection>(),
                                        It.IsAny <string>(), It.IsAny <string>()))
            .Returns <IHttpClient, IConnection, string, string>(
                (httpClient, connection, connectionData, transport) => Task.FromResult("{ \"Response\" : \"started\" }"));

            initHandler.InitReceived();
            initHandler.Fail();

            await initHandler.Task;

            Assert.False(onFailureInvoked);
        }
        public void StartRequestNotCalledIfTransportAlreadyFailed()
        {
            var mockConnection = new Mock<IConnection>();
            mockConnection.Setup(c => c.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(1));

            var mockTransportHelper = new Mock<TransportHelper>();
            var failureInvokedMre = new ManualResetEvent(false);

            var initHandler = new TransportInitializationHandler(Mock.Of<IHttpClient>(), mockConnection.Object,
                string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            initHandler.OnFailure += () => failureInvokedMre.Set();

            initHandler.Fail();

            Assert.True(failureInvokedMre.WaitOne(1000));

            initHandler.InitReceived();

            mockTransportHelper.Verify(
                h => h.GetStartResponse(It.IsAny<IHttpClient>(), It.IsAny<IConnection>(), 
                    It.IsAny<string>(), It.IsAny<string>()), Times.Never());
        }
        public async Task StartRequestNotCalledIfTransportAlreadyFailed()
        {
            var mockConnection = new Mock <IConnection>();

            mockConnection.Setup(c => c.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(1));

            var mockTransportHelper = new Mock <TransportHelper>();
            var failureInvokedTcs   = new TaskCompletionSource <object>();

            var initHandler = new TransportInitializationHandler(Mock.Of <IHttpClient>(), mockConnection.Object,
                                                                 string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            initHandler.OnFailure += () => failureInvokedTcs.TrySetResult(null);

            initHandler.Fail();

            await failureInvokedTcs.Task.OrTimeout();

            initHandler.InitReceived();

            mockTransportHelper.Verify(
                h => h.GetStartResponse(It.IsAny <IHttpClient>(), It.IsAny <IConnection>(),
                                        It.IsAny <string>(), It.IsAny <string>()), Times.Never());
        }
예제 #5
0
        public void StartRequestNotCalledIfTransportAlreadyFailed()
        {
            var mockConnection = new Mock <IConnection>();

            mockConnection.Setup(c => c.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(1));

            var mockTransportHelper = new Mock <TransportHelper>();
            var failureInvokedMre   = new ManualResetEvent(false);

            var initHandler = new TransportInitializationHandler(Mock.Of <IHttpClient>(), mockConnection.Object,
                                                                 string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            initHandler.OnFailure += () => failureInvokedMre.Set();

            initHandler.Fail();

            Assert.True(failureInvokedMre.WaitOne(1000));

            initHandler.InitReceived();

            mockTransportHelper.Verify(
                h => h.GetStartResponse(It.IsAny <IHttpClient>(), It.IsAny <IConnection>(),
                                        It.IsAny <string>(), It.IsAny <string>()), Times.Never());
        }
        public void InitTaskIsFailedIfFailureOccursAfterStartRequestStarted()
        {
            var mockTransportHelper = new Mock<TransportHelper>();
            var mockConnection = new Mock<IConnection>();
            mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(0.5));
            mockConnection.Setup(c => c.JsonSerializer).Returns(JsonSerializer.CreateDefault());

            var initHandler = new TransportInitializationHandler(Mock.Of<IHttpClient>(), mockConnection.Object,
                string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            var onFailureInvoked = false;
            initHandler.OnFailure += () => onFailureInvoked = true;

            var exception = new Exception("test exception");

            mockTransportHelper.Setup(
                h => h.GetStartResponse(It.IsAny<IHttpClient>(), It.IsAny<IConnection>(),
                    It.IsAny<string>(), It.IsAny<string>()))
                .Returns<IHttpClient, IConnection, string, string>(
                    (httpClient, connection, connectionData, transport) =>
                    {
                        initHandler.Fail(exception);
                        return Task.FromResult("{ \"Response\" : \"started\" }");
                    });

            initHandler.InitReceived();

            var startException = 
                Assert.Throws<AggregateException>(
                    () => Assert.True(initHandler.Task.Wait(TimeSpan.FromSeconds(1)))).InnerException;

            Assert.IsType<StartException>(startException);
            Assert.Same(exception, startException.InnerException);

            Assert.True(onFailureInvoked);
        }
        public async Task FailIsNoOpAfterStartCompletedSuccessfully()
        {
            var mockTransportHelper = new Mock<TransportHelper>();
            var mockConnection = new Mock<IConnection>();
            mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromMilliseconds(200));
            mockConnection.Setup(c => c.JsonSerializer).Returns(JsonSerializer.CreateDefault());

            var initHandler = new TransportInitializationHandler(Mock.Of<IHttpClient>(), mockConnection.Object,
                string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object);

            var onFailureInvoked = false;
            initHandler.OnFailure += () => onFailureInvoked = true;

            mockTransportHelper.Setup(
                h => h.GetStartResponse(It.IsAny<IHttpClient>(), It.IsAny<IConnection>(),
                    It.IsAny<string>(), It.IsAny<string>()))
                .Returns<IHttpClient, IConnection, string, string>(
                    (httpClient, connection, connectionData, transport) => Task.FromResult("{ \"Response\" : \"started\" }"));

            initHandler.InitReceived();
            initHandler.Fail();

            await initHandler.Task;
            Assert.False(onFailureInvoked);
        }
        public virtual Task Start(IConnection connection, string connectionData, CancellationToken disconnectToken)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            _initializeHandler = new TransportInitializationHandler(connection.TransportConnectTimeout, disconnectToken);

            // Tie into the OnFailure event so that we can stop the transport silently.
            _initializeHandler.OnFailure += () =>
            {
                Dispose();
            };

            _disconnectToken = disconnectToken;
            _connectionInfo = new WebSocketConnectionInfo(connection, connectionData);

            // We don't need to await this task
            PerformConnect().ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    _initializeHandler.Fail(task.Exception);
                }
                else if (task.IsCanceled)
                {
                    _initializeHandler.Fail();
                }
            },
            TaskContinuationOptions.NotOnRanToCompletion);

            return _initializeHandler.Task;
        }