/* using System.Collections.Generic; using System.IO; using System.Linq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.Model; using NzbDrone.Test.Common; using NzbDrone.Update.UpdateEngine; namespace NzbDrone.Update.Test { [TestFixture] public class UpdateProviderStartFixture : TestBase { private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\"; private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; private const string TARGET_FOLDER = @"C:\NzbDrone\"; Mock<IIAppDirectoryInfo> _IAppDirectoryInfo; [SetUp] public void Setup() { _IAppDirectoryInfo = Mocker.GetMock<IIAppDirectoryInfo>(); _IAppDirectoryInfo.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); Mocker.GetMock<IDiskProvider>() .Setup(c => c.FolderExists(UPDATE_FOLDER)) .Returns(true); Mocker.GetMock<IDiskProvider>() .Setup(c => c.FolderExists(TARGET_FOLDER)) .Returns(true); } private void WithInstalledService() { Mocker.GetMock<IServiceProvider>() .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) .Returns(true); } private void WithServiceRunning(bool state) { Mocker.GetMock<IServiceProvider>() .Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(state); } [Test] public void should_stop_nzbdrone_service_if_installed_and_running() { WithInstalledService(); WithServiceRunning(true); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); } [Test] public void should_not_stop_nzbdrone_service_if_installed_but_not_running() { WithInstalledService(); WithServiceRunning(false); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Never()); } [Test] public void should_not_stop_nzbdrone_service_if_service_isnt_installed() { Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IServiceProvider>().Verify(c => c.Stop(It.IsAny<string>()), Times.Never()); } [Test] public void should_kill_nzbdrone_process_if_running() { var proccesses = Builder<ProcessInfo>.CreateListOfSize(2).Build().ToList(); Mocker.GetMock<IProcessProvider>() .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName)) .Returns(proccesses); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IProcessProvider>().Verify(c => c.KillAll(ProcessProvider.NzbDroneProcessName), Times.Once()); } [Test] public void should_not_kill_nzbdrone_process_not_running() { Mocker.GetMock<IProcessProvider>() .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName)) .Returns(new List<ProcessInfo>()); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IProcessProvider>().Verify(c => c.Kill(It.IsAny<int>()), Times.Never()); } [Test] public void should_create_backup_of_current_installation() { Mocker.GetMock<IDiskProvider>() .Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER)); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); } [Test] public void should_copy_update_package_to_target() { Mocker.GetMock<IDiskProvider>() .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); Mocker.GetMock<IDiskProvider>() .Setup(c => c.DeleteFolder(UPDATE_FOLDER, true)); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); } [Test] public void should_restore_if_update_fails() { Mocker.GetMock<IDiskProvider>() .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); Mocker.GetMock<IDiskProvider>() .Verify(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER), Times.Once()); ExceptionVerification.ExpectedFatals(1); } [Test] public void should_restart_service_if_service_was_running() { WithInstalledService(); WithServiceRunning(true); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); VerifyServiceRestart(); } [Test] public void should_restart_process_if_service_was_not_running() { WithInstalledService(); WithServiceRunning(false); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); VerifyProcessRestart(); } [Test] public void should_restart_service_if_service_was_running_and_update_fails() { WithInstalledService(); WithServiceRunning(true); Mocker.GetMock<IDiskProvider>() .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); VerifyServiceRestart(); ExceptionVerification.ExpectedFatals(1); } [Test] public void should_restart_process_if_service_was_not_running_and_update_fails() { WithInstalledService(); WithServiceRunning(false); Mocker.GetMock<IDiskProvider>() .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); Mocker.Resolve<InstallUpdateService>().Start(TARGET_FOLDER); VerifyProcessRestart(); ExceptionVerification.ExpectedFatals(1); } private void VerifyServiceRestart() { Mocker.GetMock<IServiceProvider>() .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); Mocker.GetMock<IProcessProvider>() .Verify(c => c.Start(It.IsAny<string>()), Times.Never()); } private void VerifyProcessRestart() { Mocker.GetMock<IServiceProvider>() .Verify(c => c.Start(It.IsAny<string>()), Times.Never()); Mocker.GetMock<IProcessProvider>() .Verify(c => c.Start(TARGET_FOLDER + "NzbDrone.exe"), Times.Once()); } } } */