1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-16 11:37:58 +02:00
Sonarr/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs

147 lines
4.7 KiB
C#
Raw Normal View History

2013-04-16 03:08:06 +03:00
using System;
using System.Diagnostics;
using System.IO;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Common;
2013-04-16 03:08:06 +03:00
using NzbDrone.Common.Model;
using NzbDrone.Core.Test.Framework;
2013-04-14 02:57:10 +03:00
using NzbDrone.Core.Update;
using NzbDrone.Test.Common;
2013-04-30 03:04:14 +03:00
using NzbDrone.Test.Common.Categories;
2013-04-16 03:08:06 +03:00
namespace NzbDrone.Core.Test.UpdateTests
{
[TestFixture]
2013-04-16 07:52:41 +03:00
public class UpdateServiceFixture : CoreTest<UpdateService>
{
2013-04-16 03:08:06 +03:00
private string _sandboxFolder;
private readonly Guid _clientGuid = Guid.NewGuid();
2013-04-16 03:08:06 +03:00
private readonly UpdatePackage _updatePackage = new UpdatePackage
{
FileName = "NzbDrone.kay.one.0.6.0.2031.zip",
Url = "http://update.nzbdrone.com/_test/NzbDrone.zip",
Version = new Version("0.6.0.2031")
};
2011-11-13 07:07:06 +03:00
[SetUp]
public void Setup()
{
2013-05-11 02:53:50 +03:00
Mocker.GetMock<IEnvironmentProvider>().SetupGet(c => c.SystemTemp).Returns(TempFolder);
Mocker.GetMock<IConfigFileProvider>().SetupGet(c => c.Guid).Returns(_clientGuid);
2013-04-16 03:08:06 +03:00
Mocker.GetMock<IUpdatePackageProvider>().Setup(c => c.GetLatestUpdate()).Returns(_updatePackage);
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-05-11 02:53:50 +03:00
_sandboxFolder = Mocker.GetMock<IEnvironmentProvider>().Object.GetUpdateSandboxFolder();
}
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-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
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-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
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
}
[Test]
public void Should_download_update_package()
{
2013-04-16 03:08:06 +03:00
var updateArchive = Path.Combine(_sandboxFolder, _updatePackage.FileName);
2013-04-11 08:08:55 +03:00
2013-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
2013-04-16 03:08:06 +03:00
Mocker.GetMock<IHttpProvider>().Verify(c => c.DownloadFile(_updatePackage.Url, updateArchive));
}
[Test]
2011-11-14 04:27:11 +03:00
public void Should_extract_update_package()
{
2013-04-16 03:08:06 +03:00
var updateArchive = Path.Combine(_sandboxFolder, _updatePackage.FileName);
2011-10-21 09:58:23 +03:00
2013-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
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 04:27:11 +03:00
[Test]
public void Should_copy_update_client_to_root_of_sandbox()
{
2013-05-11 02:53:50 +03:00
var updateClientFolder = Mocker.GetMock<IEnvironmentProvider>().Object.GetUpdateClientFolder();
2011-11-14 04:27:11 +03:00
2013-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
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
}
[Test]
public void should_start_update_client()
{
2013-05-11 02:53:50 +03:00
var updateClientPath = Mocker.GetMock<IEnvironmentProvider>().Object.GetUpdateClientExePath();
2013-04-11 08:08:55 +03:00
2013-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
2013-04-11 08:08:55 +03:00
2013-05-11 02:53:50 +03:00
Mocker.GetMock<IProcessProvider>().Verify(
c => c.Start(It.Is<ProcessStartInfo>(p =>
p.FileName == updateClientPath &&
2011-11-14 06:09:34 +03:00
p.Arguments == "12 " + _clientGuid.ToString())
));
}
[Test]
public void when_no_updates_are_available_should_return_without_error_or_warnings()
{
2013-04-16 03:08:06 +03:00
Mocker.GetMock<IUpdatePackageProvider>().Setup(c => c.GetLatestUpdate()).Returns<UpdatePackage>(null);
2013-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
ExceptionVerification.AssertNoUnexcpectedLogs();
}
[Test]
2013-04-16 03:08:06 +03:00
[IntegrationTest]
public void Should_download_and_extract_to_temp_folder()
{
2013-04-16 03:08:06 +03:00
UseRealHttp();
2013-05-11 02:53:50 +03:00
var updateSubFolder = new DirectoryInfo(Mocker.GetMock<IEnvironmentProvider>().Object.GetUpdateSandboxFolder());
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-04-16 03:08:06 +03:00
Subject.InstallAvailableUpdate();
updateSubFolder.Refresh();
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
}
}
}