mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-09 04:22:30 +01:00
Updated NzbDroneRunner
This commit is contained in:
parent
6ef19ecc2d
commit
4a41ce7f29
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -91,6 +90,7 @@ public Process ShellExecute(string path, string args = null, Action<string> onOu
|
|||||||
UseShellExecute = false,
|
UseShellExecute = false,
|
||||||
RedirectStandardError = true,
|
RedirectStandardError = true,
|
||||||
RedirectStandardOutput = true,
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardInput = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -125,9 +125,12 @@ public Process ShellExecute(string path, string args = null, Action<string> onOu
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
process.Start();
|
||||||
|
|
||||||
process.BeginErrorReadLine();
|
process.BeginErrorReadLine();
|
||||||
process.BeginOutputReadLine();
|
process.BeginOutputReadLine();
|
||||||
|
|
||||||
|
|
||||||
return process;
|
return process;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,13 +207,15 @@ private static ProcessInfo ConvertToProcessInfo(Process process)
|
|||||||
|
|
||||||
private void Kill(int processId)
|
private void Kill(int processId)
|
||||||
{
|
{
|
||||||
if (processId == 0 || Process.GetProcesses().All(p => p.Id != processId))
|
var process = Process.GetProcesses().FirstOrDefault(p => p.Id == processId);
|
||||||
|
|
||||||
|
if (process == null)
|
||||||
{
|
{
|
||||||
Logger.Warn("Cannot find process with id: {0}", processId);
|
Logger.Warn("Cannot find process with id: {0}", processId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var process = Process.GetProcessById(processId);
|
process.Refresh();
|
||||||
|
|
||||||
if (process.HasExited)
|
if (process.HasExited)
|
||||||
{
|
{
|
||||||
|
@ -48,9 +48,6 @@ public static IContainer Start(StartupArguments args)
|
|||||||
|
|
||||||
var container = MainAppContainerBuilder.BuildContainer(args);
|
var container = MainAppContainerBuilder.BuildContainer(args);
|
||||||
|
|
||||||
throw new IndexOutOfRangeException();
|
|
||||||
|
|
||||||
|
|
||||||
DbFactory.RegisterDatabase(container);
|
DbFactory.RegisterDatabase(container);
|
||||||
container.Resolve<Router>().Route();
|
container.Resolve<Router>().Route();
|
||||||
|
|
||||||
|
@ -25,109 +25,21 @@ public abstract class IntegrationTest
|
|||||||
protected ReleaseClient Releases;
|
protected ReleaseClient Releases;
|
||||||
protected IndexerClient Indexers;
|
protected IndexerClient Indexers;
|
||||||
|
|
||||||
|
private NzbDroneRunner _runner;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void SmokeTestSetup()
|
public void SmokeTestSetup()
|
||||||
{
|
{
|
||||||
new StartupArguments();
|
new StartupArguments();
|
||||||
|
|
||||||
KillNzbDrone();
|
_runner = new NzbDroneRunner();
|
||||||
|
_runner.KillAll();
|
||||||
|
|
||||||
InitRestClients();
|
InitRestClients();
|
||||||
|
|
||||||
PackageStart();
|
_runner.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void KillNzbDrone()
|
|
||||||
{
|
|
||||||
foreach (var p in Process.GetProcessesByName("NzbDrone.Console"))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
p.Kill();
|
|
||||||
}
|
|
||||||
catch (Win32Exception)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string AppDate;
|
|
||||||
|
|
||||||
private void PackageStart()
|
|
||||||
{
|
|
||||||
AppDate = Path.Combine(Directory.GetCurrentDirectory(), "_intg_" + DateTime.Now.Ticks);
|
|
||||||
|
|
||||||
if (BuildInfo.IsDebug)
|
|
||||||
{
|
|
||||||
Start("..\\..\\..\\..\\_output\\NzbDrone.Console.exe");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Start("bin\\NzbDrone.Console.exe");
|
|
||||||
}
|
|
||||||
|
|
||||||
while (RestClient.Get(new RestRequest("system/status")).ResponseStatus != ResponseStatus.Completed)
|
|
||||||
{
|
|
||||||
|
|
||||||
Thread.Sleep(1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Process Start(string path)
|
|
||||||
{
|
|
||||||
|
|
||||||
var args = "-nobrowser -data=\"" + AppDate + "\"";
|
|
||||||
|
|
||||||
var startInfo = new ProcessStartInfo(path, args)
|
|
||||||
{
|
|
||||||
CreateNoWindow = true,
|
|
||||||
UseShellExecute = false,
|
|
||||||
RedirectStandardError = true,
|
|
||||||
RedirectStandardOutput = true,
|
|
||||||
RedirectStandardInput = true
|
|
||||||
};
|
|
||||||
|
|
||||||
Console.WriteLine("Starting {0} {1}", path, args);
|
|
||||||
|
|
||||||
var process = new Process
|
|
||||||
{
|
|
||||||
StartInfo = startInfo
|
|
||||||
};
|
|
||||||
|
|
||||||
process.OutputDataReceived += (sender, eventArgs) =>
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(eventArgs.Data)) return;
|
|
||||||
|
|
||||||
if (eventArgs.Data.Contains("Press enter to exit"))
|
|
||||||
{
|
|
||||||
process.StandardInput.WriteLine(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine(eventArgs.Data);
|
|
||||||
};
|
|
||||||
|
|
||||||
process.ErrorDataReceived += (sender, eventArgs) =>
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(eventArgs.Data)) return;
|
|
||||||
|
|
||||||
if (eventArgs.Data.Contains("Press enter to exit"))
|
|
||||||
{
|
|
||||||
process.StandardInput.WriteLine(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine(eventArgs.Data);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
process.Start();
|
|
||||||
|
|
||||||
process.BeginErrorReadLine();
|
|
||||||
process.BeginOutputReadLine();
|
|
||||||
|
|
||||||
process.Exited += (sender, eventArgs) => Assert.Fail("Process exited");
|
|
||||||
|
|
||||||
return process;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitRestClients()
|
private void InitRestClients()
|
||||||
{
|
{
|
||||||
@ -142,7 +54,7 @@ private void InitRestClients()
|
|||||||
[TearDown]
|
[TearDown]
|
||||||
public void SmokeTestTearDown()
|
public void SmokeTestTearDown()
|
||||||
{
|
{
|
||||||
KillNzbDrone();
|
_runner.KillAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,6 +95,7 @@
|
|||||||
<Compile Include="CommandIntegerationTests.cs" />
|
<Compile Include="CommandIntegerationTests.cs" />
|
||||||
<Compile Include="IndexerIntegrationFixture.cs" />
|
<Compile Include="IndexerIntegrationFixture.cs" />
|
||||||
<Compile Include="IntegrationTestDirectoryInfo.cs" />
|
<Compile Include="IntegrationTestDirectoryInfo.cs" />
|
||||||
|
<Compile Include="NzbDroneRunner.cs" />
|
||||||
<Compile Include="QualityProfileIntegrationTest.cs" />
|
<Compile Include="QualityProfileIntegrationTest.cs" />
|
||||||
<Compile Include="ReleaseIntegrationTest.cs" />
|
<Compile Include="ReleaseIntegrationTest.cs" />
|
||||||
<Compile Include="IntegrationTest.cs" />
|
<Compile Include="IntegrationTest.cs" />
|
||||||
|
82
NzbDrone.Integration.Test/NzbDroneRunner.cs
Normal file
82
NzbDrone.Integration.Test/NzbDroneRunner.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Common;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace NzbDrone.Integration.Test
|
||||||
|
{
|
||||||
|
public class NzbDroneRunner
|
||||||
|
{
|
||||||
|
private readonly IProcessProvider _processProvider;
|
||||||
|
private readonly IRestClient _restClient;
|
||||||
|
private Process _nzbDroneProcess;
|
||||||
|
|
||||||
|
public NzbDroneRunner(int port = 8989)
|
||||||
|
{
|
||||||
|
_processProvider = new ProcessProvider();
|
||||||
|
_restClient = new RestClient("http://localhost:8989/api");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
AppDate = Path.Combine(Directory.GetCurrentDirectory(), "_intg_" + DateTime.Now.Ticks);
|
||||||
|
|
||||||
|
if (BuildInfo.IsDebug)
|
||||||
|
{
|
||||||
|
|
||||||
|
Start("..\\..\\..\\..\\_output\\NzbDrone.Console.exe");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Start("bin\\NzbDrone.Console.exe");
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
|
||||||
|
_nzbDroneProcess.Refresh();
|
||||||
|
|
||||||
|
if (_nzbDroneProcess.HasExited)
|
||||||
|
{
|
||||||
|
Assert.Fail("Process has exited");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_restClient.Get(new RestRequest("system/status")).ResponseStatus == ResponseStatus.Completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread.Sleep(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void KillAll()
|
||||||
|
{
|
||||||
|
_processProvider.KillAll(ProcessProvider.NzbDroneConsoleProcessName);
|
||||||
|
_processProvider.KillAll(ProcessProvider.NzbDroneProcessName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start(string outputNzbdroneConsoleExe)
|
||||||
|
{
|
||||||
|
var args = "-nobrowser -data=\"" + AppDate + "\"";
|
||||||
|
_nzbDroneProcess = _processProvider.ShellExecute(outputNzbdroneConsoleExe, args, OnOutputDataReceived, OnOutputDataReceived);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnOutputDataReceived(string data)
|
||||||
|
{
|
||||||
|
if (data.Contains("Press enter to exit"))
|
||||||
|
{
|
||||||
|
_nzbDroneProcess.StandardInput.WriteLine(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string AppDate { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user