/ *
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 ( ) ) ;
}
}
}
* /