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 TimeoutDoesNotFailTheTaskAfterInitReceived() { 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()); 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) => // wait for the timeout to fire Task.Delay(250).ContinueWith(t => "{ \"Response\" : \"started\" }")); var initHandler = new TransportInitializationHandler(Mock.Of <IHttpClient>(), mockConnection.Object, string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object); var onFailureInvoked = false; initHandler.OnFailure += () => onFailureInvoked = true; initHandler.InitReceived(); await initHandler.Task; Assert.False(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(); Assert.False(initHandler.TryFailStart()); Assert.False(initHandler.TryFailStart()); await initHandler.Task; Assert.False(onFailureInvoked); }
public async Task InitTaskThrowsStartFailedExceptionIfStartRequestReturnsIncorrectResult() { var mockTransportHelper = new Mock <TransportHelper>(); var mockConnection = new Mock <IConnection>(); mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(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; 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("{ \"foo\" : \"bar\" }")); initHandler.InitReceived(); await Assert.ThrowsAsync <StartException>(() => initHandler.Task); Assert.True(onFailureInvoked); }
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); Assert.True(initHandler.TryFailStart()); Assert.True(initHandler.TryFailStart()); 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()); }
public void InitTaskThrowsStartFailedExceptionIfStartRequestThrows() { var mockTransportHelper = new Mock <TransportHelper>(); var mockConnection = new Mock <IConnection>(); mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(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) => { var tcs = new TaskCompletionSource <string>(); tcs.SetException(exception); return(tcs.Task); }); initHandler.InitReceived(); var startException = Assert.Throws <AggregateException>( () => Assert.True(initHandler.Task.Wait(TimeSpan.FromSeconds(1)))).InnerException; Assert.IsType <StartException>(startException); // startException.InnerException is an AggregateException Assert.Same(exception, startException.InnerException.InnerException); Assert.True(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 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 TimeoutDoesNotFailTheTaskAfterInitReceived() { 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()); 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) => // wait for the timeout to fire Task.Delay(250).ContinueWith(t => "{ \"Response\" : \"started\" }")); var initHandler = new TransportInitializationHandler(Mock.Of<IHttpClient>(), mockConnection.Object, string.Empty, "fakeTransport", CancellationToken.None, mockTransportHelper.Object); var onFailureInvoked = false; initHandler.OnFailure += () => onFailureInvoked = true; initHandler.InitReceived(); await initHandler.Task; Assert.False(onFailureInvoked); }
public void InitTaskThrowsStartFailedExceptionIfStartRequestReturnsIncorrectResult() { var mockTransportHelper = new Mock<TransportHelper>(); var mockConnection = new Mock<IConnection>(); mockConnection.Setup(p => p.TotalTransportConnectTimeout).Returns(TimeSpan.FromSeconds(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; 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("{ \"foo\" : \"bar\" }")); initHandler.InitReceived(); Assert.IsType<StartException>( Assert.Throws<AggregateException>( () => Assert.True(initHandler.Task.Wait(TimeSpan.FromSeconds(1)))).InnerException); Assert.True(onFailureInvoked); }