Skip to content

Commit 4137c95

Browse files
test
Adding two integration tests to validate this PR
1 parent dd9c32c commit 4137c95

File tree

2 files changed

+75
-11
lines changed

2 files changed

+75
-11
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public enum ClientDisconnectType
4646
private ulong m_ClientId;
4747

4848

49-
public DisconnectTests(OwnerPersistence ownerPersistence)
49+
public DisconnectTests(OwnerPersistence ownerPersistence) : base(HostOrServer.Host)
5050
{
5151
m_OwnerPersistence = ownerPersistence;
5252
}
@@ -202,6 +202,15 @@ public IEnumerator ClientPlayerDisconnected([Values] ClientDisconnectType client
202202
yield return WaitForConditionOrTimeOut(TransportIdCleanedUp);
203203
AssertOnTimeout("Timed out waiting for transport and client id mappings to be cleaned up!");
204204

205+
206+
if (clientNetworkManager.ConnectionManager != null)
207+
{
208+
Assert.False(clientNetworkManager.ConnectionManager.LocalClient.IsClient, $"{clientNetworkManager.name} still has IsClient setting!");
209+
Assert.False(clientNetworkManager.ConnectionManager.LocalClient.IsConnected, $"{clientNetworkManager.name} still has IsConnected setting!");
210+
Assert.False(clientNetworkManager.ConnectionManager.LocalClient.ClientId != 0, $"{clientNetworkManager.name} still has ClientId ({clientNetworkManager.ConnectionManager.LocalClient.ClientId}) setting!");
211+
Assert.False(clientNetworkManager.ConnectionManager.LocalClient.IsApproved, $"{clientNetworkManager.name} still has IsApproved setting!");
212+
Assert.IsNull(clientNetworkManager.ConnectionManager.LocalClient.PlayerObject, $"{clientNetworkManager.name} still has Player assigned!");
213+
}
205214
// Validate the host-client generates a OnClientDisconnected event when it shutsdown.
206215
// Only test when the test run is the client disconnecting from the server (otherwise the server will be shutdown already)
207216
if (clientDisconnectType == ClientDisconnectType.ClientDisconnectsFromServer)
@@ -215,6 +224,15 @@ public IEnumerator ClientPlayerDisconnected([Values] ClientDisconnectType client
215224

216225
Assert.IsTrue(m_DisconnectedEvent.ContainsKey(m_ServerNetworkManager), $"Could not find the server {nameof(NetworkManager)} disconnect event entry!");
217226
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!");
227+
yield return s_DefaultWaitForTick;
228+
if (m_ServerNetworkManager.ConnectionManager != null)
229+
{
230+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsClient, $"{m_ServerNetworkManager.name} still has IsClient setting!");
231+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsConnected, $"{m_ServerNetworkManager.name} still has IsConnected setting!");
232+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.ClientId != 0, $"{m_ServerNetworkManager.name} still has ClientId ({clientNetworkManager.ConnectionManager.LocalClient.ClientId}) setting!");
233+
Assert.False(m_ServerNetworkManager.ConnectionManager.LocalClient.IsApproved, $"{m_ServerNetworkManager.name} still has IsApproved setting!");
234+
Assert.IsNull(m_ServerNetworkManager.ConnectionManager.LocalClient.PlayerObject, $"{m_ServerNetworkManager.name} still has Player assigned!");
235+
}
218236
}
219237
}
220238
}

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

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -260,22 +260,23 @@ protected override IEnumerator OnTearDown()
260260
public IEnumerator TestOnNetworkSpawnCallbacks()
261261
{
262262
// [Host-Side] Get the Host owned instance
263-
var serverInstance = m_PlayerNetworkObjects[m_ServerNetworkManager.LocalClientId][m_ServerNetworkManager.LocalClientId].GetComponent<TrackOnSpawnFunctions>();
263+
var authorityNetworkManager = GetAuthorityNetworkManager();
264+
var authorityInstance = m_PlayerNetworkObjects[authorityNetworkManager.LocalClientId][authorityNetworkManager.LocalClientId].GetComponent<TrackOnSpawnFunctions>();
264265

265266
foreach (var client in m_ClientNetworkManagers)
266267
{
267-
var clientRpcTests = m_PlayerNetworkObjects[client.LocalClientId][m_ServerNetworkManager.LocalClientId].gameObject.GetComponent<TrackOnSpawnFunctions>();
268+
var clientRpcTests = m_PlayerNetworkObjects[client.LocalClientId][authorityNetworkManager.LocalClientId].gameObject.GetComponent<TrackOnSpawnFunctions>();
268269
Assert.IsNotNull(clientRpcTests);
269270
m_ClientTrackOnSpawnInstances.Add(clientRpcTests);
270271
}
271272

272273
// -------------- step 1 check player spawn despawn
273274

274275
// check spawned on server
275-
Assert.AreEqual(1, serverInstance.OnNetworkSpawnCalledCount);
276+
Assert.AreEqual(1, authorityInstance.OnNetworkSpawnCalledCount);
276277

277278
// safety check server despawned
278-
Assert.AreEqual(0, serverInstance.OnNetworkDespawnCalledCount);
279+
Assert.AreEqual(0, authorityInstance.OnNetworkDespawnCalledCount);
279280

280281
// Conditional check for clients spawning or despawning
281282
var checkSpawnCondition = false;
@@ -314,10 +315,10 @@ bool HasConditionBeenMet()
314315
Assert.False(s_GlobalTimeoutHelper.TimedOut, "Timed out while waiting for client side spawns!");
315316

316317
// despawn on server. However, since we'll be using this object later in the test, don't delete it
317-
serverInstance.GetComponent<NetworkObject>().Despawn(false);
318+
authorityInstance.GetComponent<NetworkObject>().Despawn(false);
318319

319320
// check despawned on server
320-
Assert.AreEqual(1, serverInstance.OnNetworkDespawnCalledCount);
321+
Assert.AreEqual(1, authorityInstance.OnNetworkDespawnCalledCount);
321322
// we now expect the clients to each have despawned once
322323
expectedDespawnCount = 1;
323324

@@ -329,24 +330,24 @@ bool HasConditionBeenMet()
329330
Assert.False(s_GlobalTimeoutHelper.TimedOut, "Timed out while waiting for client side despawns!");
330331

331332
//----------- step 2 check spawn and destroy again
332-
serverInstance.GetComponent<NetworkObject>().Spawn();
333+
authorityInstance.GetComponent<NetworkObject>().Spawn();
333334
// wait a tick
334335
yield return s_DefaultWaitForTick;
335336
// check spawned again on server this is 2 because we are reusing the object which was already spawned once.
336-
Assert.AreEqual(2, serverInstance.OnNetworkSpawnCalledCount);
337+
Assert.AreEqual(2, authorityInstance.OnNetworkSpawnCalledCount);
337338

338339
checkSpawnCondition = true;
339340
yield return WaitForConditionOrTimeOut(HasConditionBeenMet);
340341

341342
Assert.False(s_GlobalTimeoutHelper.TimedOut, "Timed out while waiting for client side spawns! (2nd pass)");
342343

343344
// destroy the server object
344-
Object.Destroy(serverInstance.gameObject);
345+
Object.Destroy(authorityInstance.gameObject);
345346

346347
yield return s_DefaultWaitForTick;
347348

348349
// check whether despawned was called again on server instance
349-
Assert.AreEqual(2, serverInstance.OnNetworkDespawnCalledCount);
350+
Assert.AreEqual(2, authorityInstance.OnNetworkDespawnCalledCount);
350351

351352
checkSpawnCondition = false;
352353
yield return WaitForConditionOrTimeOut(HasConditionBeenMet);
@@ -386,5 +387,50 @@ public override void OnNetworkDespawn()
386387
OnNetworkDespawnCalledCount++;
387388
}
388389
}
390+
391+
private bool AllClientsSpawnedObject()
392+
{
393+
foreach(var networkManager in m_NetworkManagers)
394+
{
395+
if (!networkManager.SpawnManager.SpawnedObjects.ContainsKey(m_SpawnedInstanceId))
396+
{
397+
return false;
398+
}
399+
}
400+
return true;
401+
}
402+
403+
private bool AllClientsDespawnedObject()
404+
{
405+
foreach (var networkManager in m_NetworkManagers)
406+
{
407+
if (networkManager.SpawnManager.SpawnedObjects.ContainsKey(m_SpawnedInstanceId))
408+
{
409+
return false;
410+
}
411+
}
412+
return true;
413+
}
414+
415+
private ulong m_SpawnedInstanceId;
416+
[UnityTest]
417+
public IEnumerator NetworkObjectResetOnDespawn()
418+
{
419+
var authorityNetworkManager = GetAuthorityNetworkManager();
420+
var instance = SpawnObject(m_ObserverPrefab, authorityNetworkManager).GetComponent<NetworkObject>();
421+
m_SpawnedInstanceId = instance.NetworkObjectId;
422+
yield return WaitForConditionOrTimeOut(AllClientsSpawnedObject);
423+
AssertOnTimeout($"Not all clients spawned an instance of {instance.name}!");
424+
425+
instance.Despawn(false);
426+
427+
yield return WaitForConditionOrTimeOut(AllClientsDespawnedObject);
428+
AssertOnTimeout($"Not all clients de-spawned an instance of {instance.name}!");
429+
430+
Assert.IsNull(instance.GetNetworkParenting(), "Last parent was not reset!");
431+
432+
Object.Destroy(instance.gameObject);
433+
}
434+
389435
}
390436
}

0 commit comments

Comments
 (0)