Skip to content

Commit 5ba0aba

Browse files
test
Adding tests to validate the fixes.
1 parent f7c94c5 commit 5ba0aba

File tree

2 files changed

+70
-4
lines changed

2 files changed

+70
-4
lines changed

com.unity.netcode.gameobjects/Tests/Runtime/DisconnectTests.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,18 +150,27 @@ public IEnumerator ClientPlayerDisconnected([Values] ClientDisconnectType client
150150

151151
if (clientDisconnectType == ClientDisconnectType.ServerDisconnectsClient)
152152
{
153-
m_ClientNetworkManagers[0].OnClientDisconnectCallback += OnClientDisconnectCallback;
154-
m_ClientNetworkManagers[0].OnConnectionEvent += OnConnectionEvent;
153+
clientManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
154+
clientManager.OnConnectionEvent += OnConnectionEvent;
155155
m_ServerNetworkManager.OnConnectionEvent += OnConnectionEvent;
156156
m_ServerNetworkManager.DisconnectClient(m_ClientId);
157157
}
158158
else
159159
{
160160
m_ServerNetworkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
161161
m_ServerNetworkManager.OnConnectionEvent += OnConnectionEvent;
162-
m_ClientNetworkManagers[0].OnConnectionEvent += OnConnectionEvent;
162+
clientManager.OnConnectionEvent += OnConnectionEvent;
163163

164-
yield return StopOneClient(m_ClientNetworkManagers[0]);
164+
yield return StopOneClient(clientManager);
165+
166+
if (clientManager.ConnectionManager != null)
167+
{
168+
Assert.False(clientManager.ConnectionManager.LocalClient.IsClient, $"{clientManager.name} still has IsClient setting!");
169+
Assert.False(clientManager.ConnectionManager.LocalClient.IsConnected, $"{clientManager.name} still has IsConnected setting!");
170+
Assert.False(clientManager.ConnectionManager.LocalClient.ClientId != 0, $"{clientManager.name} still has ClientId ({clientManager.ConnectionManager.LocalClient.ClientId}) setting!");
171+
Assert.False(clientManager.ConnectionManager.LocalClient.IsApproved, $"{clientManager.name} still has IsApproved setting!");
172+
Assert.IsNull(clientManager.ConnectionManager.LocalClient.PlayerObject, $"{clientManager.name} still has Player assigned!");
173+
}
165174
}
166175

167176
yield return WaitForConditionOrTimeOut(() => m_ClientDisconnected);
@@ -216,6 +225,15 @@ public IEnumerator ClientPlayerDisconnected([Values] ClientDisconnectType client
216225

217226
Assert.IsTrue(m_DisconnectedEvent.ContainsKey(m_ServerNetworkManager), $"Could not find the server {nameof(NetworkManager)} disconnect event entry!");
218227
Assert.IsTrue(m_DisconnectedEvent[m_ServerNetworkManager].ClientId == NetworkManager.ServerClientId, $"Expected ClientID {m_ClientId} but found ClientID {m_DisconnectedEvent[m_ServerNetworkManager].ClientId} for the server {nameof(NetworkManager)} disconnect event entry!");
228+
yield return s_DefaultWaitForTick;
229+
if (m_ServerNetworkManager.ConnectionManager != null)
230+
{
231+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsClient, $"{m_ServerNetworkManager.name} still has IsClient setting!");
232+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsConnected, $"{m_ServerNetworkManager.name} still has IsConnected setting!");
233+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.ClientId != 0, $"{m_ServerNetworkManager.name} still has ClientId ({clientManager.ConnectionManager.LocalClient.ClientId}) setting!");
234+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsApproved, $"{m_ServerNetworkManager.name} still has IsApproved setting!");
235+
Assert.IsNull(m_ServerNetworkManager.ConnectionManager.LocalClient.PlayerObject, $"{m_ServerNetworkManager.name} still has Player assigned!");
236+
}
219237
}
220238
}
221239
}

com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,5 +352,53 @@ public override void OnNetworkDespawn()
352352
OnNetworkDespawnCalledCount++;
353353
}
354354
}
355+
356+
private bool AllClientsSpawnedObject()
357+
{
358+
foreach (var networkManager in m_ClientNetworkManagers)
359+
{
360+
if (!networkManager.SpawnManager.SpawnedObjects.ContainsKey(m_SpawnedInstanceId))
361+
{
362+
return false;
363+
}
364+
}
365+
return true;
366+
}
367+
368+
private bool AllClientsDespawnedObject()
369+
{
370+
foreach (var networkManager in m_ClientNetworkManagers)
371+
{
372+
if (networkManager.SpawnManager.SpawnedObjects.ContainsKey(m_SpawnedInstanceId))
373+
{
374+
return false;
375+
}
376+
}
377+
return true;
378+
}
379+
380+
private ulong m_SpawnedInstanceId;
381+
/// <summary>
382+
/// Validates that NetworkObject is reset properly when despawned but not destroyed.
383+
/// </summary>
384+
/// <returns>IEnumerator</returns>
385+
[UnityTest]
386+
public IEnumerator NetworkObjectResetOnDespawn()
387+
{
388+
var authorityNetworkManager = m_ServerNetworkManager;
389+
var instance = SpawnObject(m_ObserverPrefab, authorityNetworkManager).GetComponent<NetworkObject>();
390+
m_SpawnedInstanceId = instance.NetworkObjectId;
391+
yield return WaitForConditionOrTimeOut(AllClientsSpawnedObject);
392+
AssertOnTimeout($"Not all clients spawned an instance of {instance.name}!");
393+
394+
instance.Despawn(false);
395+
396+
yield return WaitForConditionOrTimeOut(AllClientsDespawnedObject);
397+
AssertOnTimeout($"Not all clients de-spawned an instance of {instance.name}!");
398+
399+
Assert.IsNull(instance.GetNetworkParenting(), "Last parent was not reset!");
400+
401+
Object.Destroy(instance.gameObject);
402+
}
355403
}
356404
}

0 commit comments

Comments
 (0)