-
Notifications
You must be signed in to change notification settings - Fork 459
Expand file tree
/
Copy pathAddNetworkPrefabTests.cs
More file actions
137 lines (115 loc) · 5.51 KB
/
AddNetworkPrefabTests.cs
File metadata and controls
137 lines (115 loc) · 5.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System.Collections;
using NUnit.Framework;
using Unity.Netcode.TestHelpers.Runtime;
using UnityEngine;
using UnityEngine.TestTools;
using Object = UnityEngine.Object;
namespace Unity.Netcode.RuntimeTests
{
internal class AddNetworkPrefabTest : NetcodeIntegrationTest
{
internal class EmptyComponent : NetworkBehaviour
{
}
protected override int NumberOfClients => 1;
private GameObject m_Prefab;
protected override IEnumerator OnSetup()
{
// Host is irrelevant, messages don't get sent to the host "client"
m_UseHost = false;
yield return null;
}
protected override void OnServerAndClientsCreated()
{
m_Prefab = new GameObject("Object");
var networkObject = m_Prefab.AddComponent<NetworkObject>();
m_Prefab.AddComponent<EmptyComponent>();
// Make it a prefab
NetcodeIntegrationTestHelpers.MakeNetworkObjectTestPrefab(networkObject);
m_ServerNetworkManager.NetworkConfig.SpawnTimeout = 0;
m_ServerNetworkManager.NetworkConfig.ForceSamePrefabs = false;
foreach (var client in m_ClientNetworkManagers)
{
client.NetworkConfig.SpawnTimeout = 0;
client.NetworkConfig.ForceSamePrefabs = false;
}
}
private EmptyComponent GetObjectForClient(ulong clientId)
{
var emptyComponents = FindObjects.FindObjectsByType<EmptyComponent>();
foreach (var component in emptyComponents)
{
if (component.IsSpawned && component.NetworkManager.LocalClientId == clientId)
{
return component;
}
}
return null;
}
private void RegisterPrefab()
{
m_ServerNetworkManager.AddNetworkPrefab(m_Prefab);
foreach (var client in m_ClientNetworkManagers)
{
client.AddNetworkPrefab(m_Prefab);
}
}
private void DeregisterPrefab()
{
m_ServerNetworkManager.RemoveNetworkPrefab(m_Prefab);
foreach (var client in m_ClientNetworkManagers)
{
client.RemoveNetworkPrefab(m_Prefab);
}
}
private static CoroutineRunner s_CoroutineRunner;
[UnityTest]
public IEnumerator WhenSpawningBeforeAddingPrefab_SpawnFails()
{
var serverObject = Object.Instantiate(m_Prefab);
serverObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
serverObject.GetComponent<NetworkObject>().Spawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeReceived<CreateObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
}
[UnityTest]
public IEnumerator WhenSpawningAfterAddingServerPrefabButBeforeAddingClientPrefab_SpawnFails()
{
m_ServerNetworkManager.AddNetworkPrefab(m_Prefab);
var serverObject = Object.Instantiate(m_Prefab);
serverObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
serverObject.GetComponent<NetworkObject>().Spawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeReceived<CreateObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
}
[UnityTest]
public IEnumerator WhenSpawningAfterAddingPrefabOnServerAndClient_SpawnSucceeds()
{
RegisterPrefab();
var serverObject = Object.Instantiate(m_Prefab);
serverObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
serverObject.GetComponent<NetworkObject>().Spawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeHandled<CreateObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNotNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
}
[UnityTest]
public IEnumerator WhenSpawningAfterRemovingPrefabOnClient_SpawnFails()
{
RegisterPrefab();
var serverObject = Object.Instantiate(m_Prefab);
serverObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
serverObject.GetComponent<NetworkObject>().Spawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeReceived<CreateObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNotNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
serverObject.GetComponent<NetworkObject>().Despawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeReceived<DestroyObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
DeregisterPrefab();
serverObject = Object.Instantiate(m_Prefab);
serverObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
serverObject.GetComponent<NetworkObject>().Spawn();
yield return NetcodeIntegrationTestHelpers.WaitForMessageOfTypeReceived<CreateObjectMessage>(m_ClientNetworkManagers[0]);
Assert.IsNull(GetObjectForClient(m_ClientNetworkManagers[0].LocalClientId));
}
}
}