Skip to content

Commit ab77240

Browse files
update
Updating some integration tests and some additional areas that were problematic to IL2CPP integration tests.
1 parent 2dc1ad8 commit ab77240

File tree

4 files changed

+69
-52
lines changed

4 files changed

+69
-52
lines changed

com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventProgress.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ internal class SceneEventProgress
9191
/// </summary>
9292
internal bool HasTimedOut()
9393
{
94-
return WhenSceneEventHasTimedOut <= m_NetworkManager.RealTimeProvider.RealTimeSinceStartup;
94+
return m_NetworkManager == null || WhenSceneEventHasTimedOut <= m_NetworkManager.RealTimeProvider.RealTimeSinceStartup;
9595
}
9696

9797
/// <summary>
@@ -298,7 +298,7 @@ internal void TryFinishingSceneEventProgress()
298298
m_NetworkManager.OnClientDisconnectCallback -= OnClientDisconnectCallback;
299299
}
300300

301-
if (m_TimeOutCoroutine != null)
301+
if (m_TimeOutCoroutine != null && m_NetworkManager != null)
302302
{
303303
m_NetworkManager.StopCoroutine(m_TimeOutCoroutine);
304304
}

com.unity.netcode.gameobjects/TestHelpers/Runtime/NetcodeIntegrationTestHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ public static void Destroy()
329329
// Shutdown the server which forces clients to disconnect
330330
foreach (var networkManager in NetworkManagerInstances)
331331
{
332-
networkManager.Shutdown();
332+
networkManager.Shutdown(true);
333333
s_Hooks.Remove(networkManager);
334334
}
335335

testproject/Assets/Tests/Runtime/MessageOrdering.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@ public IEnumerator Teardown()
3636
{
3737
Object.Destroy(m_Prefab);
3838
m_Prefab = null;
39-
NetcodeIntegrationTestHelpers.Destroy();
4039
Support.SpawnRpcDespawn.ClientUpdateCount = 0;
4140
Support.SpawnRpcDespawn.ServerUpdateCount = 0;
4241
Support.SpawnRpcDespawn.ClientNetworkSpawnRpcCalled = false;
4342
Support.SpawnRpcDespawn.ExecuteClientRpc = false;
4443
}
44+
45+
NetcodeIntegrationTestHelpers.Destroy();
4546
yield break;
4647
}
4748

@@ -106,16 +107,6 @@ public IEnumerator SpawnRpcDespawn()
106107

107108
// Make it a prefab
108109
NetcodeIntegrationTestHelpers.MakeNetworkObjectTestPrefab(networkObject);
109-
var clientHandlers = new List<SpawnRpcDespawnInstanceHandler>();
110-
//var handler = new SpawnRpcDespawnInstanceHandler(networkObject.GlobalObjectIdHash);
111-
//server.PrefabHandler.AddHandler(networkObject.GlobalObjectIdHash, handler);
112-
foreach (var client in m_ClientNetworkManagers)
113-
{
114-
var clientHandler = new SpawnRpcDespawnInstanceHandler(networkObject.GlobalObjectIdHash);
115-
client.PrefabHandler.AddHandler(networkObject, clientHandler);
116-
clientHandlers.Add(clientHandler);
117-
}
118-
119110
var validNetworkPrefab = new NetworkPrefab
120111
{
121112
Prefab = m_Prefab
@@ -126,6 +117,16 @@ public IEnumerator SpawnRpcDespawn()
126117
client.NetworkConfig.Prefabs.Add(validNetworkPrefab);
127118
}
128119

120+
var clientHandlers = new List<SpawnRpcDespawnInstanceHandler>();
121+
//var handler = new SpawnRpcDespawnInstanceHandler(networkObject.GlobalObjectIdHash);
122+
//server.PrefabHandler.AddHandler(networkObject.GlobalObjectIdHash, handler);
123+
foreach (var client in m_ClientNetworkManagers)
124+
{
125+
var clientHandler = new SpawnRpcDespawnInstanceHandler(networkObject.GlobalObjectIdHash);
126+
client.PrefabHandler.AddHandler(networkObject, clientHandler);
127+
clientHandlers.Add(clientHandler);
128+
}
129+
129130
// Start the instances
130131
if (!NetcodeIntegrationTestHelpers.Start(true, m_ServerNetworkManager, m_ClientNetworkManagers))
131132
{

testproject/Assets/Tests/Runtime/SceneObjectsNotDestroyedOnShutdownTest.cs

Lines changed: 54 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using NUnit.Framework;
45
using Unity.Netcode;
@@ -19,6 +20,36 @@ public class SceneObjectsNotDestroyedOnShutdownTest : NetcodeIntegrationTest
1920
private Scene m_TestScene;
2021
private WaitForSeconds m_DefaultWaitForTick = new WaitForSeconds(1.0f / 30);
2122

23+
private NetworkObject m_LoadedSceneObject;
24+
private List<NetworkObject> m_LoadedSceneOBjects = new List<NetworkObject>();
25+
26+
private bool FoundLoadedSceneObject()
27+
{
28+
m_LoadedSceneObject = null;
29+
#if UNITY_2023_1_OR_NEWER
30+
m_LoadedSceneObject = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault();
31+
#else
32+
m_LoadedSceneObject = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault();
33+
#endif
34+
return m_LoadedSceneObject != null;
35+
}
36+
37+
private bool FoundLoadedSceneObjects()
38+
{
39+
m_LoadedSceneOBjects.Clear();
40+
#if UNITY_2023_1_OR_NEWER
41+
var loadedInSceneObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName));
42+
#else
43+
var loadedInSceneObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName));
44+
#endif
45+
if (loadedInSceneObjects.Count() == 0)
46+
{
47+
return false;
48+
}
49+
m_LoadedSceneOBjects.AddRange(loadedInSceneObjects);
50+
return true;
51+
}
52+
2253
[UnityTest]
2354
public IEnumerator SceneObjectsNotDestroyedOnShutdown()
2455
{
@@ -28,30 +59,22 @@ public IEnumerator SceneObjectsNotDestroyedOnShutdown()
2859
yield return WaitForConditionOrTimeOut(() => m_TestScene.IsValid() && m_TestScene.isLoaded);
2960
AssertOnTimeout($"Timed out waiting for scene {k_TestScene} to load!");
3061

31-
#if UNITY_2023_1_OR_NEWER
32-
var loadedInSceneObject = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName).FirstOrDefault();
33-
#else
34-
var loadedInSceneObject = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault();
35-
#endif
36-
Assert.IsNotNull(loadedInSceneObject, $"Failed to find {k_SceneObjectName} before starting client!");
62+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObject);
63+
AssertOnTimeout($"Failed to find {k_SceneObjectName} before starting client!");
3764
yield return CreateAndStartNewClient();
3865

39-
#if UNITY_2023_1_OR_NEWER
40-
var loadedInSceneObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName);
41-
#else
42-
var loadedInSceneObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName));
43-
#endif
44-
Assert.IsTrue(loadedInSceneObjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after client connected!");
66+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObjects);
67+
AssertOnTimeout($"Failed to find {k_SceneObjectName} objects after starting Client-{m_ClientNetworkManagers[0].LocalClientId}!");
68+
69+
Assert.IsTrue(m_LoadedSceneOBjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after Client-{m_ClientNetworkManagers[0].LocalClientId} connected!");
4570
m_ClientNetworkManagers[0].Shutdown();
4671
yield return m_DefaultWaitForTick;
47-
#if UNITY_2023_1_OR_NEWER
48-
loadedInSceneObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName);
49-
#else
50-
loadedInSceneObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName));
51-
#endif
52-
Assert.IsTrue(loadedInSceneObjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after client shutdown!");
72+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObjects);
73+
AssertOnTimeout($"Failed to find {k_SceneObjectName} objects after shutting down client!");
74+
Assert.IsTrue(m_LoadedSceneOBjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after client shutdown!");
5375
}
5476

77+
5578
[UnityTest]
5679
public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown()
5780
{
@@ -61,46 +84,39 @@ public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown()
6184
yield return WaitForConditionOrTimeOut(() => m_TestScene.IsValid() && m_TestScene.isLoaded);
6285
AssertOnTimeout($"Timed out waiting for scene {k_TestScene} to load!");
6386

64-
#if UNITY_2023_1_OR_NEWER
65-
var loadedInSceneObject = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName).FirstOrDefault();
66-
#else
67-
var loadedInSceneObject = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault();
68-
#endif
69-
Assert.IsNotNull(loadedInSceneObject, $"Failed to find {k_SceneObjectName} before starting client!");
87+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObject);
88+
AssertOnTimeout($"Failed to find {k_SceneObjectName} before starting client!");
89+
7090
yield return CreateAndStartNewClient();
7191

7292
var clientId = m_ClientNetworkManagers[0].LocalClientId;
73-
Assert.IsTrue(loadedInSceneObject.TrySetParent(m_PlayerNetworkObjects[0][clientId]), $"Failed to parent in-scene object under client player");
93+
Assert.IsTrue(m_LoadedSceneObject.TrySetParent(m_PlayerNetworkObjects[0][clientId]), $"Failed to parent in-scene object under client player");
7494

7595
yield return WaitForConditionOrTimeOut(() => PlayerHasChildren(clientId));
7696
AssertOnTimeout($"Client-{clientId} player never parented {k_SceneObjectName}!");
7797

78-
#if UNITY_2023_1_OR_NEWER
79-
var loadedInSceneObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName);
80-
#else
81-
var loadedInSceneObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName));
82-
#endif
83-
Assert.IsTrue(loadedInSceneObjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after client connected!");
98+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObjects);
99+
AssertOnTimeout($"Failed to find {k_SceneObjectName} objects before shutting down Client-{m_ClientNetworkManagers[0].LocalClientId}!");
100+
Assert.IsTrue(m_LoadedSceneOBjects.Count() > 1, $"Only found one instance of {k_SceneObjectName} after client connected!");
84101
m_ClientNetworkManagers[0].Shutdown();
85102
yield return m_DefaultWaitForTick;
86103

87104
// Sanity check to make sure the client's player no longer has any children
88105
yield return WaitForConditionOrTimeOut(() => PlayerNoLongerExistsWithChildren(clientId));
89106
AssertOnTimeout($"Client-{clientId} player still exits with children after client shutdown!");
90-
#if UNITY_2023_1_OR_NEWER
91-
loadedInSceneObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName);
92-
#else
93-
loadedInSceneObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.name.Contains(k_SceneObjectName));
94-
#endif
107+
108+
yield return WaitForConditionOrTimeOut(FoundLoadedSceneObjects);
109+
AssertOnTimeout($"Failed to find {k_SceneObjectName} objects after shutting down client!");
110+
95111
// Make sure any in-scene placed NetworkObject instantiated has no parent
96-
foreach (var insceneObject in loadedInSceneObjects)
112+
foreach (var insceneObject in m_LoadedSceneOBjects)
97113
{
98114
Assert.IsTrue(insceneObject.transform.parent == null, $"{insceneObject.name} is still parented!");
99115
}
100116

101117
// We should have exactly 2 in-scene placed NetworkObjects remaining:
102118
// One instance on host side and one on the disconnected client side.
103-
Assert.IsTrue(loadedInSceneObjects.Count() == 2, $"Only found one instance of {k_SceneObjectName} after client shutdown!");
119+
Assert.IsTrue(m_LoadedSceneOBjects.Count() == 2, $"Only found one instance of {k_SceneObjectName} after client shutdown!");
104120
}
105121

106122
private bool PlayerHasChildren(ulong clientId)

0 commit comments

Comments
 (0)