Sonarr/NzbDrone.Core.Test/JobTests/AppUpdateJobFixture.cs

169 lines
4.9 KiB
C#
Raw Normal View History

2011-11-21 02:59:42 +00:00
using System.Linq;
using System;
using System.Diagnostics;
using System.IO;
using FizzWare.NBuilder;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Common;
2011-12-02 01:33:17 +00:00
using NzbDrone.Core.Jobs;
using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Test.Framework;
2013-04-13 23:57:10 +00:00
using NzbDrone.Core.Update;
using NzbDrone.Test.Common;
2011-11-21 02:59:42 +00:00
namespace NzbDrone.Core.Test.JobTests
{
[TestFixture]
internal class AppUpdateJobFixture : CoreTest
{
private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\";
private readonly Guid _clientGuid = Guid.NewGuid();
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 04:07:06 +00:00
[SetUp]
public void Setup()
{
Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\");
Mocker.GetMock<ConfigFileProvider>().SetupGet(c => c.Guid).Returns(_clientGuid);
Mocker.GetMock<UpdateService>().Setup(c => c.GetAvailableUpdate()).Returns(updatePackage);
}
2011-11-14 02:54:09 +00:00
[Test]
public void should_delete_sandbox_before_update_if_folder_exists()
{
Mocker.GetMock<DiskProvider>().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(true);
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2011-11-14 02:54:09 +00:00
2013-04-11 05:08:55 +00:00
2011-11-14 02:54:09 +00:00
Mocker.GetMock<DiskProvider>().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true));
}
[Test]
public void should_not_delete_sandbox_before_update_if_folder_doesnt_exists()
{
Mocker.GetMock<DiskProvider>().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(false);
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2011-11-14 02:54:09 +00:00
2013-04-11 05:08:55 +00:00
2011-11-14 02:54:09 +00:00
Mocker.GetMock<DiskProvider>().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true), Times.Never());
}
[Test]
public void Should_download_update_package()
{
var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName);
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2013-04-11 05:08:55 +00:00
2013-04-10 23:41:45 +00:00
Mocker.GetMock<IHttpProvider>().Verify(
c => c.DownloadFile(updatePackage.Url, updateArchive));
}
[Test]
2011-11-14 01:27:11 +00:00
public void Should_extract_update_package()
{
var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName);
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2011-10-21 06:58:23 +00:00
2013-04-11 05:08:55 +00:00
Mocker.GetMock<ArchiveProvider>().Verify(
c => c.ExtractArchive(updateArchive, SANDBOX_FOLDER));
}
2011-11-14 01:27:11 +00:00
[Test]
public void Should_copy_update_client_to_root_of_sandbox()
{
var updateClientFolder = Mocker.GetMock<EnvironmentProvider>().Object.GetUpdateClientFolder();
2011-11-14 01:27:11 +00:00
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2011-11-14 01:27:11 +00:00
2013-04-11 05:08:55 +00:00
2011-11-14 01:27:11 +00:00
Mocker.GetMock<DiskProvider>().Verify(
c => c.MoveDirectory(updateClientFolder, SANDBOX_FOLDER));
2011-11-14 01:27:11 +00:00
}
[Test]
public void should_start_update_client()
{
2013-04-11 05:08:55 +00:00
var updateClientPath = Mocker.GetMock<EnvironmentProvider>().Object.GetUpdateClientExePath();
Mocker.GetMock<EnvironmentProvider>()
.SetupGet(c => c.NzbDroneProcessIdFromEnvironment).Returns(12);
2013-04-11 05:08:55 +00:00
2011-11-21 02:59:42 +00:00
StartUpdate();
2013-04-11 05:08:55 +00:00
Mocker.GetMock<ProcessProvider>().Verify(
c => c.Start(It.Is<ProcessStartInfo>(p =>
p.FileName == updateClientPath &&
2011-11-14 03:09:34 +00:00
p.Arguments == "12 " + _clientGuid.ToString())
));
}
[Test]
public void when_no_updates_are_available_should_return_without_error_or_warnings()
{
Mocker.GetMock<UpdateService>().Setup(c => c.GetAvailableUpdate()).Returns((UpdatePackage)null);
StartUpdate();
ExceptionVerification.AssertNoUnexcpectedLogs();
}
[Test]
2011-12-02 01:33:17 +00:00
[Category(INTEGRATION_TEST)]
public void Should_download_and_extract_to_temp_folder()
{
Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.SystemTemp).Returns(TempFolder);
var updateSubFolder = new DirectoryInfo(Mocker.GetMock<EnvironmentProvider>().Object.GetUpdateSandboxFolder());
2013-04-11 05:08:55 +00:00
updateSubFolder.Exists.Should().BeFalse();
2013-04-11 05:08:55 +00:00
Mocker.SetConstant<IHttpProvider>(new HttpProvider(new EnvironmentProvider()));
2011-11-13 04:07:06 +00:00
Mocker.Resolve<DiskProvider>();
Mocker.Resolve<ArchiveProvider>();
2011-11-21 02:59:42 +00:00
StartUpdate();
updateSubFolder.Refresh();
2013-04-11 05:08:55 +00:00
updateSubFolder.Exists.Should().BeTrue();
updateSubFolder.GetDirectories("nzbdrone").Should().HaveCount(1);
updateSubFolder.GetDirectories().Should().HaveCount(1);
updateSubFolder.GetFiles().Should().HaveCount(1);
}
2011-11-21 02:59:42 +00:00
private void StartUpdate()
{
2012-09-10 19:04:17 +00:00
Mocker.Resolve<AppUpdateJob>().Start(MockNotification, null);
2011-11-21 02:59:42 +00:00
}
}
}