mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-08-11 16:32:57 +00:00
Test fixes
This commit is contained in:
@@ -164,6 +164,7 @@ namespace CryptoExchange.Net.UnitTests
|
||||
{
|
||||
reconnected = true;
|
||||
rstEvent.Set();
|
||||
return true;
|
||||
};
|
||||
|
||||
// act
|
||||
@@ -229,5 +230,34 @@ namespace CryptoExchange.Net.UnitTests
|
||||
// assert
|
||||
Assert.IsFalse(connectResult.Success);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenResubscribeFails_Socket_ShouldReconnect()
|
||||
{
|
||||
// arrange
|
||||
int reconnected = 0;
|
||||
var client = new TestSocketClient(new SocketClientOptions() { ReconnectInterval = TimeSpan.FromMilliseconds(1), LogVerbosity = LogVerbosity.Debug });
|
||||
var socket = client.CreateSocket();
|
||||
socket.ShouldReconnect = true;
|
||||
socket.CanConnect = true;
|
||||
socket.DisconnectTime = DateTime.UtcNow;
|
||||
var sub = new SocketSubscription(socket);
|
||||
client.ConnectSocketSub(sub);
|
||||
var rstEvent = new ManualResetEvent(false);
|
||||
client.OnReconnect += () =>
|
||||
{
|
||||
reconnected++;
|
||||
rstEvent.Set();
|
||||
return reconnected == 2;
|
||||
};
|
||||
|
||||
// act
|
||||
socket.InvokeClose();
|
||||
rstEvent.WaitOne(1000);
|
||||
Thread.Sleep(100);
|
||||
|
||||
// assert
|
||||
Assert.IsTrue(reconnected == 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
|
||||
public int Id { get; }
|
||||
public bool ShouldReconnect { get; set; }
|
||||
public TimeSpan Timeout { get; set; }
|
||||
public Func<byte[], string> DataInterpreter { get; set; }
|
||||
public DateTime? DisconnectTime { get; set; }
|
||||
public string Url { get; }
|
||||
@@ -30,9 +31,24 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
public TimeSpan PingInterval { get; set; }
|
||||
public SslProtocols SSLProtocols { get; set; }
|
||||
|
||||
public int ConnectCalls { get; private set; }
|
||||
|
||||
public static int lastId = 0;
|
||||
public static object lastIdLock = new object();
|
||||
|
||||
public TestSocket()
|
||||
{
|
||||
lock (lastIdLock)
|
||||
{
|
||||
Id = lastId + 1;
|
||||
lastId++;
|
||||
}
|
||||
}
|
||||
|
||||
public Task<bool> Connect()
|
||||
{
|
||||
Connected = CanConnect;
|
||||
ConnectCalls++;
|
||||
return Task.FromResult(CanConnect);
|
||||
}
|
||||
|
||||
@@ -45,6 +61,8 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
public Task Close()
|
||||
{
|
||||
Connected = false;
|
||||
DisconnectTime = DateTime.UtcNow;
|
||||
OnClose?.Invoke();
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
||||
@@ -59,6 +77,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
public void InvokeClose()
|
||||
{
|
||||
Connected = false;
|
||||
DisconnectTime = DateTime.UtcNow;
|
||||
OnClose?.Invoke();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
{
|
||||
public class TestSocketClient: SocketClient
|
||||
{
|
||||
public Action OnReconnect { get; set; }
|
||||
public Func<bool> OnReconnect { get; set; }
|
||||
|
||||
public TestSocketClient() : this(new SocketClientOptions())
|
||||
{
|
||||
@@ -23,6 +23,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
|
||||
public TestSocket CreateSocket()
|
||||
{
|
||||
Mock.Get(SocketFactory).Setup(f => f.CreateWebsocket(It.IsAny<Log>(), It.IsAny<string>())).Returns(new TestSocket());
|
||||
return (TestSocket)CreateSocket(BaseAddress);
|
||||
}
|
||||
|
||||
@@ -33,8 +34,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
||||
|
||||
protected override bool SocketReconnect(SocketSubscription subscription, TimeSpan disconnectedTime)
|
||||
{
|
||||
OnReconnect?.Invoke();
|
||||
return true;
|
||||
return OnReconnect.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user