|
| 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