Skip to content

Commit 942a1cd

Browse files
fix: UTP adapter tests failing on consoles (Unity-Technologies#1372)
* fix: UTP adapter tests failing on consoles A lot of tests were waiting on the Connect event on the server side as a proxy of the connection being fully established. But that's not correct. A Connect event on the server does not mean that the UTP Connection Accept message has been received and processed by the client. This lead to some timing issues where we'd try to e.g. send data on the client side before the connection is fully established. * Use Assert.That instead of Assert.True
1 parent 83f07d5 commit 942a1cd

File tree

2 files changed

+46
-28
lines changed

2 files changed

+46
-28
lines changed

com.unity.netcode.adapter.utp/Tests/Runtime/ConnectionTests.cs

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,23 @@ public class ConnectionTests
1717
private List<TransportEvent> m_ServerEvents;
1818
private List<TransportEvent>[] m_ClientsEvents = new List<TransportEvent>[k_NumClients];
1919

20+
private IEnumerator WaitForAllClientsConnected()
21+
{
22+
for (int i = 0; i < k_NumClients; i++)
23+
{
24+
if (m_ClientsEvents[i].Count == 0)
25+
{
26+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[i]);
27+
}
28+
}
29+
30+
// Check that all clients received the correct event.
31+
Assert.That(m_ClientsEvents.All(evs => evs[0].Type == NetworkEvent.Connect));
32+
33+
// Check that server received all Connect events.
34+
Assert.AreEqual(k_NumClients, m_ServerEvents.Count);
35+
}
36+
2037
[UnityTearDown]
2138
public IEnumerator Cleanup()
2239
{
@@ -56,11 +73,11 @@ public IEnumerator ConnectSingleClient()
5673
m_Server.StartServer();
5774
m_Clients[0].StartClient();
5875

59-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
76+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);
6077

61-
// Check we've received Connect event on client too.
62-
Assert.AreEqual(1, m_ClientsEvents[0].Count);
63-
Assert.AreEqual(NetworkEvent.Connect, m_ClientsEvents[0][0].Type);
78+
// Check we've received Connect event on server too.
79+
Assert.AreEqual(1, m_ServerEvents.Count);
80+
Assert.AreEqual(NetworkEvent.Connect, m_ServerEvents[0].Type);
6481

6582
yield return null;
6683
}
@@ -79,11 +96,7 @@ public IEnumerator ConnectMultipleClients()
7996
m_Clients[i].StartClient();
8097
}
8198

82-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
83-
84-
// Check that every client also received a Connect event.
85-
Assert.True(m_ClientsEvents.All(evs => evs.Count == 1));
86-
Assert.True(m_ClientsEvents.All(evs => evs[0].Type == NetworkEvent.Connect));
99+
yield return WaitForAllClientsConnected();
87100

88101
yield return null;
89102
}
@@ -98,7 +111,7 @@ public IEnumerator ServerDisconnectSingleClient()
98111
m_Server.StartServer();
99112
m_Clients[0].StartClient();
100113

101-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
114+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);
102115

103116
m_Server.DisconnectRemoteClient(m_ServerEvents[0].ClientID);
104117

@@ -120,7 +133,7 @@ public IEnumerator ServerDisconnectMultipleClients()
120133
m_Clients[i].StartClient();
121134
}
122135

123-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
136+
yield return WaitForAllClientsConnected();
124137

125138
// Disconnect a single client.
126139
m_Server.DisconnectRemoteClient(m_ServerEvents[0].ClientID);
@@ -141,8 +154,8 @@ public IEnumerator ServerDisconnectMultipleClients()
141154
yield return new WaitForSeconds(MaxNetworkEventWaitTime);
142155

143156
// Check that all clients got a Disconnect event.
144-
Assert.True(m_ClientsEvents.All(evs => evs.Count == 2));
145-
Assert.True(m_ClientsEvents.All(evs => evs[1].Type == NetworkEvent.Disconnect));
157+
Assert.That(m_ClientsEvents.All(evs => evs.Count == 2));
158+
Assert.That(m_ClientsEvents.All(evs => evs[1].Type == NetworkEvent.Disconnect));
146159

147160
yield return null;
148161
}
@@ -157,7 +170,7 @@ public IEnumerator ClientDisconnectSingleClient()
157170
m_Server.StartServer();
158171
m_Clients[0].StartClient();
159172

160-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
173+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);
161174

162175
m_Clients[0].DisconnectLocalClient();
163176

@@ -177,7 +190,7 @@ public IEnumerator ClientDisconnectMultipleClients()
177190
m_Clients[i].StartClient();
178191
}
179192

180-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
193+
yield return WaitForAllClientsConnected();
181194

182195
// Disconnect a single client.
183196
m_Clients[0].DisconnectLocalClient();
@@ -209,7 +222,7 @@ public IEnumerator RepeatedServerDisconnectsNoop()
209222
m_Server.StartServer();
210223
m_Clients[0].StartClient();
211224

212-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
225+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);
213226

214227
m_Server.DisconnectRemoteClient(m_ServerEvents[0].ClientID);
215228

@@ -241,7 +254,7 @@ public IEnumerator RepeatedClientDisconnectsNoop()
241254
m_Server.StartServer();
242255
m_Clients[0].StartClient();
243256

244-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
257+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);
245258

246259
m_Clients[0].DisconnectLocalClient();
247260

com.unity.netcode.adapter.utp/Tests/Runtime/TransportTests.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public IEnumerator PingPong()
5454
m_Server.StartServer();
5555
m_Client1.StartClient();
5656

57-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
57+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
5858

5959
var ping = new ArraySegment<byte>(Encoding.ASCII.GetBytes("ping"));
6060
m_Client1.Send(m_Client1.ServerClientId, ping, NetworkDelivery.ReliableSequenced);
@@ -86,7 +86,7 @@ public IEnumerator PingPongSimultaneous()
8686
m_Server.StartServer();
8787
m_Client1.StartClient();
8888

89-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
89+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
9090

9191
var ping = new ArraySegment<byte>(Encoding.ASCII.GetBytes("ping"));
9292
m_Server.Send(m_ServerEvents[0].ClientID, ping, NetworkDelivery.ReliableSequenced);
@@ -120,7 +120,7 @@ public IEnumerator FilledSendQueueSingleSend()
120120
m_Server.StartServer();
121121
m_Client1.StartClient();
122122

123-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
123+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
124124

125125
var payload = new ArraySegment<byte>(new byte[UnityTransport.InitialBatchQueueSize]);
126126
m_Client1.Send(m_Client1.ServerClientId, payload, NetworkDelivery.ReliableFragmentedSequenced);
@@ -139,7 +139,7 @@ public IEnumerator FilledSendQueueMultipleSends()
139139
m_Server.StartServer();
140140
m_Client1.StartClient();
141141

142-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
142+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
143143

144144
var numSends = UnityTransport.InitialBatchQueueSize / 1024;
145145

@@ -170,7 +170,7 @@ public IEnumerator MultipleSendsSingleFrame()
170170
m_Server.StartServer();
171171
m_Client1.StartClient();
172172

173-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
173+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
174174

175175
var data1 = new ArraySegment<byte>(new byte[] { 11 });
176176
m_Client1.Send(m_Client1.ServerClientId, data1, NetworkDelivery.ReliableSequenced);
@@ -201,7 +201,11 @@ public IEnumerator SendMultipleClients()
201201
m_Client1.StartClient();
202202
m_Client2.StartClient();
203203

204-
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
204+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
205+
if (m_Client2Events.Count == 0)
206+
{
207+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client2Events);
208+
}
205209

206210
// Ensure we got both Connect events.
207211
Assert.AreEqual(2, m_ServerEvents.Count);
@@ -221,7 +225,7 @@ public IEnumerator SendMultipleClients()
221225

222226
byte c1Data = m_Client1Events[1].Data.First();
223227
byte c2Data = m_Client2Events[1].Data.First();
224-
Assert.True((c1Data == 11 && c2Data == 22) || (c1Data == 22 && c2Data == 11));
228+
Assert.That((c1Data == 11 && c2Data == 22) || (c1Data == 22 && c2Data == 11));
225229

226230
yield return null;
227231
}
@@ -239,9 +243,10 @@ public IEnumerator ReceiveMultipleClients()
239243
m_Client2.StartClient();
240244

241245
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
242-
243-
// Ensure we got the Connect event on the other client too.
244-
Assert.AreEqual(1, m_Client2Events.Count);
246+
if (m_Client2Events.Count == 0)
247+
{
248+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client2Events);
249+
}
245250

246251
var data1 = new ArraySegment<byte>(new byte[] { 11 });
247252
m_Client1.Send(m_Client1.ServerClientId, data1, NetworkDelivery.ReliableSequenced);
@@ -257,7 +262,7 @@ public IEnumerator ReceiveMultipleClients()
257262

258263
byte sData1 = m_ServerEvents[2].Data.First();
259264
byte sData2 = m_ServerEvents[3].Data.First();
260-
Assert.True((sData1 == 11 && sData2 == 22) || (sData1 == 22 && sData2 == 11));
265+
Assert.That((sData1 == 11 && sData2 == 22) || (sData1 == 22 && sData2 == 11));
261266

262267
yield return null;
263268
}

0 commit comments

Comments
 (0)