Skip to content

Commit f75ee37

Browse files
fix: failing player tests in netcode.gameobjects (UUM-160259)
Guard the DEBUG-only message size check and UnityTransport warning in their tests, and add a regression test that ownership changes keep every instance registered with ObjectNameIdentifier.
1 parent d7534e5 commit f75ee37

5 files changed

Lines changed: 77 additions & 0 deletions

File tree

‎com.unity.netcode.gameobjects/Tests/Runtime/Messaging/NamedMessageTests.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ public void WhenSendingNamedMessageToNullClientList_ArgumentNullExceptionIsThrow
243243
[Test]
244244
public unsafe void ErrorMessageIsPrintedWhenAttemptingToSendNamedMessageWithTooBigBuffer()
245245
{
246+
#if !DEBUG
247+
Assert.Ignore("The message size check only exists in builds that define DEBUG.");
248+
#endif
246249
// First try a valid send with the maximum allowed size (this is atm 1264)
247250
var msgSize = m_ServerNetworkManager.MessageManager.NonFragmentedMessageMaxSize - FastBufferWriter.GetWriteSize<NetworkMessageHeader>() - sizeof(ulong)/*MessageName hash*/ - sizeof(NetworkBatchHeader);
248251
var bufferSize = m_ServerNetworkManager.MessageManager.NonFragmentedMessageMaxSize;

‎com.unity.netcode.gameobjects/Tests/Runtime/Messaging/UnnamedMessageTests.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,9 @@ public void WhenSendingNamedMessageToNullClientList_ArgumentNullExceptionIsThrow
198198
[Test]
199199
public unsafe void ErrorMessageIsPrintedWhenAttemptingToSendUnnamedMessageWithTooBigBuffer()
200200
{
201+
#if !DEBUG
202+
Assert.Ignore("The message size check only exists in builds that define DEBUG.");
203+
#endif
201204
// First try a valid send with the maximum allowed size (this is atm 1272)
202205
var msgSize = m_ServerNetworkManager.MessageManager.NonFragmentedMessageMaxSize - FastBufferWriter.GetWriteSize<NetworkMessageHeader>() - sizeof(NetworkBatchHeader);
203206
var bufferSize = m_ServerNetworkManager.MessageManager.NonFragmentedMessageMaxSize;
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System.Collections;
2+
using System.Text;
3+
using NUnit.Framework;
4+
using Unity.Netcode.TestHelpers.Runtime;
5+
using UnityEngine;
6+
using UnityEngine.TestTools;
7+
8+
namespace Unity.Netcode.RuntimeTests
9+
{
10+
internal class ObjectNameIdentifierTests : NetcodeIntegrationTest
11+
{
12+
protected override int NumberOfClients => 1;
13+
14+
private GameObject m_Prefab;
15+
16+
protected override void OnServerAndClientsCreated()
17+
{
18+
m_Prefab = CreateNetworkObjectPrefab("TrackedObject");
19+
base.OnServerAndClientsCreated();
20+
}
21+
22+
private bool AllInstancesAreRegistered(StringBuilder errorLog, ulong networkObjectId)
23+
{
24+
foreach (var networkManager in m_NetworkManagers)
25+
{
26+
if (!s_GlobalNetworkObjects.TryGetValue(networkManager.LocalClientId, out var networkObjects) || !networkObjects.ContainsKey(networkObjectId))
27+
{
28+
errorLog.Append($"[Client-{networkManager.LocalClientId}] Object-{networkObjectId} is not registered.");
29+
return false;
30+
}
31+
}
32+
return true;
33+
}
34+
35+
[UnityTest]
36+
public IEnumerator OwnershipChangesKeepAllInstancesRegistered()
37+
{
38+
var authority = GetAuthorityNetworkManager();
39+
var client = m_ClientNetworkManagers[0];
40+
var authorityInstance = SpawnObject(m_Prefab, authority).GetComponent<NetworkObject>();
41+
var networkObjectId = authorityInstance.NetworkObjectId;
42+
yield return WaitForSpawnedOnAllOrTimeOut(authorityInstance);
43+
AssertOnTimeout($"Timed out waiting for Object-{networkObjectId} to spawn on all instances!");
44+
45+
authorityInstance.ChangeOwnership(client.LocalClientId);
46+
yield return WaitForConditionOrTimeOut(() => client.SpawnManager.SpawnedObjects[networkObjectId].OwnerClientId == client.LocalClientId);
47+
AssertOnTimeout($"Timed out waiting for Client-{client.LocalClientId} to gain ownership of Object-{networkObjectId}!");
48+
var errorLog = new StringBuilder();
49+
Assert.IsTrue(AllInstancesAreRegistered(errorLog, networkObjectId), $"After gaining ownership: {errorLog}");
50+
51+
authorityInstance.RemoveOwnership();
52+
yield return WaitForConditionOrTimeOut(() => client.SpawnManager.SpawnedObjects[networkObjectId].OwnerClientId == authority.LocalClientId);
53+
AssertOnTimeout($"Timed out waiting for the authority to regain ownership of Object-{networkObjectId}!");
54+
errorLog.Clear();
55+
Assert.IsTrue(AllInstancesAreRegistered(errorLog, networkObjectId), $"After removing ownership: {errorLog}");
56+
}
57+
}
58+
}

‎com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/ObjectNameIdentifierTests.cs.meta‎

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,9 @@ public IEnumerator DoesNotActAfterShutdown([Values] AfterShutdownAction afterShu
569569
{
570570
m_Server.DisconnectRemoteClient(m_Client1.ServerClientId);
571571

572+
#if DEBUG
572573
LogAssert.Expect(LogType.Warning, $"{nameof(UnityTransport.DisconnectRemoteClient)} should only be called on a listening server!");
574+
#endif
573575
}
574576
else if (afterShutdownAction == AfterShutdownAction.DisconnectLocalClient)
575577
{

0 commit comments

Comments
 (0)