Skip to content

Commit 07a51ff

Browse files
committed
lets go
1 parent ae2ddf0 commit 07a51ff

File tree

60 files changed

+840
-574
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+840
-574
lines changed

com.unity.netcode.gameobjects/TestHelpers/Runtime/NetcodeIntegrationTest.cs

Lines changed: 141 additions & 91 deletions
Large diffs are not rendered by default.

com.unity.netcode.gameobjects/TestHelpers/Runtime/NetcodeIntegrationTestHelpers.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,19 +171,30 @@ public static void RegisterHandlers(NetworkManager networkManager, bool serverSi
171171
}
172172
}
173173

174-
private static readonly string k_TransportHost = Environment.GetEnvironmentVariable("NGO_HOST") ?? "127.0.0.1";
174+
private static readonly string k_TransportHost = GetAddressToBind();
175175
private static readonly ushort k_TransportPort = GetPortToBind();
176176

177177
/// <summary>
178178
/// Configures the port to look for the rust service.
179179
/// </summary>
180-
/// <returns>The port from the environment variable "ECHO_SERVER_PORT" if it is set and valid; otherwise uses port 7777</returns>
180+
/// <returns>The port from the environment variable "CMB_SERVICE_PORT" if it is set and valid; otherwise uses port 7789</returns>
181181
private static ushort GetPortToBind()
182182
{
183183
var value = Environment.GetEnvironmentVariable("CMB_SERVICE_PORT");
184184
return ushort.TryParse(value, out var configuredPort) ? configuredPort : (ushort)7789;
185185
}
186186

187+
/// <summary>
188+
/// Configures the address to look for the rust service.
189+
/// </summary>
190+
/// <returns>The address from the environment variable "NGO_HOST" if it is set and valid; otherwise uses "127.0.0.1"</returns>
191+
private static string GetAddressToBind()
192+
{
193+
var value = Environment.GetEnvironmentVariable("NGO_HOST") ?? "127.0.0.1";
194+
return Dns.GetHostAddresses(value).First().ToString();
195+
}
196+
197+
187198
private static void AddUnityTransport(NetworkManager networkManager, bool useCmbService = false)
188199
{
189200
// Create transport
@@ -197,7 +208,7 @@ private static void AddUnityTransport(NetworkManager networkManager, bool useCmb
197208
unityTransport.ConnectTimeoutMS = 500;
198209
if (useCmbService)
199210
{
200-
unityTransport.ConnectionData.Address = Dns.GetHostAddresses(k_TransportHost).First().ToString();
211+
unityTransport.ConnectionData.Address = k_TransportHost;
201212
unityTransport.ConnectionData.Port = k_TransportPort;
202213
Debug.Log($"Using CmbService: {k_TransportHost}:{k_TransportPort}");
203214
}
@@ -1005,9 +1016,24 @@ private static IEnumerator ExecuteWaitForHook(MessageHandleCheckWithResult check
10051016
result.Result = res;
10061017
}
10071018

1008-
public static uint GetGlobalObjectIdHash(NetworkObject networkObject)
1019+
1020+
private static bool s_PreviousWasCmbServiceTest;
1021+
1022+
/// <summary>
1023+
/// Waits for a second if the previous and current tests are using the hosted CMB Service.
1024+
/// This is necessary as the CMB Service does not restart fast enough when running multiple tests.
1025+
/// </summary>
1026+
/// <param name="isCmbServiceTest"></param>
1027+
/// <returns>An <see cref="IEnumerator"/> that will wait for a second</returns>
1028+
public static IEnumerator WaitBetweenCmbServiceTests(bool isCmbServiceTest)
10091029
{
1010-
return networkObject.GlobalObjectIdHash;
1030+
if (isCmbServiceTest && s_PreviousWasCmbServiceTest)
1031+
{
1032+
Debug.Log("Waiting for CMB service to be shut down during test setup.");
1033+
yield return new WaitForSeconds(1f);
1034+
}
1035+
1036+
s_PreviousWasCmbServiceTest = isCmbServiceTest;
10111037
}
10121038

10131039
#if UNITY_EDITOR

com.unity.netcode.gameobjects/Tests/Runtime/Connection/ClientConnectionTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ internal class ClientConnectionTests : IntegrationTestWithApproximation
1717
private HashSet<ulong> m_ServerCallbackCalled = new HashSet<ulong>();
1818
private HashSet<ulong> m_ClientCallbackCalled = new HashSet<ulong>();
1919

20+
// TODO: [CmbServiceTests] Enable once the cmb service sceneManagementEnabled OnClientConnected flow is fixed
21+
protected override bool UseCMBService()
22+
{
23+
return false;
24+
}
25+
2026
public ClientConnectionTests(SceneManagementState sceneManagementState, NetworkTopologyTypes networkTopologyType) : base(networkTopologyType)
2127
{
2228
m_SceneManagementEnabled = sceneManagementState == SceneManagementState.SceneManagementEnabled;

com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ internal class DeferredDespawningTests : IntegrationTestWithApproximation
1818
private List<GameObject> m_DaisyChainedDespawnObjects = new List<GameObject>();
1919
private List<ulong> m_HasReachedEnd = new List<ulong>();
2020

21+
// TODO: [CmbServiceTests] Adapt to run with the service
22+
protected override bool UseCMBService()
23+
{
24+
return false;
25+
}
26+
2127
public enum SetDestroyGameObject
2228
{
2329
DestroyGameObject,

com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DistributeObjectsTests.cs

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ internal class DistributeObjectsTests : IntegrationTestWithApproximation
2626
private const int k_LateJoinClientCount = 4;
2727
protected override int NumberOfClients => 0;
2828

29+
2930
public DistributeObjectsTests() : base(HostOrServer.DAHost)
3031
{
3132
}
@@ -38,9 +39,13 @@ protected override IEnumerator OnSetup()
3839

3940
protected override void OnServerAndClientsCreated()
4041
{
41-
var serverTransport = m_ServerNetworkManager.NetworkConfig.NetworkTransport as UnityTransport;
42-
// I hate having to add time to our tests, but in case a VM is running slow the disconnect timeout needs to be reasonably high
43-
serverTransport.DisconnectTimeoutMS = 1000;
42+
if (!m_UseCmbService)
43+
{
44+
var serverTransport = m_ServerNetworkManager.NetworkConfig.NetworkTransport as UnityTransport;
45+
// I hate having to add time to our tests, but in case a VM is running slow the disconnect timeout needs to be reasonably high
46+
serverTransport.DisconnectTimeoutMS = 1000;
47+
}
48+
4449
m_DistributeObject = CreateNetworkObjectPrefab("DisObject");
4550
m_DistributeObject.AddComponent<DistributeObjectsTestHelper>();
4651
m_DistributeObject.AddComponent<DistributeTestTransform>();
@@ -52,13 +57,6 @@ protected override void OnServerAndClientsCreated()
5257
base.OnServerAndClientsCreated();
5358
}
5459

55-
protected override IEnumerator OnServerAndClientsConnected()
56-
{
57-
m_ServerNetworkManager.SpawnManager.EnableDistributeLogging = m_EnableVerboseDebug;
58-
m_ServerNetworkManager.ConnectionManager.EnableDistributeLogging = m_EnableVerboseDebug;
59-
return base.OnServerAndClientsConnected();
60-
}
61-
6260
private NetworkObject m_ObjectToValidate;
6361

6462
private bool ValidateObjectSpawnedOnAllClients()
@@ -67,17 +65,11 @@ private bool ValidateObjectSpawnedOnAllClients()
6765

6866
var networkObjectId = m_ObjectToValidate.NetworkObjectId;
6967
var name = m_ObjectToValidate.name;
70-
if (!UseCMBService() && !m_ServerNetworkManager.SpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
68+
foreach (var manager in m_NetworkManagers)
7169
{
72-
m_ErrorLog.Append($"Client-{m_ServerNetworkManager.LocalClientId} has not spawned {name}!");
73-
return false;
74-
}
75-
76-
foreach (var client in m_ClientNetworkManagers)
77-
{
78-
if (!client.SpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
70+
if (!manager.SpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
7971
{
80-
m_ErrorLog.Append($"Client-{client.LocalClientId} has not spawned {name}!");
72+
m_ErrorLog.Append($"Client-{manager.LocalClientId} has not spawned {name}!");
8173
return false;
8274
}
8375
}
@@ -89,7 +81,7 @@ private bool ValidateObjectSpawnedOnAllClients()
8981
private bool ValidateDistributedObjectsSpawned(bool lateJoining)
9082
{
9183
m_ErrorLog.Clear();
92-
var hostId = m_ServerNetworkManager.LocalClientId;
84+
var hostId = GetAuthorityNetworkManager().LocalClientId;
9385
if (!DistributeObjectsTestHelper.DistributedObjects.ContainsKey(hostId))
9486
{
9587
m_ErrorLog.AppendLine($"[Client-{hostId}] Does not have an entry in the root of the {nameof(DistributeObjectsTestHelper.DistributedObjects)} table!");
@@ -106,11 +98,11 @@ private bool ValidateDistributedObjectsSpawned(bool lateJoining)
10698
var expected = 0;
10799
if (lateJoining)
108100
{
109-
expected = k_ObjectCount / (m_ClientNetworkManagers.Count() + 1);
101+
expected = k_ObjectCount / m_NetworkManagers.Length;
110102
}
111103
else
112104
{
113-
expected = k_ObjectCount / (m_ClientNetworkManagers.Where((c) => c.IsConnectedClient).Count() + 1);
105+
expected = k_ObjectCount / m_NetworkManagers.Count(c => c.IsConnectedClient);
114106
}
115107

116108
// It should theoretically be the expected or...
@@ -140,8 +132,8 @@ private bool ValidateDistributedObjectsSpawned(bool lateJoining)
140132
private bool ValidateOwnershipTablesMatch()
141133
{
142134
m_ErrorLog.Clear();
143-
var hostId = m_ServerNetworkManager.LocalClientId;
144-
var expectedEntries = m_ClientNetworkManagers.Where((c) => c.IsListening && c.IsConnectedClient).Count() + 1;
135+
var hostId = GetAuthorityNetworkManager().LocalClientId;
136+
var expectedEntries = m_NetworkManagers.Count(c => c.IsListening && c.IsConnectedClient);
145137
// Make sure all clients have an table created
146138
if (DistributeObjectsTestHelper.DistributedObjects.Count < expectedEntries)
147139
{
@@ -160,7 +152,7 @@ private bool ValidateOwnershipTablesMatch()
160152
m_ErrorLog.AppendLine($"[Client-{hostId}] Does not have a local an entry in the {nameof(DistributeObjectsTestHelper.DistributedObjects)} table!");
161153
return false;
162154
}
163-
var clients = m_ServerNetworkManager.ConnectedClientsIds.ToList();
155+
var clients = GetAuthorityNetworkManager().ConnectedClientsIds.ToList();
164156
clients.Remove(0);
165157

166158
// Cycle through each client's entry on the DAHost to run a comparison
@@ -206,9 +198,9 @@ private bool ValidateOwnershipTablesMatch()
206198
private bool ValidateTransformsMatch()
207199
{
208200
m_ErrorLog.Clear();
209-
var hostId = m_ServerNetworkManager.LocalClientId;
201+
var hostId = GetAuthorityNetworkManager().LocalClientId;
210202
var daHostEntries = DistributeObjectsTestHelper.DistributedObjects[hostId];
211-
var clients = m_ServerNetworkManager.ConnectedClientsIds.ToList();
203+
var clients = GetAuthorityNetworkManager().ConnectedClientsIds.ToList();
212204
foreach (var clientOwner in daHostEntries.Keys)
213205
{
214206
// Cycle through the owner's objects
@@ -238,16 +230,9 @@ private bool ValidateTransformsMatch()
238230
private bool SpawnCountsMatch()
239231
{
240232
var passed = true;
241-
var spawnCount = 0;
242233
m_ErrorLog.Clear();
243-
if (!UseCMBService())
244-
{
245-
spawnCount = m_ServerNetworkManager.SpawnManager.SpawnedObjects.Count;
246-
}
247-
else
248-
{
249-
spawnCount = m_ClientNetworkManagers[0].SpawnManager.SpawnedObjects.Count;
250-
}
234+
235+
var spawnCount = GetAuthorityNetworkManager().SpawnManager.SpawnedObjects.Count;
251236
foreach (var client in m_ClientNetworkManagers)
252237
{
253238
var clientCount = client.SpawnManager.SpawnedObjects.Count;
@@ -272,7 +257,7 @@ public IEnumerator DistributeNetworkObjects()
272257
{
273258
for (int i = 0; i < k_ObjectCount; i++)
274259
{
275-
SpawnObject(m_DistributeObject, m_ServerNetworkManager);
260+
SpawnObject(m_DistributeObject, GetAuthorityNetworkManager());
276261
}
277262

278263
// Validate NetworkObjects get redistributed properly when a client joins
@@ -321,8 +306,10 @@ public IEnumerator DistributeNetworkObjects()
321306
yield return WaitForConditionOrTimeOut(ValidateTransformsMatch);
322307
AssertOnTimeout($"[Client-{j + 1}][Transform Mismatch] {m_ErrorLog}");
323308

324-
// DANGO-TODO: Make this tied to verbose mode once we know the CMB Service integration works properly
325-
DisplayOwnership();
309+
if (m_EnableVerboseDebug)
310+
{
311+
DisplayOwnership();
312+
}
326313

327314
yield return WaitForConditionOrTimeOut(SpawnCountsMatch);
328315
AssertOnTimeout($"[Spawn Count Mismatch] {m_ErrorLog}");
@@ -332,8 +319,9 @@ public IEnumerator DistributeNetworkObjects()
332319
private void DisplayOwnership()
333320
{
334321
m_ErrorLog.Clear();
335-
var daHostEntries = DistributeObjectsTestHelper.DistributedObjects[0];
336322

323+
var authorityId = GetAuthorityNetworkManager().LocalClientId;
324+
var daHostEntries = DistributeObjectsTestHelper.DistributedObjects[authorityId];
337325
foreach (var entry in daHostEntries)
338326
{
339327
m_ErrorLog.AppendLine($"[Client-{entry.Key}][Owned Objects: {entry.Value.Count}]");

com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/ExtendedNetworkShowAndHideTests.cs

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,20 @@ public class ExtendedNetworkShowAndHideTests : NetcodeIntegrationTest
1818
private NetworkManager m_LateJoinClient;
1919
private NetworkManager m_SpawnOwner;
2020

21+
// TODO: [CmbServiceTests] Adapt to run with the service (can't control who becomes the session owner, needs a logic rework)
22+
protected override bool UseCMBService()
23+
{
24+
return false;
25+
}
26+
2127
public ExtendedNetworkShowAndHideTests(HostOrServer hostOrServer, bool enableSceneManagement) : base(hostOrServer)
2228
{
2329
m_EnableSceneManagement = enableSceneManagement;
2430
}
2531

2632
protected override void OnServerAndClientsCreated()
2733
{
28-
if (!UseCMBService())
29-
{
30-
m_ServerNetworkManager.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement;
31-
}
32-
33-
foreach (var client in m_ClientNetworkManagers)
34+
foreach (var client in m_NetworkManagers)
3435
{
3536
client.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement;
3637
}
@@ -43,19 +44,7 @@ protected override void OnServerAndClientsCreated()
4344

4445
private bool AllClientsSpawnedObject()
4546
{
46-
if (!UseCMBService())
47-
{
48-
if (!s_GlobalNetworkObjects.ContainsKey(m_ServerNetworkManager.LocalClientId))
49-
{
50-
return false;
51-
}
52-
if (!s_GlobalNetworkObjects[m_ServerNetworkManager.LocalClientId].ContainsKey(m_SpawnedObject.NetworkObjectId))
53-
{
54-
return false;
55-
}
56-
}
57-
58-
foreach (var client in m_ClientNetworkManagers)
47+
foreach (var client in m_NetworkManagers)
5948
{
6049
if (!s_GlobalNetworkObjects.ContainsKey(client.LocalClientId))
6150
{
@@ -71,15 +60,7 @@ private bool AllClientsSpawnedObject()
7160

7261
private bool IsClientPromotedToSessionOwner()
7362
{
74-
if (!UseCMBService())
75-
{
76-
if (m_ServerNetworkManager.CurrentSessionOwner != m_ClientToHideFrom.LocalClientId)
77-
{
78-
return false;
79-
}
80-
}
81-
82-
foreach (var client in m_ClientNetworkManagers)
63+
foreach (var client in m_NetworkManagers)
8364
{
8465
if (!client.IsConnectedClient)
8566
{
@@ -112,9 +93,9 @@ protected override void OnNewClientCreated(NetworkManager networkManager)
11293
public IEnumerator HiddenObjectPromotedSessionOwnerNewClientSynchronizes()
11394
{
11495
// Get the test relative session owner
115-
var sessionOwner = UseCMBService() ? m_ClientNetworkManagers[0] : m_ServerNetworkManager;
116-
m_SpawnOwner = UseCMBService() ? m_ClientNetworkManagers[1] : m_ClientNetworkManagers[0];
117-
m_ClientToHideFrom = UseCMBService() ? m_ClientNetworkManagers[NumberOfClients - 1] : m_ClientNetworkManagers[1];
96+
var sessionOwner = GetAuthorityNetworkManager();
97+
m_SpawnOwner = m_UseCmbService ? m_ClientNetworkManagers[1] : m_ClientNetworkManagers[0];
98+
m_ClientToHideFrom = m_UseCmbService ? m_ClientNetworkManagers[NumberOfClients - 1] : m_ClientNetworkManagers[1];
11899
m_ObjectToSpawn.SetActive(true);
119100

120101
// Spawn the object with a non-session owner client
@@ -129,7 +110,7 @@ public IEnumerator HiddenObjectPromotedSessionOwnerNewClientSynchronizes()
129110
AssertOnTimeout($"{m_SpawnedObject.name} was not hidden from Client-{m_ClientToHideFrom.LocalClientId}!");
130111

131112
// Promoted a new session owner (DAHost promotes while CMB Session we disconnect the current session owner)
132-
if (!UseCMBService())
113+
if (!m_UseCmbService)
133114
{
134115
m_ServerNetworkManager.PromoteSessionOwner(m_ClientToHideFrom.LocalClientId);
135116
}

0 commit comments

Comments
 (0)