Skip to content

Commit c0703c3

Browse files
committed
Add test
1 parent ad7ffe7 commit c0703c3

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

com.unity.netcode.gameobjects/Runtime/Transports/UTP/BatchedSendQueue.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ internal struct BatchedSendQueue : IDisposable
3131
public const int PerMessageOverhead = sizeof(int);
3232

3333
internal const int MinimumMinimumCapacity = 4096;
34+
// int.MaxValue is odd and maximum must be even.
35+
internal const int MaximumMaximumCapacity = int.MaxValue - 1;
3436

3537
// Indices into m_HeadTailIndicies.
3638
private const int k_HeadInternalIndex = 0;

com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1520,7 +1520,7 @@ public override void Send(ulong clientId, ArraySegment<byte> payload, NetworkDel
15201520
if (maxCapacity <= 0)
15211521
{
15221522
var fullCalculation = Math.BigMul(m_DisconnectTimeoutMS, k_MaxReliableThroughput);
1523-
maxCapacity = (int)Math.Max(fullCalculation, int.MaxValue);
1523+
maxCapacity = (int)Math.Min(fullCalculation, BatchedSendQueue.MaximumMaximumCapacity);
15241524
}
15251525

15261526
queue = new BatchedSendQueue(Math.Max(maxCapacity, m_MaxPayloadSize));

com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTestHelpers.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,16 @@ public static IEnumerator EnsureNoNetworkEvent(List<TransportEvent> events, floa
9696
}
9797

9898
// Common code to initialize a UnityTransport that logs its events.
99-
public static void InitializeTransport(out UnityTransport transport, out List<TransportEvent> events, int maxPayloadSize = UnityTransport.InitialMaxPayloadSize, int maxSendQueueSize = 0, NetworkFamily family = NetworkFamily.Ipv4)
99+
public static void InitializeTransport(out UnityTransport transport, out List<TransportEvent> events, int maxPayloadSize = UnityTransport.InitialMaxPayloadSize, int maxSendQueueSize = 0, NetworkFamily family = NetworkFamily.Ipv4, int disconnectTimeout = 0)
100100
{
101-
InitializeTransport(out transport, out events, string.Empty, maxPayloadSize, maxSendQueueSize, family);
101+
InitializeTransport(out transport, out events, string.Empty, maxPayloadSize, maxSendQueueSize, family, disconnectTimeout);
102102
}
103103

104104
/// <summary>
105-
/// Interanl version with identifier parameter
105+
/// Internal version with identifier parameter
106106
/// </summary>
107107
internal static void InitializeTransport(out UnityTransport transport, out List<TransportEvent> events, string identifier,
108-
int maxPayloadSize = UnityTransport.InitialMaxPayloadSize, int maxSendQueueSize = 0, NetworkFamily family = NetworkFamily.Ipv4)
108+
int maxPayloadSize = UnityTransport.InitialMaxPayloadSize, int maxSendQueueSize = 0, NetworkFamily family = NetworkFamily.Ipv4, int disconnectTimeout = NetworkParameterConstants.DisconnectTimeoutMS)
109109
{
110110
var logger = new TransportEventLogger()
111111
{
@@ -118,6 +118,7 @@ internal static void InitializeTransport(out UnityTransport transport, out List<
118118
transport.OnTransportEvent += logger.HandleEvent;
119119
transport.MaxPayloadSize = maxPayloadSize;
120120
transport.MaxSendQueueSize = maxSendQueueSize;
121+
transport.DisconnectTimeoutMS = disconnectTimeout;
121122

122123
if (family == NetworkFamily.Ipv6)
123124
{

com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,34 @@ public IEnumerator SendMaximumPayloadSize(
189189
yield return null;
190190
}
191191

192+
[UnityTest]
193+
public IEnumerator VeryLargeDisconnectTimeout()
194+
{
195+
// We want something that's over the old limit of ~44KB for reliable payloads.
196+
var payloadSize = 64 * 1024;
197+
198+
var disconnectTimeout = int.MaxValue;
199+
200+
InitializeTransport(out m_Server, out m_ServerEvents, payloadSize, disconnectTimeout: disconnectTimeout);
201+
InitializeTransport(out m_Client1, out m_Client1Events, payloadSize, disconnectTimeout: disconnectTimeout);
202+
Assert.That(m_Server.DisconnectTimeoutMS, Is.EqualTo(disconnectTimeout));
203+
Assert.That(m_Client1.DisconnectTimeoutMS, Is.EqualTo(disconnectTimeout));
204+
205+
m_Server.StartServer();
206+
m_Client1.StartClient();
207+
208+
yield return WaitForNetworkEvent(NetworkEvent.Connect, m_Client1Events);
209+
210+
var payload = new ArraySegment<byte>(Encoding.ASCII.GetBytes("Some message"));
211+
m_Client1.Send(m_Client1.ServerClientId, payload, NetworkDelivery.Reliable);
212+
213+
yield return WaitForNetworkEvent(NetworkEvent.Data, m_ServerEvents, MaxNetworkEventWaitTime * 4);
214+
215+
Assert.That(m_ServerEvents[1].Data, Is.EquivalentTo(Encoding.ASCII.GetBytes("Some message")));
216+
217+
yield return null;
218+
}
219+
192220
// Check making multiple sends to a client in a single frame.
193221
[UnityTest]
194222
public IEnumerator MultipleSendsSingleFrame(

0 commit comments

Comments
 (0)