Skip to content

Commit 02061f0

Browse files
test - fix
Fixing issue with the updated InScenePlacedNetworkObjectTests that were using the server-side player for some of the tests which doesn't exist when it is just a server. Fixing issue with the expected number of spawned objects since the base value was derived from TotalClients that changes when running a server.
1 parent 49a7c6b commit 02061f0

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

testproject/Assets/Tests/Runtime/NetworkSceneManager/InScenePlacedNetworkObjectTests.cs

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace TestProject.RuntimeTests
1818
[TestFixture(NetworkTopologyTypes.ClientServer, HostOrServer.Server)]
1919
public class InScenePlacedNetworkObjectTests : IntegrationTestWithApproximation
2020
{
21-
protected override int NumberOfClients => 2;
21+
protected override int NumberOfClients => 3;
2222

2323
private const string k_SceneToLoad = "InSceneNetworkObject";
2424
private const string k_InSceneUnder = "InSceneUnderGameObject";
@@ -63,30 +63,33 @@ protected override bool CanStartServerAndClients()
6363
[UnityTest]
6464
public IEnumerator InSceneNetworkObjectSynchAndSpawn()
6565
{
66+
NetworkObjectTestComponent.VerboseDebug = true;
6667
// Because despawning a client will cause it to shutdown and clean everything in the
6768
// scene hierarchy, we have to prevent one of the clients from spawning initially before
6869
// we test synchronizing late joining clients with despawned in-scene placed NetworkObjects.
6970
// So, we prevent the automatic starting of the server and clients, remove the client we
7071
// will be targeting to join late from the m_ClientNetworkManagers array, start the server
7172
// and the remaining client, despawn the in-scene NetworkObject, and then start and synchronize
7273
// the clientToTest.
73-
var clientToTest = m_ClientNetworkManagers[1];
74+
var clientToTest = m_ClientNetworkManagers[2];
7475
var clients = m_ClientNetworkManagers.ToList();
7576
clients.Remove(clientToTest);
7677
m_ClientNetworkManagers = clients.ToArray();
7778
m_CanStartServerAndClients = true;
79+
NetworkObjectTestComponent.Reset();
7880
yield return StartServerAndClients();
7981
clients.Add(clientToTest);
8082
m_ClientNetworkManagers = clients.ToArray();
8183

82-
NetworkObjectTestComponent.ServerNetworkObjectInstance = null;
84+
8385
m_ServerNetworkManager.SceneManager.OnSceneEvent += Server_OnSceneEvent;
8486
var status = m_ServerNetworkManager.SceneManager.LoadScene(k_SceneToLoad, LoadSceneMode.Additive);
8587
Assert.IsTrue(status == SceneEventProgressStatus.Started, $"When attempting to load scene {k_SceneToLoad} was returned the following progress status: {status}");
86-
88+
// We removed a client from the initial spawn and server should spawn too
89+
var clientCount = TotalClients - (m_UseHost ? 1 : 0);
8790
// This verifies the scene loaded and the in-scene placed NetworkObjects spawned.
88-
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == TotalClients - 1);
89-
AssertOnTimeout($"Timed out waiting for total spawned in-scene placed NetworkObjects to reach a count of {TotalClients - 1} and is currently {NetworkObjectTestComponent.SpawnedInstances.Count}");
91+
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == clientCount);
92+
AssertOnTimeout($"Timed out waiting for total spawned in-scene placed NetworkObjects to reach a count of {clientCount} and is currently {NetworkObjectTestComponent.SpawnedInstances.Count}");
9093

9194
// Get the server-side instance of the in-scene NetworkObject
9295
Assert.True(s_GlobalNetworkObjects.ContainsKey(m_ServerNetworkManager.LocalClientId), $"Could not find server instance of the test in-scene NetworkObject!");
@@ -103,6 +106,9 @@ public IEnumerator InSceneNetworkObjectSynchAndSpawn()
103106
// Now late join a client
104107
NetworkObjectTestComponent.OnInSceneObjectDespawned += OnInSceneObjectDespawned;
105108
NetcodeIntegrationTestHelpers.StartOneClient(clientToTest);
109+
// Spawned another client
110+
clientCount++;
111+
106112
yield return WaitForConditionOrTimeOut(() => (clientToTest.IsConnectedClient && clientToTest.IsListening));
107113
AssertOnTimeout($"Timed out waiting for {clientToTest.name} to reconnect!");
108114

@@ -121,21 +127,24 @@ public IEnumerator InSceneNetworkObjectSynchAndSpawn()
121127
// Now test that the despawned in-scene placed NetworkObject can be re-spawned (without having been registered as a NetworkPrefab)
122128
serverObject.Spawn();
123129

124-
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == TotalClients);
125-
AssertOnTimeout($"Timed out waiting for all in-scene instances to be spawned! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {TotalClients}");
130+
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == clientCount);
131+
AssertOnTimeout($"Timed out waiting for all in-scene instances to be spawned! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {clientCount}");
126132

127133
// Test NetworkHide on the first client
128134
var firstClientId = m_ClientNetworkManagers[0].LocalClientId;
129135

130136
serverObject.NetworkHide(firstClientId);
137+
clientCount--;
131138

132-
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == TotalClients - 1);
133-
AssertOnTimeout($"[NetworkHide] Timed out waiting for Client-{firstClientId} to despawn the in-scene placed NetworkObject! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {TotalClients - 1}");
139+
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == clientCount);
140+
AssertOnTimeout($"[NetworkHide] Timed out waiting for Client-{firstClientId} to despawn the in-scene placed NetworkObject! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {clientCount}");
134141

135142
// Validate that the first client can spawn the "netcode hidden" in-scene placed NetworkObject
136143
serverObject.NetworkShow(firstClientId);
137-
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == TotalClients);
138-
AssertOnTimeout($"[NetworkShow] Timed out waiting for Client-{firstClientId} to spawn the in-scene placed NetworkObject! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {TotalClients}");
144+
clientCount++;
145+
146+
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == clientCount);
147+
AssertOnTimeout($"[NetworkShow] Timed out waiting for Client-{firstClientId} to spawn the in-scene placed NetworkObject! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {clientCount}");
139148

140149
CleanUpLoadedScene();
141150
}
@@ -152,7 +161,7 @@ public IEnumerator ParentedInSceneObjectLateJoiningClient()
152161
// will be targeting to join late from the m_ClientNetworkManagers array, start the server
153162
// and the remaining client, despawn the in-scene NetworkObject, and then start and synchronize
154163
// the clientToTest.
155-
var clientToTest = m_ClientNetworkManagers[1];
164+
var clientToTest = m_ClientNetworkManagers[2];
156165
var clients = m_ClientNetworkManagers.ToList();
157166
clients.Remove(clientToTest);
158167
m_ClientNetworkManagers = clients.ToArray();
@@ -174,12 +183,22 @@ public IEnumerator ParentedInSceneObjectLateJoiningClient()
174183
Assert.IsNotNull(firstClientInSceneObjectInstance, $"Could not get the client-side registration of {nameof(NetworkObjectTestComponent)}!");
175184
Assert.IsTrue(firstClientInSceneObjectInstance.NetworkManager == m_ClientNetworkManagers[0]);
176185

177-
// Parent the object
178-
serverInSceneObjectInstance.transform.parent = m_ServerNetworkManager.LocalClient.PlayerObject.transform;
186+
var playerObjectToParent = m_UseHost ? m_ServerNetworkManager.LocalClient.PlayerObject : m_PlayerNetworkObjects[m_ServerNetworkManager.LocalClientId][m_ClientNetworkManagers[1].LocalClientId];
187+
var clientSidePlayer = (NetworkObject)null;
188+
if (!m_UseHost)
189+
{
190+
playerObjectToParent = m_PlayerNetworkObjects[m_ServerNetworkManager.LocalClientId][m_ClientNetworkManagers[1].LocalClientId];
191+
clientSidePlayer = m_PlayerNetworkObjects[m_ClientNetworkManagers[0].LocalClientId][m_ClientNetworkManagers[1].LocalClientId];
192+
}
193+
else
194+
{
195+
clientSidePlayer = m_PlayerNetworkObjects[m_ClientNetworkManagers[0].LocalClientId][NetworkManager.ServerClientId];
196+
}
179197

180-
var clientSideServerPlayer = m_PlayerNetworkObjects[m_ClientNetworkManagers[0].LocalClientId][NetworkManager.ServerClientId];
198+
// Parent the object
199+
serverInSceneObjectInstance.transform.parent = playerObjectToParent.transform;
181200

182-
yield return WaitForConditionOrTimeOut(() => firstClientInSceneObjectInstance.transform.parent != null && firstClientInSceneObjectInstance.transform.parent == clientSideServerPlayer.transform);
201+
yield return WaitForConditionOrTimeOut(() => firstClientInSceneObjectInstance.transform.parent != null && firstClientInSceneObjectInstance.transform.parent == clientSidePlayer.transform);
183202
AssertOnTimeout($"Timed out waiting for the client-side id ({m_ClientNetworkManagers[0].LocalClientId}) server player transform to be set on the client-side in-scene object!");
184203
// Now late join a client
185204
NetcodeIntegrationTestHelpers.StartOneClient(clientToTest);
@@ -191,15 +210,15 @@ public IEnumerator ParentedInSceneObjectLateJoiningClient()
191210
// Update the newly joined client information
192211
ClientNetworkManagerPostStartInit();
193212

194-
var lateJoinClientInSceneObjectInstance = NetworkObjectTestComponent.SpawnedInstances.Where((c) => c.NetworkManager == m_ClientNetworkManagers[1]).FirstOrDefault();
213+
var lateJoinClientInSceneObjectInstance = NetworkObjectTestComponent.SpawnedInstances.Where((c) => c.NetworkManager == m_ClientNetworkManagers[2]).FirstOrDefault();
195214
Assert.IsNotNull(lateJoinClientInSceneObjectInstance, $"Could not get the client-side registration of {nameof(NetworkObjectTestComponent)} for the late joining client!");
196215

197216
// Now get the late-joining client's instance for the server player
198-
clientSideServerPlayer = m_PlayerNetworkObjects[clientToTest.LocalClientId][NetworkManager.ServerClientId];
217+
clientSidePlayer = m_PlayerNetworkObjects[clientToTest.LocalClientId][clientSidePlayer.OwnerClientId];
199218

200219
// Validate the late joined client's in-scene NetworkObject is parented to the server-side player
201-
yield return WaitForConditionOrTimeOut(() => lateJoinClientInSceneObjectInstance.transform.parent != null && lateJoinClientInSceneObjectInstance.transform.parent == clientSideServerPlayer.transform);
202-
AssertOnTimeout($"Timed out waiting for the client-side id ({m_ClientNetworkManagers[0].LocalClientId}) server player transform to be set on the client-side in-scene object!");
220+
yield return WaitForConditionOrTimeOut(() => lateJoinClientInSceneObjectInstance.transform.parent != null && lateJoinClientInSceneObjectInstance.transform.parent == clientSidePlayer.transform);
221+
AssertOnTimeout($"Timed out waiting for the client-side id ({m_ClientNetworkManagers[0].LocalClientId}) player transform to be set on the client-side in-scene object!");
203222
}
204223

205224
private void OnSceneEvent(SceneEvent sceneEvent)
@@ -485,9 +504,6 @@ public IEnumerator ParentedInSceneObjectUnderGameObject([Values(k_InSceneUnder,
485504
Assert.IsNotNull(firstClientInSceneObjectInstance, $"Could not get the client-side registration of {nameof(NetworkObjectTestComponent)}!");
486505
Assert.IsTrue(firstClientInSceneObjectInstance.NetworkManager == m_ClientNetworkManagers[0]);
487506

488-
// Parent the object
489-
var clientSideServerPlayer = m_PlayerNetworkObjects[m_ClientNetworkManagers[0].LocalClientId][NetworkManager.ServerClientId];
490-
491507
serverInSceneObjectInstance.AutoObjectParentSync = parentSyncSettings == ParentSyncSettings.ParentSync;
492508
serverInSceneObjectInstance.SynchronizeTransform = transformSyncSettings == TransformSyncSettings.TransformSync;
493509

0 commit comments

Comments
 (0)