mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-07 16:06:15 +00:00
commit 90f285d7f6bcd926ce9ca3d5832b1d70a5eae6ab Author: JKorf <jankorf91@gmail.com> Date: Sun Jun 25 19:51:12 2023 +0200 Docs commit 72187035c703d1402b37bd2f4c3e066706f28d67 Author: JKorf <jankorf91@gmail.com> Date: Sat Jun 24 16:02:53 2023 +0200 docs commit 8411977292f1fb0b6e0705b1ad675b79a5311d90 Author: JKorf <jankorf91@gmail.com> Date: Fri Jun 23 18:25:15 2023 +0200 wip commit cb7d33aad5d2751104c8b8a6c6eadbf0d36b672c Author: JKorf <jankorf91@gmail.com> Date: Fri Jun 2 19:26:26 2023 +0200 wip commit 4359a2d05ea1141cff516dab18f364a6ca854e18 Author: JKorf <jankorf91@gmail.com> Date: Wed May 31 20:51:36 2023 +0200 wip commit c6adb1b2f728d143f6bd667139c619581122a3c9 Author: JKorf <jankorf91@gmail.com> Date: Mon May 1 21:13:47 2023 +0200 wip commit 7fee733f82fa6ff574030452f0955c9e817647dd Author: JKorf <jankorf91@gmail.com> Date: Thu Apr 27 13:02:56 2023 +0200 wip commit f8057313ffc9b0c31effcda71d35d105ea390971 Author: JKorf <jankorf91@gmail.com> Date: Mon Apr 17 21:37:51 2023 +0200 wip
169 lines
6.0 KiB
C#
169 lines
6.0 KiB
C#
using System;
|
|
using System.Threading;
|
|
using CryptoExchange.Net.Objects;
|
|
using CryptoExchange.Net.Sockets;
|
|
using CryptoExchange.Net.UnitTests.TestImplementations;
|
|
using Microsoft.Extensions.Logging;
|
|
using Newtonsoft.Json.Linq;
|
|
using NUnit.Framework;
|
|
|
|
namespace CryptoExchange.Net.UnitTests
|
|
{
|
|
[TestFixture]
|
|
public class SocketClientTests
|
|
{
|
|
[TestCase]
|
|
public void SettingOptions_Should_ResultInOptionsSet()
|
|
{
|
|
//arrange
|
|
//act
|
|
var client = new TestSocketClient(options =>
|
|
{
|
|
options.SubOptions.ApiCredentials = new Authentication.ApiCredentials("1", "2");
|
|
options.SubOptions.MaxSocketConnections = 1;
|
|
});
|
|
|
|
|
|
//assert
|
|
Assert.NotNull(client.SubClient.ApiOptions.ApiCredentials);
|
|
Assert.AreEqual(1, client.SubClient.ApiOptions.MaxSocketConnections);
|
|
}
|
|
|
|
[TestCase(true)]
|
|
[TestCase(false)]
|
|
public void ConnectSocket_Should_ReturnConnectionResult(bool canConnect)
|
|
{
|
|
//arrange
|
|
var client = new TestSocketClient();
|
|
var socket = client.CreateSocket();
|
|
socket.CanConnect = canConnect;
|
|
|
|
//act
|
|
var connectResult = client.SubClient.ConnectSocketSub(new SocketConnection(new TraceLogger(), client.SubClient, socket, null));
|
|
|
|
//assert
|
|
Assert.IsTrue(connectResult.Success == canConnect);
|
|
}
|
|
|
|
[TestCase]
|
|
public void SocketMessages_Should_BeProcessedInDataHandlers()
|
|
{
|
|
// arrange
|
|
var client = new TestSocketClient(options => {
|
|
options.ReconnectInterval = TimeSpan.Zero;
|
|
});
|
|
var socket = client.CreateSocket();
|
|
socket.ShouldReconnect = true;
|
|
socket.CanConnect = true;
|
|
socket.DisconnectTime = DateTime.UtcNow;
|
|
var sub = new SocketConnection(new TraceLogger(), client.SubClient, socket, null);
|
|
var rstEvent = new ManualResetEvent(false);
|
|
JToken result = null;
|
|
sub.AddSubscription(SocketSubscription.CreateForIdentifier(10, "TestHandler", true, false, (messageEvent) =>
|
|
{
|
|
result = messageEvent.JsonData;
|
|
rstEvent.Set();
|
|
}));
|
|
client.SubClient.ConnectSocketSub(sub);
|
|
|
|
// act
|
|
socket.InvokeMessage("{\"property\": 123}");
|
|
rstEvent.WaitOne(1000);
|
|
|
|
// assert
|
|
Assert.IsTrue((int)result["property"] == 123);
|
|
}
|
|
|
|
[TestCase(false)]
|
|
[TestCase(true)]
|
|
public void SocketMessages_Should_ContainOriginalDataIfEnabled(bool enabled)
|
|
{
|
|
// arrange
|
|
var client = new TestSocketClient(options => {
|
|
options.ReconnectInterval = TimeSpan.Zero;
|
|
options.SubOptions.OutputOriginalData = enabled;
|
|
});
|
|
var socket = client.CreateSocket();
|
|
socket.ShouldReconnect = true;
|
|
socket.CanConnect = true;
|
|
socket.DisconnectTime = DateTime.UtcNow;
|
|
var sub = new SocketConnection(new TraceLogger(), client.SubClient, socket, null);
|
|
var rstEvent = new ManualResetEvent(false);
|
|
string original = null;
|
|
sub.AddSubscription(SocketSubscription.CreateForIdentifier(10, "TestHandler", true, false, (messageEvent) =>
|
|
{
|
|
original = messageEvent.OriginalData;
|
|
rstEvent.Set();
|
|
}));
|
|
client.SubClient.ConnectSocketSub(sub);
|
|
|
|
// act
|
|
socket.InvokeMessage("{\"property\": 123}");
|
|
rstEvent.WaitOne(1000);
|
|
|
|
// assert
|
|
Assert.IsTrue(original == (enabled ? "{\"property\": 123}" : null));
|
|
}
|
|
|
|
[TestCase()]
|
|
public void UnsubscribingStream_Should_CloseTheSocket()
|
|
{
|
|
// arrange
|
|
var client = new TestSocketClient(options => {
|
|
options.ReconnectInterval = TimeSpan.Zero;
|
|
});
|
|
var socket = client.CreateSocket();
|
|
socket.CanConnect = true;
|
|
var sub = new SocketConnection(new TraceLogger(), client.SubClient, socket, null);
|
|
client.SubClient.ConnectSocketSub(sub);
|
|
var us = SocketSubscription.CreateForIdentifier(10, "Test", true, false, (e) => { });
|
|
var ups = new UpdateSubscription(sub, us);
|
|
sub.AddSubscription(us);
|
|
|
|
// act
|
|
client.UnsubscribeAsync(ups).Wait();
|
|
|
|
// assert
|
|
Assert.IsTrue(socket.Connected == false);
|
|
}
|
|
|
|
[TestCase()]
|
|
public void UnsubscribingAll_Should_CloseAllSockets()
|
|
{
|
|
// arrange
|
|
var client = new TestSocketClient(options => { options.ReconnectInterval = TimeSpan.Zero; });
|
|
var socket1 = client.CreateSocket();
|
|
var socket2 = client.CreateSocket();
|
|
socket1.CanConnect = true;
|
|
socket2.CanConnect = true;
|
|
var sub1 = new SocketConnection(new TraceLogger(), client.SubClient, socket1, null);
|
|
var sub2 = new SocketConnection(new TraceLogger(), client.SubClient, socket2, null);
|
|
client.SubClient.ConnectSocketSub(sub1);
|
|
client.SubClient.ConnectSocketSub(sub2);
|
|
|
|
// act
|
|
client.UnsubscribeAllAsync().Wait();
|
|
|
|
// assert
|
|
Assert.IsTrue(socket1.Connected == false);
|
|
Assert.IsTrue(socket2.Connected == false);
|
|
}
|
|
|
|
[TestCase()]
|
|
public void FailingToConnectSocket_Should_ReturnError()
|
|
{
|
|
// arrange
|
|
var client = new TestSocketClient(options => { options.ReconnectInterval = TimeSpan.Zero; });
|
|
var socket = client.CreateSocket();
|
|
socket.CanConnect = false;
|
|
var sub1 = new SocketConnection(new TraceLogger(), client.SubClient, socket, null);
|
|
|
|
// act
|
|
var connectResult = client.SubClient.ConnectSocketSub(sub1);
|
|
|
|
// assert
|
|
Assert.IsFalse(connectResult.Success);
|
|
}
|
|
}
|
|
}
|