public async Task TestCreateServerClient_connect_recv_echo() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); string res = null; var client = new WebSocketClient() { MessageHandler = (e) => res = e.Data, }; await client.ConnectAsync($"ws://localhost:{port}/aaa"); //act await client.SendStringAsync("hi", CancellationToken.None); await Task.Delay(100); //assert Assert.Equal("hihi", res); }
public async Task TestCreateServerClient_connect_2_boot_1() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); string res = null; string kickoffRes = null; var client = new WebSocketClient() { MessageHandler = (e) => res = e.Data, CloseHandler = (e) => kickoffRes = e.CloseStatDescription }; await client.ConnectAsync($"ws://localhost:{port}/aaa"); await client.SendStringAsync("hi", CancellationToken.None); var client2 = new WebSocketClient() { MessageHandler = (e) => res = e.Data, CloseHandler = (e) => kickoffRes = e.CloseStatDescription }; await client2.ConnectAsync($"ws://localhost:{port}/aaa"); await client2.SendStringAsync("hi", CancellationToken.None); //act await Task.Delay(100); var clients = server.GetActiveConnectionIds(); Assert.Equal(2, clients.Count); await server.DisconnectConnection(clients[1], "dontlikeu"); clients = server.GetActiveConnectionIds(); Assert.Equal(1, clients.Count); while (kickoffRes == null) { await Task.Delay(100); } Assert.Equal("dontlikeu", kickoffRes); //assert Assert.Equal("hihi", res); }
public async Task TestServerDispose() { //arrange var server = new HttpListenerWebSocketServer(); 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 TestCreateServer_connect_recv_echo() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); var client = new ClientWebSocket(); await client.ConnectAsync(new Uri($"ws://localhost:{port}/aaa"), CancellationToken.None); //act await client.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("hi")), WebSocketMessageType.Text, true, CancellationToken.None); var byt = new byte[1024]; await Task.Delay(100); var read = await client.ReceiveAsync(new ArraySegment <byte>(byt), CancellationToken.None); //assert Assert.Equal("hihi", Encoding.UTF8.GetString(new ArraySegment <byte>(byt, 0, read.Count))); }
public async Task TestCreateServer_connect_recv_text() { //arrange var server = new HttpListenerWebSocketServer(); string data = null; var port = _FreeTcpPort(); Action <StringMessageReceivedEventArgs> handler = (s) => data = s.Data; server.AddRouteBehavior("/aaa", () => new testBeh() { StringMessageHandler = handler }); await server.StartAsync($"http://localhost:{port}/"); var client = new ClientWebSocket(); await client.ConnectAsync(new Uri($"ws://localhost:{port}/aaa"), CancellationToken.None); //act await client.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("hi")), WebSocketMessageType.Text, true, CancellationToken.None); await Task.Delay(100); //assert Assert.Equal("hi", data); }
public async Task TestCreateServerClient_connect_recv_echo_twice() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { //try //{ var data = e.Data; Task.Run(() => e.WebSocket.SendStringAsync(data + data, CancellationToken.None).GetAwaiter().GetResult()); Task.Run(() => e.WebSocket.SendStringAsync(data + data, CancellationToken.None).GetAwaiter().GetResult()); //await Task.Delay(1000); //} //catch (Exception o) //{ //} }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); string res = null; var client = new WebSocketClient() { MessageHandler = (e) => res = e.Data, }; await client.ConnectAsync($"ws://localhost:{port}/aaa"); //act var tasks = new List <Task>(); for (var i = 0; i < 400; i++) { tasks.Add(Task.Run(() => { // try // { client.SendStringAsync("hi" + i.ToString(), CancellationToken.None).GetAwaiter().GetResult(); // } // catch (Exception e) { // } })); } await Task.WhenAll(tasks); await Task.Delay(100); //assert //Assert.Equal("hi", t1.res); }
static void Main(string[] args) { var server = new HttpListenerWebSocketServer((s, err) => Console.WriteLine(s)); server.AddRouteBehavior("/aaa", () => { return(new test()); }); server.StartAsync("http://localhost:8080/"); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
public async Task TestCreateServer_start() { //arrange var port = _FreeTcpPort(); using (var server = new HttpListenerWebSocketServer()) { //act await server.StartAsync($"http://localhost:{port}/"); await Task.Delay(100); //assert } }
public async Task TestCreateServer_connect() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); server.AddRouteBehavior("/aaa", () => new testBeh()); await server.StartAsync($"http://localhost:{port}/"); var client = new ClientWebSocket(); await client.ConnectAsync(new Uri($"ws://localhost:{port}/aaa"), CancellationToken.None); //act //assert }
public async Task TestCreateServer_connect_recv_echo_exception() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; bool exceptionoccured = false; beh.StringMessageHandler = (e) => { if (exceptionoccured) { e.WebSocket.SendStringAsync("hihi"); return; } exceptionoccured = true; throw new Exception("arghhh"); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); var client = new ClientWebSocket(); await client.ConnectAsync(new Uri($"ws://localhost:{port}/aaa"), CancellationToken.None); //act await client.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("hi")), WebSocketMessageType.Text, true, CancellationToken.None); await Task.Delay(100); Assert.Equal(true, exceptionoccured); Assert.Equal(client.State, WebSocketState.Open); var byt = new byte[2000]; await client.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("hi")), WebSocketMessageType.Text, true, CancellationToken.None); var read = await client.ReceiveAsync(new ArraySegment <byte>(byt), CancellationToken.None); //assert Assert.Equal("hihi", Encoding.UTF8.GetString(new ArraySegment <byte>(byt, 0, read.Count))); }
public async Task TestCreateServerClient_LoadThrottling() { //arrange var server = new HttpListenerWebSocketServer(queueThrottleLimitBytes: 200L * 1024 * 1024);// var port = _FreeTcpPort(); var beh = new testBeh() { }; beh.BinaryMessageHandler = (e) => { Thread.Sleep(200); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); string res = null; var client = new WebSocketClient() { MessageHandler = (e) => res = e.Data, }; await client.ConnectAsync($"ws://localhost:{port}/aaa"); //act for (int i = 0; i < 200; i++) { var s = _getFile("tst2", 10); await client.SendStreamAsync(File.OpenRead(s)); await Task.Delay(1); //Assert.Equal(new FileInfo(s).Length, recievedSize); } //assert }
public async Task TestCreateServerClient_LargeFile() { //arrange var server = new HttpListenerWebSocketServer(); var port = _FreeTcpPort(); var beh = new testBeh() { }; int recievedSize = 0; beh.BinaryMessageHandler = (e) => { recievedSize = e.Data.Length; }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); string res = null; var client = new WebSocketClient() { MessageHandler = (e) => res = e.Data, }; await client.ConnectAsync($"ws://localhost:{port}/aaa"); //act var s = _getFile("tst", 20); await client.SendStreamAsync(File.OpenRead(s)); await Task.Delay(100); //assert Assert.Equal(new FileInfo(s).Length, recievedSize); }
public async Task TestMemLeak() { //arrange var server = new HttpListenerWebSocketServer(); //var server = new WebListenerWebSocketServer(); var port = _FreeTcpPort(); //var beh = new testBeh() //{ //}; var beh = new testBeh() { }; beh.StringMessageHandler = (e) => { Task.Run(async() => { try { //await Task.Delay(100); await e.WebSocket.SendStringAsync(string.Empty, CancellationToken.None); } catch (Exception e1) { } }); Task.Run(async() => { try { //await Task.Delay(100); await e.WebSocket.SendStringAsync(string.Empty, CancellationToken.None); } catch (Exception e2) { } }); }; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync($"http://localhost:{port}/"); List <long> memu = new List <long>(); for (var i = 0; i < 3000; i++) { string res = null; using (var client = new WebSocketClient()) { client.MessageHandler = (e) => res = e.Data; await client.ConnectAsync($"ws://localhost:{port}/aaa"); _output.WriteLine($"Connect {i}"); await client.SendStringAsync("hi" + i.ToString(), CancellationToken.None); _output.WriteLine($"Disconnect {i}"); } if (i % 300 == 0) { GC.Collect(); memu.Add(getmem()); } } var centroid = memu[memu.Count / 2]; var last = memu.Last(); var diff = last - centroid; var per = (diff / (float)centroid) * 100; Assert.True(per < 5); // File.WriteAllText("out.txt", $"{per}"); _output.WriteLine("Completed"); }