using Newtonsoft.Json.Linq; using Quobject.EngineIoClientDotNet.Client; using Quobject.EngineIoClientDotNet.Client.Transports; using Quobject.EngineIoClientDotNet.Modules; using Quobject.EngineIoClientDotNet.Parser; using Quobject.SocketIoClientDotNet.Client; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Xunit; using Socket = Quobject.SocketIoClientDotNet.Client.Socket; namespace SocketIoClientDotNet.Tests.ClientTests { public class ServerConnectionTest : Connection { private ManualResetEvent ManualResetEvent = null; private Socket socket; public string Message; private int Number; private bool Flag; [Fact] public void Connect() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Disconnect(); }); socket.On(Socket.EVENT_DISCONNECT, (data) => { log.Info("EVENT_DISCONNECT"); Message = (string) data; ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); Assert.Equal("io client disconnect", this.Message); } [Fact] public void MessageTest() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Emit("hi"); }); socket.On("hi", (data) => { log.Info("EVENT_MESSAGE"); events.Enqueue(data); ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = events.Dequeue(); Assert.Equal("more data", obj); } [Fact] public void ShouldNotConnectWhenAutoconnectOptionSetToFalse() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var options = CreateOptions(); options.AutoConnect = false; var uri = CreateUri(); socket = IO.Socket(uri, options); Assert.Null(socket.Io().EngineSocket); } [Fact] public void ShouldWorkWithAcks() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.Emit("ack"); socket.On("ack", (cb) => { var obj = new JObject(); obj["b"] = true; var iack = (IAck) cb; iack.Call(5, obj); }); socket.On("got it", (data) => { log.Info("got it"); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); socket.Close(); } [Fact] public void ShouldReceiveDateWithAck() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); Message = ""; Number = 0; ManualResetEvent = new ManualResetEvent(false); var obj = new JObject(); obj["b"] = true; var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.Emit("getAckDate", new AckImpl((date, n) => { log.Info("getAckDate data=" + date); Message = ((DateTime) date).ToString("O"); Number = int.Parse(n.ToString()); ManualResetEvent.Set(); }), obj); ManualResetEvent.WaitOne(); Assert.Equal(28, Message.Length); Assert.Equal(5, Number); socket.Close(); } [Fact] public void ShouldReceiveDateWithAckAsAction() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); Message = ""; Number = 0; ManualResetEvent = new ManualResetEvent(false); var obj = new JObject(); obj["b"] = true; var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.Emit("getAckDate", (date, n) => { log.Info("getAckDate data=" + date); Message = ((DateTime)date).ToString("O"); Number = int.Parse(n.ToString()); ManualResetEvent.Set(); }, obj); ManualResetEvent.WaitOne(); Assert.Equal(28, Message.Length); Assert.Equal(5, Number); socket.Close(); } [Fact] public void ShouldWorkWithFalse() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { socket.Emit("false"); }); socket.On("false", (data) => { events.Enqueue(data); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); socket.Close(); var obj = events.Dequeue(); Assert.False((bool) obj); } [Fact] public void ShouldReceiveUtf8MultibyteCharacters() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var correct = new string[] { "てすと", "Я Б Г Д Ж Й", "Ä ä Ü ü ß", "李O四", "utf8 — string" }; var i = 0; var options = CreateOptions(); options.Transports = new List() { "polling" }; var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("takeUtf8", (data) => { events.Enqueue(data); i++; log.Info(string.Format("takeUtf8 data={0} i={1}",(string)data,i)); if (i >= correct.Length) { ManualResetEvent.Set(); } }); socket.Emit("getUtf8"); ManualResetEvent.WaitOne(); socket.Close(); var j = 0; foreach (var obj in events) { var str = (string) obj; Assert.Equal(correct[j++], str); } } //[Fact] //public void ShouldReceiveUtf8MultibyteCharactersOverWebsocket() //{ // var log = LogManager.GetLogger(Global.CallerName()); // log.Info("Start"); // ManualResetEvent = new ManualResetEvent(false); // var events = new Queue(); // var correct = new string[] // { // "てすと", // "Я Б Г Д Ж Й", // "Ä ä Ü ü ß", // "utf8 — string", // "utf8 — string" // }; // var i = 0; // var options = CreateOptions(); // var uri = CreateUri(); // socket = IO.Socket(uri, options); // socket.On("takeUtf8", (data) => // { // events.Enqueue(data); // i++; // log.Info(string.Format("takeUtf8 data={0} i={1}", (string)data, i)); // if (i >= correct.Length) // { // ManualResetEvent.Set(); // } // }); // socket.Emit("getUtf8"); // ManualResetEvent.WaitOne(); // socket.Close(); // var j = 0; // foreach (var obj in events) // { // var str = (string)obj; // Assert.Equal(correct[j++], str); // } //} //[Fact] //public void ShouldConnectToANamespaceAfterConnectionEstablished() //{ // var log = LogManager.GetLogger(Global.CallerName()); // log.Info("Start"); // ManualResetEvent = new ManualResetEvent(false); // Flag = false; // var options = CreateOptions(); // var uri = CreateUri(); // var manager = new Manager( new Uri(uri), options); // socket = manager.Socket("/"); // socket.On(Socket.EVENT_CONNECT, () => // { // var foo = manager.Socket("/foo"); // foo.On(Socket.EVENT_CONNECT, () => // { // Flag = true; // foo.Disconnect(); // socket.Disconnect(); // manager.Close(); // ManualResetEvent.Set(); // }); // foo.Open(); // }); // ManualResetEvent.WaitOne(); // Assert.True(Flag); //} [Fact] public void ShouldOpenANewNamespaceAfterConnectionGetsClosed() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var options = CreateOptions(); var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/"); socket.On(Socket.EVENT_CONNECT, () => { socket.Disconnect(); }); socket.On(Socket.EVENT_DISCONNECT, () => { var foo = manager.Socket("/foo"); foo.On(Socket.EVENT_CONNECT, () => { Flag = true; foo.Disconnect(); socket.Disconnect(); manager.Close(); ManualResetEvent.Set(); }); foo.Open(); }); ManualResetEvent.WaitOne(); Assert.True(Flag); } [Fact] public void ReconnectEventShouldFireInSocket() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var options = CreateOptions(); var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/"); socket.On(Socket.EVENT_RECONNECT, () => { log.Info("EVENT_RECONNECT"); Flag = true; ManualResetEvent.Set(); }); //Task.Delay(2000).Wait(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); manager.EngineSocket.Close(); ManualResetEvent.WaitOne(); log.Info("before EngineSocket close"); Assert.True(Flag); } [Fact] public void ShouldReconnectByDefault() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var options = CreateOptions(); var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/"); manager.On(Socket.EVENT_RECONNECT, () => { log.Info("EVENT_RECONNECT"); Flag = true; socket.Disconnect(); ManualResetEvent.Set(); }); //await Task.Delay(500); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); log.Info("before EngineSocket close"); manager.EngineSocket.Close(); ManualResetEvent.WaitOne(); Assert.True(Flag); } [Fact] public void ShouldTryToReconnectTwiceAndFailWhenRequestedTwoAttemptsWithImmediateTimeoutAndReconnectEnabled() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var reconnects = 0; var options = CreateOptions(); options.Reconnection = true; options.Timeout = 0; options.ReconnectionAttempts = 2; options.ReconnectionDelay = 10; var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); manager.On(Manager.EVENT_RECONNECT_ATTEMPT, () => { log.Info("EVENT_RECONNECT_ATTEMPT"); reconnects++; }); manager.On(Manager.EVENT_RECONNECT_FAILED, () => { log.Info("EVENT_RECONNECT_FAILED"); Flag = true; manager.Close(); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); Assert.True(Flag); Assert.Equal(2,reconnects); } [Fact] public void ShouldFireReconnectEventsOnSocket() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var reconnects = 0; var events = new Queue(); var correct = new int[] { 1,2,2 }; var options = CreateOptions(); options.Reconnection = true; options.Timeout = 0; options.ReconnectionAttempts = 2; options.ReconnectionDelay = 10; var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/timeout_socket"); socket.On(Socket.EVENT_RECONNECT_ATTEMPT, (attempts) => { log.Info("EVENT_RECONNECT_ATTEMPT"); reconnects++; events.Enqueue(int.Parse((attempts).ToString())); }); socket.On(Socket.EVENT_RECONNECT_FAILED, () => { log.Info("EVENT_RECONNECT_FAILED"); Flag = true; events.Enqueue(reconnects); socket.Close(); manager.Close(); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); var j = 0; foreach (var number in events) { Assert.Equal(correct[j++], number); } } [Fact] public void ShouldFireErrorOnSocket() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var events = new Queue(); var options = CreateOptions(); options.Reconnection = true; var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/timeout_socket"); socket.On(Socket.EVENT_ERROR, (e) => { var exception = (EngineIOException) e; log.Info("EVENT_ERROR"); events.Enqueue(exception.code); socket.Close(); manager.Close(); ManualResetEvent.Set(); }); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); manager.EngineSocket.OnPacket(new Packet(Packet.ERROR, "test")); }); ManualResetEvent.WaitOne(); var obj = (string)events.Dequeue(); Assert.Equal("test", obj); } [Fact] public void ShouldFireReconnectingOnSocketWithAttemptsNumberWhenReconnectingTwice() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var reconnects = 0; var events = new Queue(); var correct = new int[] { 1,2,2 }; var options = CreateOptions(); options.Reconnection = true; options.Timeout = 0; options.ReconnectionAttempts = 2; options.ReconnectionDelay = 10; var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/timeout_socket"); socket.On(Socket.EVENT_RECONNECTING, (attempts) => { reconnects++; events.Enqueue(int.Parse((attempts).ToString())); }); socket.On(Socket.EVENT_RECONNECT_FAILED, () => { log.Info("EVENT_RECONNECT_FAILED"); Flag = true; events.Enqueue(reconnects); socket.Close(); manager.Close(); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); var j = 0; foreach (var number in events) { Assert.Equal(correct[j++], number); } } [Fact] public void ShouldNotTryToReconnectAndShouldFormAConnectionWhenConnectingToCorrectPortWithDefaultTimeout() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var options = CreateOptions(); options.Reconnection = true; options.ReconnectionDelay = 10; var uri = CreateUri(); var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/valid"); manager.On(Manager.EVENT_RECONNECT_ATTEMPT, () => { Flag = true; }); socket.On(Socket.EVENT_CONNECT, () => { // set a timeout to let reconnection possibly fire log.Info("EVENT_CONNECT"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); log.Info("after WaitOne"); socket.Close(); manager.Close(); Assert.False(Flag); } [Fact] public void ShouldTryToReconnectTwiceAndFailWhenRequestedTwoAttemptsWithIncorrectAddressAndReconnectEnabled() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var reconnects = 0; var options = CreateOptions(); options.Reconnection = true; options.ReconnectionAttempts = 2; options.ReconnectionDelay = 10; var uri = "http://localhost:3940"; var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/asd"); manager.On(Manager.EVENT_RECONNECT_ATTEMPT, () => { log.Info("EVENT_RECONNECT_ATTEMPT"); reconnects++; }); manager.On(Manager.EVENT_RECONNECT_FAILED, () => { log.Info("EVENT_RECONNECT_FAILED"); Flag = true; socket.Disconnect(); manager.Close(); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); Assert.Equal(2, reconnects); } [Fact] public void ShouldNotTryToReconnectWithIncorrectPortWhenReconnectionDisabled() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var options = CreateOptions(); options.Reconnection = false; var uri = "http://localhost:3940"; var manager = new Manager(new Uri(uri), options); socket = manager.Socket("/invalid"); manager.On(Manager.EVENT_RECONNECT_ATTEMPT, () => { Flag = true; }); manager.On(Manager.EVENT_CONNECT_ERROR, () => { // set a timeout to let reconnection possibly fire log.Info("EVENT_CONNECT_ERROR"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); ManualResetEvent.Set(); }); ManualResetEvent.WaitOne(); log.Info("after WaitOne"); socket.Disconnect(); manager.Close(); Assert.False(Flag); } [Fact] public void ShouldEmitDateAsDate() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("takeDate", (data) => { log.Info("takeDate"); events.Enqueue(data); ManualResetEvent.Set(); }); socket.Emit("getDate"); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = events.Dequeue(); Assert.IsType(obj); } [Fact] public void ShouldEmitDateInObject() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("takeDateObj", (data) => { log.Info("takeDate"); events.Enqueue(data); ManualResetEvent.Set(); }); socket.Emit("getDateObj"); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = (JObject) events.Dequeue(); Assert.IsType(obj); var date = (obj["date"]).Value(); Assert.IsType(date); } [Fact] public void ShouldGetBase64DataAsALastResort() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("takebin", (data) => { events.Enqueue(data); ManualResetEvent.Set(); }); socket.Emit("getbin"); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var binData = (byte[])events.Dequeue(); var exptected = System.Text.Encoding.UTF8.GetBytes("asdfasdf"); var i = 0; foreach (var b in exptected) { Assert.Equal(b, binData[i++]); } } [Fact] public void ShouldGetBinaryDataAsAnArraybuffer() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("doge", (data) => { events.Enqueue(data); ManualResetEvent.Set(); }); socket.Emit("doge"); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var binData = (byte[])events.Dequeue(); var exptected = System.Text.Encoding.UTF8.GetBytes("asdfasdf"); var i = 0; foreach (var b in exptected) { Assert.Equal(b, binData[i++]); } } [Fact] public void ShouldSendBinaryDataAsAnArraybuffer() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var exptected = System.Text.Encoding.UTF8.GetBytes("asdfasdf"); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("buffack", () => { Flag = true; ManualResetEvent.Set(); }); socket.Emit("buffa", exptected); ManualResetEvent.WaitOne(); socket.Close(); Assert.True(Flag); } [Fact] public void BuffAck() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var exptected = System.Text.Encoding.UTF8.GetBytes("asdfasdf"); var options = CreateOptions(); //options.Transports = ImmutableList.Create(Polling.NAME); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("buffack", () => { Flag = true; ManualResetEvent.Set(); }); socket.Emit("buffa", exptected); ManualResetEvent.WaitOne(); //Task.Delay(8000).Wait(); socket.Close(); //Task.Delay(4000).Wait(); Assert.True(Flag); log.Info("Finish"); } [Fact] public void DoubleCallTest() { ShouldSendBinaryDataAsAnArraybufferMixedWithJson(); ShouldSendBinaryDataAsAnArraybufferMixedWithJson(); ShouldSendBinaryDataAsAnArraybufferMixedWithJson(); } [Fact] public void ShouldSendBinaryDataAsAnArraybufferMixedWithJson() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var buf = System.Text.Encoding.UTF8.GetBytes("howdy"); var jobj = new JObject(); jobj.Add("hello", "lol"); jobj.Add("message", buf); jobj.Add("goodbye", "gotcha"); var options = CreateOptions(); //options.Transports = ImmutableList.Create(Polling.NAME); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("jsonbuff-ack", () => { Flag = true; ManualResetEvent.Set(); }); socket.On(Socket.EVENT_DISCONNECT, () => { log.Info("EVENT_DISCONNECT"); }); socket.Emit("jsonbuff", jobj); ManualResetEvent.WaitOne(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); log.Info("About to wait 1sec"); //Task.Delay(1000).Wait(); log.Info("About to call close"); socket.Close(); //Task.Delay(1000).Wait(); Assert.True(Flag); log.Info("Finish"); } [Fact] public void ShouldSendEventsWithArraybuffersInTheCorrectOrder() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); Flag = false; var buf = System.Text.Encoding.UTF8.GetBytes("abuff1"); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On("abuff2-ack", () => { Flag = true; ManualResetEvent.Set(); }); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5)); socket.Emit("abuff1", buf); socket.Emit("abuff2", "please arrive second"); ManualResetEvent.WaitOne(); Assert.True(Flag); } [Fact] public void D10000CharsTest() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Emit("d10000chars"); }); socket.On("d10000chars", (data) => { log.Info("EVENT_MESSAGE data="+data); events.Enqueue(data); ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = (string)events.Dequeue(); Assert.Equal(10000, obj.Length); } [Fact] public void D100000CharsTest() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Emit("d100000chars"); }); socket.On("d100000chars", (data) => { log.Info("EVENT_MESSAGE data=" + data); events.Enqueue(data); ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = (string)events.Dequeue(); Assert.Equal(100000, obj.Length); } [Fact] public void Json10000CharsTest() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Emit("json10000chars"); }); socket.On("json10000chars", (data) => { log.Info("EVENT_MESSAGE data=" + data); events.Enqueue(data); ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = (JObject)events.Dequeue(); var str = (string)obj["data"]; Assert.Equal(10000, str.Length); } [Fact] public void Json10000000CharsTest() { var log = LogManager.GetLogger(Global.CallerName()); log.Info("Start"); ManualResetEvent = new ManualResetEvent(false); var events = new Queue(); var options = CreateOptions(); var uri = CreateUri(); socket = IO.Socket(uri, options); socket.On(Socket.EVENT_CONNECT, () => { log.Info("EVENT_CONNECT"); socket.Emit("json10000000chars"); }); socket.On("json10000000chars", (data) => { log.Info("EVENT_MESSAGE data=" + data); events.Enqueue(data); ManualResetEvent.Set(); }); //socket.Open(); ManualResetEvent.WaitOne(); socket.Close(); var obj = (JObject)events.Dequeue(); var str = (string)obj["data"]; Assert.Equal(10000000, str.Length); } } }