Skip to content

Commit 6413a44

Browse files
committed
test: reconnection attempt
1 parent b755280 commit 6413a44

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

src/SocketIOClient.UnitTest/SocketIOTests/ConnectTest.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,5 +139,42 @@ public async Task TestAttempsEq2()
139139
Assert.AreEqual("OnReconnectError", list[3]);
140140
Assert.AreEqual("OnReconnectFailed", list[4]);
141141
}
142+
143+
[TestMethod]
144+
public async Task ConnectionSuccessAfterAttemp1()
145+
{
146+
using var io = new SocketIO("http://example.com");
147+
var list = new List<string>();
148+
149+
var mockSocket = new Mock<IWebSocketClient>();
150+
mockSocket.SetupSequence(x => x.ConnectAsync(It.IsAny<Uri>()))
151+
.Throws(new WebSocketException())
152+
.Returns(Task.CompletedTask);
153+
154+
var mockReconnectAttemp = new Mock<EventHandler<int>>();
155+
mockReconnectAttemp.Setup(x => x(io, It.IsAny<int>())).Callback(() => list.Add("OnReconnectAttempt"));
156+
157+
var mockReconnectError = new Mock<EventHandler<Exception>>();
158+
mockReconnectError.Setup(x => x(io, It.IsAny<Exception>())).Callback(() => list.Add("OnReconnectError"));
159+
160+
var mockReconnectFaild = new Mock<EventHandler>();
161+
mockReconnectFaild.Setup(x => x(io, It.IsAny<EventArgs>())).Callback(() => list.Add("OnReconnectFailed"));
162+
163+
io.Options.ReconnectionAttempts = 2;
164+
io.Socket = mockSocket.Object;
165+
io.OnReconnectAttempt += mockReconnectAttemp.Object;
166+
io.OnReconnectError += mockReconnectError.Object;
167+
io.OnReconnectFailed += mockReconnectFaild.Object;
168+
169+
await io.ConnectAsync();
170+
171+
mockSocket.Verify(x => x.ConnectAsync(It.IsAny<Uri>()), Times.Exactly(2));
172+
mockReconnectAttemp.Verify(x => x(io, 1), Times.Once());
173+
mockReconnectError.Verify(x => x(io, It.IsAny<WebSocketException>()), Times.Never());
174+
mockReconnectFaild.Verify(x => x(io, It.IsAny<EventArgs>()), Times.Never());
175+
176+
Assert.AreEqual(1, list.Count);
177+
Assert.AreEqual("OnReconnectAttempt", list[0]);
178+
}
142179
}
143180
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using Moq;
3+
using SocketIOClient.WebSocketClient;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Net.WebSockets;
7+
using System.Threading.Tasks;
8+
9+
namespace SocketIOClient.UnitTest.SocketIOTests
10+
{
11+
[TestClass]
12+
public class ReconnectionTest
13+
{
14+
[TestMethod]
15+
public async Task ReonnectionSuccessAfterAttemp2()
16+
{
17+
using var io = new SocketIO("http://example.com");
18+
var list = new List<string>();
19+
20+
var mockSocket = new Mock<IWebSocketClient>();
21+
mockSocket.SetupProperty(x => x.OnClosed);
22+
mockSocket.SetupProperty(x => x.OnTextReceived);
23+
mockSocket.SetupSequence(x => x.ConnectAsync(It.IsAny<Uri>()))
24+
.Throws(new WebSocketException())
25+
.Returns(Task.CompletedTask);
26+
27+
var mockReconnectAttemp = new Mock<EventHandler<int>>();
28+
mockReconnectAttemp.Setup(x => x(io, It.IsAny<int>())).Callback(() => list.Add("OnReconnectAttempt"));
29+
30+
var mockReconnectError = new Mock<EventHandler<Exception>>();
31+
mockReconnectError.Setup(x => x(io, It.IsAny<Exception>())).Callback(() => list.Add("OnReconnectError"));
32+
33+
var mockReconnectFaild = new Mock<EventHandler>();
34+
mockReconnectFaild.Setup(x => x(io, It.IsAny<EventArgs>())).Callback(() => list.Add("OnReconnectFailed"));
35+
36+
io.Options.ReconnectionAttempts = 2;
37+
io.Socket = mockSocket.Object;
38+
io.OnReconnectAttempt += mockReconnectAttemp.Object;
39+
io.OnReconnectError += mockReconnectError.Object;
40+
io.OnReconnectFailed += mockReconnectFaild.Object;
41+
42+
mockSocket.Object.OnTextReceived("40{\"sid\":\"aMA_EmVTuzpgR16PAc4w\"}");
43+
mockSocket.Object.OnClosed("xxx");
44+
await Task.Delay(2000);
45+
46+
mockSocket.Verify(x => x.ConnectAsync(It.IsAny<Uri>()), Times.Exactly(2));
47+
mockReconnectAttemp.Verify(x => x(io, 1), Times.Once());
48+
mockReconnectAttemp.Verify(x => x(io, 2), Times.Once());
49+
mockReconnectError.Verify(x => x(io, It.IsAny<WebSocketException>()), Times.Once());
50+
mockReconnectFaild.Verify(x => x(io, It.IsAny<EventArgs>()), Times.Never());
51+
52+
Assert.AreEqual(3, list.Count);
53+
Assert.AreEqual("OnReconnectAttempt", list[0]);
54+
Assert.AreEqual("OnReconnectError", list[1]);
55+
Assert.AreEqual("OnReconnectAttempt", list[2]);
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)