Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 30 additions & 17 deletions com.unity.netcode.adapter.utp/Tests/Runtime/ConnectionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,23 @@ public class ConnectionTests
private List<TransportEvent> m_ServerEvents;
private List<TransportEvent>[] m_ClientsEvents = new List<TransportEvent>[k_NumClients];

private IEnumerator WaitForAllClientsConnected()
{
for (int i = 0; i < k_NumClients; i++)
{
if (m_ClientsEvents[i].Count == 0)
{
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[i]);
}
}

// Check that all clients received the correct event.
Assert.That(m_ClientsEvents.All(evs => evs[0].Type == NetworkEvent.Connect));

// Check that server received all Connect events.
Assert.AreEqual(k_NumClients, m_ServerEvents.Count);
}

[UnityTearDown]
public IEnumerator Cleanup()
{
Expand Down Expand Up @@ -56,11 +73,11 @@ public IEnumerator ConnectSingleClient()
m_Server.StartServer();
m_Clients[0].StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);

// Check we've received Connect event on client too.
Assert.AreEqual(1, m_ClientsEvents[0].Count);
Assert.AreEqual(NetworkEvent.Connect, m_ClientsEvents[0][0].Type);
// Check we've received Connect event on server too.
Assert.AreEqual(1, m_ServerEvents.Count);
Assert.AreEqual(NetworkEvent.Connect, m_ServerEvents[0].Type);

yield return null;
}
Expand All @@ -79,11 +96,7 @@ public IEnumerator ConnectMultipleClients()
m_Clients[i].StartClient();
}

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);

// Check that every client also received a Connect event.
Assert.True(m_ClientsEvents.All(evs => evs.Count == 1));
Assert.True(m_ClientsEvents.All(evs => evs[0].Type == NetworkEvent.Connect));
yield return WaitForAllClientsConnected();

yield return null;
}
Expand All @@ -98,7 +111,7 @@ public IEnumerator ServerDisconnectSingleClient()
m_Server.StartServer();
m_Clients[0].StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);

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

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForAllClientsConnected();

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

// Check that all clients got a Disconnect event.
Assert.True(m_ClientsEvents.All(evs => evs.Count == 2));
Assert.True(m_ClientsEvents.All(evs => evs[1].Type == NetworkEvent.Disconnect));
Assert.That(m_ClientsEvents.All(evs => evs.Count == 2));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I should have been more precise with that comment. If you straight up replace True with That, it will behave exactly the same.

To get relevant error messages, you need to use it in the following way:
Assert.That(m_ClientEvents, Has.All.EqualTo(your constraint here);

That way, it will be able to mark which specific collection items are not matching your constraint, and should also display the actual value vs the expected value.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Has.All.EqualTo, or any other Has.All method that you prefer

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, I see. In that case I'm not sure it's really worth it in that particular case. While the first check (events.All(evs => evs.Count == 2)) can be expressed in that style, it's immediately followed by another similar check that I'm not sure can be written using such constraints. I prefer the extra consistency here of having all similar assertions using a similar style.

Assert.That(m_ClientsEvents.All(evs => evs[1].Type == NetworkEvent.Disconnect));

yield return null;
}
Expand All @@ -157,7 +170,7 @@ public IEnumerator ClientDisconnectSingleClient()
m_Server.StartServer();
m_Clients[0].StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);

m_Clients[0].DisconnectLocalClient();

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForAllClientsConnected();

// Disconnect a single client.
m_Clients[0].DisconnectLocalClient();
Expand Down Expand Up @@ -209,7 +222,7 @@ public IEnumerator RepeatedServerDisconnectsNoop()
m_Server.StartServer();
m_Clients[0].StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);

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

Expand Down Expand Up @@ -241,7 +254,7 @@ public IEnumerator RepeatedClientDisconnectsNoop()
m_Server.StartServer();
m_Clients[0].StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[0]);

m_Clients[0].DisconnectLocalClient();

Expand Down
27 changes: 16 additions & 11 deletions com.unity.netcode.adapter.utp/Tests/Runtime/TransportTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public IEnumerator PingPong()
m_Server.StartServer();
m_Client1.StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

var numSends = UnityTransport.InitialBatchQueueSize / 1024;

Expand Down Expand Up @@ -170,7 +170,7 @@ public IEnumerator MultipleSendsSingleFrame()
m_Server.StartServer();
m_Client1.StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

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

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ServerEvents);
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
if (m_Client2Events.Count == 0)
{
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client2Events);
}

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

byte c1Data = m_Client1Events[1].Data.First();
byte c2Data = m_Client2Events[1].Data.First();
Assert.True((c1Data == 11 && c2Data == 22) || (c1Data == 22 && c2Data == 11));
Assert.That((c1Data == 11 && c2Data == 22) || (c1Data == 22 && c2Data == 11));

yield return null;
}
Expand All @@ -239,9 +243,10 @@ public IEnumerator ReceiveMultipleClients()
m_Client2.StartClient();

yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);

// Ensure we got the Connect event on the other client too.
Assert.AreEqual(1, m_Client2Events.Count);
if (m_Client2Events.Count == 0)
{
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client2Events);
}

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

byte sData1 = m_ServerEvents[2].Data.First();
byte sData2 = m_ServerEvents[3].Data.First();
Assert.True((sData1 == 11 && sData2 == 22) || (sData1 == 22 && sData2 == 11));
Assert.That((sData1 == 11 && sData2 == 22) || (sData1 == 22 && sData2 == 11));

yield return null;
}
Expand Down