public void OneSideClose(IPEndPoint ep) { int close_cb_called = 0; int cl_send_cb_called = 0; int cl_recv_cb_called = 0; int sv_send_cb_called = 0; int sv_recv_cb_called = 0; var server = new TcpListener(); server.Bind(ep); server.Listen(); server.Connection += () => { var socket = server.Accept(); socket.Resume(); socket.Read(Encoding.ASCII, (str) => { sv_recv_cb_called++; Assert.AreEqual("PING", str); socket.Write(Encoding.ASCII, "PONG", (s) => { sv_send_cb_called++; }); socket.Close(() => { close_cb_called++; }); server.Close(() => { close_cb_called++; }); }); }; Tcp client = new Tcp(); client.Connect(ep, (_) => { client.Read(Encoding.ASCII, (str) => { cl_recv_cb_called++; Assert.AreEqual("PONG", str); }); client.Complete += () => { close_cb_called++; }; client.Resume(); client.Write(Encoding.ASCII, "PING", (s) => { cl_send_cb_called++; }); }); Assert.AreEqual(0, close_cb_called); Assert.AreEqual(0, cl_send_cb_called); Assert.AreEqual(0, cl_recv_cb_called); Assert.AreEqual(0, sv_send_cb_called); Assert.AreEqual(0, sv_recv_cb_called); Loop.Default.Run(); Assert.AreEqual(3, close_cb_called); Assert.AreEqual(1, cl_send_cb_called); Assert.AreEqual(1, cl_recv_cb_called); Assert.AreEqual(1, sv_send_cb_called); Assert.AreEqual(1, sv_recv_cb_called); #if DEBUG Assert.AreEqual(1, UV.PointerCount); #endif }
public void RemoteAndLocalAddress() { Tcp client = null; Tcp server = null; bool called = false; var l = new TcpListener(); l.Bind(IPAddress.Any, 8000); Action check = () => { if (client == null || server == null) { return; } Assert.Equal(client.LocalAddress, server.RemoteAddress); Assert.Equal(client.RemoteAddress, server.LocalAddress); Assert.Equal(server.LocalAddress.Port, 8000); client.Shutdown(); server.Shutdown(); l.Close(); called = true; }; l.Listen(); l.Connection += () => { server = l.Accept(); check(); }; Tcp t = new Tcp(); t.Connect("127.0.0.1", 8000, (e) => { client = t; check(); }); Loop.Default.Run(); Assert.True(called); }
public void Stress(IPEndPoint ep) { for (int j = 0; j < 10; j++) { int times = 10; int close_cb_called = 0; int cl_send_cb_called = 0; int cl_recv_cb_called = 0; int sv_send_cb_called = 0; int sv_recv_cb_called = 0; var server = new TcpListener(); server.Bind(ep); server.Connection += () => { var socket = server.Accept(); socket.Resume(); socket.Read(Encoding.ASCII, (str) => { sv_recv_cb_called++; Assert.AreEqual(Times("PING", times), str); for (int i = 0; i < times; i++) { socket.Write(Encoding.ASCII, "PONG", (s) => { sv_send_cb_called++; }); } socket.Close(() => { close_cb_called++; }); server.Close(() => { close_cb_called++; }); }); }; server.Listen(); var client = new Tcp(); client.Connect(ep, (_) => { client.Resume(); for (int i = 0; i < times; i++) { client.Write(Encoding.ASCII, "PING", (s) => { cl_send_cb_called++; }); } client.Read(Encoding.ASCII, (str) => { cl_recv_cb_called++; Assert.AreEqual(Times("PONG", times), str); client.Close(() => { close_cb_called++; }); }); }); Assert.AreEqual(0, close_cb_called); Assert.AreEqual(0, cl_send_cb_called); Assert.AreEqual(0, cl_recv_cb_called); Assert.AreEqual(0, sv_send_cb_called); Assert.AreEqual(0, sv_recv_cb_called); Loop.Default.Run(); Assert.AreEqual(3, close_cb_called); Assert.AreEqual(times, cl_send_cb_called); Assert.AreEqual(1, cl_recv_cb_called); Assert.AreEqual(times, sv_send_cb_called); Assert.AreEqual(1, sv_recv_cb_called); #if DEBUG Assert.AreEqual(1, UV.PointerCount); #endif } }