|
1 | 1 | using NUnit.Framework;
|
| 2 | +using UnityEngine; |
| 3 | +using UnityEngine.SceneManagement; |
| 4 | +using Unity.Netcode; |
2 | 5 | using Unity.Netcode.TestHelpers.Runtime;
|
3 |
| - |
| 6 | +using System.Collections; |
4 | 7 |
|
5 | 8 | namespace TestProject.RuntimeTests
|
6 | 9 | {
|
| 10 | + [TestFixture(UseSceneManagement.SceneManagementDisabled)] |
| 11 | + [TestFixture(UseSceneManagement.SceneManagementEnabled)] |
7 | 12 | public class NetworkManagerTests : NetcodeIntegrationTest
|
8 | 13 | {
|
9 |
| - protected override int NumberOfClients => 1; |
| 14 | + private const string k_SceneToLoad = "InSceneNetworkObject"; |
| 15 | + protected override int NumberOfClients => 0; |
| 16 | + |
| 17 | + public enum UseSceneManagement |
| 18 | + { |
| 19 | + SceneManagementEnabled, |
| 20 | + SceneManagementDisabled |
| 21 | + } |
| 22 | + |
| 23 | + private bool m_EnableSceneManagement; |
| 24 | + private NetworkObject m_NetworkObject; |
| 25 | + private bool m_NetworkObjectWasSpawned; |
| 26 | + private bool m_NetworkBehaviourIsHostWasSet; |
| 27 | + private bool m_NetworkBehaviourIsClientWasSet; |
| 28 | + private bool m_NetworkBehaviourIsServerWasSet; |
| 29 | + private int m_NumberOfTimesInvoked; |
| 30 | + private AsyncOperation m_AsyncOperation; |
| 31 | + private NetworkObjectTestComponent m_NetworkObjectTestComponent; |
| 32 | + |
| 33 | + private bool m_UseSceneManagement; |
| 34 | + |
| 35 | + public NetworkManagerTests(UseSceneManagement useSceneManagement) |
| 36 | + { |
| 37 | + m_UseSceneManagement = useSceneManagement == UseSceneManagement.SceneManagementEnabled; |
| 38 | + } |
| 39 | + |
| 40 | + private void OnClientConnectedCallback(NetworkObject networkObject, int numberOfTimesInvoked, bool isHost, bool isClient, bool isServer) |
| 41 | + { |
| 42 | + m_NetworkObject = networkObject; |
| 43 | + m_NetworkObjectWasSpawned = networkObject.IsSpawned; |
| 44 | + m_NetworkBehaviourIsHostWasSet = isHost; |
| 45 | + m_NetworkBehaviourIsClientWasSet = isClient; |
| 46 | + m_NetworkBehaviourIsServerWasSet = isServer; |
| 47 | + m_NumberOfTimesInvoked = numberOfTimesInvoked; |
| 48 | + } |
| 49 | + |
| 50 | + private bool TestComponentFound() |
| 51 | + { |
| 52 | + if (!m_AsyncOperation.isDone) |
| 53 | + { |
| 54 | + return false; |
| 55 | + } |
| 56 | + |
| 57 | + m_NetworkObjectTestComponent = Object.FindObjectOfType<NetworkObjectTestComponent>(); |
| 58 | + if (m_NetworkObjectTestComponent == null) |
| 59 | + { |
| 60 | + return false; |
| 61 | + } |
| 62 | + return true; |
| 63 | + } |
| 64 | + |
| 65 | + protected override IEnumerator OnSetup() |
| 66 | + { |
| 67 | + m_AsyncOperation = SceneManager.LoadSceneAsync(k_SceneToLoad, LoadSceneMode.Additive); |
| 68 | + yield return WaitForConditionOrTimeOut(TestComponentFound); |
| 69 | + AssertOnTimeout($"Failed to find {nameof(NetworkObjectTestComponent)} after loading test scene {k_SceneToLoad}"); |
| 70 | + } |
| 71 | + |
| 72 | + protected override IEnumerator OnTearDown() |
| 73 | + { |
| 74 | + SceneManager.UnloadSceneAsync(SceneManager.GetSceneByName(k_SceneToLoad)); |
| 75 | + yield return s_DefaultWaitForTick; |
| 76 | + } |
| 77 | + |
| 78 | + protected override void OnServerAndClientsCreated() |
| 79 | + { |
| 80 | + m_ServerNetworkManager.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement; |
| 81 | + m_NetworkObjectTestComponent.ConfigureClientConnected(m_ServerNetworkManager, OnClientConnectedCallback); |
| 82 | + } |
10 | 83 |
|
11 | 84 | [Test]
|
12 |
| - public void ValidateHostLocalClient() |
| 85 | + public void ValidateHostSettings() |
13 | 86 | {
|
14 | 87 | Assert.IsTrue(m_ServerNetworkManager.LocalClient != null);
|
| 88 | + Assert.IsTrue(m_NetworkObjectWasSpawned, $"{m_NetworkObject.name} was not spawned when OnClientConnectedCallback was invoked!"); |
| 89 | + Assert.IsTrue(m_NetworkBehaviourIsHostWasSet, $"IsHost was not true when OnClientConnectedCallback was invoked!"); |
| 90 | + Assert.IsTrue(m_NetworkBehaviourIsClientWasSet, $"IsClient was not true when OnClientConnectedCallback was invoked!"); |
| 91 | + Assert.IsTrue(m_NumberOfTimesInvoked == 1, $"OnClientConnectedCallback was invoked {m_NumberOfTimesInvoked} as opposed to just once!"); |
| 92 | + Assert.IsTrue(m_NetworkBehaviourIsServerWasSet, $"IsServer was not true when OnClientConnectedCallback was invoked!"); |
15 | 93 | }
|
16 | 94 | }
|
17 | 95 | }
|
0 commit comments