public async Task TestServerDispose() { //arrange var server = new WebListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; var u = $"://localhost:{port}/"; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync("http" + u); var closed = false; var client = new WebSocketClient() { CloseHandler = (c) => closed = true }; await client.ConnectAsync("ws" + u + "aaa"); //act await Task.Delay(100); server.Dispose(); await Task.Delay(100); //asssert Assert.True(closed); client.Dispose(); }
public async Task TestServerAbort() { //arrange var server = new WebListenerWebSocketServer(); var port = _FreeTcpPort(); Guid _cid = Guid.Empty; bool _serverDisconnected = false; bool _clientDisconnected = false; var connectedTCS = new TaskCompletionSource <bool>(); var serverDisconnectTCS = new TaskCompletionSource <bool>(); var beh = new testBeh() { ClosedHandler = (h) => { if (h.ConnectionId == _cid) { serverDisconnectTCS.TrySetResult(true); _serverDisconnected = true; } }, ConnectionEstablished = (id, ctx) => { _cid = id; connectedTCS.TrySetResult(true); } }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; var u = $"://localhost:{port}/"; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync("http" + u); var clientDisconnectTCS = new TaskCompletionSource <bool>(); var client = new WebSocketClient() { CloseHandler = (c) => { clientDisconnectTCS.TrySetResult(true); _clientDisconnected = true; } }; await client.ConnectAsync("ws" + u + "aaa"); //act await connectedTCS.Task; server.AbortConnection(_cid); //Assert; await Task.WhenAny(Task.Delay(200), serverDisconnectTCS.Task); Assert.True(_serverDisconnected); await Task.WhenAny(Task.Delay(200), clientDisconnectTCS.Task); Assert.True(_clientDisconnected); var clients = server.GetActiveConnectionIds(); Assert.Empty(clients); server.Dispose(); }
public async Task TestServer_Client_External_NetworkCableDisconnect() { //arrange var server = new WebListenerWebSocketServer(); var port = 8883;//_FreeTcpPort(); Stopwatch sw = null; bool disconnected = false; Guid connid = Guid.Empty; TaskCompletionSource <bool> connectionEstablished = new TaskCompletionSource <bool>(); TaskCompletionSource <bool> disconnectedTCS = new TaskCompletionSource <bool>(); var beh = new testBeh() { ClosedHandler = (e) => { if (connid == e.ConnectionId) { disconnectedTCS.TrySetResult(true); disconnected = true; } }, ConnectionEstablished = (cid, ctx) => { Console.WriteLine("Connected"); connid = cid; connectionEstablished.TrySetResult(true); } }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; var u = $"://+:{port}/"; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync("http" + u); await connectionEstablished.Task; await Task.Delay(1000);//wait a sec send data var times = 0; while (times < 1000 || !disconnected) { try { await server.SendBytesAsync(connid, Encoding.UTF8.GetBytes($"ServerTime: {DateTime.Now.ToLongTimeString()}")); } catch { break; } await Task.Delay(100); times++; } sw = Stopwatch.StartNew(); await Task.WhenAny(Task.Delay(TimeSpan.FromMinutes(6)), disconnectedTCS.Task); var time = sw.Elapsed; Assert.True(disconnected); server.Dispose(); }