44using NUnit . Framework ;
55using Unity . Netcode . TestHelpers . Runtime ;
66using UnityEngine ;
7+ using UnityEngine . TestTools ;
78
89namespace Unity . Netcode . RuntimeTests
910{
@@ -93,11 +94,11 @@ public void NetworkConfigInvalidNetworkPrefabTest()
9394 private const string k_PrefabObjectName = "NetworkPrefabHandlerTestObject" ;
9495
9596 [ Test ]
96- public void NetworkPrefabHandlerClass ( [ Values ] bool distributedAuthority )
97+ public void NetworkPrefabHandlerClass ( [ Values ] NetworkTopologyTypes topologyType )
9798 {
9899 var networkConfig = new NetworkConfig ( )
99100 {
100- NetworkTopology = distributedAuthority ? NetworkTopologyTypes . DistributedAuthority : NetworkTopologyTypes . ClientServer ,
101+ NetworkTopology = topologyType ,
101102 } ;
102103
103104 Assert . IsTrue ( NetworkManagerHelper . StartNetworkManager ( out _ , networkConfig : networkConfig ) ) ;
@@ -107,13 +108,13 @@ public void NetworkPrefabHandlerClass([Values] bool distributedAuthority)
107108 NetworkObject baseObject = NetworkManagerHelper . InstantiatedNetworkObjects [ baseObjectID ] ;
108109
109110 var networkPrefabHandler = new NetworkPrefabHandler ( ) ;
110- var networkPrefaInstanceHandler = new NetworkPrefaInstanceHandler ( baseObject ) ;
111+ var networkPrefabInstanceHandler = new NetworkPrefabInstanceHandler ( baseObject ) ;
111112
112113 var prefabPosition = new Vector3 ( 1.0f , 5.0f , 3.0f ) ;
113114 var prefabRotation = new Quaternion ( 1.0f , 0.5f , 0.4f , 0.1f ) ;
114115
115116 //Register via GameObject
116- var gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject . gameObject , networkPrefaInstanceHandler ) ;
117+ var gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject . gameObject , networkPrefabInstanceHandler ) ;
117118
118119 //Test result of registering via GameObject reference
119120 Assert . True ( gameObjectRegistered ) ;
@@ -134,7 +135,7 @@ public void NetworkPrefabHandlerClass([Values] bool distributedAuthority)
134135 networkPrefabHandler . RemoveHandler ( baseObject ) ; //Remove our handler
135136
136137 //Register via NetworkObject
137- gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject , networkPrefaInstanceHandler ) ;
138+ gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject , networkPrefabInstanceHandler ) ;
138139
139140 //Test result of registering via NetworkObject reference
140141 Assert . True ( gameObjectRegistered ) ;
@@ -159,7 +160,7 @@ public void NetworkPrefabHandlerClass([Values] bool distributedAuthority)
159160 networkPrefabHandler . RemoveHandler ( baseObject ) ; //Remove our handler
160161
161162 //Register via GlobalObjectIdHash
162- gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject . GlobalObjectIdHash , networkPrefaInstanceHandler ) ;
163+ gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject . GlobalObjectIdHash , networkPrefabInstanceHandler ) ;
163164
164165 //Test result of registering via GlobalObjectIdHash reference
165166 Assert . True ( gameObjectRegistered ) ;
@@ -183,7 +184,21 @@ public void NetworkPrefabHandlerClass([Values] bool distributedAuthority)
183184 networkPrefabHandler . HandleNetworkPrefabDestroy ( spawnedObject ) ; //Destroy our prefab instance
184185 networkPrefabHandler . RemoveHandler ( baseObject ) ; //Remove our handler
185186
186- Assert . False ( networkPrefaInstanceHandler . StillHasInstances ( ) ) ;
187+ // Register a handler that throws an exception
188+ var networkPrefabExceptionThrower = new NetworkPrefabExceptionThrower ( ) ;
189+ gameObjectRegistered = networkPrefabHandler . AddHandler ( baseObject , networkPrefabExceptionThrower ) ;
190+ //Test result of registering exception handler
191+ Assert . True ( gameObjectRegistered ) ;
192+
193+ LogAssert . Expect ( LogType . Exception , "Exception: exception while instantiating" ) ;
194+ spawnedObject = networkPrefabHandler . HandleNetworkPrefabSpawn ( baseObject . GlobalObjectIdHash , 0 , prefabPosition , prefabRotation ) ;
195+
196+ // No object should have been spawned, but test should have continued
197+ Assert . Null ( spawnedObject ) ;
198+
199+ networkPrefabHandler . RemoveHandler ( baseObject ) ; //Remove our handler
200+
201+ Assert . False ( networkPrefabInstanceHandler . StillHasInstances ( ) ) ;
187202 }
188203
189204 [ SetUp ]
@@ -216,7 +231,7 @@ public void TearDown()
216231 /// <summary>
217232 /// The Prefab instance handler to use for this test
218233 /// </summary>
219- internal class NetworkPrefaInstanceHandler : INetworkPrefabInstanceHandler
234+ internal class NetworkPrefabInstanceHandler : INetworkPrefabInstanceHandler
220235 {
221236 private NetworkObject m_NetworkObject ;
222237
@@ -243,10 +258,26 @@ public bool StillHasInstances()
243258 return ( m_Instances . Count > 0 ) ;
244259 }
245260
246- public NetworkPrefaInstanceHandler ( NetworkObject networkObject )
261+ public NetworkPrefabInstanceHandler ( NetworkObject networkObject )
247262 {
248263 m_NetworkObject = networkObject ;
249264 m_Instances = new List < NetworkObject > ( ) ;
250265 }
251266 }
267+
268+ /// <summary>
269+ /// Causes an exception during client connection
270+ /// </summary>
271+ internal class NetworkPrefabExceptionThrower : INetworkPrefabInstanceHandler
272+ {
273+ public NetworkObject Instantiate ( ulong ownerClientId , Vector3 position , Quaternion rotation )
274+ {
275+ throw new Exception ( "exception while instantiating" ) ;
276+ }
277+
278+ public void Destroy ( NetworkObject networkObject )
279+ {
280+ UnityEngine . Object . Destroy ( networkObject . gameObject ) ;
281+ }
282+ }
252283}
0 commit comments