-
Notifications
You must be signed in to change notification settings - Fork 10
/
XentoolsUpdateSpec.cs
104 lines (94 loc) · 4.95 KB
/
XentoolsUpdateSpec.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System.Collections.Generic;
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;
using Rackspace.Cloud.Server.Agent.Actions;
using Rackspace.Cloud.Server.Agent.Commands;
using Rackspace.Cloud.Server.Agent.Configuration;
using Rackspace.Cloud.Server.Common.Logging;
using Rhino.Mocks;
namespace Rackspace.Cloud.Server.Agent.Specs
{
[TestFixture]
public class XentoolsUpdateSpec
{
private IAgentUpdateMessageHandler _agentUpdateMessageHandler;
private IDownloader _downloader;
private IUnzipper _unzipper;
private ISleeper _sleeper;
private IChecksumValidator _checksumValidator;
private IInstaller _installer;
private IFinalizer _finalizer;
private XentoolsUpdate _xentoolsUpdate;
private string _agentUpdateInfo;
private IConnectionChecker _connectionChecker;
private IServiceRestarter _serviceRestarter;
private ILogger _logger;
private MockRepository _mockRepo;
[SetUp]
public void Setup()
{
_mockRepo = new MockRepository();
_agentUpdateInfo = "http:https://something.com/file.zip,544564abc453de787ad";
_downloader = MockRepository.GenerateMock<IDownloader>();
_checksumValidator = MockRepository.GenerateMock<IChecksumValidator>();
_unzipper = MockRepository.GenerateMock<IUnzipper>();
_installer = MockRepository.GenerateMock<IInstaller>();
_finalizer = MockRepository.GenerateMock<IFinalizer>();
_connectionChecker = MockRepository.GenerateMock<IConnectionChecker>();
_sleeper = MockRepository.GenerateMock<ISleeper>();
_logger = MockRepository.GenerateMock<ILogger>();
_serviceRestarter = _mockRepo.StrictMock<IServiceRestarter>();
_agentUpdateMessageHandler = new AgentUpdateMessageHandler();
_logger.Stub(x => x.Log(Arg<string>.Is.Anything));
_xentoolsUpdate = new XentoolsUpdate(_sleeper, _downloader, _checksumValidator, _unzipper, _installer, _finalizer, _serviceRestarter, _connectionChecker, _agentUpdateMessageHandler, _logger);
}
[Test]
public void should_update_xentools()
{
_sleeper.Expect(x => x.Sleep(Arg<int>.Is.Anything));
_connectionChecker.Expect(x => x.Check());
_downloader.Expect(x => x.Download("http:https://something.com/file.zip", Constants.XenToolsReleasePackage));
_checksumValidator.Expect(x => x.Validate("544564abc453de787ad", Constants.XenToolsReleasePackage));
_unzipper.Expect(x => x.Unzip(Arg<string>.Is.Anything, Arg<string>.Is.Anything, Arg<string>.Is.Anything));
_installer.Expect(x => x.Install(new Dictionary<string, string>
{
{
Constants.XenToolsUnzipPath,
"/S /norestart /D=" + Constants.XenToolsPath
}
}));
_finalizer.Expect(x => x.Finalize(new List<string>
{
Constants.XenToolsUnzipPath,
Constants.XenToolsReleasePackage
}
));
_serviceRestarter.Expect(x => x.Restart("xensvc"));
_serviceRestarter.Expect(x => x.Restart("XenServerVssProvider"));
_serviceRestarter.Expect(x => x.ServiceExists("XenServerVssProvider")).Return(true);
_mockRepo.ReplayAll();
_xentoolsUpdate.Execute(_agentUpdateInfo);
_mockRepo.VerifyAll();
}
[Test]
public void should_not_restart_vss_provider_if_service_does_not_exist()
{
_serviceRestarter.Expect(x => x.Restart("xensvc"));
_serviceRestarter.Expect(x => x.Restart("XenServerVssProvider")).Repeat.Never();
_serviceRestarter.Expect(x => x.ServiceExists("XenServerVssProvider")).Return(false);
_mockRepo.ReplayAll();
_xentoolsUpdate.Execute(_agentUpdateInfo);
_mockRepo.VerifyAll();
}
[Test]
public void should_throw_UnsuccessfulCommandExecutionException_if_connection_to_updater_service_fails()
{
_sleeper.Expect(x => x.Sleep(Arg<int>.Is.Anything));
_connectionChecker.Stub(x => x.Check())
.Throw(new UnsuccessfulCommandExecutionException("error message", new ExecutableResult { ExitCode = "1" }));
var result = _xentoolsUpdate.Execute(_agentUpdateInfo);
Assert.That(result.ExitCode, Is.EqualTo("1"));
Assert.That(result.Error[0], Is.EqualTo("Update failed"));
}
}
}