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