-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathSocketIoClientTest.Open.cs
132 lines (105 loc) · 4.6 KB
/
SocketIoClientTest.Open.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Socket.Io.Client.Core.Model;
using Socket.Io.Client.Core.Model.SocketIo;
using Socket.Io.Client.Core.Test.Extensions;
using Socket.Io.Client.Core.Test.Model;
using Xunit;
using Xunit.Abstractions;
namespace Socket.Io.Client.Core.Test
{
public partial class SocketIoClientTest
{
public class Connect : TestBase
{
public Connect(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
{
}
[Fact]
public async Task InvalidUrl_ShouldThrow()
{
using var client = CreateClient();
await Assert.ThrowsAnyAsync<Exception>(() => client.OpenAsync(new Uri("http://abcd")));
}
[Fact]
public async Task Open_ThenClose_ShouldEmitHandshakeWhileOpen()
{
using var client = CreateClient();
using var called = client.Events.OnHandshake.SubscribeCalled();
await client.OpenTestAsync();
await called.AssertAtLeastOnceAsync(TimeSpan.FromMilliseconds(150));
Assert.Equal(ReadyState.Open, client.State);
await client.CloseAsync();
Assert.Equal(ReadyState.Closed, client.State);
}
[Fact]
public async Task Ping_ShouldReceivePong()
{
using var client = CreateClient();
using var pong = client.Events.OnPong.SubscribeCalled();
using var probeError = client.Events.OnProbeError.SubscribeCalled();
await client.OpenTestAsync();
await pong.AssertAtLeastOnceAsync(TimeSpan.FromMilliseconds(100));
probeError.AssertNever();
}
[Fact]
public async Task Ping_KeepConnectionAlive_ShouldCallMultiplePings()
{
using var client = CreateClient();
using var called = client.Events.OnPong.SubscribeCalled();
using var probeError = client.Events.OnProbeError.SubscribeCalled();
await client.OpenTestAsync();
//ping interval is set to 50ms
await called.AssertAtLeastAsync(5, TimeSpan.FromMilliseconds(400));
probeError.AssertNever();
}
[Fact]
public async Task DefaultNamespace_ShouldNotReceiveMessagesFromCustomNamespace()
{
using var client = CreateClient();
var called = client.On("namespace-message").SubscribeCalled(m =>
{
Assert.Equal("namespace-message", m.EventName);
Assert.Equal("namespace-message", m.Data[0].ToString());
});
await client.OpenTestAsync();
await called.AssertNeverAsync(TimeSpan.FromMilliseconds(100));
}
[Fact]
public async Task CustomNamespace_ShouldReceiveMessagesFromNamespace()
{
using var client = CreateClient();
var called = client.On("namespace-message").SubscribeCalled(m =>
{
Assert.Equal("namespace-message", m.EventName);
Assert.Equal("namespace-message", m.Data[0].ToString());
});
await client.OpenTestAsync(new Uri("http://localhost:8764/some-namespace"));
await called.AssertAtLeastAsync(3, TimeSpan.FromMilliseconds(100));
}
[Fact]
public async Task WithQuery_ShouldPassQueryWithConnect()
{
using var client = CreateClient();
var called = client.On("test-room").SubscribeCalled(e =>
{
Assert.Equal("welcome", e.Data[0].ToString());
});
await client.OpenTestAsync(new Uri("http://localhost:8764/some-namespace?roomId=test-room"));
await called.AssertOnceAsync(TimeSpan.FromMilliseconds(100));
}
[Fact]
public async Task Disconnect_ShouldCloseSocket()
{
using var client = CreateClient();
using var called = client.Events.OnDisconnect.SubscribeCalled();
await client.OpenTestAsync();
//wait for disconnect ACK just to verify it's working
_ = client.Emit("disconnect-me");
//wait for handling of the disconnect by the socket
await called.AssertOnceAsync(TimeSpan.FromMilliseconds(100));
}
}
}
}