From a1038e9bc70b705373d10705f5b9283d075893c9 Mon Sep 17 00:00:00 2001 From: Jeffrey Rainy Date: Mon, 9 Aug 2021 22:37:29 -0400 Subject: [PATCH 1/2] test: adding a multi-instance test checking NetworkShow and NetworkHide on lists of objects --- .../Tests/Runtime/NetworkShowHideTests.cs | 162 ++++++++++++++++++ .../Runtime/NetworkShowHideTests.cs.meta | 11 ++ 2 files changed, 173 insertions(+) create mode 100644 com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs create mode 100644 com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs.meta diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs new file mode 100644 index 0000000000..43c2ada9b6 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TestTools; +using Unity.Netcode; + +public class NetworkShowHideTest : NetworkBehaviour +{ + +} + +public class ShowHideObject : NetworkBehaviour +{ + +} + +namespace Unity.Netcode.RuntimeTests +{ + public class NetworkShowHideTests : BaseMultiInstanceTest + { + protected override int NbClients => 2; + + private ulong m_ClientId0; + + private NetworkObject m_NetSpawnedObject1; + private NetworkObject m_NetSpawnedObject2; + private NetworkObject m_NetSpawnedObject3; + private NetworkObject m_Object1OnClient0; + private NetworkObject m_Object2OnClient0; + private NetworkObject m_Object3OnClient0; + + [UnitySetUp] + public override IEnumerator Setup() + { + yield return StartSomeClientsAndServerWithPlayers(useHost: true, nbClients: NbClients, + updatePlayerPrefab: playerPrefab => + { + var networkTransform = playerPrefab.AddComponent(); + }); + } + + public GameObject PreparePrefab(Type type) + { + var prefabToSpawn = new GameObject(); + prefabToSpawn.AddComponent(type); + var networkObjectPrefab = prefabToSpawn.AddComponent(); + MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObjectPrefab); + m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = prefabToSpawn }); + foreach (var clientNetworkManager in m_ClientNetworkManagers) + { + clientNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = prefabToSpawn }); + } + return prefabToSpawn; + } + + // Check that the first client see them, or not, as expected + private void checkVisible(bool target) + { + Debug.Assert(m_NetSpawnedObject1.IsNetworkVisibleTo(m_ClientId0) == target); + Debug.Assert(m_NetSpawnedObject2.IsNetworkVisibleTo(m_ClientId0) == target); + Debug.Assert(m_NetSpawnedObject3.IsNetworkVisibleTo(m_ClientId0) == target); + + Debug.Assert(m_Object1OnClient0.IsSpawned == target); + Debug.Assert(m_Object2OnClient0.IsSpawned == target); + Debug.Assert(m_Object3OnClient0.IsSpawned == target); + } + + // Set the 3 objects visibility + private void show(bool visibility) + { + var list = new List(); + list.Add(m_NetSpawnedObject1); + list.Add(m_NetSpawnedObject2); + list.Add(m_NetSpawnedObject3); + + if (!visibility) + { + NetworkObject.NetworkHide(list, m_ClientId0); + } + else + { + NetworkObject.NetworkShow(list, m_ClientId0); + } + } + + private IEnumerator refreshNetworkObjects() + { + var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); + yield return MultiInstanceHelpers.Run( + MultiInstanceHelpers.GetNetworkObjectByRepresentation( + x => x.NetworkObjectId == m_NetSpawnedObject1.NetworkObjectId, + m_ClientNetworkManagers[0], + serverClientPlayerResult)); + m_Object1OnClient0 = serverClientPlayerResult.Result; + yield return MultiInstanceHelpers.Run( + MultiInstanceHelpers.GetNetworkObjectByRepresentation( + x => x.NetworkObjectId == m_NetSpawnedObject2.NetworkObjectId, + m_ClientNetworkManagers[0], + serverClientPlayerResult)); + m_Object2OnClient0 = serverClientPlayerResult.Result; + serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); + yield return MultiInstanceHelpers.Run( + MultiInstanceHelpers.GetNetworkObjectByRepresentation( + x => x.NetworkObjectId == m_NetSpawnedObject3.NetworkObjectId, + m_ClientNetworkManagers[0], + serverClientPlayerResult)); + m_Object3OnClient0 = serverClientPlayerResult.Result; + + // make sure the objects are set with the right network manager + m_Object1OnClient0.NetworkManagerOwner = m_ClientNetworkManagers[0]; + m_Object2OnClient0.NetworkManagerOwner = m_ClientNetworkManagers[0]; + m_Object3OnClient0.NetworkManagerOwner = m_ClientNetworkManagers[0]; + } + + + [UnityTest] + public IEnumerator NetworkShowHideTest() + { + m_ClientId0 = m_ClientNetworkManagers[0].LocalClientId; + + // create 3 objects + + var prefabToSpawn = PreparePrefab(typeof(ShowHideObject)); + var spawnedObject1 = UnityEngine.Object.Instantiate(prefabToSpawn); + var spawnedObject2 = UnityEngine.Object.Instantiate(prefabToSpawn); + var spawnedObject3 = UnityEngine.Object.Instantiate(prefabToSpawn); + m_NetSpawnedObject1 = spawnedObject1.GetComponent(); + m_NetSpawnedObject2 = spawnedObject2.GetComponent(); + m_NetSpawnedObject3 = spawnedObject3.GetComponent(); + m_NetSpawnedObject1.NetworkManagerOwner = m_ServerNetworkManager; + m_NetSpawnedObject2.NetworkManagerOwner = m_ServerNetworkManager; + m_NetSpawnedObject3.NetworkManagerOwner = m_ServerNetworkManager; + m_NetSpawnedObject1.Spawn(); + m_NetSpawnedObject2.Spawn(); + m_NetSpawnedObject3.Spawn(); + + yield return new WaitForSeconds(0.1f); + + // get the NetworkObject on a client instance + yield return refreshNetworkObjects(); + + // check object start visible + checkVisible(true); + + // hide them on one client + show(false); + yield return new WaitForSeconds(0.1f); + + // verify they got hidden + checkVisible(false); + + // show them to that client + show(true); + yield return new WaitForSeconds(0.1f); + yield return refreshNetworkObjects(); + + // verify they become visible + checkVisible(true); + } + } +} diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs.meta b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs.meta new file mode 100644 index 0000000000..8550a0fd3d --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bad53d2f164c74c46a55fa2ccb1f9b57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 077427060b6635d70d5d1f904ca30fc1d5fd704c Mon Sep 17 00:00:00 2001 From: Jeffrey Rainy Date: Tue, 10 Aug 2021 09:24:40 -0400 Subject: [PATCH 2/2] test: NetworkShow and NetworkHide PR comments --- .../Tests/Runtime/NetworkShowHideTests.cs | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs index 43c2ada9b6..70c00db0db 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkShowHideTests.cs @@ -3,20 +3,19 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.TestTools; -using Unity.Netcode; -public class NetworkShowHideTest : NetworkBehaviour +namespace Unity.Netcode.RuntimeTests { + public class NetworkShowHideTest : NetworkBehaviour + { -} + } -public class ShowHideObject : NetworkBehaviour -{ + public class ShowHideObject : NetworkBehaviour + { -} + } -namespace Unity.Netcode.RuntimeTests -{ public class NetworkShowHideTests : BaseMultiInstanceTest { protected override int NbClients => 2; @@ -55,7 +54,7 @@ public GameObject PreparePrefab(Type type) } // Check that the first client see them, or not, as expected - private void checkVisible(bool target) + private void CheckVisible(bool target) { Debug.Assert(m_NetSpawnedObject1.IsNetworkVisibleTo(m_ClientId0) == target); Debug.Assert(m_NetSpawnedObject2.IsNetworkVisibleTo(m_ClientId0) == target); @@ -67,7 +66,7 @@ private void checkVisible(bool target) } // Set the 3 objects visibility - private void show(bool visibility) + private void Show(bool visibility) { var list = new List(); list.Add(m_NetSpawnedObject1); @@ -84,7 +83,7 @@ private void show(bool visibility) } } - private IEnumerator refreshNetworkObjects() + private IEnumerator RefreshNetworkObjects() { var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); yield return MultiInstanceHelpers.Run( @@ -138,25 +137,25 @@ public IEnumerator NetworkShowHideTest() yield return new WaitForSeconds(0.1f); // get the NetworkObject on a client instance - yield return refreshNetworkObjects(); + yield return RefreshNetworkObjects(); // check object start visible - checkVisible(true); + CheckVisible(true); // hide them on one client - show(false); + Show(false); yield return new WaitForSeconds(0.1f); // verify they got hidden - checkVisible(false); + CheckVisible(false); // show them to that client - show(true); + Show(true); yield return new WaitForSeconds(0.1f); - yield return refreshNetworkObjects(); + yield return RefreshNetworkObjects(); // verify they become visible - checkVisible(true); + CheckVisible(true); } } }