Files
NightAlert/ThirdParty/EngineIoClientDotNet/Src/EngineIoClientDotNet.Tests.mono/ClientTests/ServerConnectionTest.cs

451 lines
14 KiB
C#

using Quobject.EngineIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Client.Transports;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using System.Collections.Concurrent;
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()
{
_manualResetEvent = new ManualResetEvent(false);
var events = new ConcurrentQueue<string>();
var options = CreateOptions();
options.Query = new Dictionary<string, string>
{
{
"access_token", "akaka"
}
};
options.QueryString = "akka=ekek";
var socket = new Socket(options);
socket.On(Socket.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;
events.TryDequeue(out result);
Assert.Equal(Socket.EVENT_OPEN, result);
events.TryDequeue(out result);
Assert.Equal(Socket.EVENT_CLOSE, result);
}
[Fact]
public void Messages()
{
_manualResetEvent = new ManualResetEvent(false);
var events = new ConcurrentQueue<string>();
var socket = new Socket(CreateOptions());
socket.On(Socket.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;
events.TryDequeue(out result);
Assert.Equal("hi", result);
events.TryDequeue(out result);
Assert.Equal("hello", result);
}
[Fact]
public void Handshake()
{
_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)
{
//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()
{
_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()
{
_manualResetEvent = new ManualResetEvent(false);
var events = new ConcurrentQueue<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;
events.TryDequeue(out test);
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
events.TryDequeue(out test);
Assert.NotNull(test);
Assert.IsAssignableFrom<Transport>(test);
}
[Fact]
public void RememberWebsocket()
{
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptions());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.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()
{
_manualResetEvent = new ManualResetEvent(false);
var socket1 = new Socket(CreateOptions());
string socket1TransportName = null;
string socket2TransportName = null;
socket1.On(Socket.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);
}
//Fails in .netstandard1.3 for EngineIoClientDotNet 1.0.4
[Fact]
public void Cookie()
{
_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, () =>
{
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);
}
//Fails in .netstandard1.3 for EngineIoClientDotNet 1.0.4
[Fact]
public void UpgradeCookie()
{
_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);
}
//[Fact]
//public void PrimusEndpoint()
//{
// 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");
// options.Hostname = "testme.quobject.com/";
// options.Path = "primus";
// var socket = new Socket(options);
// //var socket = new Socket("testme.quobject.com");
// 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 MessagesMulti()
//{
// //logManager.Enabled = true;
// var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod());
// //log.Info("Start");
// _manualResetEvent = new ManualResetEvent(false);
// var events = new ConcurrentQueue<string>();
// int count = 200;
// var socket = new Socket(CreateOptions());
// socket.On(Socket.EVENT_OPEN, () =>
// {
// //log.Info("EVENT_OPEN");
// Task.Run(() =>
// {
// for (int i = 0; i < count; i++)
// {
// socket.Send("multi");
// Task.Delay(TimeSpan.FromSeconds(1)).Wait();
// }
// });
// });
// socket.On(Socket.EVENT_MESSAGE, (d) =>
// {
// var data = (string)d;
// //log.Info("EVENT_MESSAGE data = " + data);
// events.Enqueue(data);
// if (events.Count > count)
// {
// _manualResetEvent.Set();
// }
// });
// socket.Open();
// _manualResetEvent.WaitOne();
// socket.Close();
// string result;
// events.TryDequeue(out result);
// Assert.Equal("hi", result);
// events.TryDequeue(out result);
// Assert.Equal("multi", result);
//}
}
}