Files

109 lines
4.0 KiB
C#

using NUnit.Framework;
using Unity.Pipeline.Config;
using Unity.Pipeline.Runtime.Commands;
using Unity.Pipeline.Tests.Editor.ServerLifecyle;
using UnityEngine;
namespace Unity.Pipeline.Tests.Editor
{
/// <summary>
/// Tests for the runtime_status command (RuntimeStatusCommand), exercised both directly
/// (static call) and through the HTTP server via PipelineClient.
/// </summary>
class RuntimeStatusCommandTests
{
#region Direct
[Test]
public void GetRuntimeStatus_ReturnsValidData()
{
var response = RuntimeStatusCommand.GetRuntimeStatus();
Assert.IsNotNull(response);
Assert.IsNotEmpty(response.UnityVersion, "Should have Unity version");
Assert.IsNotEmpty(response.Platform, "Should have platform info");
Assert.IsTrue(response.IsPlaying, "runtime_status reports IsPlaying = true");
Assert.IsNotNull(response.LoadedLevelName, "Should have scene name");
}
[Test]
public void GetRuntimeStatus_NoDriverBootstrapped_PipelineDriverIsNull()
{
GlobalServerStateGuard.Capture();
RuntimePipelineResourceTestGuard.AssertNoConfigAssetExists();
try
{
var response = RuntimeStatusCommand.GetRuntimeStatus();
Assert.IsNull(response.PipelineDriver, "No driver was ever bootstrapped in this test, so there is nothing to report");
}
finally
{
RuntimePipelineResourceTestGuard.DeleteConfigIfExists();
GlobalServerStateGuard.Restore();
}
}
[Test]
public void GetRuntimeStatus_DriverBootstrapped_ReportsDriverStatus()
{
GlobalServerStateGuard.Capture();
RuntimePipelineResourceTestGuard.AssertNoConfigAssetExists();
GameObject driverGameObject = null;
try
{
var config = ScriptableObject.CreateInstance<RuntimePipelineConfig>();
config.enableInBuilds = true;
config.requestTimeoutMs = 12345;
config.enableAuditLogging = false;
config.autoStart = false;
config.maxWorkItemsPerFrame = 17;
config.Save();
Object.DestroyImmediate(config);
var driver = RuntimePipelineBootstrap.Bootstrap();
driverGameObject = driver != null ? driver.gameObject : null;
var response = RuntimeStatusCommand.GetRuntimeStatus();
Assert.IsNotNull(response.PipelineDriver);
Assert.IsTrue(response.PipelineDriver.EnableInBuilds);
Assert.AreEqual(12345, response.PipelineDriver.RequestTimeoutMs);
Assert.IsFalse(response.PipelineDriver.EnableAuditLogging);
Assert.IsFalse(response.PipelineDriver.AutoStart);
Assert.AreEqual(17, response.PipelineDriver.MaxWorkItemsPerFrame);
Assert.IsFalse(response.PipelineDriver.IsServerRunning, "autoStart is false, so the server itself never started");
}
finally
{
if (driverGameObject != null)
Object.DestroyImmediate(driverGameObject);
RuntimePipelineBootstrap.Instance = null;
RuntimePipelineResourceTestGuard.DeleteConfigIfExists();
GlobalServerStateGuard.Restore();
}
}
#endregion
#region ViaClient
[Test]
public void RuntimeStatus_ViaClient_ReturnsValidJson()
{
using (var server = new PipelineTestServer())
{
var response = server.Execute("runtime_status", null);
Assert.IsTrue(response.IsSuccess, $"Command should succeed: {response.Error}");
Assert.IsTrue(response.HasValidJson, "Response should have valid JSON");
Assert.IsTrue(response.JsonResponse.ContainsKey("result"), "Should have result field");
}
}
#endregion
}
}