2013-05-21 04:03:05 +00:00
|
|
|
|
/*
|
|
|
|
|
using System.Collections.Generic;
|
2011-11-13 19:15:40 +00:00
|
|
|
|
using System.IO;
|
2013-03-03 23:18:43 +00:00
|
|
|
|
using System.Linq;
|
2011-10-23 18:31:17 +00:00
|
|
|
|
using FizzWare.NBuilder;
|
2011-10-23 05:26:43 +00:00
|
|
|
|
using Moq;
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using NzbDrone.Common;
|
2011-10-23 18:31:17 +00:00
|
|
|
|
using NzbDrone.Common.Model;
|
2011-11-13 18:16:31 +00:00
|
|
|
|
using NzbDrone.Test.Common;
|
2013-05-21 04:03:05 +00:00
|
|
|
|
using NzbDrone.Update.UpdateEngine;
|
2011-10-23 05:26:43 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Update.Test
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
2013-04-16 04:52:41 +00:00
|
|
|
|
public class UpdateProviderStartFixture : TestBase
|
2011-10-23 05:26:43 +00:00
|
|
|
|
{
|
2011-11-13 05:19:19 +00:00
|
|
|
|
private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\";
|
|
|
|
|
private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\";
|
2011-11-13 04:07:06 +00:00
|
|
|
|
private const string TARGET_FOLDER = @"C:\NzbDrone\";
|
|
|
|
|
|
2013-06-28 00:04:52 +00:00
|
|
|
|
Mock<IIAppDirectoryInfo> _IAppDirectoryInfo;
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
|
|
|
|
|
2011-10-23 05:26:43 +00:00
|
|
|
|
[SetUp]
|
|
|
|
|
public void Setup()
|
|
|
|
|
{
|
2011-11-13 19:15:40 +00:00
|
|
|
|
|
2013-06-28 00:04:52 +00:00
|
|
|
|
_IAppDirectoryInfo = Mocker.GetMock<IIAppDirectoryInfo>();
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-06-28 00:04:52 +00:00
|
|
|
|
_IAppDirectoryInfo.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\");
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
.Setup(c => c.FolderExists(UPDATE_FOLDER))
|
|
|
|
|
.Returns(true);
|
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
.Setup(c => c.FolderExists(TARGET_FOLDER))
|
|
|
|
|
.Returns(true);
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
private void WithInstalledService()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
.Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME))
|
|
|
|
|
.Returns(true);
|
2011-10-23 05:26:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
private void WithServiceRunning(bool state)
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>()
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(state);
|
|
|
|
|
}
|
|
|
|
|
|
2011-10-23 05:26:43 +00:00
|
|
|
|
[Test]
|
2011-11-15 02:38:15 +00:00
|
|
|
|
public void should_stop_nzbdrone_service_if_installed_and_running()
|
2011-10-23 05:26:43 +00:00
|
|
|
|
{
|
2011-11-13 04:07:06 +00:00
|
|
|
|
WithInstalledService();
|
2011-11-15 02:38:15 +00:00
|
|
|
|
WithServiceRunning(true);
|
2011-10-23 05:26:43 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-10-23 05:26:43 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once());
|
2011-11-13 19:15:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-11-15 02:38:15 +00:00
|
|
|
|
[Test]
|
|
|
|
|
public void should_not_stop_nzbdrone_service_if_installed_but_not_running()
|
|
|
|
|
{
|
|
|
|
|
WithInstalledService();
|
|
|
|
|
WithServiceRunning(false);
|
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-15 02:38:15 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Never());
|
2011-11-15 02:38:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
[Test]
|
|
|
|
|
public void should_not_stop_nzbdrone_service_if_service_isnt_installed()
|
|
|
|
|
{
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 19:15:40 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(It.IsAny<string>()), Times.Never());
|
2011-10-23 05:26:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
2011-10-23 18:31:17 +00:00
|
|
|
|
public void should_kill_nzbdrone_process_if_running()
|
2011-10-23 05:26:43 +00:00
|
|
|
|
{
|
2013-03-03 23:18:43 +00:00
|
|
|
|
var proccesses = Builder<ProcessInfo>.CreateListOfSize(2).Build().ToList();
|
2011-10-23 18:31:17 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>()
|
2013-04-17 23:32:53 +00:00
|
|
|
|
.Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName))
|
2011-10-23 18:31:17 +00:00
|
|
|
|
.Returns(proccesses);
|
2011-10-23 05:26:43 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-10-23 05:26:43 +00:00
|
|
|
|
|
2013-05-07 05:38:40 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>().Verify(c => c.KillAll(ProcessProvider.NzbDroneProcessName), Times.Once());
|
2011-11-13 19:15:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_not_kill_nzbdrone_process_not_running()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>()
|
2013-04-17 23:32:53 +00:00
|
|
|
|
.Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName))
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Returns(new List<ProcessInfo>());
|
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 19:15:40 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>().Verify(c => c.Kill(It.IsAny<int>()), Times.Never());
|
2011-10-23 05:26:43 +00:00
|
|
|
|
}
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_create_backup_of_current_installation()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
.Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER));
|
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_copy_update_package_to_target()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-22 00:45:45 +00:00
|
|
|
|
.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER));
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-22 02:53:22 +00:00
|
|
|
|
.Setup(c => c.DeleteFolder(UPDATE_FOLDER, true));
|
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_restore_if_update_fails()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-22 00:45:45 +00:00
|
|
|
|
.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER))
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Throws(new IOException());
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Verify(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER), Times.Once());
|
2011-12-20 00:58:26 +00:00
|
|
|
|
ExceptionVerification.ExpectedFatals(1);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_restart_service_if_service_was_running()
|
|
|
|
|
{
|
|
|
|
|
WithInstalledService();
|
2011-11-13 19:15:40 +00:00
|
|
|
|
WithServiceRunning(true);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
VerifyServiceRestart();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_restart_process_if_service_was_not_running()
|
|
|
|
|
{
|
|
|
|
|
WithInstalledService();
|
|
|
|
|
WithServiceRunning(false);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
VerifyProcessRestart();
|
2011-11-13 04:07:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
2011-11-13 19:15:40 +00:00
|
|
|
|
public void should_restart_service_if_service_was_running_and_update_fails()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
{
|
|
|
|
|
WithInstalledService();
|
2011-11-13 19:15:40 +00:00
|
|
|
|
WithServiceRunning(true);
|
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-22 00:45:45 +00:00
|
|
|
|
.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER))
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Throws(new IOException());
|
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 19:15:40 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
VerifyServiceRestart();
|
2011-12-20 00:58:26 +00:00
|
|
|
|
ExceptionVerification.ExpectedFatals(1);
|
2011-11-13 19:15:40 +00:00
|
|
|
|
}
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
[Test]
|
|
|
|
|
public void should_restart_process_if_service_was_not_running_and_update_fails()
|
|
|
|
|
{
|
|
|
|
|
WithInstalledService();
|
|
|
|
|
WithServiceRunning(false);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
2011-11-22 00:45:45 +00:00
|
|
|
|
.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER))
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Throws(new IOException());
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2013-05-21 04:03:05 +00:00
|
|
|
|
Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER);
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-03-28 22:07:09 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
VerifyProcessRestart();
|
2011-12-20 00:58:26 +00:00
|
|
|
|
ExceptionVerification.ExpectedFatals(1);
|
2011-11-13 19:15:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void VerifyServiceRestart()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>()
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once());
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>()
|
2011-11-13 04:07:06 +00:00
|
|
|
|
.Verify(c => c.Start(It.IsAny<string>()), Times.Never());
|
2011-11-13 19:15:40 +00:00
|
|
|
|
}
|
2011-11-13 04:07:06 +00:00
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
|
private void VerifyProcessRestart()
|
|
|
|
|
{
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IServiceProvider>()
|
2011-11-13 19:15:40 +00:00
|
|
|
|
.Verify(c => c.Start(It.IsAny<string>()), Times.Never());
|
|
|
|
|
|
2013-05-10 23:53:50 +00:00
|
|
|
|
Mocker.GetMock<IProcessProvider>()
|
2013-01-06 08:11:14 +00:00
|
|
|
|
.Verify(c => c.Start(TARGET_FOLDER + "NzbDrone.exe"), Times.Once());
|
2011-11-13 04:07:06 +00:00
|
|
|
|
}
|
2011-11-21 02:13:10 +00:00
|
|
|
|
|
|
|
|
|
|
2011-10-23 05:26:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2013-05-21 04:03:05 +00:00
|
|
|
|
*/
|