1010
1111namespace TestProject . RuntimeTests
1212{
13+ [ TestFixture ( HostOrServer . Host ) ]
14+ [ TestFixture ( HostOrServer . DAHost ) ]
1315 public class SceneObjectsNotDestroyedOnShutdownTest : NetcodeIntegrationTest
1416 {
1517 protected override int NumberOfClients => 0 ;
1618
1719 private const string k_TestScene = "InSceneNetworkObject" ;
1820 private const string k_SceneObjectName = "InSceneObject" ;
1921 private Scene m_TestScene ;
20- private WaitForSeconds m_DefaultWaitForTick = new WaitForSeconds ( 1.0f / 30 ) ;
22+ private WaitForSeconds m_DefaultWaitForTick = new ( 1.0f / 30 ) ;
2123
22- // TODO: [CmbServiceTests] Adapt to run with the service
23- protected override bool UseCMBService ( )
24- {
25- return false ;
26- }
24+ public SceneObjectsNotDestroyedOnShutdownTest ( HostOrServer hostOrServer ) : base ( hostOrServer ) { }
2725
2826 [ UnityTest ]
2927 public IEnumerator SceneObjectsNotDestroyedOnShutdown ( )
3028 {
31- m_ServerNetworkManager . SceneManager . OnSceneEvent += SceneManager_OnSceneEvent ;
32- m_ServerNetworkManager . SceneManager . LoadScene ( k_TestScene , LoadSceneMode . Additive ) ;
29+ var authority = GetAuthorityNetworkManager ( ) ;
30+ authority . SceneManager . OnSceneEvent += SceneManager_OnSceneEvent ;
31+ authority . SceneManager . LoadScene ( k_TestScene , LoadSceneMode . Additive ) ;
3332
3433 yield return WaitForConditionOrTimeOut ( ( ) => m_TestScene . IsValid ( ) && m_TestScene . isLoaded ) ;
3534 AssertOnTimeout ( $ "Timed out waiting for scene { k_TestScene } to load!") ;
@@ -38,11 +37,12 @@ public IEnumerator SceneObjectsNotDestroyedOnShutdown()
3837
3938 AssertOnTimeout ( $ "Timed out waiting to find { k_SceneObjectName } after scene load and before starting client!\" ") ;
4039
41- yield return CreateAndStartNewClient ( ) ;
40+ var lateJoin = CreateNewClient ( ) ;
41+ yield return StartClient ( lateJoin ) ;
4242
4343 var loadedInSceneObjects = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( ( c ) => c . name . Contains ( k_SceneObjectName ) ) ;
4444 Assert . IsTrue ( loadedInSceneObjects . Count ( ) > 1 , $ "Only found one instance of { k_SceneObjectName } after client connected!") ;
45- m_ClientNetworkManagers [ 0 ] . Shutdown ( ) ;
45+ lateJoin . Shutdown ( ) ;
4646 yield return m_DefaultWaitForTick ;
4747 loadedInSceneObjects = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( ( c ) => c . name . Contains ( k_SceneObjectName ) ) ;
4848
@@ -52,36 +52,39 @@ public IEnumerator SceneObjectsNotDestroyedOnShutdown()
5252 [ UnityTest ]
5353 public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown ( )
5454 {
55- m_ServerNetworkManager . SceneManager . OnSceneEvent += SceneManager_OnSceneEvent ;
56- m_ServerNetworkManager . SceneManager . LoadScene ( k_TestScene , LoadSceneMode . Additive ) ;
55+ var authority = GetAuthorityNetworkManager ( ) ;
56+ authority . SceneManager . OnSceneEvent += SceneManager_OnSceneEvent ;
57+ authority . SceneManager . LoadScene ( k_TestScene , LoadSceneMode . Additive ) ;
5758
5859 yield return WaitForConditionOrTimeOut ( ( ) => m_TestScene . IsValid ( ) && m_TestScene . isLoaded ) ;
5960 AssertOnTimeout ( $ "Timed out waiting for scene { k_TestScene } to load!") ;
6061
6162 var loadedInSceneObject = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( ( c ) => c . name . Contains ( k_SceneObjectName ) ) . FirstOrDefault ( ) ;
6263 Assert . IsNotNull ( loadedInSceneObject , $ "Failed to find { k_SceneObjectName } before starting client!") ;
63- yield return CreateAndStartNewClient ( ) ;
6464
65- var clientId = m_ClientNetworkManagers [ 0 ] . LocalClientId ;
66- Assert . IsTrue ( loadedInSceneObject . TrySetParent ( m_PlayerNetworkObjects [ 0 ] [ clientId ] ) , $ "Failed to parent in-scene object under client player") ;
65+ var lateJoin = CreateNewClient ( ) ;
66+ yield return StartClient ( lateJoin ) ;
67+
68+ var clientId = lateJoin . LocalClientId ;
69+ Assert . IsTrue ( loadedInSceneObject . TrySetParent ( m_PlayerNetworkObjects [ authority . LocalClientId ] [ clientId ] ) , $ "Failed to parent in-scene object under client player") ;
6770
6871 yield return WaitForConditionOrTimeOut ( ( ) => PlayerHasChildren ( clientId ) ) ;
6972 AssertOnTimeout ( $ "Client-{ clientId } player never parented { k_SceneObjectName } !") ;
7073
7174 var loadedInSceneObjects = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( ( c ) => c . name . Contains ( k_SceneObjectName ) ) ;
7275 Assert . IsTrue ( loadedInSceneObjects . Count ( ) > 1 , $ "Only found one instance of { k_SceneObjectName } after client connected!") ;
73- m_ClientNetworkManagers [ 0 ] . Shutdown ( ) ;
76+ lateJoin . Shutdown ( ) ;
7477 yield return m_DefaultWaitForTick ;
7578
7679 // Sanity check to make sure the client's player no longer has any children
7780 yield return WaitForConditionOrTimeOut ( ( ) => PlayerNoLongerExistsWithChildren ( clientId ) ) ;
7881 AssertOnTimeout ( $ "Client-{ clientId } player still exits with children after client shutdown!") ;
7982
80- loadedInSceneObjects = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( ( c ) => c . name . Contains ( k_SceneObjectName ) ) ;
83+ loadedInSceneObjects = Object . FindObjectsByType < NetworkObject > ( FindObjectsSortMode . InstanceID ) . Where ( o => o . name . Contains ( k_SceneObjectName ) ) . ToArray ( ) ;
8184 // Make sure any in-scene placed NetworkObject instantiated has no parent
82- foreach ( var insceneObject in loadedInSceneObjects )
85+ foreach ( var inSceneObject in loadedInSceneObjects )
8386 {
84- Assert . IsTrue ( insceneObject . transform . parent == null , $ "{ insceneObject . name } is still parented!") ;
87+ Assert . IsTrue ( inSceneObject . transform . parent == null , $ "{ inSceneObject . name } is still parented!") ;
8588 }
8689
8790 // We should have exactly 2 in-scene placed NetworkObjects remaining:
@@ -100,16 +103,17 @@ private bool PlayerHasChildren(ulong clientId)
100103
101104 private bool PlayerNoLongerExistsWithChildren ( ulong clientId )
102105 {
103- if ( m_PlayerNetworkObjects [ 0 ] . ContainsKey ( clientId ) && m_PlayerNetworkObjects [ 0 ] [ clientId ] != null )
106+ var authorityId = GetAuthorityNetworkManager ( ) . LocalClientId ;
107+ if ( m_PlayerNetworkObjects [ authorityId ] . ContainsKey ( clientId ) && m_PlayerNetworkObjects [ authorityId ] [ clientId ] != null )
104108 {
105- return m_PlayerNetworkObjects [ 0 ] [ clientId ] . transform . childCount == 0 ;
109+ return m_PlayerNetworkObjects [ authorityId ] [ clientId ] . transform . childCount == 0 ;
106110 }
107111 return true ;
108112 }
109113
110114 private void SceneManager_OnSceneEvent ( SceneEvent sceneEvent )
111115 {
112- if ( sceneEvent . ClientId != m_ServerNetworkManager . LocalClientId )
116+ if ( sceneEvent . ClientId != GetAuthorityNetworkManager ( ) . LocalClientId )
113117 {
114118 return ;
115119 }
0 commit comments