1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-11-04 10:02:40 +01:00

Run integration tests in parallel

This commit is contained in:
ta264 2020-08-17 22:18:47 +01:00
parent 05e8de2b0a
commit 3c5e56919f
2 changed files with 39 additions and 8 deletions

View File

@ -1,24 +1,33 @@
using System.Threading;
using NLog; using NLog;
using NUnit.Framework;
using NzbDrone.Core.Indexers.Newznab; using NzbDrone.Core.Indexers.Newznab;
using NzbDrone.Test.Common; using NzbDrone.Test.Common;
using Radarr.Http.ClientSchema; using Radarr.Http.ClientSchema;
namespace NzbDrone.Integration.Test namespace NzbDrone.Integration.Test
{ {
[Parallelizable(ParallelScope.Fixtures)]
public abstract class IntegrationTest : IntegrationTestBase public abstract class IntegrationTest : IntegrationTestBase
{ {
protected static int StaticPort = 7878;
protected NzbDroneRunner _runner; protected NzbDroneRunner _runner;
public override string MovieRootFolder => GetTempDirectory("MovieRootFolder"); public override string MovieRootFolder => GetTempDirectory("MovieRootFolder");
protected override string RootUrl => "http://localhost:7878/"; protected int Port { get; private set; }
protected override string RootUrl => $"http://localhost:{Port}/";
protected override string ApiKey => _runner.ApiKey; protected override string ApiKey => _runner.ApiKey;
protected override void StartTestTarget() protected override void StartTestTarget()
{ {
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger()); Port = Interlocked.Increment(ref StaticPort);
_runner.KillAll();
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), Port);
_runner.Kill();
_runner.Start(); _runner.Start();
} }
@ -45,7 +54,7 @@ protected override void InitializeTestTarget()
protected override void StopTestTarget() protected override void StopTestTarget()
{ {
_runner.KillAll(); _runner.Kill();
} }
} }
} }

View File

@ -20,11 +20,14 @@ public class NzbDroneRunner
public string AppData { get; private set; } public string AppData { get; private set; }
public string ApiKey { get; private set; } public string ApiKey { get; private set; }
public int Port { get; private set; }
public NzbDroneRunner(Logger logger, int port = 7878) public NzbDroneRunner(Logger logger, int port = 7878)
{ {
_processProvider = new ProcessProvider(logger); _processProvider = new ProcessProvider(logger);
_restClient = new RestClient("http://localhost:7878/api/v3"); _restClient = new RestClient($"http://localhost:{port}/api/v3");
Port = port;
} }
public void Start() public void Start()
@ -75,7 +78,7 @@ public void Start()
if (statusCall.ResponseStatus == ResponseStatus.Completed) if (statusCall.ResponseStatus == ResponseStatus.Completed)
{ {
TestContext.Progress.WriteLine("Radarr is started. Running Tests"); TestContext.Progress.WriteLine($"Radarr {Port} is started. Running Tests");
return; return;
} }
@ -85,6 +88,23 @@ public void Start()
} }
} }
public void Kill()
{
try
{
if (_nzbDroneProcess != null)
{
_processProvider.Kill(_nzbDroneProcess.Id);
}
}
catch (InvalidOperationException)
{
// May happen if the process closes while being closed
}
TestBase.DeleteTempFolder(AppData);
}
public void KillAll() public void KillAll()
{ {
try try
@ -107,13 +127,14 @@ public void KillAll()
private void Start(string outputRadarrConsoleExe) private void Start(string outputRadarrConsoleExe)
{ {
TestContext.Progress.WriteLine("Starting instance from {0} on port {1}", outputRadarrConsoleExe, Port);
var args = "-nobrowser -data=\"" + AppData + "\""; var args = "-nobrowser -data=\"" + AppData + "\"";
_nzbDroneProcess = _processProvider.Start(outputRadarrConsoleExe, args, null, OnOutputDataReceived, OnOutputDataReceived); _nzbDroneProcess = _processProvider.Start(outputRadarrConsoleExe, args, null, OnOutputDataReceived, OnOutputDataReceived);
} }
private void OnOutputDataReceived(string data) private void OnOutputDataReceived(string data)
{ {
TestContext.Progress.WriteLine(data); TestContext.Progress.WriteLine($" [{Port}] > " + data);
if (data.Contains("Press enter to exit")) if (data.Contains("Press enter to exit"))
{ {
@ -132,7 +153,8 @@ private void GenerateConfigFile()
new XDeclaration("1.0", "utf-8", "yes"), new XDeclaration("1.0", "utf-8", "yes"),
new XElement(ConfigFileProvider.CONFIG_ELEMENT_NAME, new XElement(ConfigFileProvider.CONFIG_ELEMENT_NAME,
new XElement(nameof(ConfigFileProvider.ApiKey), apiKey), new XElement(nameof(ConfigFileProvider.ApiKey), apiKey),
new XElement(nameof(ConfigFileProvider.AnalyticsEnabled), false))); new XElement(nameof(ConfigFileProvider.AnalyticsEnabled), false),
new XElement(nameof(ConfigFileProvider.Port), Port)));
var data = xDoc.ToString(); var data = xDoc.ToString();