From 1e5c487cf200865a9ed0fde49fa20ebc09664574 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 13:22:31 -0400 Subject: [PATCH 01/17] integrate multi-machine testing code --- .../Assets/Scenes/MultiprocessTestScene.unity | 59 ++++------ .../BaseMultiprocessTests.cs | 21 ++++ .../Helpers/ConfigurationTools.cs | 92 ++++++++++++++++ .../Helpers/ConfigurationTools.cs.meta | 11 ++ .../Helpers/ConfigurationType.cs | 9 ++ .../Helpers/ConfigurationType.cs.meta | 11 ++ .../Helpers/MultiprocessLogger.cs | 12 ++ .../Helpers/MultiprocessOrchestration.cs | 2 +- .../MultiprocessRuntime/TestCoordinator.cs | 103 +++++++++++++++++- .../Runtime/MultiprocessRuntime/ThreeDText.cs | 13 ++- 10 files changed, 289 insertions(+), 44 deletions(-) create mode 100644 testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs create mode 100644 testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs.meta create mode 100644 testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs create mode 100644 testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs.meta diff --git a/testproject/Assets/Scenes/MultiprocessTestScene.unity b/testproject/Assets/Scenes/MultiprocessTestScene.unity index efcf1f6661..57e243ca06 100644 --- a/testproject/Assets/Scenes/MultiprocessTestScene.unity +++ b/testproject/Assets/Scenes/MultiprocessTestScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -212,7 +212,6 @@ Transform: m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 @@ -223,8 +222,8 @@ LightingSettings: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: - serializedVersion: 4 + m_Name: + serializedVersion: 3 m_GIWorkflowMode: 1 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 @@ -237,7 +236,7 @@ LightingSettings: m_LightmapMaxSize: 1024 m_BakeResolution: 40 m_Padding: 2 - m_LightmapCompression: 3 + m_TextureCompression: 1 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 1 @@ -278,7 +277,6 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_PVRTiledBaking: 0 --- !u!1 &160940364 GameObject: m_ObjectHideFlags: 0 @@ -371,7 +369,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -10, y: -10, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 5 @@ -405,10 +402,10 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 04cf3cc1396054b009a1ed283aa50021, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: IsTestCoordinatorActiveAndEnabled: 0 - CommandLineArguments: + CommandLineArguments: --- !u!102 &430011405 TextMesh: serializedVersion: 3 @@ -481,9 +478,8 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 430011403} m_LocalRotation: {x: 0.2164396, y: 0, z: 0, w: 0.97629607} - m_LocalPosition: {x: -40, y: 0, z: 10} + m_LocalPosition: {x: -45, y: 10, z: 10} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 7 @@ -567,7 +563,6 @@ Transform: m_LocalRotation: {x: 0.21736304, y: -0, z: -0, w: 0.97609085} m_LocalPosition: {x: 0, y: 9.15, z: -27.5} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 @@ -664,7 +659,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 4 @@ -761,7 +755,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 10, y: 10, z: 10} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 3 @@ -795,8 +788,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: RunInBackground: 1 LogLevel: 1 NetworkConfig: @@ -814,7 +807,7 @@ MonoBehaviour: TickRate: 30 ClientConnectionBufferTimeout: 10 ConnectionApproval: 0 - ConnectionData: + ConnectionData: EnableTimeResync: 0 TimeResyncInterval: 30 EnsureNetworkVariableLengthSafety: 0 @@ -836,7 +829,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1674777072} - {fileID: 2027640072} @@ -853,8 +845,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 068bf11ceb1344667af4cc40950f44f4, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: ReferencedPrefab: {fileID: 9115731988109684252, guid: c2851feb7276442cc86a6f2d1d69ea11, type: 3} --- !u!114 &1211923378 @@ -867,8 +859,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 55d1c75ce242745ac98f7e7aca6d2d19, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: --- !u!1 &1274245423 GameObject: m_ObjectHideFlags: 0 @@ -897,8 +889,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: GlobalObjectIdHash: 2217825759 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 @@ -913,7 +905,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 10, y: 10, z: 10} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 6 @@ -928,8 +919,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: ef1240e0784f84eadb77fe822e2e03c7, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: --- !u!1 &1674777071 GameObject: m_ObjectHideFlags: 0 @@ -957,7 +948,6 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1211923376} m_RootOrder: 0 @@ -972,8 +962,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: MessageBufferSize: 50000 MaxConnections: 100 MaxSentMessageQueueSize: 50000 @@ -1008,7 +998,6 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1211923376} m_RootOrder: 1 @@ -1023,8 +1012,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6960e84d07fb87f47956e7a81d71c4e6, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: m_ProtocolType: 0 m_MaxPacketQueueSize: 128 m_MaxPayloadSize: 4096 @@ -1036,7 +1025,7 @@ MonoBehaviour: ConnectionData: Address: 127.0.0.1 Port: 7777 - ServerListenAddress: + ServerListenAddress: DebugSimulator: PacketDelayMS: 0 PacketJitterMS: 0 diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs index 41da24ab43..2fd3cc5f87 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs @@ -5,6 +5,9 @@ using UnityEngine.SceneManagement; using UnityEngine.TestTools; using Object = UnityEngine.Object; +using Unity.Netcode.Transports.UNET; +using Unity.Netcode.Transports.UTP; + namespace Unity.Netcode.MultiprocessRuntimeTests { @@ -77,6 +80,24 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode) SceneManager.SetActiveScene(scene); } + var transport = NetworkManager.Singleton.NetworkConfig.NetworkTransport; + MultiprocessLogger.Log($"transport is {transport}"); + switch (transport) + { + case UNetTransport unetTransport: + unetTransport.ConnectPort = int.Parse(TestCoordinator.Port); + unetTransport.ConnectAddress = "0.0.0.0"; + MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort}"); + + break; + case UnityTransport unityTransport: + MultiprocessLogger.Log($"Setting unityTransport.ConnectionData.Port {unityTransport.ConnectionData.ServerListenAddress}"); + break; + default: + MultiprocessLogger.LogError($"The transport {transport} has no case"); + break; + } + NetworkManager.Singleton.StartHost(); // Use scene verification to make sure we don't try to get clients to synchronize the TestRunner scene diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs new file mode 100644 index 0000000000..4ea09ca0d5 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -0,0 +1,92 @@ +using UnityEngine; +using System; +using System.Net.Http; +using System.Threading; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Text; + +namespace Unity.Netcode.MultiprocessRuntimeTests +{ + public class ConfigurationTools + { + public static JobQueueItemArray GetRemoteConfig() + { + var theList = new JobQueueItemArray(); + try + { + using var client = new HttpClient(); + var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(10)); + var responseTask = client.GetAsync("https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile", + HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token); + responseTask.Wait(); + var response = responseTask.Result; + var contentTask = response.Content.ReadAsStringAsync(); + contentTask.Wait(); + MultiprocessLogger.Log($"remoteConfig content is {contentTask.Result}"); + JsonUtility.FromJsonOverwrite(contentTask.Result, theList); + MultiprocessLogger.Log($"remoteConfig content is {theList.JobQueueItems.Count}"); + + } + catch (Exception e) + { + MultiprocessLogger.Log($"GetRemoteConfig - Exception {e.Message}"); + } + finally + { + MultiprocessLogger.Log($"GetRemoteConfig - finally block"); + } + return theList; + } + + public static void CompleteJobQueueItem(JobQueueItem item) + { + Task t = PostJobQueueItem(item, "/complete"); + t.Wait(); + } + + public static void ClaimJobQueueItem(JobQueueItem item) + { + Task t = PostJobQueueItem(item, "/claim"); + t.Wait(); + } + + public static async Task PostJobQueueItem(JobQueueItem item, string path = "") + { + using var client = new HttpClient(); + using var request = new HttpRequestMessage(HttpMethod.Post, "https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile" + path); + var json = JsonUtility.ToJson(item); + using var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); + request.Content = stringContent; + MultiprocessLogger.Log($"Posting remoteConfig to server {json}"); + var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(60)); + + using var response = await client + .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token) + .ConfigureAwait(false); + MultiprocessLogger.Log($"remoteConfig posted, checking response {response.StatusCode}"); + } + } + + [Serializable] + public class JobQueueItemArray + { + public List JobQueueItems; + } + + [Serializable] + public class JobQueueItem + { + + public int Id; + public long JobId; + public string GitHash; + public string HostIp; + public int PlatformId; + public int JobStateId; + public string CreatedBy; + public string UpdatedBy; + public string TransportName; + + } +} diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs.meta b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs.meta new file mode 100644 index 0000000000..daf965ddca --- /dev/null +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad11397b80c04404cb24e82cc7872334 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs new file mode 100644 index 0000000000..bb9d097f62 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs @@ -0,0 +1,9 @@ + +public enum ConfigurationType +{ + Unknown, + Remote, + CommandLine, + ResourceFile, + Host +} diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs.meta b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs.meta new file mode 100644 index 0000000000..9e89a3cb23 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b189bac115ca4587ba64943bfcc67f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessLogger.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessLogger.cs index 5181dbca50..c0cdd71162 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessLogger.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessLogger.cs @@ -28,6 +28,18 @@ public static void LogWarning(string msg) public class MultiprocessLogHandler : ILogHandler { + public static long JobId; + static MultiprocessLogHandler() + { + if (JobId == 0) + { + string sJobId = Environment.GetEnvironmentVariable("YAMATO_JOB_ID"); + if (!long.TryParse(sJobId, out JobId)) + { + JobId = -2; + } + } + } public void LogException(Exception exception, UnityEngine.Object context) { Debug.unityLogger.LogException(exception, context); diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessOrchestration.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessOrchestration.cs index 1fea9ba92b..525aeef70f 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessOrchestration.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/MultiprocessOrchestration.cs @@ -117,7 +117,7 @@ public static string StartWorkerNode() case RuntimePlatform.WindowsEditor: workerProcess.StartInfo.FileName = $"{buildPath}.exe"; //extraArgs += "-popupwindow -screen-width 100 -screen-height 100"; - extraArgs += "-batchmode -nographics"; + extraArgs += "-popupwindow"; break; case RuntimePlatform.LinuxPlayer: case RuntimePlatform.LinuxEditor: diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index eca119054d..38f27684ff 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -1,11 +1,14 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Reflection; using Unity.Netcode; using NUnit.Framework; using UnityEngine; using Unity.Netcode.MultiprocessRuntimeTests; +using Unity.Netcode.Transports.UNET; +using Unity.Netcode.Transports.UTP; /// /// TestCoordinator @@ -37,9 +40,25 @@ public class TestCoordinator : NetworkBehaviour public static List AllClientIdsWithResults => Instance.m_TestResultsLocal.Keys.ToList(); public static List AllClientIdsExceptMine => NetworkManager.Singleton.ConnectedClients.Keys.ToList().FindAll(client => client != NetworkManager.Singleton.LocalClientId); - private void Awake() + // Multimachine support + private static int s_ProcessId; + public static string Rawgithash; + public static ConfigurationType ConfigurationType; + private string m_ConnectAddress = "127.0.0.1"; + public static string Port = "3076"; + private bool m_IsClient; + + public void Awake() { - MultiprocessLogger.Log("Awake"); + s_ProcessId = Process.GetCurrentProcess().Id; + MultiprocessLogger.Log($"Awake {s_ProcessId}"); + ReadGitHashFile(); + + // There are two possible ways for configuration data to be set + // 1. From a webapi + // 2. From a text file resource + ConfigureViaWebApi(); + if (Instance != null) { MultiprocessLogger.LogError("Multiple test coordinator, destroying this instance"); @@ -50,22 +69,96 @@ private void Awake() Instance = this; } + private void ConfigureViaWebApi() + { + var jobQueue = ConfigurationTools.GetRemoteConfig(); + foreach (var job in jobQueue.JobQueueItems) + { + if (Rawgithash.Equals(job.GitHash)) + { + ConfigurationTools.ClaimJobQueueItem(job); + m_ConnectAddress = job.HostIp; + m_IsClient = true; + MultiprocessLogHandler.JobId = job.JobId; + ConfigurationType = ConfigurationType.Remote; + break; + } + else + { + MultiprocessLogger.Log($"No match between {Rawgithash} and {job.GitHash}"); + } + } + } + + private void ReadGitHashFile() + { + try + { + var githash_resource = Resources.Load("Text/githash"); + if (githash_resource != null) + { + Rawgithash = githash_resource.ToString(); + if (!string.IsNullOrEmpty(Rawgithash)) + { + Rawgithash = Rawgithash.Trim(); + } + } + } + catch (Exception e) + { + MultiprocessLogger.Log($"Exception getting githash resource file: {e.Message}"); + } + } + + private void SetAddressAndPort() + { + MultiprocessLogger.Log($"SetAddressAndPort - {Port} {m_ConnectAddress} {m_IsClient} "); + var ushortport = ushort.Parse(Port); + var transport = NetworkManager.Singleton.NetworkConfig.NetworkTransport; + MultiprocessLogger.Log($"transport is {transport}"); + switch (transport) + { + case UNetTransport unetTransport: + unetTransport.ConnectPort = ushortport; + unetTransport.ServerListenPort = ushortport; + if (m_IsClient) + { + MultiprocessLogger.Log($"Setting ConnectAddress to {m_ConnectAddress} port {ushortport} isClient: {m_IsClient}"); + unetTransport.ConnectAddress = m_ConnectAddress; + } + break; + case UnityTransport unityTransport: + MultiprocessLogger.Log($"Setting unityTransport.ConnectionData.Port {ushortport}, isClient: {m_IsClient}, Address {m_ConnectAddress}"); + unityTransport.ConnectionData.Port = ushortport; + unityTransport.ConnectionData.Address = m_ConnectAddress; + break; + default: + MultiprocessLogger.LogError($"The transport {transport} has no case"); + break; + } + } + public void Start() { MultiprocessLogger.Log("Start"); bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); if (isClient) { + m_IsClient = isClient; + } + if (m_IsClient) + { + SetAddressAndPort(); + MultiprocessLogger.Log("starting netcode client"); - NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient}"); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); } MultiprocessLogger.Log("Initialize All Steps"); ExecuteStepInContext.InitializeAllSteps(); MultiprocessLogger.Log($"Initialize All Steps... done"); MultiprocessLogger.Log($"IsInvoking: {NetworkManager.Singleton.IsInvoking()}"); MultiprocessLogger.Log($"IsActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled}"); - MultiprocessLogger.Log($"NetworkManager.NetworkConfig.NetworkTransport.name {NetworkManager.NetworkConfig.NetworkTransport.name}"); } public void Update() diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs index dda0e0ee94..8b20f1be65 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs @@ -38,10 +38,16 @@ public void Start() string[] args = System.Environment.GetCommandLineArgs(); foreach (var arg in args) { - Debug.Log(arg); - CommandLineArguments += " " + arg; + if (arg.Length > 15) + { + CommandLineArguments += " " + arg.Substring(0,14); + } + else + { + CommandLineArguments += "\n" + arg; + } + } - Debug.Log($"CommandLineArguments {CommandLineArguments}"); } // Update is called once per frame @@ -77,6 +83,7 @@ public void Update() t.text = $"On Update -\ntestCoordinator.isActiveAndEnabled:{testCoordinator.isActiveAndEnabled}\n" + $"Transport: {transportString}\n" + $"{CommandLineArguments}\n" + + $"IsHost: {NetworkManager.Singleton.IsHost} IsClient: {NetworkManager.Singleton.IsClient}\n" + $"{m_UpdateCounter}\n"; } } From d3f2a1aab3cae92a4cb0679bbf5cf16ef150d432 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 13:44:39 -0400 Subject: [PATCH 02/17] Reconfigure how host/client ip/port is set --- .../Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs index 2fd3cc5f87..29870b5e4a 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs @@ -86,8 +86,9 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { case UNetTransport unetTransport: unetTransport.ConnectPort = int.Parse(TestCoordinator.Port); - unetTransport.ConnectAddress = "0.0.0.0"; - MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort}"); + unetTransport.ServerListenPort = int.Parse(TestCoordinator.Port); + unetTransport.ConnectAddress = "127.0.0.1"; + MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort} {unetTransport.ServerListenPort}"); break; case UnityTransport unityTransport: From 017e2ec65dcb36ac75beed346dd825f333134a2f Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 16:38:25 -0400 Subject: [PATCH 03/17] PR feedback --- .../Helpers/ConfigurationTools.cs | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index 4ea09ca0d5..b92f2b39ff 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -3,7 +3,6 @@ using System.Net.Http; using System.Threading; using System.Collections.Generic; -using System.Threading.Tasks; using System.Text; namespace Unity.Netcode.MultiprocessRuntimeTests @@ -32,26 +31,22 @@ public static JobQueueItemArray GetRemoteConfig() { MultiprocessLogger.Log($"GetRemoteConfig - Exception {e.Message}"); } - finally - { - MultiprocessLogger.Log($"GetRemoteConfig - finally block"); - } + return theList; } public static void CompleteJobQueueItem(JobQueueItem item) { - Task t = PostJobQueueItem(item, "/complete"); - t.Wait(); + PostJobQueueItem(item, "/complete"); + } public static void ClaimJobQueueItem(JobQueueItem item) { - Task t = PostJobQueueItem(item, "/claim"); - t.Wait(); + PostJobQueueItem(item, "/claim"); } - public static async Task PostJobQueueItem(JobQueueItem item, string path = "") + public static void PostJobQueueItem(JobQueueItem item, string path = "") { using var client = new HttpClient(); using var request = new HttpRequestMessage(HttpMethod.Post, "https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile" + path); @@ -61,9 +56,10 @@ public static async Task PostJobQueueItem(JobQueueItem item, string path = "") MultiprocessLogger.Log($"Posting remoteConfig to server {json}"); var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(60)); - using var response = await client - .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token) - .ConfigureAwait(false); + var response = client + .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token); + response.Wait(); + MultiprocessLogger.Log($"remoteConfig posted, checking response {response.StatusCode}"); } } From 4e649b091995662b90a843cb553a21c897312298 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 16:48:59 -0400 Subject: [PATCH 04/17] Undetected compilation error --- .../MultiprocessRuntime/Helpers/ConfigurationTools.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index b92f2b39ff..79441f937c 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -54,13 +54,14 @@ public static void PostJobQueueItem(JobQueueItem item, string path = "") using var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); request.Content = stringContent; MultiprocessLogger.Log($"Posting remoteConfig to server {json}"); - var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(60)); + var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(20)); var response = client .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token); response.Wait(); + var responseMessage = response.Result; - MultiprocessLogger.Log($"remoteConfig posted, checking response {response.StatusCode}"); + MultiprocessLogger.Log($"remoteConfig posted, checking response {responseMessage.StatusCode}"); } } From 0d8ff21e1ed9a7059ffd07a04258b2779f8f1e46 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 18:29:14 -0400 Subject: [PATCH 05/17] update to use async await --- .../Helpers/ConfigurationTools.cs | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index 79441f937c..90d6f0961b 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -4,49 +4,53 @@ using System.Threading; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; namespace Unity.Netcode.MultiprocessRuntimeTests { public class ConfigurationTools { - public static JobQueueItemArray GetRemoteConfig() + public static JobQueueItemArray GetJobQueue() { var theList = new JobQueueItemArray(); - try - { - using var client = new HttpClient(); - var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(10)); - var responseTask = client.GetAsync("https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile", - HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token); - responseTask.Wait(); - var response = responseTask.Result; - var contentTask = response.Content.ReadAsStringAsync(); - contentTask.Wait(); - MultiprocessLogger.Log($"remoteConfig content is {contentTask.Result}"); - JsonUtility.FromJsonOverwrite(contentTask.Result, theList); - MultiprocessLogger.Log($"remoteConfig content is {theList.JobQueueItems.Count}"); - } - catch (Exception e) - { - MultiprocessLogger.Log($"GetRemoteConfig - Exception {e.Message}"); - } - + var t = GetRemoteConfig(); + t.Wait(); + + var contentTask = t.Result; + contentTask.Wait(); + MultiprocessLogger.Log($"remoteConfig content is {contentTask.Result}"); + JsonUtility.FromJsonOverwrite(contentTask.Result, theList); + MultiprocessLogger.Log($"remoteConfig content is {theList.JobQueueItems.Count}"); + return theList; + + } + + public static async Task> GetRemoteConfig() + { + using var client = new HttpClient(); + var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(10)); + var response = await client.GetAsync("https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile", + HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token).ConfigureAwait(false); + // var contentTask = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + return response.Content.ReadAsStringAsync(); } public static void CompleteJobQueueItem(JobQueueItem item) { - PostJobQueueItem(item, "/complete"); + var t = PostJobQueueItem(item, "/complete"); + t.Wait(); } public static void ClaimJobQueueItem(JobQueueItem item) { - PostJobQueueItem(item, "/claim"); + var t = PostJobQueueItem(item, "/claim"); + t.Wait(); } - public static void PostJobQueueItem(JobQueueItem item, string path = "") + public static async Task PostJobQueueItem(JobQueueItem item, string path = "") { using var client = new HttpClient(); using var request = new HttpRequestMessage(HttpMethod.Post, "https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile" + path); @@ -56,12 +60,10 @@ public static void PostJobQueueItem(JobQueueItem item, string path = "") MultiprocessLogger.Log($"Posting remoteConfig to server {json}"); var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(20)); - var response = client - .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token); - response.Wait(); - var responseMessage = response.Result; + var response = await client + .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token).ConfigureAwait(false); - MultiprocessLogger.Log($"remoteConfig posted, checking response {responseMessage.StatusCode}"); + MultiprocessLogger.Log($"remoteConfig posted, checking response {response.StatusCode}"); } } @@ -74,7 +76,6 @@ public class JobQueueItemArray [Serializable] public class JobQueueItem { - public int Id; public long JobId; public string GitHash; From 698420cbb558852d11f8bffc13f09fb60839d23b Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 4 May 2022 18:50:42 -0400 Subject: [PATCH 06/17] use async await --- .../Helpers/ConfigurationTools.cs | 23 ++++++++----------- .../MultiprocessRuntime/TestCoordinator.cs | 2 +- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index 90d6f0961b..82d466eff1 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -12,29 +12,24 @@ public class ConfigurationTools { public static JobQueueItemArray GetJobQueue() { - var theList = new JobQueueItemArray(); - var t = GetRemoteConfig(); t.Wait(); - - var contentTask = t.Result; - contentTask.Wait(); - MultiprocessLogger.Log($"remoteConfig content is {contentTask.Result}"); - JsonUtility.FromJsonOverwrite(contentTask.Result, theList); - MultiprocessLogger.Log($"remoteConfig content is {theList.JobQueueItems.Count}"); - - return theList; - + return t.Result; } - public static async Task> GetRemoteConfig() + public static async Task GetRemoteConfig() { + var theList = new JobQueueItemArray(); using var client = new HttpClient(); var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var response = await client.GetAsync("https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile", HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token).ConfigureAwait(false); - // var contentTask = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - return response.Content.ReadAsStringAsync(); + + var contentTask = response.Content.ReadAsStringAsync(); + contentTask.Wait(); + JsonUtility.FromJsonOverwrite(contentTask.Result, theList); + + return theList; } public static void CompleteJobQueueItem(JobQueueItem item) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 38f27684ff..87b6281530 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -71,7 +71,7 @@ public void Awake() private void ConfigureViaWebApi() { - var jobQueue = ConfigurationTools.GetRemoteConfig(); + var jobQueue = ConfigurationTools.GetJobQueue(); foreach (var job in jobQueue.JobQueueItems) { if (Rawgithash.Equals(job.GitHash)) From 43708694a31855ec192fe28eddafd10ffb8a1c2b Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Thu, 5 May 2022 11:20:02 -0400 Subject: [PATCH 07/17] Use async/await and avoid call to Wait() --- .../Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 87b6281530..5b9c42ae18 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -69,9 +69,9 @@ public void Awake() Instance = this; } - private void ConfigureViaWebApi() + private async void ConfigureViaWebApi() { - var jobQueue = ConfigurationTools.GetJobQueue(); + var jobQueue = await ConfigurationTools.GetRemoteConfig(); foreach (var job in jobQueue.JobQueueItems) { if (Rawgithash.Equals(job.GitHash)) From 9b7bda68327c385b39ac95ff16f0a964f7110bb3 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Thu, 5 May 2022 12:02:11 -0400 Subject: [PATCH 08/17] Clean up whitespace as well as remove calls to Wait() --- .../Helpers/ConfigurationTools.cs | 28 ++++--------------- .../Runtime/MultiprocessRuntime/ThreeDText.cs | 5 ++-- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index 82d466eff1..1d89f27340 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -10,13 +10,6 @@ namespace Unity.Netcode.MultiprocessRuntimeTests { public class ConfigurationTools { - public static JobQueueItemArray GetJobQueue() - { - var t = GetRemoteConfig(); - t.Wait(); - return t.Result; - } - public static async Task GetRemoteConfig() { var theList = new JobQueueItemArray(); @@ -24,25 +17,19 @@ public static async Task GetRemoteConfig() var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var response = await client.GetAsync("https://multiprocess-log-event-manager.cds.internal.unity3d.com/api/JobWithFile", HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token).ConfigureAwait(false); - - var contentTask = response.Content.ReadAsStringAsync(); - contentTask.Wait(); - JsonUtility.FromJsonOverwrite(contentTask.Result, theList); - + var content = await response.Content.ReadAsStringAsync(); + JsonUtility.FromJsonOverwrite(content, theList); return theList; } - public static void CompleteJobQueueItem(JobQueueItem item) + public static async void CompleteJobQueueItem(JobQueueItem item) { - var t = PostJobQueueItem(item, "/complete"); - t.Wait(); - + await PostJobQueueItem(item, "/complete"); } - public static void ClaimJobQueueItem(JobQueueItem item) + public static async void ClaimJobQueueItem(JobQueueItem item) { - var t = PostJobQueueItem(item, "/claim"); - t.Wait(); + await PostJobQueueItem(item, "/claim"); } public static async Task PostJobQueueItem(JobQueueItem item, string path = "") @@ -54,10 +41,8 @@ public static async Task PostJobQueueItem(JobQueueItem item, string path = "") request.Content = stringContent; MultiprocessLogger.Log($"Posting remoteConfig to server {json}"); var cancelAfterDelay = new CancellationTokenSource(TimeSpan.FromSeconds(20)); - var response = await client .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelAfterDelay.Token).ConfigureAwait(false); - MultiprocessLogger.Log($"remoteConfig posted, checking response {response.StatusCode}"); } } @@ -80,6 +65,5 @@ public class JobQueueItem public string CreatedBy; public string UpdatedBy; public string TransportName; - } } diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs index 8b20f1be65..99c5c1c61a 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs @@ -40,13 +40,12 @@ public void Start() { if (arg.Length > 15) { - CommandLineArguments += " " + arg.Substring(0,14); + CommandLineArguments += " " + arg.Substring(0, 14); } else { CommandLineArguments += "\n" + arg; } - } } @@ -83,7 +82,7 @@ public void Update() t.text = $"On Update -\ntestCoordinator.isActiveAndEnabled:{testCoordinator.isActiveAndEnabled}\n" + $"Transport: {transportString}\n" + $"{CommandLineArguments}\n" + - $"IsHost: {NetworkManager.Singleton.IsHost} IsClient: {NetworkManager.Singleton.IsClient}\n" + + $"IsHost: {NetworkManager.Singleton.IsHost} IsClient: {NetworkManager.Singleton.IsClient}\n" + $"{m_UpdateCounter}\n"; } } From 5eb6c6fe2b0e097a1dfe706e7c38b87944ad0ee2 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Thu, 5 May 2022 17:43:32 -0400 Subject: [PATCH 09/17] only whitespace --- .../Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs index 1d89f27340..28c8c42db7 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/Helpers/ConfigurationTools.cs @@ -29,7 +29,7 @@ public static async void CompleteJobQueueItem(JobQueueItem item) public static async void ClaimJobQueueItem(JobQueueItem item) { - await PostJobQueueItem(item, "/claim"); + await PostJobQueueItem(item, "/claim"); } public static async Task PostJobQueueItem(JobQueueItem item, string path = "") From c2db7bfce0ee995d77bf14097081f97e1965fd9d Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 11 May 2022 13:07:49 -0400 Subject: [PATCH 10/17] attempt to move setting up StartClient to support async config --- .../BaseMultiprocessTests.cs | 4 +- .../MultiprocessRuntime/TestCoordinator.cs | 74 ++++++++++++------- 2 files changed, 52 insertions(+), 26 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs index 29870b5e4a..11632e8292 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs @@ -87,11 +87,12 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode) case UNetTransport unetTransport: unetTransport.ConnectPort = int.Parse(TestCoordinator.Port); unetTransport.ServerListenPort = int.Parse(TestCoordinator.Port); - unetTransport.ConnectAddress = "127.0.0.1"; + unetTransport.ConnectAddress = "0.0.0.0"; MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort} {unetTransport.ServerListenPort}"); break; case UnityTransport unityTransport: + unityTransport.ConnectionData.ServerListenAddress = "0.0.0.0"; MultiprocessLogger.Log($"Setting unityTransport.ConnectionData.Port {unityTransport.ConnectionData.ServerListenAddress}"); break; default: @@ -99,6 +100,7 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode) break; } + MultiprocessLogger.Log("Starting Host"); NetworkManager.Singleton.StartHost(); // Use scene verification to make sure we don't try to get clients to synchronize the TestRunner scene diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 5b9c42ae18..147349bb4d 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -54,10 +54,33 @@ public void Awake() MultiprocessLogger.Log($"Awake {s_ProcessId}"); ReadGitHashFile(); - // There are two possible ways for configuration data to be set - // 1. From a webapi - // 2. From a text file resource - ConfigureViaWebApi(); + // There are three possible ways for configuration data to be set + // 1. From the command line + // 2. From a webapi + // 3. From a text file resource + + if (Environment.GetCommandLineArgs().Contains(MultiprocessOrchestration.IsWorkerArg)) + { + MultiprocessLogger.Log($"Configuring via Command Line Args {m_ConnectAddress} {Port}"); + // This means we are configured via the command line, in a later PR + // There will be additional set up here and also a condition for the + // text file resource configuration + bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); + if (isClient) + { + m_IsClient = isClient; + } + ConfigurationType = ConfigurationType.CommandLine; + MultiprocessLogger.Log("starting netcode client"); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); + } + else + { + ConfigureViaWebApi(SetConfigurationAndStartClient); + } + + ExecuteStepInContext.InitializeAllSteps(); if (Instance != null) { @@ -69,18 +92,31 @@ public void Awake() Instance = this; } - private async void ConfigureViaWebApi() + private string SetConfigurationAndStartClient(JobQueueItem job) + { + m_ConnectAddress = job.HostIp; + m_IsClient = true; + MultiprocessLogHandler.JobId = job.JobId; + ConfigurationType = ConfigurationType.Remote; + SetAddressAndPort(); + + MultiprocessLogger.Log("starting netcode client"); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); + + return ""; + } + + private async void ConfigureViaWebApi(Func setConfigurationAndStartClient) { var jobQueue = await ConfigurationTools.GetRemoteConfig(); foreach (var job in jobQueue.JobQueueItems) { if (Rawgithash.Equals(job.GitHash)) { + setConfigurationAndStartClient(job); ConfigurationTools.ClaimJobQueueItem(job); - m_ConnectAddress = job.HostIp; - m_IsClient = true; - MultiprocessLogHandler.JobId = job.JobId; - ConfigurationType = ConfigurationType.Remote; + break; } else @@ -141,28 +177,16 @@ private void SetAddressAndPort() public void Start() { MultiprocessLogger.Log("Start"); - bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); - if (isClient) - { - m_IsClient = isClient; - } - if (m_IsClient) - { - SetAddressAndPort(); - - MultiprocessLogger.Log("starting netcode client"); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); - } - MultiprocessLogger.Log("Initialize All Steps"); - ExecuteStepInContext.InitializeAllSteps(); - MultiprocessLogger.Log($"Initialize All Steps... done"); MultiprocessLogger.Log($"IsInvoking: {NetworkManager.Singleton.IsInvoking()}"); MultiprocessLogger.Log($"IsActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled}"); } public void Update() { + if (m_IsClient) + { + UnityEngine.Debug.Log($"Update isActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled} IsConnectedClient: {NetworkManager.Singleton.IsConnectedClient}"); + } if (Time.time - m_TimeSinceLastKeepAlive > PerTestTimeoutSec) { QuitApplication(); From 6c28094ccc0f976cc4124073d595b71db51ab727 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 11 May 2022 13:35:47 -0400 Subject: [PATCH 11/17] Continued experiments --- .../BaseMultiprocessTests.cs | 4 +- .../MultiprocessRuntime/TestCoordinator.cs | 60 ++++++++++--------- .../Runtime/MultiprocessRuntime/ThreeDText.cs | 1 + 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs index 11632e8292..9d33b33349 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/BaseMultiprocessTests.cs @@ -87,8 +87,8 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode) case UNetTransport unetTransport: unetTransport.ConnectPort = int.Parse(TestCoordinator.Port); unetTransport.ServerListenPort = int.Parse(TestCoordinator.Port); - unetTransport.ConnectAddress = "0.0.0.0"; - MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort} {unetTransport.ServerListenPort}"); + unetTransport.ConnectAddress = "127.0.0.1"; + MultiprocessLogger.Log($"Setting ConnectAddress to {unetTransport.ConnectAddress} port {unetTransport.ConnectPort}, {unetTransport.ServerListenPort}"); break; case UnityTransport unityTransport: diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 147349bb4d..240ca44997 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -54,34 +54,7 @@ public void Awake() MultiprocessLogger.Log($"Awake {s_ProcessId}"); ReadGitHashFile(); - // There are three possible ways for configuration data to be set - // 1. From the command line - // 2. From a webapi - // 3. From a text file resource - - if (Environment.GetCommandLineArgs().Contains(MultiprocessOrchestration.IsWorkerArg)) - { - MultiprocessLogger.Log($"Configuring via Command Line Args {m_ConnectAddress} {Port}"); - // This means we are configured via the command line, in a later PR - // There will be additional set up here and also a condition for the - // text file resource configuration - bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); - if (isClient) - { - m_IsClient = isClient; - } - ConfigurationType = ConfigurationType.CommandLine; - MultiprocessLogger.Log("starting netcode client"); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); - } - else - { - ConfigureViaWebApi(SetConfigurationAndStartClient); - } - - ExecuteStepInContext.InitializeAllSteps(); - + if (Instance != null) { MultiprocessLogger.LogError("Multiple test coordinator, destroying this instance"); @@ -177,6 +150,35 @@ private void SetAddressAndPort() public void Start() { MultiprocessLogger.Log("Start"); + // There are three possible ways for configuration data to be set + // 1. From the command line + // 2. From a webapi + // 3. From a text file resource + + if (Environment.GetCommandLineArgs().Contains(MultiprocessOrchestration.IsWorkerArg)) + { + MultiprocessLogger.Log($"Configuring via Command Line Args {m_ConnectAddress} {Port}"); + // This means we are configured via the command line, in a later PR + // There will be additional set up here and also a condition for the + // text file resource configuration + bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); + if (isClient) + { + m_IsClient = isClient; + } + ConfigurationType = ConfigurationType.CommandLine; + MultiprocessLogger.Log("starting netcode client"); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); + } + else + { + ConfigureViaWebApi(SetConfigurationAndStartClient); + } + + MultiprocessLogger.Log("InitializeAllSteps"); + ExecuteStepInContext.InitializeAllSteps(); + MultiprocessLogger.Log($"IsInvoking: {NetworkManager.Singleton.IsInvoking()}"); MultiprocessLogger.Log($"IsActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled}"); } @@ -185,7 +187,7 @@ public void Update() { if (m_IsClient) { - UnityEngine.Debug.Log($"Update isActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled} IsConnectedClient: {NetworkManager.Singleton.IsConnectedClient}"); + UnityEngine.Debug.Log($"{Time.time} Update isActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled} IsConnectedClient: {NetworkManager.Singleton.IsConnectedClient}"); } if (Time.time - m_TimeSinceLastKeepAlive > PerTestTimeoutSec) { diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs index 99c5c1c61a..4ec597cd17 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs @@ -74,6 +74,7 @@ public void Update() if (IsTestCoordinatorActiveAndEnabled != testCoordinator.isActiveAndEnabled || !m_HasFired || + m_UpdateCounter % 25 == 0 || !m_TransportString.Equals(transportString)) { m_HasFired = true; From 5b74d538abdea2ec04fa76bc7fe711c58140df01 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Wed, 11 May 2022 15:01:05 -0400 Subject: [PATCH 12/17] Start client after the configuration has been set --- .../MultiprocessRuntime/TestCoordinator.cs | 86 ++++++++----------- .../Runtime/MultiprocessRuntime/ThreeDText.cs | 2 +- 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 240ca44997..41b3d23e26 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -43,7 +43,16 @@ public class TestCoordinator : NetworkBehaviour // Multimachine support private static int s_ProcessId; public static string Rawgithash; - public static ConfigurationType ConfigurationType; + + private ConfigurationType m_ConfigurationType; + public ConfigurationType ConfigurationType + { + get { return m_ConfigurationType; } + set + { + m_ConfigurationType = value; + } + } private string m_ConnectAddress = "127.0.0.1"; public static string Port = "3076"; private bool m_IsClient; @@ -54,7 +63,17 @@ public void Awake() MultiprocessLogger.Log($"Awake {s_ProcessId}"); ReadGitHashFile(); - + // There are two possible ways for configuration data to be set + // 1. From a webapi + // 2. From a text file resource + bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); + if (isClient) + { + m_IsClient = isClient; + ConfigurationType = ConfigurationType.CommandLine; + } + ConfigureViaWebApi(); + if (Instance != null) { MultiprocessLogger.LogError("Multiple test coordinator, destroying this instance"); @@ -65,31 +84,18 @@ public void Awake() Instance = this; } - private string SetConfigurationAndStartClient(JobQueueItem job) - { - m_ConnectAddress = job.HostIp; - m_IsClient = true; - MultiprocessLogHandler.JobId = job.JobId; - ConfigurationType = ConfigurationType.Remote; - SetAddressAndPort(); - - MultiprocessLogger.Log("starting netcode client"); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); - - return ""; - } - - private async void ConfigureViaWebApi(Func setConfigurationAndStartClient) + private async void ConfigureViaWebApi() { var jobQueue = await ConfigurationTools.GetRemoteConfig(); foreach (var job in jobQueue.JobQueueItems) { if (Rawgithash.Equals(job.GitHash)) { - setConfigurationAndStartClient(job); ConfigurationTools.ClaimJobQueueItem(job); - + m_ConnectAddress = job.HostIp; + m_IsClient = true; + MultiprocessLogHandler.JobId = job.JobId; + ConfigurationType = ConfigurationType.Remote; break; } else @@ -110,6 +116,7 @@ private void ReadGitHashFile() if (!string.IsNullOrEmpty(Rawgithash)) { Rawgithash = Rawgithash.Trim(); + MultiprocessLogger.Log($"Rawgithash is {Rawgithash}"); } } } @@ -150,45 +157,26 @@ private void SetAddressAndPort() public void Start() { MultiprocessLogger.Log("Start"); - // There are three possible ways for configuration data to be set - // 1. From the command line - // 2. From a webapi - // 3. From a text file resource - - if (Environment.GetCommandLineArgs().Contains(MultiprocessOrchestration.IsWorkerArg)) - { - MultiprocessLogger.Log($"Configuring via Command Line Args {m_ConnectAddress} {Port}"); - // This means we are configured via the command line, in a later PR - // There will be additional set up here and also a condition for the - // text file resource configuration - bool isClient = Environment.GetCommandLineArgs().Any(value => value == MultiprocessOrchestration.IsWorkerArg); - if (isClient) - { - m_IsClient = isClient; - } - ConfigurationType = ConfigurationType.CommandLine; - MultiprocessLogger.Log("starting netcode client"); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); - } - else - { - ConfigureViaWebApi(SetConfigurationAndStartClient); - } - MultiprocessLogger.Log("InitializeAllSteps"); + MultiprocessLogger.Log("Initialize All Steps"); ExecuteStepInContext.InitializeAllSteps(); - + MultiprocessLogger.Log($"Initialize All Steps... done"); MultiprocessLogger.Log($"IsInvoking: {NetworkManager.Singleton.IsInvoking()}"); MultiprocessLogger.Log($"IsActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled}"); } public void Update() { - if (m_IsClient) + if (ConfigurationType != ConfigurationType.Unknown && + m_IsClient && + !NetworkManager.Singleton.IsClient) { - UnityEngine.Debug.Log($"{Time.time} Update isActiveAndEnabled: {NetworkManager.Singleton.isActiveAndEnabled} IsConnectedClient: {NetworkManager.Singleton.IsConnectedClient}"); + SetAddressAndPort(); + MultiprocessLogger.Log("starting netcode client"); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); } + if (Time.time - m_TimeSinceLastKeepAlive > PerTestTimeoutSec) { QuitApplication(); diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs index 4ec597cd17..6c7bc02d34 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/ThreeDText.cs @@ -80,7 +80,7 @@ public void Update() m_HasFired = true; m_TransportString = transportString; IsTestCoordinatorActiveAndEnabled = testCoordinator.isActiveAndEnabled; - t.text = $"On Update -\ntestCoordinator.isActiveAndEnabled:{testCoordinator.isActiveAndEnabled}\n" + + t.text = $"On Update -\ntestCoordinator.isActiveAndEnabled:{testCoordinator.isActiveAndEnabled} {testCoordinator.ConfigurationType}\n" + $"Transport: {transportString}\n" + $"{CommandLineArguments}\n" + $"IsHost: {NetworkManager.Singleton.IsHost} IsClient: {NetworkManager.Singleton.IsClient}\n" + From 3f56741dedcb69bfdacf75d6dd0cb02e44ace106 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Tue, 24 May 2022 13:15:12 -0400 Subject: [PATCH 13/17] Use notifications and callbacks instead of waits to enable TestCoordinator when the connection is complete --- .../MultiprocessRuntime/TestCoordinator.cs | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 41b3d23e26..b786e41287 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Reflection; +using System.Runtime.CompilerServices; using Unity.Netcode; using NUnit.Framework; using UnityEngine; @@ -21,8 +23,10 @@ /// on which to execute client tests. We use netcode as both a test framework and as the target of our performance tests. /// [RequireComponent(typeof(NetworkObject))] -public class TestCoordinator : NetworkBehaviour +public class TestCoordinator : NetworkBehaviour, INotifyPropertyChanged { + public event PropertyChangedEventHandler PropertyChanged; + public const int PerTestTimeoutSec = 5 * 60; // seconds public const float MaxWaitTimeoutSec = 20; @@ -50,15 +54,28 @@ public ConfigurationType ConfigurationType get { return m_ConfigurationType; } set { - m_ConfigurationType = value; + if (m_ConfigurationType != value) + { + m_ConfigurationType = value; + NotifyPropertyChanged(); + } } } private string m_ConnectAddress = "127.0.0.1"; public static string Port = "3076"; private bool m_IsClient; + private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + public void Awake() { + this.enabled = false; + NetworkManager.OnClientConnectedCallback += OnClientConnectedCallback; + this.PropertyChanged += ConfigurationTypeChangedCallback; + s_ProcessId = Process.GetCurrentProcess().Id; MultiprocessLogger.Log($"Awake {s_ProcessId}"); ReadGitHashFile(); @@ -72,7 +89,13 @@ public void Awake() m_IsClient = isClient; ConfigurationType = ConfigurationType.CommandLine; } - ConfigureViaWebApi(); + + if (ConfigurationType == ConfigurationType.Unknown) + { + MultiprocessLogger.Log($"Awake {s_ProcessId} - Calling ConfigureViewWebApi"); + ConfigureViaWebApi(); + MultiprocessLogger.Log($"Awake {s_ProcessId} - Calling ConfigureViewWebApi completed"); + } if (Instance != null) { @@ -86,6 +109,7 @@ public void Awake() private async void ConfigureViaWebApi() { + MultiprocessLogger.Log($"ConfigureViaWebApi - start"); var jobQueue = await ConfigurationTools.GetRemoteConfig(); foreach (var job in jobQueue.JobQueueItems) { @@ -103,6 +127,7 @@ private async void ConfigureViaWebApi() MultiprocessLogger.Log($"No match between {Rawgithash} and {job.GitHash}"); } } + MultiprocessLogger.Log($"ConfigureViaWebApi - end {ConfigurationType}"); } private void ReadGitHashFile() @@ -157,7 +182,6 @@ private void SetAddressAndPort() public void Start() { MultiprocessLogger.Log("Start"); - MultiprocessLogger.Log("Initialize All Steps"); ExecuteStepInContext.InitializeAllSteps(); MultiprocessLogger.Log($"Initialize All Steps... done"); @@ -167,16 +191,6 @@ public void Start() public void Update() { - if (ConfigurationType != ConfigurationType.Unknown && - m_IsClient && - !NetworkManager.Singleton.IsClient) - { - SetAddressAndPort(); - MultiprocessLogger.Log("starting netcode client"); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"started netcode client {NetworkManager.Singleton.IsConnectedClient} {startClientResult}"); - } - if (Time.time - m_TimeSinceLastKeepAlive > PerTestTimeoutSec) { QuitApplication(); @@ -230,6 +244,21 @@ public void OnDisable() base.OnDestroy(); } + public void ConfigurationTypeChangedCallback(object sender, PropertyChangedEventArgs e) + { + MultiprocessLogger.Log($"Property Changed: {e}"); + SetAddressAndPort(); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"Starting client"); + } + + // Once we are connected, we can run the update method + public void OnClientConnectedCallback(ulong clientId) + { + MultiprocessLogger.Log("Client start callback, enabling behavior"); + this.enabled = true; + } + private static void OnClientDisconnectCallback(ulong clientId) { if (clientId == NetworkManager.ServerClientId || clientId == NetworkManager.Singleton.LocalClientId) From dfd9055cae734dcd24b9e2e8ecb05bbf4e8c941e Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Tue, 24 May 2022 14:35:21 -0400 Subject: [PATCH 14/17] Make startclient call explicit --- .../MultiprocessRuntime/TestCoordinator.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index b786e41287..d7f5f8b34e 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -52,7 +52,7 @@ public class TestCoordinator : NetworkBehaviour, INotifyPropertyChanged public ConfigurationType ConfigurationType { get { return m_ConfigurationType; } - set + private set { if (m_ConfigurationType != value) { @@ -70,6 +70,14 @@ private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } + private void SetConfigurationTypeAndConnect(ConfigurationType type) + { + ConfigurationType = type; + SetAddressAndPort(); + bool startClientResult = NetworkManager.Singleton.StartClient(); + MultiprocessLogger.Log($"Starting client"); + } + public void Awake() { this.enabled = false; @@ -87,7 +95,7 @@ public void Awake() if (isClient) { m_IsClient = isClient; - ConfigurationType = ConfigurationType.CommandLine; + SetConfigurationTypeAndConnect(ConfigurationType.CommandLine); } if (ConfigurationType == ConfigurationType.Unknown) @@ -119,7 +127,7 @@ private async void ConfigureViaWebApi() m_ConnectAddress = job.HostIp; m_IsClient = true; MultiprocessLogHandler.JobId = job.JobId; - ConfigurationType = ConfigurationType.Remote; + SetConfigurationTypeAndConnect(ConfigurationType.Remote); break; } else @@ -247,9 +255,7 @@ public void OnDisable() public void ConfigurationTypeChangedCallback(object sender, PropertyChangedEventArgs e) { MultiprocessLogger.Log($"Property Changed: {e}"); - SetAddressAndPort(); - bool startClientResult = NetworkManager.Singleton.StartClient(); - MultiprocessLogger.Log($"Starting client"); + } // Once we are connected, we can run the update method From 16f31992d10fbb6fb1de1797f2235309c1ddac09 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Tue, 24 May 2022 14:52:32 -0400 Subject: [PATCH 15/17] Test Coordinator cleanup for INotifyPropertyChanged --- .../MultiprocessRuntime/TestCoordinator.cs | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index d7f5f8b34e..816bd7057e 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -1,10 +1,8 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Reflection; -using System.Runtime.CompilerServices; using Unity.Netcode; using NUnit.Framework; using UnityEngine; @@ -23,10 +21,8 @@ /// on which to execute client tests. We use netcode as both a test framework and as the target of our performance tests. /// [RequireComponent(typeof(NetworkObject))] -public class TestCoordinator : NetworkBehaviour, INotifyPropertyChanged +public class TestCoordinator : NetworkBehaviour { - public event PropertyChangedEventHandler PropertyChanged; - public const int PerTestTimeoutSec = 5 * 60; // seconds public const float MaxWaitTimeoutSec = 20; @@ -57,7 +53,6 @@ private set if (m_ConfigurationType != value) { m_ConfigurationType = value; - NotifyPropertyChanged(); } } } @@ -65,11 +60,7 @@ private set public static string Port = "3076"; private bool m_IsClient; - private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - + private void SetConfigurationTypeAndConnect(ConfigurationType type) { ConfigurationType = type; @@ -82,7 +73,6 @@ public void Awake() { this.enabled = false; NetworkManager.OnClientConnectedCallback += OnClientConnectedCallback; - this.PropertyChanged += ConfigurationTypeChangedCallback; s_ProcessId = Process.GetCurrentProcess().Id; MultiprocessLogger.Log($"Awake {s_ProcessId}"); @@ -252,12 +242,6 @@ public void OnDisable() base.OnDestroy(); } - public void ConfigurationTypeChangedCallback(object sender, PropertyChangedEventArgs e) - { - MultiprocessLogger.Log($"Property Changed: {e}"); - - } - // Once we are connected, we can run the update method public void OnClientConnectedCallback(ulong clientId) { From 9fd9aa55c6755aee5baed7e808182a4e3a8ce3ba Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Tue, 24 May 2022 15:21:34 -0400 Subject: [PATCH 16/17] Fix whitespace --- .../Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index 816bd7057e..db3a3ff0d5 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -60,7 +60,6 @@ private set public static string Port = "3076"; private bool m_IsClient; - private void SetConfigurationTypeAndConnect(ConfigurationType type) { ConfigurationType = type; From 39e091c8506770418ec1dc7b96d7ce43e56f0852 Mon Sep 17 00:00:00 2001 From: zain-mecklai Date: Tue, 24 May 2022 15:55:13 -0400 Subject: [PATCH 17/17] Fix whitespace, simplify --- .../Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs index db3a3ff0d5..0a4e9436b8 100644 --- a/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs +++ b/testproject/Assets/Tests/Runtime/MultiprocessRuntime/TestCoordinator.cs @@ -70,7 +70,7 @@ private void SetConfigurationTypeAndConnect(ConfigurationType type) public void Awake() { - this.enabled = false; + enabled = false; NetworkManager.OnClientConnectedCallback += OnClientConnectedCallback; s_ProcessId = Process.GetCurrentProcess().Id; @@ -245,7 +245,7 @@ public void OnDisable() public void OnClientConnectedCallback(ulong clientId) { MultiprocessLogger.Log("Client start callback, enabling behavior"); - this.enabled = true; + enabled = true; } private static void OnClientDisconnectCallback(ulong clientId)