public async Task StartCreatesAndOpensWebSocket() { var fakeWebSocketTransport = new FakeWebSocketTransport(); fakeWebSocketTransport.Setup("OpenWebSocket", () => { var tcs = new TaskCompletionSource<object>(); tcs.TrySetResult(null); return tcs.Task; }); var fakeConnection = new FakeConnection { TransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100), TotalTransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100), Url = "http://fake.url", Protocol = new Version(1, 42), ConnectionToken = "MyConnToken", MessageId = "MsgId" }; // connect timeout unblocks this call hence the expected exception await Assert.ThrowsAsync<TimeoutException>( async () => await fakeWebSocketTransport.Start(fakeConnection, "test", CancellationToken.None)); Assert.Equal(1, fakeConnection.GetInvocations("Trace").Count()); Assert.Equal(1, fakeConnection.GetInvocations("PrepareRequest").Count()); var openWebSocketInvocations = fakeWebSocketTransport.GetInvocations("OpenWebSocket").ToArray(); Assert.Equal(1, openWebSocketInvocations.Length); Assert.StartsWith( "ws://fake.urlconnect/?clientProtocol=1.42&transport=webSockets&connectionData=test&connectionToken=MyConnToken&messageId=MsgId", ((Uri)openWebSocketInvocations[0][1]).AbsoluteUri); }
public async Task StartCreatesAndOpensWebSocket() { var fakeWebSocketTransport = new FakeWebSocketTransport(); fakeWebSocketTransport.Setup("OpenWebSocket", () => { var tcs = new TaskCompletionSource <object>(); tcs.TrySetResult(null); return(tcs.Task); }); var fakeConnection = new FakeConnection { TransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100), TotalTransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100), Url = "http://fake.url", Protocol = new Version(1, 42), ConnectionToken = "MyConnToken", MessageId = "MsgId" }; // connect timeout unblocks this call hence the expected exception await Assert.ThrowsAsync <TimeoutException>( async() => await fakeWebSocketTransport.Start(fakeConnection, "test", CancellationToken.None)); Assert.Equal(1, fakeConnection.GetInvocations("Trace").Count()); Assert.Equal(1, fakeConnection.GetInvocations("PrepareRequest").Count()); var openWebSocketInvocations = fakeWebSocketTransport.GetInvocations("OpenWebSocket").ToArray(); Assert.Equal(1, openWebSocketInvocations.Length); Assert.StartsWith( "ws://fake.urlconnect/?clientProtocol=1.42&transport=webSockets&connectionData=test&connectionToken=MyConnToken&messageId=MsgId&noCache=", ((Uri)openWebSocketInvocations[0][1]).AbsoluteUri); }
public async Task InCaseOfExceptionStartInvokesOnFailureAndThrowsOriginalException() { var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10) }; var fakeWebSocketTransport = new FakeWebSocketTransport(); var expectedException = new Exception("OpenWebSocket failed."); fakeWebSocketTransport.Setup <Task>("OpenWebSocket", () => { throw expectedException; }); Assert.Same(expectedException, await Assert.ThrowsAsync <Exception>( async() => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))); Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count()); }
public async Task ReconnectDoesNotStartNewWebSocketIfDisconnectTokenTripped() { var fakeConnection = new FakeConnection { LastActiveAt = DateTime.UtcNow, ReconnectWindow = new TimeSpan(0, 0, 15), Url = "http://fakeserver/", State = ConnectionState.Reconnecting }; var fakeWebSocketTransport = new FakeWebSocketTransport(); // this is called just to initialize the disconnect token var _ = fakeWebSocketTransport.Start(new FakeConnection(), string.Empty, new CancellationToken(true)); await fakeWebSocketTransport.Reconnect(fakeConnection, null); Assert.Equal(0, fakeWebSocketTransport.GetInvocations("OpenWebSocket").Count()); Assert.Equal(0, fakeConnection.GetInvocations("Stop").Count()); }
public async Task StartInvokesOnFailureAndThrowsIfOpenWebSocketCancelled() { var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10) }; var fakeWebSocketTransport = new FakeWebSocketTransport(); fakeWebSocketTransport.Setup <Task>("OpenWebSocket", () => { var tcs = new TaskCompletionSource <object>(); tcs.SetCanceled(); return(tcs.Task); }); Assert.Equal( ResourceUtil.GetResource("Error_TransportFailedToConnect"), (await Assert.ThrowsAsync <InvalidOperationException>( async() => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))).Message); Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count()); }
public async Task InCaseOfExceptionStartInvokesOnFailureAndThrowsOriginalException() { var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10)}; var fakeWebSocketTransport = new FakeWebSocketTransport(); var expectedException = new Exception("OpenWebSocket failed."); fakeWebSocketTransport.Setup<Task>("OpenWebSocket", () => { throw expectedException; }); Assert.Same(expectedException, await Assert.ThrowsAsync<Exception>( async () => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))); Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count()); }
public async Task StartInvokesOnFailureAndThrowsIfOpenWebSocketCancelled() { var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10) }; var fakeWebSocketTransport = new FakeWebSocketTransport(); fakeWebSocketTransport.Setup<Task>("OpenWebSocket", () => { var tcs = new TaskCompletionSource<object>(); tcs.SetCanceled(); return tcs.Task; }); Assert.Equal( ResourceUtil.GetResource("Error_TransportFailedToConnect"), (await Assert.ThrowsAsync<InvalidOperationException>( async () => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))).Message); Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count()); }