Adding vibe tests
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
using System.Diagnostics;
|
||||
using System.Net.Http;
|
||||
|
||||
namespace Tests;
|
||||
|
||||
[SetUpFixture]
|
||||
public class TestSetup
|
||||
{
|
||||
private Process? _serverProcess;
|
||||
private const string ServerUrl = "http://localhost:5256";
|
||||
|
||||
[OneTimeSetUp]
|
||||
public async Task BeforeAllTests()
|
||||
{
|
||||
Console.WriteLine("[DEBUG_LOG] Starting Server...");
|
||||
|
||||
// Find solution root
|
||||
var currentDir = AppContext.BaseDirectory;
|
||||
while (currentDir != null && !File.Exists(Path.Combine(currentDir, "Chrono.sln")))
|
||||
{
|
||||
currentDir = Path.GetDirectoryName(currentDir);
|
||||
}
|
||||
|
||||
if (currentDir == null)
|
||||
{
|
||||
throw new Exception("Could not find Chrono.sln to determine project path.");
|
||||
}
|
||||
|
||||
var projectPath = Path.Combine(currentDir, "Server", "Server.csproj");
|
||||
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "dotnet",
|
||||
Arguments = $"run --project \"{projectPath}\" --no-build",
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
WorkingDirectory = currentDir
|
||||
};
|
||||
|
||||
_serverProcess = Process.Start(startInfo);
|
||||
|
||||
_serverProcess.OutputDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine($"[SERVER OUT] {e.Data}"); };
|
||||
_serverProcess.ErrorDataReceived += (s, e) => { if (e.Data != null) Console.WriteLine($"[SERVER ERR] {e.Data}"); };
|
||||
_serverProcess.BeginOutputReadLine();
|
||||
_serverProcess.BeginErrorReadLine();
|
||||
|
||||
if (_serverProcess == null)
|
||||
{
|
||||
throw new Exception("Failed to start server process.");
|
||||
}
|
||||
|
||||
// Wait for the server to be ready
|
||||
using var client = new HttpClient();
|
||||
var sw = Stopwatch.StartNew();
|
||||
var timeout = TimeSpan.FromSeconds(30);
|
||||
bool isReady = false;
|
||||
|
||||
while (sw.Elapsed < timeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
var response = await client.GetAsync(ServerUrl);
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
isReady = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Wait and retry
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isReady)
|
||||
{
|
||||
_serverProcess.Kill(true);
|
||||
throw new Exception($"Server did not start within {timeout.TotalSeconds} seconds.");
|
||||
}
|
||||
|
||||
Console.WriteLine("[DEBUG_LOG] Server is ready.");
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
public void AfterAllTests()
|
||||
{
|
||||
if (_serverProcess != null && !_serverProcess.HasExited)
|
||||
{
|
||||
Console.WriteLine("[DEBUG_LOG] Stopping Server...");
|
||||
_serverProcess.Kill(true);
|
||||
_serverProcess.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user