mirror of https://github.com/Sonarr/Sonarr
More update code. almost there.
This commit is contained in:
parent
60d598f2c1
commit
883dffca80
|
@ -92,7 +92,19 @@ namespace NzbDrone.Common
|
||||||
var fileLocation = Assembly.GetCallingAssembly().Location;
|
var fileLocation = Assembly.GetCallingAssembly().Location;
|
||||||
return new FileInfo(fileLocation).CreationTime;
|
return new FileInfo(fileLocation).CreationTime;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual int NzbDroneProcessIdFromEnviroment
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var id = Convert.ToInt32(Environment.GetEnvironmentVariable("NZBDRONE_PID"));
|
||||||
|
|
||||||
|
if (id == 0)
|
||||||
|
throw new InvalidOperationException("NZBDRONE_PID isn't a valid environment variable.");
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool ContainsIIS(DirectoryInfo dir)
|
private static bool ContainsIIS(DirectoryInfo dir)
|
||||||
|
|
|
@ -120,7 +120,7 @@ namespace NzbDrone.Core
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var pid = Convert.ToInt32(Environment.GetEnvironmentVariable("NZBDRONE_PID"));
|
var pid = new EnviromentProvider().NzbDroneProcessIdFromEnviroment;
|
||||||
|
|
||||||
Logger.Debug("Attaching to parent process ({0}) for automatic termination.", pid);
|
Logger.Debug("Attaching to parent process ({0}) for automatic termination.", pid);
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,9 @@
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="UpdateProviderVerifyTest.cs" />
|
<Compile Include="ProgramFixture.cs" />
|
||||||
<Compile Include="UpdateProviderStartTest.cs" />
|
<Compile Include="UpdateProviderVerifyFixture.cs" />
|
||||||
|
<Compile Include="UpdateProviderStartFixture.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Common;
|
||||||
|
using NzbDrone.Common.Model;
|
||||||
|
using NzbDrone.Test.Common;
|
||||||
|
using NzbDrone.Update.Providers;
|
||||||
|
|
||||||
|
namespace NzbDrone.Update.Test
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class ProgramFixture : TestBase
|
||||||
|
{
|
||||||
|
private Program _program;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
_program = Mocker.Resolve<Program>();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_throw_if_null_passed_in()
|
||||||
|
{
|
||||||
|
Assert.Throws<ArgumentException>(() => _program.Start(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_throw_if_less_than_two_arguments_arent_passed_in()
|
||||||
|
{
|
||||||
|
Assert.Throws<ArgumentException>(() => _program.Start(new[] { "" }));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_throw_if_more_than_two_arguments_arent_passed_in()
|
||||||
|
{
|
||||||
|
Assert.Throws<ArgumentException>(() => _program.Start(new[] { "", "", "" }));
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("d", "")]
|
||||||
|
[TestCase("", "")]
|
||||||
|
[TestCase("0", "")]
|
||||||
|
[TestCase("-1", "")]
|
||||||
|
[TestCase(" ", "")]
|
||||||
|
[TestCase(".", "")]
|
||||||
|
public void should_throw_if_first_arg_isnt_an_int(string arg1, string arg2)
|
||||||
|
{
|
||||||
|
Assert.Throws<ArgumentOutOfRangeException>(() => _program.Start(new[] { arg1, arg2 }));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_call_update_with_corret_path()
|
||||||
|
{
|
||||||
|
const string ProcessPath = @"C:\NzbDrone\nzbdrone.exe";
|
||||||
|
|
||||||
|
Mocker.GetMock<ProcessProvider>().Setup(c => c.GetProcessById(12))
|
||||||
|
.Returns(new ProcessInfo() { StartPath = ProcessPath });
|
||||||
|
|
||||||
|
//Act
|
||||||
|
_program.Start(new[] { "12", "" });
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Mocker.GetMock<UpdateProvider>().Verify(c => c.Start(ProcessPath), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ using NzbDrone.Update.Providers;
|
||||||
namespace NzbDrone.Update.Test
|
namespace NzbDrone.Update.Test
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
class UpdateProviderStartTest : TestBase
|
class UpdateProviderStartFixture : TestBase
|
||||||
{
|
{
|
||||||
private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\";
|
private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\";
|
||||||
private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\";
|
private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\";
|
|
@ -12,7 +12,7 @@ using NzbDrone.Update.Providers;
|
||||||
namespace NzbDrone.Update.Test
|
namespace NzbDrone.Update.Test
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
class UpdateProviderVerifyTest : TestBase
|
class UpdateProviderVerifyFixture : TestBase
|
||||||
{
|
{
|
||||||
|
|
||||||
AutoMoqer mocker = new AutoMoqer();
|
AutoMoqer mocker = new AutoMoqer();
|
|
@ -1,15 +1,78 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using NLog;
|
||||||
|
using NzbDrone.Common;
|
||||||
|
using NzbDrone.Update.Providers;
|
||||||
|
|
||||||
namespace NzbDrone.Update
|
namespace NzbDrone.Update
|
||||||
{
|
{
|
||||||
class Program
|
public class Program
|
||||||
{
|
|
||||||
static void Main(string[] args)
|
|
||||||
{
|
{
|
||||||
|
private readonly UpdateProvider _updateProvider;
|
||||||
|
private readonly ProcessProvider _processProvider;
|
||||||
|
|
||||||
|
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public Program(UpdateProvider updateProvider, ProcessProvider processProvider)
|
||||||
|
{
|
||||||
|
_updateProvider = updateProvider;
|
||||||
|
_processProvider = processProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine("Starting NzbDrone Update Client");
|
||||||
|
|
||||||
|
LogConfiguration.RegisterConsoleLogger(LogLevel.Trace);
|
||||||
|
LogConfiguration.RegisterUdpLogger();
|
||||||
|
LogConfiguration.RegisterExceptioneer();
|
||||||
|
LogConfiguration.Reload();
|
||||||
|
|
||||||
|
logger.Info("Initializing update application");
|
||||||
|
|
||||||
|
var enviromentProvider = new EnviromentProvider();
|
||||||
|
var processProvider = new ProcessProvider();
|
||||||
|
var serviceProvider = new ServiceProvider();
|
||||||
|
var diskProvider = new DiskProvider();
|
||||||
|
|
||||||
|
var updateProvider = new UpdateProvider(diskProvider, serviceProvider, processProvider, enviromentProvider);
|
||||||
|
|
||||||
|
new Program(updateProvider, processProvider).Start(args);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.Fatal("An error has occurred while applying update.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start(string[] args)
|
||||||
|
{
|
||||||
|
VerfityArguments(args);
|
||||||
|
int processId = ParseProcessId(args);
|
||||||
|
|
||||||
|
string appPath = _processProvider.GetProcessById(processId).StartPath;
|
||||||
|
|
||||||
|
logger.Info("Starting update process");
|
||||||
|
_updateProvider.Start(appPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int ParseProcessId(string[] args)
|
||||||
|
{
|
||||||
|
int id = 0;
|
||||||
|
if (!Int32.TryParse(args[0], out id) || id <= 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException("Invalid process id: " + args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void VerfityArguments(string[] args)
|
||||||
|
{
|
||||||
|
if (args == null || args.Length != 2)
|
||||||
|
throw new ArgumentException("Wrong number of parameters were passed in.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace NzbDrone.Update.Providers
|
||||||
private readonly EnviromentProvider _enviromentProvider;
|
private readonly EnviromentProvider _enviromentProvider;
|
||||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
public UpdateProvider(DiskProvider diskProvider,ServiceProvider serviceProvider,
|
public UpdateProvider(DiskProvider diskProvider, ServiceProvider serviceProvider,
|
||||||
ProcessProvider processProvider, EnviromentProvider enviromentProvider)
|
ProcessProvider processProvider, EnviromentProvider enviromentProvider)
|
||||||
{
|
{
|
||||||
_diskProvider = diskProvider;
|
_diskProvider = diskProvider;
|
||||||
|
@ -23,6 +23,10 @@ namespace NzbDrone.Update.Providers
|
||||||
_enviromentProvider = enviromentProvider;
|
_enviromentProvider = enviromentProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UpdateProvider()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private void Verify(string targetFolder)
|
private void Verify(string targetFolder)
|
||||||
{
|
{
|
||||||
logger.Info("Verifying requirements before update...");
|
logger.Info("Verifying requirements before update...");
|
||||||
|
@ -39,7 +43,7 @@ namespace NzbDrone.Update.Providers
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Start(string targetFolder)
|
public virtual void Start(string targetFolder)
|
||||||
{
|
{
|
||||||
Verify(targetFolder);
|
Verify(targetFolder);
|
||||||
bool isService = false;
|
bool isService = false;
|
||||||
|
|
Loading…
Reference in New Issue