1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-09-17 15:02:34 +02:00

Updated NzbDroneRunner

This commit is contained in:
kay.one 2013-08-13 20:22:28 -07:00
parent 6ef19ecc2d
commit 4a41ce7f29
5 changed files with 97 additions and 100 deletions

View File

@ -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)
{ {

View File

@ -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();

View File

@ -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();
} }
} }

View File

@ -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" />

View 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; }
}
}