Added NightAlert project for travel kit

This commit is contained in:
2021-06-10 14:39:06 -04:00
commit d38d9e3b7e
308 changed files with 35922 additions and 0 deletions

View File

@@ -0,0 +1,186 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Modules;
using System.Collections.Generic;
using System.Threading;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class BinaryPollingTest : Connection
{
//[Fact]
//public void PingTest()
//{
// var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
// log.Info("Start");
// var binaryData = new byte[5];
// for (int i = 0; i < binaryData.Length; i++)
// {
// binaryData[i] = (byte)i;
// }
// var events = new Queue<object>();
// var options = CreateOptions();
// options.Transports = new List<string>(){"polling"};
// var socket = new Socket(options);
// socket.On(Socket.EVENT_OPEN, () =>
// {
// log.Info("EVENT_OPEN");
// socket.Send(binaryData);
// socket.Send("cash money €€€");
// });
// socket.On(Socket.EVENT_MESSAGE, (d) =>
// {
// var data = d as string;
// log.Info(string.Format("EVENT_MESSAGE data ={0} d = {1} ", data, d));
// if (data == "hi")
// {
// return;
// }
// events.Enqueue(d);
// //socket.Close();
// });
// socket.Open();
// Task.Delay(20000).Wait();
// socket.Close();
// log.Info("ReceiveBinaryData end");
// var binaryData2 = new byte[5];
// for (int i = 0; i < binaryData2.Length; i++)
// {
// binaryData2[i] = (byte)(i + 1);
// }
// object result;
// events.TryDequeue(out result);
// Assert.Equal("1", "1");
//}
private ManualResetEvent _manualResetEvent = null;
[Fact]
public void ReceiveBinaryData()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var binaryData = new byte[5];
for (int i = 0; i < binaryData.Length; i++)
{
binaryData[i] = (byte)i;
}
var options = CreateOptions();
options.Transports = new List<string>() { "polling" };
var socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket.Send(binaryData);
//socket.Send("cash money €€€");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = d as string;
log.Info(string.Format("EVENT_MESSAGE data ={0} d = {1} ", data, d));
if (data == "hi")
{
return;
}
events.Enqueue(d);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
log.Info("ReceiveBinaryData end");
var binaryData2 = new byte[5];
for (int i = 0; i < binaryData2.Length; i++)
{
binaryData2[i] = (byte)(i + 1);
}
object result;
result = events.Dequeue();
Assert.Equal(binaryData, result);
}
[Fact]
public void ReceiveBinaryDataAndMultibyteUTF8String()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var binaryData = new byte[5];
for (int i = 0; i < binaryData.Length; i++)
{
binaryData[i] = (byte)i;
}
const string stringData = "cash money €€€";
var options = CreateOptions();
options.Transports = new List<string>() { "polling" };
var socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = d as string;
log.Info(string.Format("EVENT_MESSAGE data ={0} d = {1} ", data, d));
if (data == "hi")
{
return;
}
events.Enqueue(d);
if (events.Count > 1)
{
_manualResetEvent.Set();
}
});
socket.Send(binaryData);
socket.Send(stringData);
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
var binaryData2 = new byte[5];
for (int i = 0; i < binaryData2.Length; i++)
{
binaryData2[i] = (byte)(i + 1);
}
object result;
result = events.Dequeue();
Assert.Equal(binaryData, result);
result = events.Dequeue();
Assert.Equal(stringData, (string)result);
socket.Close();
}
}
}

View File

@@ -0,0 +1,138 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Modules;
using System.Collections.Generic;
using System.Threading;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class BinaryWebSocketTest : Connection
{
private ManualResetEvent _manualResetEvent = null;
[Fact]
public void ReceiveBinaryData()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var binaryData = new byte[5];
for (int i = 0; i < binaryData.Length; i++)
{
binaryData[i] = (byte)(i + 0);
}
var options = CreateOptions();
var socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info(Socket.EVENT_OPEN);
});
socket.On(Socket.EVENT_UPGRADE, () =>
{
log.Info(Socket.EVENT_UPGRADE);
socket.Send(binaryData);
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = d as string;
log.Info(string.Format("EVENT_MESSAGE data ={0} d = {1} ", data, d));
if (data == "hi")
{
return;
}
events.Enqueue(d);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
log.Info("ReceiveBinaryData end");
var binaryData2 = new byte[5];
for (int i = 0; i < binaryData2.Length; i++)
{
binaryData2[i] = (byte)(i + 1);
}
object result;
result = events.Dequeue();
Assert.Equal(binaryData, result);
}
[Fact]
public void ReceiveBinaryDataAndMultibyteUTF8String()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var binaryData = new byte[5];
for (int i = 0; i < binaryData.Length; i++)
{
binaryData[i] = (byte)i;
}
const string stringData = "Ä ä Ü ü ß";
var options = CreateOptions();
var socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
});
socket.On(Socket.EVENT_UPGRADE, () =>
{
log.Info(Socket.EVENT_UPGRADE);
socket.Send(binaryData);
socket.Send(stringData);
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = d as string;
log.Info(string.Format("EVENT_MESSAGE data ={0} d = {1} ", data, d));
if (data == "hi")
{
return;
}
events.Enqueue(d);
if (events.Count > 1)
{
_manualResetEvent.Set();
}
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
var binaryData2 = new byte[5];
for (int i = 0; i < binaryData2.Length; i++)
{
binaryData2[i] = (byte)(i + 1);
}
object result;
result = events.Dequeue();
Assert.Equal(binaryData, result);
result = events.Dequeue();
Assert.Equal(stringData, (string)result);
log.Info("ReceiveBinaryDataAndMultibyteUTF8String end");
}
}
}

View File

@@ -0,0 +1,44 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Modules;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class Connection
{
static Connection()
{
LogManager.SetupLogManager();
}
protected Socket.Options CreateOptions()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
//var config = ConfigBase.Load();
var options = new Socket.Options
{
Port = ConnectionConstants.PORT,
Hostname = ConnectionConstants.HOSTNAME
};
log.Info("Please add to your hosts file: 127.0.0.1 " + options.Hostname);
return options;
}
protected Socket.Options CreateOptionsSecure()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
//var config = ConfigBase.Load();
var options = new Socket.Options
{
Port = ConnectionConstants.SSL_PORT,
Hostname = ConnectionConstants.HOSTNAME,
Secure = true,
IgnoreServerCertificateValidation = true
};
log.Info("Please add to your hosts file: 127.0.0.1 " + options.Hostname);
return options;
}
}
}

View File

@@ -0,0 +1,10 @@
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public static class ConnectionConstants
{
public static int PORT = 80;
public static string HOSTNAME = "testme.quobject.com";
public static int SSL_PORT = 443;
public static readonly int TIMEOUT = 300000;
}
}

View File

@@ -0,0 +1,227 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using Quobject.EngineIoClientDotNet.Modules;
using System;
using System.Collections.Generic;
using System.Threading;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class ConnectionTest : Connection
{
private ManualResetEvent _manualResetEvent = null;
private Socket socket;
public string Message;
[Fact]
public void ConnectToLocalhost()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var options = CreateOptions();
socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, new TestListener());
socket.On(Socket.EVENT_MESSAGE, new MessageListener(socket, this));
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.Equal("hi", this.Message);
}
public class TestListener : IListener
{
public void Call(params object[] args)
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("open");
}
public int CompareTo(IListener other)
{
return this.GetId().CompareTo(other.GetId());
}
public int GetId()
{
return 0;
}
}
public class MessageListener : IListener
{
private Socket socket;
private ConnectionTest connectionTest;
public MessageListener(Socket socket)
{
this.socket = socket;
}
public MessageListener(Socket socket, ConnectionTest connectionTest)
{
this.socket = socket;
this.connectionTest = connectionTest;
}
public void Call(params object[] args)
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("message = " + args[0]);
connectionTest.Message = (string)args[0];
connectionTest._manualResetEvent.Set();
}
public int CompareTo(IListener other)
{
return this.GetId().CompareTo(other.GetId());
}
public int GetId()
{
return 0;
}
}
[Fact]
public void ConnectToLocalhost2()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
this.Message = "";
var options = CreateOptions();
options.Transports = new List<string>() { "polling" };
socket = new Socket(options);
//socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("open");
//socket.Send("test send");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info("message2 = " + data);
this.Message = data;
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.Equal("hi", this.Message);
}
[Fact]
public void TestmultibyteUtf8StringsWithPolling()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
const string SendMessage = "cash money €€€";
socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("open");
socket.Send(SendMessage);
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info("TestMessage data = " + data);
if (data == "hi")
{
return;
}
this.Message = data;
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
log.Info("TestmultibyteUtf8StringsWithPolling this.Message = " + this.Message);
Assert.Equal(SendMessage, this.Message);
}
[Fact]
public void Testemoji()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
const string SendMessage = "\uD800-\uDB7F\uDB80-\uDBFF\uDC00-\uDFFF\uE000-\uF8FF";
var options = CreateOptions();
socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("open");
socket.Send(SendMessage);
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info(Socket.EVENT_MESSAGE);
if (data == "hi")
{
return;
}
this.Message = data;
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.True(SendMessage == this.Message);
}
[Fact]
public void NotSendPacketsIfSocketCloses()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var noPacket = true;
socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_OPEN, () =>
{
noPacket = true;
});
socket.Open();
socket.On(Socket.EVENT_PACKET_CREATE, () =>
{
noPacket = false;
log.Info("NotSendPacketsIfSocketCloses EVENT_PACKET_CREATE noPacket = " + noPacket);
});
socket.Close();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
//await Task.Delay(1000);
log.Info("NotSendPacketsIfSocketCloses end noPacket = " + noPacket);
Assert.True(noPacket);
}
}
}

View File

@@ -0,0 +1,26 @@
using Quobject.EngineIoClientDotNet.Client;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class HandshakeDataTests
{
[Fact]
public void Test()
{
var json = @"{
sid: 'nne323',
upgrades: ['u1','u2'],
pingInterval: 12,
pingTimeout: 23
}";
var handshakeData = new HandshakeData(json);
Assert.Equal("u1", handshakeData.Upgrades[0]);
Assert.Equal("u2", handshakeData.Upgrades[1]);
Assert.Equal(12, handshakeData.PingInterval);
Assert.Equal(23, handshakeData.PingTimeout);
}
}
}

View File

@@ -0,0 +1,283 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Client.Transports;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using Quobject.EngineIoClientDotNet.Modules;
using System.Collections.Generic;
using System.Threading;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class SSLServerConnectionTest : Connection
{
private ManualResetEvent _manualResetEvent = null;
[Fact]
public void OpenAndClose()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<string>();
var socket = new Socket(CreateOptionsSecure());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
events.Enqueue(Socket.EVENT_OPEN);
socket.Close();
});
socket.On(Socket.EVENT_CLOSE, () =>
{
log.Info("EVENT_CLOSE");
events.Enqueue(Socket.EVENT_CLOSE);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
string result;
result = events.Dequeue();
Assert.Equal(Socket.EVENT_OPEN, result);
result = events.Dequeue();
Assert.Equal(Socket.EVENT_CLOSE, result);
}
[Fact]
public void Messages()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<string>();
var socket = new Socket(CreateOptionsSecure());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket.Send("hello");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info("EVENT_MESSAGE data = " + data);
events.Enqueue(data);
if (events.Count > 1)
{
_manualResetEvent.Set();
}
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
string result;
result = events.Dequeue();
Assert.Equal("hi", result);
result = events.Dequeue();
Assert.Equal("hello", result);
}
[Fact]
public void Handshake()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
HandshakeData handshake_data = null;
var socket = new Socket(CreateOptionsSecure());
socket.On(Socket.EVENT_HANDSHAKE, (data) =>
{
log.Info(Socket.EVENT_HANDSHAKE + string.Format(" data = {0}", data));
handshake_data = data as HandshakeData;
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.NotNull(handshake_data);
Assert.NotNull(handshake_data.Upgrades);
Assert.True(handshake_data.Upgrades.Count > 0);
Assert.True(handshake_data.PingInterval > 0);
Assert.True(handshake_data.PingTimeout > 0);
}
public class TestHandshakeListener : IListener
{
public HandshakeData HandshakeData;
private SSLServerConnectionTest serverConnectionTest;
public TestHandshakeListener(SSLServerConnectionTest serverConnectionTest)
{
this.serverConnectionTest = serverConnectionTest;
}
public void Call(params object[] args)
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info(string.Format("open args[0]={0} args.Length={1}", args[0], args.Length));
HandshakeData = args[0] as HandshakeData;
serverConnectionTest._manualResetEvent.Set();
}
public int CompareTo(IListener other)
{
return this.GetId().CompareTo(other.GetId());
}
public int GetId()
{
return 0;
}
}
[Fact]
public void Handshake2()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket = new Socket(CreateOptionsSecure());
var testListener = new TestHandshakeListener(this);
socket.On(Socket.EVENT_HANDSHAKE, testListener);
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.NotNull(testListener.HandshakeData);
Assert.NotNull(testListener.HandshakeData.Upgrades);
Assert.True(testListener.HandshakeData.Upgrades.Count > 0);
Assert.True(testListener.HandshakeData.PingInterval > 0);
Assert.True(testListener.HandshakeData.PingTimeout > 0);
}
[Fact]
public void Upgrade()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var socket = new Socket(CreateOptionsSecure());
socket.On(Socket.EVENT_UPGRADING, (data) =>
{
log.Info(Socket.EVENT_UPGRADING + string.Format(" data = {0}", data));
events.Enqueue(data);
});
socket.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
events.Enqueue(data);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
object test = null;
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
}
[Fact]
public void RememberWebsocket()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptionsSecure());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket1TransportName = socket1.Transport.Name;
});
socket1.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
var transport = (Transport)data;
socket1.Close();
if (WebSocket.NAME == transport.Name)
{
var options = CreateOptionsSecure();
options.RememberUpgrade = true;
var socket2 = new Socket(options);
socket2.Open();
socket2TransportName = socket2.Transport.Name;
socket2.Close();
_manualResetEvent.Set();
}
});
socket1.Open();
_manualResetEvent.WaitOne();
Assert.Equal(Polling.NAME, socket1TransportName);
Assert.Equal(WebSocket.NAME, socket2TransportName);
}
[Fact]
public void NotRememberWebsocket()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptionsSecure());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket1TransportName = socket1.Transport.Name;
});
socket1.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
var transport = (Transport)data;
if (WebSocket.NAME == transport.Name)
{
socket1.Close();
var options = CreateOptionsSecure();
options.RememberUpgrade = false;
var socket2 = new Socket(options);
socket2.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN socket 2");
socket2TransportName = socket2.Transport.Name;
socket2.Close();
_manualResetEvent.Set();
});
socket2.Open();
}
});
socket1.Open();
_manualResetEvent.WaitOne();
Assert.Equal(Polling.NAME, socket1TransportName);
Assert.Equal(Polling.NAME, socket2TransportName);
}
}
}

View File

@@ -0,0 +1,373 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Client.Transports;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using Quobject.EngineIoClientDotNet.Modules;
using System.Collections.Generic;
using System.Threading;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class ServerConnectionTest : Connection
{
private ManualResetEvent _manualResetEvent = null;
[Fact]
public void OpenAndClose()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<string>();
var socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
events.Enqueue(Socket.EVENT_OPEN);
socket.Close();
});
socket.On(Socket.EVENT_CLOSE, () =>
{
log.Info("EVENT_CLOSE");
events.Enqueue(Socket.EVENT_CLOSE);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
string result;
result = events.Dequeue();
Assert.Equal(Socket.EVENT_OPEN, result);
result = events.Dequeue();
Assert.Equal(Socket.EVENT_CLOSE, result);
}
[Fact]
public void Messages()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<string>();
var socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket.Send("hello");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info("EVENT_MESSAGE data = " + data);
events.Enqueue(data);
if (events.Count > 1)
{
_manualResetEvent.Set();
}
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
string result;
result = events.Dequeue();
Assert.Equal("hi", result);
result = events.Dequeue();
Assert.Equal("hello", result);
}
[Fact]
public void Handshake()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
HandshakeData handshake_data = null;
var socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_HANDSHAKE, (data) =>
{
log.Info(Socket.EVENT_HANDSHAKE + string.Format(" data = {0}", data));
handshake_data = data as HandshakeData;
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.NotNull(handshake_data);
Assert.NotNull(handshake_data.Upgrades);
Assert.True(handshake_data.Upgrades.Count > 0);
Assert.True(handshake_data.PingInterval > 0);
Assert.True(handshake_data.PingTimeout > 0);
}
public class TestHandshakeListener : IListener
{
public HandshakeData HandshakeData;
private ServerConnectionTest serverConnectionTest;
public TestHandshakeListener(ServerConnectionTest serverConnectionTest)
{
this.serverConnectionTest = serverConnectionTest;
}
public void Call(params object[] args)
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info(string.Format("open args[0]={0} args.Length={1}", args[0], args.Length));
HandshakeData = args[0] as HandshakeData;
serverConnectionTest._manualResetEvent.Set();
}
public int CompareTo(IListener other)
{
return this.GetId().CompareTo(other.GetId());
}
public int GetId()
{
return 0;
}
}
[Fact]
public void Handshake2()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket = new Socket(CreateOptions());
var testListener = new TestHandshakeListener(this);
socket.On(Socket.EVENT_HANDSHAKE, testListener);
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
Assert.NotNull(testListener.HandshakeData);
Assert.NotNull(testListener.HandshakeData.Upgrades);
Assert.True(testListener.HandshakeData.Upgrades.Count > 0);
Assert.True(testListener.HandshakeData.PingInterval > 0);
Assert.True(testListener.HandshakeData.PingTimeout > 0);
}
[Fact]
public void Upgrade()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var socket = new Socket(CreateOptions());
socket.On(Socket.EVENT_UPGRADING, (data) =>
{
log.Info(Socket.EVENT_UPGRADING + string.Format(" data = {0}", data));
events.Enqueue(data);
});
socket.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
events.Enqueue(data);
_manualResetEvent.Set();
});
socket.Open();
_manualResetEvent.WaitOne();
object test = null;
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
}
[Fact]
public void RememberWebsocket()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptions());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket1TransportName = socket1.Transport.Name;
});
socket1.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
var transport = (Transport)data;
socket1.Close();
if (WebSocket.NAME == transport.Name)
{
var options = CreateOptions();
options.RememberUpgrade = true;
var socket2 = new Socket(options);
socket2.Open();
socket2TransportName = socket2.Transport.Name;
socket2.Close();
_manualResetEvent.Set();
}
});
socket1.Open();
_manualResetEvent.WaitOne();
Assert.Equal(Polling.NAME, socket1TransportName);
Assert.Equal(WebSocket.NAME, socket2TransportName);
}
[Fact]
public void NotRememberWebsocket()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptions());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket1TransportName = socket1.Transport.Name;
});
socket1.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
var transport = (Transport)data;
if (WebSocket.NAME == transport.Name)
{
socket1.Close();
var options = CreateOptions();
options.RememberUpgrade = false;
var socket2 = new Socket(options);
socket2.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN socket 2");
socket2TransportName = socket2.Transport.Name;
socket2.Close();
_manualResetEvent.Set();
});
socket2.Open();
}
});
socket1.Open();
_manualResetEvent.WaitOne();
Assert.Equal(Polling.NAME, socket1TransportName);
Assert.Equal(Polling.NAME, socket2TransportName);
}
[Fact]
public void Cookie()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<string>();
var options = CreateOptions();
options.Cookies.Add("foo", "bar");
var socket = new Socket(options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
socket.Send("cookie");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
var data = (string)d;
log.Info("EVENT_MESSAGE data = " + data);
events.Enqueue(data);
if (events.Count > 1)
{
_manualResetEvent.Set();
}
});
socket.Open();
_manualResetEvent.WaitOne();
socket.Close();
string result;
result = events.Dequeue();
Assert.Equal("hi", result);
result = events.Dequeue();
Assert.Equal("got cookie", result);
}
[Fact]
public void UpgradeCookie()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
_manualResetEvent = new ManualResetEvent(false);
var events = new Queue<object>();
var options = CreateOptions();
options.Cookies.Add("foo", "bar");
var socket = new Socket(options);
socket.On(Socket.EVENT_UPGRADING, (data) =>
{
log.Info(Socket.EVENT_UPGRADING + string.Format(" data = {0}", data));
events.Enqueue(data);
});
socket.On(Socket.EVENT_UPGRADE, (data) =>
{
log.Info(Socket.EVENT_UPGRADE + string.Format(" data = {0}", data));
events.Enqueue(data);
socket.Send("cookie");
});
socket.On(Socket.EVENT_MESSAGE, (d) =>
{
if (events.Count > 1)
{
var data = (string)d;
log.Info("EVENT_MESSAGE data = " + data);
events.Enqueue(data);
_manualResetEvent.Set();
}
});
socket.Open();
_manualResetEvent.WaitOne();
object test = null;
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
test = events.Dequeue();
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
test = events.Dequeue();
Assert.Equal("got cookie", test);
}
}
}

View File

@@ -0,0 +1,77 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Modules;
using System;
using System.Collections.Generic;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class SocketTest : Connection
{
private Socket socket;
public string Message;
[Fact]
public void FilterUpgrades()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = CreateOptions();
options.Transports = new List<string>() { "polling" };
socket = new Socket(options);
var List = socket.FilterUpgrades(new List<string>() { "polling", "websocket" });
Assert.Equal("polling", List[0]);
Assert.Equal(1, List.Count);
}
[Fact]
public void SocketClosing()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var closed = false;
var error = false;
var options = CreateOptions();
socket = new Socket("ws://0.0.0.0:8080", options);
socket.On(Socket.EVENT_OPEN, () =>
{
log.Info("EVENT_OPEN");
//socket.Send("test send");
});
socket.On(Socket.EVENT_CLOSE, () =>
{
log.Info("EVENT_CLOSE = ");
closed = true;
});
socket.Once(Socket.EVENT_ERROR, () =>
{
log.Info("EVENT_ERROR = ");
error = true;
});
socket.Open();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
//Task.Delay(1000);
Assert.True(closed);
Assert.True(error);
}
[Fact]
public void SocketOptionCookies()
{
var options = new Socket.Options();
options.Cookies.Add("foo", "bar");
Assert.Equal("foo=bar", options.GetCookiesAsString());
options.Cookies.Add("name2", "value2");
Assert.Equal("foo=bar; name2=value2", options.GetCookiesAsString());
}
}
}

View File

@@ -0,0 +1,182 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Client.Transports;
using Quobject.EngineIoClientDotNet.Modules;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
// NOTE: tests for the rememberUpgrade option are on ServerConnectionTest.
public class TransportTest : Connection
{
[Fact]
public void Constructors()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var socket = new Socket(CreateOptions());
socket.Open();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
Assert.NotNull(socket.Transport);
socket.Close();
}
[Fact]
public void Uri()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = this.CreateOptions().Hostname;
options.Secure = false;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = false;
var polling = new Polling(options);
var expected = string.Format("http://{0}/engine.io?sid=test&b64=1", options.Hostname);
Assert.Contains(expected, polling.Uri());
}
[Fact]
public void UriWithDefaultPort()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = this.CreateOptions().Hostname;
options.Secure = false;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = false;
options.Port = 80;
var polling = new Polling(options);
//Assert.Contains("http://localhost/engine.io?sid=test&b64=1", polling.Uri());
var expected = string.Format("http://{0}/engine.io?sid=test&b64=1", options.Hostname);
Assert.Contains(expected, polling.Uri());
}
[Fact]
public void UriWithPort()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = this.CreateOptions().Hostname;
options.Secure = false;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = false;
options.Port = 3000;
var polling = new Polling(options);
//Assert.Contains("http://localhost:3000/engine.io?sid=test&b64=1", polling.Uri());
var expected = string.Format("http://{0}:{1}/engine.io?sid=test&b64=1", options.Hostname, options.Port);
Assert.Contains(expected, polling.Uri());
}
[Fact]
public void HttpsUriWithDefaultPort()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = this.CreateOptions().Hostname;
options.Secure = true;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = false;
options.Port = 443;
var polling = new Polling(options);
//Assert.Contains("https://localhost/engine.io?sid=test&b64=1", polling.Uri());
var expected = string.Format("https://{0}/engine.io?sid=test&b64=1", options.Hostname);
Assert.Contains(expected, polling.Uri());
}
[Fact]
public void TimestampedUri()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = "test";
options.Secure = false;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = true;
options.TimestampParam = "t";
var polling = new Polling(options);
string pat = @"http://test/engine.io\?sid=test&(t=[0-9]+-[0-9]+)";
var r = new Regex(pat, RegexOptions.IgnoreCase);
var test = polling.Uri();
log.Info(test);
Match m = r.Match(test);
Assert.True(m.Success);
}
[Fact]
public void WsUri()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = "test";
options.Secure = false;
options.Query = new Dictionary<string, string> { { "transport", "websocket" } };
options.TimestampRequests = false;
var ws = new WebSocket(options);
Assert.Contains("ws://test/engine.io?transport=websocket", ws.Uri());
}
[Fact]
public void WssUri()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = "test";
options.Secure = true;
options.Query = new Dictionary<string, string> { { "transport", "websocket" } };
options.TimestampRequests = false;
var ws = new WebSocket(options);
Assert.Contains("wss://test/engine.io?transport=websocket", ws.Uri());
}
[Fact]
public void WsTimestampedUri()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = new Transport.Options();
options.Path = "/engine.io";
options.Hostname = "test";
options.Secure = false;
options.Query = new Dictionary<string, string> { { "sid", "test" } };
options.TimestampRequests = true;
options.TimestampParam = "woot";
var ws = new WebSocket(options);
string pat = @"ws://test/engine.io\?sid=test&(woot=[0-9]+-[0-9]+)";
var r = new Regex(pat, RegexOptions.IgnoreCase);
var test = ws.Uri();
log.Info(test);
Match m = r.Match(test);
Assert.True(m.Success);
}
}
}

View File

@@ -0,0 +1,52 @@
using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Modules;
using System;
using Xunit;
namespace Quobject.EngineIoClientDotNet_Tests.ClientTests
{
public class UsageTest : Connection
{
[Fact]
public void Usage1()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = CreateOptions();
var socket = new Socket(options);
//You can use `Socket` to connect:
//var socket = new Socket("ws://localhost");
socket.On(Socket.EVENT_OPEN, () =>
{
socket.Send("hi");
socket.Close();
});
socket.Open();
//System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));
}
[Fact]
public void Usage2()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
log.Info("Start");
var options = CreateOptions();
var socket = new Socket(options);
//Receiving data
//var socket = new Socket("ws://localhost:3000");
socket.On(Socket.EVENT_OPEN, () =>
{
socket.On(Socket.EVENT_MESSAGE, (data) => Console.WriteLine((string)data));
});
socket.Open();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));
socket.Close();
}
}
}