2013-04-16 03:08:06 +03:00
|
|
|
using System;
|
2011-11-14 03:22:18 +03:00
|
|
|
using System.Diagnostics;
|
2011-10-21 08:04:26 +03:00
|
|
|
using System.IO;
|
|
|
|
using FluentAssertions;
|
2011-11-14 03:22:18 +03:00
|
|
|
using Moq;
|
2011-10-21 08:04:26 +03:00
|
|
|
using NUnit.Framework;
|
2011-10-29 07:54:33 +03:00
|
|
|
using NzbDrone.Common;
|
2013-06-28 03:04:52 +03:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2013-04-16 03:08:06 +03:00
|
|
|
using NzbDrone.Common.Model;
|
2011-10-21 08:04:26 +03:00
|
|
|
using NzbDrone.Core.Test.Framework;
|
2013-04-14 02:57:10 +03:00
|
|
|
using NzbDrone.Core.Update;
|
2013-05-16 03:16:06 +03:00
|
|
|
using NzbDrone.Core.Update.Commands;
|
2012-01-16 21:10:18 +03:00
|
|
|
using NzbDrone.Test.Common;
|
2013-04-30 03:04:14 +03:00
|
|
|
using NzbDrone.Test.Common.Categories;
|
2011-10-21 08:04:26 +03:00
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
namespace NzbDrone.Core.Test.UpdateTests
|
2011-10-21 08:04:26 +03:00
|
|
|
{
|
|
|
|
[TestFixture]
|
2013-06-28 03:04:52 +03:00
|
|
|
public class UpdateServiceFixture : CoreTest<InstallUpdateService>
|
2011-10-21 08:04:26 +03:00
|
|
|
{
|
2013-04-16 03:08:06 +03:00
|
|
|
private string _sandboxFolder;
|
2011-10-21 08:04:26 +03:00
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
private readonly UpdatePackage _updatePackage = new UpdatePackage
|
2011-10-21 08:04:26 +03:00
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
FileName = "NzbDrone.vnext.0.8.1.226.zip",
|
|
|
|
Url = "http://update.nzbdrone.com/vnext/NzbDrone.vnext.0.8.1.226.zip",
|
|
|
|
Version = new Version("0.8.1.226")
|
2011-11-14 03:22:18 +03:00
|
|
|
};
|
2011-11-13 07:07:06 +03:00
|
|
|
|
2011-11-14 03:22:18 +03:00
|
|
|
[SetUp]
|
|
|
|
public void Setup()
|
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
Mocker.GetMock<IAppDirectoryInfo>().SetupGet(c => c.SystemTemp).Returns(TempFolder);
|
|
|
|
Mocker.GetMock<ICheckUpdateService>().Setup(c => c.AvailableUpdate()).Returns(_updatePackage);
|
2013-04-16 03:08:06 +03:00
|
|
|
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IProcessProvider>().Setup(c => c.GetCurrentProcess()).Returns(new ProcessInfo { Id = 12 });
|
2013-04-16 03:08:06 +03:00
|
|
|
|
2013-06-28 03:04:52 +03:00
|
|
|
_sandboxFolder = Mocker.GetMock<IAppDirectoryInfo>().Object.GetUpdateSandboxFolder();
|
2011-10-21 08:04:26 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
|
2011-11-14 05:54:09 +03:00
|
|
|
[Test]
|
|
|
|
public void should_delete_sandbox_before_update_if_folder_exists()
|
|
|
|
{
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IDiskProvider>().Setup(c => c.FolderExists(_sandboxFolder)).Returns(true);
|
2011-11-14 05:54:09 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IDiskProvider>().Verify(c => c.DeleteFolder(_sandboxFolder, true));
|
2011-11-14 05:54:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_not_delete_sandbox_before_update_if_folder_doesnt_exists()
|
|
|
|
{
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IDiskProvider>().Setup(c => c.FolderExists(_sandboxFolder)).Returns(false);
|
2011-11-14 05:54:09 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IDiskProvider>().Verify(c => c.DeleteFolder(_sandboxFolder, true), Times.Never());
|
2011-11-14 05:54:09 +03:00
|
|
|
}
|
2011-11-14 03:22:18 +03:00
|
|
|
|
2012-02-27 00:22:35 +03:00
|
|
|
|
2011-10-21 08:04:26 +03:00
|
|
|
[Test]
|
2011-11-14 03:22:18 +03:00
|
|
|
public void Should_download_update_package()
|
2011-10-21 08:04:26 +03:00
|
|
|
{
|
2013-04-16 03:08:06 +03:00
|
|
|
var updateArchive = Path.Combine(_sandboxFolder, _updatePackage.FileName);
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2011-11-14 03:22:18 +03:00
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
Mocker.GetMock<IHttpProvider>().Verify(c => c.DownloadFile(_updatePackage.Url, updateArchive));
|
2011-11-14 03:22:18 +03:00
|
|
|
}
|
2011-10-21 08:04:26 +03:00
|
|
|
|
2011-11-14 03:22:18 +03:00
|
|
|
[Test]
|
2011-11-14 04:27:11 +03:00
|
|
|
public void Should_extract_update_package()
|
2011-11-14 03:22:18 +03:00
|
|
|
{
|
2013-04-16 03:08:06 +03:00
|
|
|
var updateArchive = Path.Combine(_sandboxFolder, _updatePackage.FileName);
|
2011-10-21 09:58:23 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
Mocker.GetMock<ArchiveProvider>().Verify(c => c.ExtractArchive(updateArchive, _sandboxFolder));
|
2011-11-14 03:22:18 +03:00
|
|
|
}
|
|
|
|
|
2011-11-14 04:27:11 +03:00
|
|
|
[Test]
|
|
|
|
public void Should_copy_update_client_to_root_of_sandbox()
|
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
var updateClientFolder = Mocker.GetMock<IAppDirectoryInfo>().Object.GetUpdateClientFolder();
|
2011-11-14 04:27:11 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2011-11-14 04:27:11 +03:00
|
|
|
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IDiskProvider>().Verify(c => c.MoveDirectory(updateClientFolder, _sandboxFolder));
|
2011-11-14 04:27:11 +03:00
|
|
|
}
|
|
|
|
|
2011-11-14 03:22:18 +03:00
|
|
|
[Test]
|
|
|
|
public void should_start_update_client()
|
|
|
|
{
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2013-05-11 02:53:50 +03:00
|
|
|
Mocker.GetMock<IProcessProvider>().Verify(
|
2011-11-14 03:57:03 +03:00
|
|
|
c => c.Start(It.Is<ProcessStartInfo>(p =>
|
2013-05-23 08:32:54 +03:00
|
|
|
!string.IsNullOrWhiteSpace(p.FileName) &&
|
|
|
|
p.Arguments == "12")));
|
2011-10-21 08:04:26 +03:00
|
|
|
}
|
|
|
|
|
2012-01-16 21:10:18 +03:00
|
|
|
[Test]
|
|
|
|
public void when_no_updates_are_available_should_return_without_error_or_warnings()
|
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
Mocker.GetMock<ICheckUpdateService>().Setup(c => c.AvailableUpdate()).Returns<UpdatePackage>(null);
|
2012-02-27 00:22:35 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2012-01-16 21:10:18 +03:00
|
|
|
|
|
|
|
ExceptionVerification.AssertNoUnexcpectedLogs();
|
|
|
|
}
|
|
|
|
|
2011-10-21 08:04:26 +03:00
|
|
|
[Test]
|
2013-04-16 03:08:06 +03:00
|
|
|
[IntegrationTest]
|
2011-10-21 08:04:26 +03:00
|
|
|
public void Should_download_and_extract_to_temp_folder()
|
|
|
|
{
|
2013-04-16 03:08:06 +03:00
|
|
|
UseRealHttp();
|
2011-11-13 08:19:19 +03:00
|
|
|
|
2013-06-28 03:04:52 +03:00
|
|
|
var updateSubFolder = new DirectoryInfo(Mocker.GetMock<IAppDirectoryInfo>().Object.GetUpdateSandboxFolder());
|
2011-10-21 08:04:26 +03:00
|
|
|
|
|
|
|
updateSubFolder.Exists.Should().BeFalse();
|
|
|
|
|
2013-05-11 09:16:10 +03:00
|
|
|
Mocker.Resolve<DiskProvider>();
|
2011-11-13 07:07:06 +03:00
|
|
|
Mocker.Resolve<ArchiveProvider>();
|
2013-04-11 08:08:55 +03:00
|
|
|
|
2013-05-16 03:16:21 +03:00
|
|
|
Subject.Execute(new ApplicationUpdateCommand());
|
2013-05-16 03:16:06 +03:00
|
|
|
|
2013-04-16 03:08:06 +03:00
|
|
|
|
|
|
|
updateSubFolder.Refresh();
|
2011-10-21 08:04:26 +03:00
|
|
|
|
|
|
|
updateSubFolder.Exists.Should().BeTrue();
|
|
|
|
updateSubFolder.GetDirectories("nzbdrone").Should().HaveCount(1);
|
|
|
|
updateSubFolder.GetDirectories().Should().HaveCount(1);
|
2013-04-16 03:08:06 +03:00
|
|
|
updateSubFolder.GetFiles().Should().NotBeEmpty();
|
2011-11-21 05:59:42 +03:00
|
|
|
}
|
2013-05-20 05:40:22 +03:00
|
|
|
|
|
|
|
[TearDown]
|
|
|
|
public void TearDown()
|
|
|
|
{
|
|
|
|
ExceptionVerification.IgnoreErrors();
|
|
|
|
}
|
2011-10-21 08:04:26 +03:00
|
|
|
}
|
|
|
|
}
|