@@ -9,13 +9,19 @@ namespace Unity.Netcode.RuntimeTests
9
9
{
10
10
public class NetworkObjectNetworkClientOwnedObjectsTests : NetcodeIntegrationTest
11
11
{
12
+ private class DummyNetworkBehaviour : NetworkBehaviour
13
+ {
14
+
15
+ }
16
+
12
17
protected override int NumberOfClients => 1 ;
13
18
private NetworkPrefab m_NetworkPrefab ;
14
19
protected override void OnServerAndClientsCreated ( )
15
20
{
16
21
// create prefab
17
22
var gameObject = new GameObject ( "ClientOwnedObject" ) ;
18
23
var networkObject = gameObject . AddComponent < NetworkObject > ( ) ;
24
+ gameObject . AddComponent < DummyNetworkBehaviour > ( ) ;
19
25
NetcodeIntegrationTestHelpers . MakeNetworkObjectTestPrefab ( networkObject ) ;
20
26
21
27
m_NetworkPrefab = ( new NetworkPrefab ( )
@@ -39,7 +45,7 @@ public IEnumerator ChangeOwnershipOwnedObjectsAddTest()
39
45
serverObject . Spawn ( ) ;
40
46
41
47
// Provide enough time for the client to receive and process the spawned message.
42
- yield return s_DefaultWaitForTick ;
48
+ yield return WaitForMessageReceived < CreateObjectMessage > ( m_ClientNetworkManagers . ToList ( ) ) ;
43
49
44
50
// The object is owned by server
45
51
Assert . False ( m_ServerNetworkManager . SpawnManager . GetClientOwnedObjects ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) . Any ( x => x . NetworkObjectId == serverObject . NetworkObjectId ) ) ;
@@ -48,13 +54,71 @@ public IEnumerator ChangeOwnershipOwnedObjectsAddTest()
48
54
serverObject . ChangeOwnership ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
49
55
50
56
// Provide enough time for the client to receive and process the change in ownership message.
51
- yield return s_DefaultWaitForTick ;
57
+ yield return WaitForMessageReceived < ChangeOwnershipMessage > ( m_ClientNetworkManagers . ToList ( ) ) ;
52
58
53
59
// Ensure it's now added to the list
54
- yield return WaitForConditionOrTimeOut ( ( ) => m_ClientNetworkManagers [ 0 ] . SpawnManager . GetClientOwnedObjects ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) . Any ( x => x . NetworkObjectId == serverObject . NetworkObjectId ) ) ;
55
- Assert . False ( s_GlobalTimeoutHelper . TimedOut , $ "Timed out waiting for client to gain ownership!") ;
56
60
Assert . True ( m_ClientNetworkManagers [ 0 ] . SpawnManager . GetClientOwnedObjects ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) . Any ( x => x . NetworkObjectId == serverObject . NetworkObjectId ) ) ;
57
61
Assert . True ( m_ServerNetworkManager . SpawnManager . GetClientOwnedObjects ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) . Any ( x => x . NetworkObjectId == serverObject . NetworkObjectId ) ) ;
58
62
}
63
+
64
+ [ UnityTest ]
65
+ public IEnumerator WhenOwnershipIsChanged_OwnershipValuesUpdateCorrectly ( )
66
+ {
67
+ NetworkObject serverObject = Object . Instantiate ( m_NetworkPrefab . Prefab ) . GetComponent < NetworkObject > ( ) ;
68
+ serverObject . NetworkManagerOwner = m_ServerNetworkManager ;
69
+ serverObject . Spawn ( ) ;
70
+
71
+ // Provide enough time for the client to receive and process the spawned message.
72
+ yield return WaitForMessageReceived < CreateObjectMessage > ( m_ClientNetworkManagers . ToList ( ) ) ;
73
+
74
+ // The object is owned by server
75
+ Assert . False ( m_ServerNetworkManager . SpawnManager . GetClientOwnedObjects ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) . Any ( x => x . NetworkObjectId == serverObject . NetworkObjectId ) ) ;
76
+
77
+ // Change the ownership
78
+ serverObject . ChangeOwnership ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
79
+
80
+ // Provide enough time for the client to receive and process the change in ownership message.
81
+ yield return WaitForMessageReceived < ChangeOwnershipMessage > ( m_ClientNetworkManagers . ToList ( ) ) ;
82
+
83
+ Assert . IsFalse ( serverObject . IsOwner ) ;
84
+ Assert . IsFalse ( serverObject . IsOwnedByServer ) ;
85
+ Assert . AreEqual ( m_ClientNetworkManagers [ 0 ] . LocalClientId , serverObject . OwnerClientId ) ;
86
+
87
+ var serverBehaviour = serverObject . GetComponent < DummyNetworkBehaviour > ( ) ;
88
+ Assert . IsFalse ( serverBehaviour . IsOwner ) ;
89
+ Assert . IsFalse ( serverBehaviour . IsOwnedByServer ) ;
90
+ Assert . AreEqual ( m_ClientNetworkManagers [ 0 ] . LocalClientId , serverBehaviour . OwnerClientId ) ;
91
+
92
+ var clientObject = Object . FindObjectsOfType < NetworkObject > ( ) . Where ( ( obj ) => obj . NetworkManagerOwner == m_ClientNetworkManagers [ 0 ] ) . FirstOrDefault ( ) ;
93
+
94
+ Assert . IsNotNull ( clientObject ) ;
95
+ Assert . IsTrue ( clientObject . IsOwner ) ;
96
+ Assert . IsFalse ( clientObject . IsOwnedByServer ) ;
97
+ Assert . AreEqual ( m_ClientNetworkManagers [ 0 ] . LocalClientId , clientObject . OwnerClientId ) ;
98
+
99
+ var clientBehaviour = clientObject . GetComponent < DummyNetworkBehaviour > ( ) ;
100
+ Assert . IsTrue ( clientBehaviour . IsOwner ) ;
101
+ Assert . IsFalse ( clientBehaviour . IsOwnedByServer ) ;
102
+ Assert . AreEqual ( m_ClientNetworkManagers [ 0 ] . LocalClientId , clientBehaviour . OwnerClientId ) ;
103
+
104
+ serverObject . RemoveOwnership ( ) ;
105
+
106
+ // Provide enough time for the client to receive and process the change in ownership message.
107
+ yield return WaitForMessageReceived < ChangeOwnershipMessage > ( m_ClientNetworkManagers . ToList ( ) ) ;
108
+
109
+ Assert . IsTrue ( serverObject . IsOwner ) ;
110
+ Assert . IsTrue ( serverObject . IsOwnedByServer ) ;
111
+ Assert . AreEqual ( NetworkManager . ServerClientId , serverObject . OwnerClientId ) ;
112
+ Assert . IsTrue ( serverBehaviour . IsOwner ) ;
113
+ Assert . IsTrue ( serverBehaviour . IsOwnedByServer ) ;
114
+ Assert . AreEqual ( NetworkManager . ServerClientId , serverBehaviour . OwnerClientId ) ;
115
+
116
+ Assert . IsFalse ( clientObject . IsOwner ) ;
117
+ Assert . IsTrue ( clientObject . IsOwnedByServer ) ;
118
+ Assert . AreEqual ( NetworkManager . ServerClientId , clientObject . OwnerClientId ) ;
119
+ Assert . IsFalse ( clientBehaviour . IsOwner ) ;
120
+ Assert . IsTrue ( clientBehaviour . IsOwnedByServer ) ;
121
+ Assert . AreEqual ( NetworkManager . ServerClientId , clientBehaviour . OwnerClientId ) ;
122
+ }
59
123
}
60
124
}
0 commit comments