From 455a6497b06ba66a8a577c8b027a5f10295f0f69 Mon Sep 17 00:00:00 2001 From: Kashi Reddy Date: Tue, 8 Jan 2013 11:50:11 +0530 Subject: [PATCH] checking if XenServerVssProvider service exists before restart --- Properties.rb | 2 +- .../Properties/AssemblyInfo.cs | 3 +- .../RestartServiceSpec.cs | 12 ++++++++ .../XentoolsUpdateSpec.cs | 30 ++++++++++++++----- .../Properties/AssemblyInfo.cs | 3 +- .../Actions/ServiceRestarter.cs | 16 ++++++++-- .../Commands/XentoolsUpdate.cs | 10 +------ .../Properties/AssemblyInfo.cs | 3 +- 8 files changed, 53 insertions(+), 26 deletions(-) diff --git a/Properties.rb b/Properties.rb index 564aa25..82010c4 100644 --- a/Properties.rb +++ b/Properties.rb @@ -6,7 +6,7 @@ COMPANY = "Rackspace Cloud" DESCRIPTION = "C#.NET Agent for Windows Virtual Machines" CLR_VERSION = 'v3.5' -RELEASE_BUILD_NUMBER = "1.2.2.0" +RELEASE_BUILD_NUMBER = "1.2.3.0" #Paths SLN_FILE = File.join(ABSOLUTE_PATH,'src','WindowsConfigurationAgent.sln') diff --git a/src/Rackspace.Cloud.Server.Agent.Service/Properties/AssemblyInfo.cs b/src/Rackspace.Cloud.Server.Agent.Service/Properties/AssemblyInfo.cs index f2e9aca..3321518 100644 --- a/src/Rackspace.Cloud.Server.Agent.Service/Properties/AssemblyInfo.cs +++ b/src/Rackspace.Cloud.Server.Agent.Service/Properties/AssemblyInfo.cs @@ -4,5 +4,4 @@ [assembly: AssemblyCompany("Rackspace Cloud")] [assembly: AssemblyProduct("Rackspace Cloud Server Agent")] [assembly: AssemblyCopyright("Copyright (c) 2009 2010 2011, Rackspace Cloud. All Rights Reserved")] -[assembly: AssemblyVersion("1.2.2.0")] - +[assembly: AssemblyVersion("1.2.3.0")] diff --git a/src/Rackspace.Cloud.Server.Agent.Specs/RestartServiceSpec.cs b/src/Rackspace.Cloud.Server.Agent.Specs/RestartServiceSpec.cs index 6b034dc..2b4af94 100644 --- a/src/Rackspace.Cloud.Server.Agent.Specs/RestartServiceSpec.cs +++ b/src/Rackspace.Cloud.Server.Agent.Specs/RestartServiceSpec.cs @@ -30,5 +30,17 @@ public void should_stop_then_start_the_service() _serviceRestarter.Restart("testServiceName"); } + + [Test] + public void should_be_true_if_service_exists() + { + Assert.IsTrue(_serviceRestarter.ServiceExists("eventlog")); + } + + [Test] + public void should_be_false_if_service_does_not_exist() + { + Assert.IsFalse(_serviceRestarter.ServiceExists("unknownService")); + } } } \ No newline at end of file diff --git a/src/Rackspace.Cloud.Server.Agent.Specs/XentoolsUpdateSpec.cs b/src/Rackspace.Cloud.Server.Agent.Specs/XentoolsUpdateSpec.cs index b279584..b3505b8 100644 --- a/src/Rackspace.Cloud.Server.Agent.Specs/XentoolsUpdateSpec.cs +++ b/src/Rackspace.Cloud.Server.Agent.Specs/XentoolsUpdateSpec.cs @@ -23,11 +23,13 @@ public class XentoolsUpdateSpec private string _agentUpdateInfo; private IConnectionChecker _connectionChecker; private IServiceRestarter _serviceRestarter; - private ILogger _logger; + private ILogger _logger; + private MockRepository _mockRepo; [SetUp] - public void Setup() - { + public void Setup() + { + _mockRepo = new MockRepository(); _agentUpdateInfo = "http://something.com/file.zip,544564abc453de787ad"; _downloader = MockRepository.GenerateMock(); @@ -37,8 +39,8 @@ public void Setup() _finalizer = MockRepository.GenerateMock(); _connectionChecker = MockRepository.GenerateMock(); _sleeper = MockRepository.GenerateMock(); - _logger = MockRepository.GenerateMock(); - _serviceRestarter = MockRepository.GenerateMock(); + _logger = MockRepository.GenerateMock(); + _serviceRestarter = _mockRepo.StrictMock(); _agentUpdateMessageHandler = new AgentUpdateMessageHandler(); _logger.Stub(x => x.Log(Arg.Is.Anything)); @@ -69,11 +71,25 @@ public void should_update_xentools() } )); _serviceRestarter.Expect(x => x.Restart("xensvc")); - _serviceRestarter.Expect(x => x.Restart("XenServerVssProvider")); - + _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() { diff --git a/src/Rackspace.Cloud.Server.Agent.UpdaterService/Properties/AssemblyInfo.cs b/src/Rackspace.Cloud.Server.Agent.UpdaterService/Properties/AssemblyInfo.cs index f2e9aca..3321518 100644 --- a/src/Rackspace.Cloud.Server.Agent.UpdaterService/Properties/AssemblyInfo.cs +++ b/src/Rackspace.Cloud.Server.Agent.UpdaterService/Properties/AssemblyInfo.cs @@ -4,5 +4,4 @@ [assembly: AssemblyCompany("Rackspace Cloud")] [assembly: AssemblyProduct("Rackspace Cloud Server Agent")] [assembly: AssemblyCopyright("Copyright (c) 2009 2010 2011, Rackspace Cloud. All Rights Reserved")] -[assembly: AssemblyVersion("1.2.2.0")] - +[assembly: AssemblyVersion("1.2.3.0")] diff --git a/src/Rackspace.Cloud.Server.Agent/Actions/ServiceRestarter.cs b/src/Rackspace.Cloud.Server.Agent/Actions/ServiceRestarter.cs index d047b55..287b6d6 100644 --- a/src/Rackspace.Cloud.Server.Agent/Actions/ServiceRestarter.cs +++ b/src/Rackspace.Cloud.Server.Agent/Actions/ServiceRestarter.cs @@ -13,14 +13,17 @@ // License for the specific language governing permissions and limitations // under the License. -using System; +using System; +using System.Linq; +using System.ServiceProcess; using Rackspace.Cloud.Server.Common.Logging; namespace Rackspace.Cloud.Server.Agent.Actions { public interface IServiceRestarter { - void Restart(string serviceName); + void Restart(string serviceName); + bool ServiceExists(string serviceName); } public class ServiceRestarter : IServiceRestarter @@ -42,6 +45,13 @@ public void Restart(string serviceName) _serviceStopper.Stop(serviceName); _serviceStarter.Start(serviceName); _logger.Log(String.Format("Restart of service '{0}' successful.", serviceName)); - } + } + + public bool ServiceExists(string serviceName) + { + var services = ServiceController.GetServices(); + var service = services.FirstOrDefault(s => s.ServiceName.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase)); + return service != null; + } } } \ No newline at end of file diff --git a/src/Rackspace.Cloud.Server.Agent/Commands/XentoolsUpdate.cs b/src/Rackspace.Cloud.Server.Agent/Commands/XentoolsUpdate.cs index 8069bdd..b1b346f 100644 --- a/src/Rackspace.Cloud.Server.Agent/Commands/XentoolsUpdate.cs +++ b/src/Rackspace.Cloud.Server.Agent/Commands/XentoolsUpdate.cs @@ -70,14 +70,13 @@ public ExecutableResult Execute(string value) String.Format("/S /norestart /D={0}", Constants.XenToolsPath)} }); _serviceRestarter.Restart("xensvc"); - if (DoesServiceExist("XenServerVssProvider")) + if (_serviceRestarter.ServiceExists("XenServerVssProvider")) _serviceRestarter.Restart("XenServerVssProvider"); Statics.ShouldPollXenStore = true; return new ExecutableResult(); } catch (Exception ex) { - _logger.Log(String.Format("Exception was : {0}\nStackTrace Was: {1}", ex.Message, ex.StackTrace)); return new ExecutableResult { Error = new List { "Update failed" }, ExitCode = "1" }; } @@ -86,12 +85,5 @@ public ExecutableResult Execute(string value) _finalizer.Finalize(new List{Constants.XenToolsUnzipPath,Constants.XenToolsReleasePackage}); } } - - public static bool DoesServiceExist(string serviceName) - { - var services = ServiceController.GetServices(); - var service = services.FirstOrDefault(s => s.ServiceName.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase)); - return service != null; - } } } \ No newline at end of file diff --git a/src/Rackspace.Cloud.Server.Agent/Properties/AssemblyInfo.cs b/src/Rackspace.Cloud.Server.Agent/Properties/AssemblyInfo.cs index f2e9aca..3321518 100644 --- a/src/Rackspace.Cloud.Server.Agent/Properties/AssemblyInfo.cs +++ b/src/Rackspace.Cloud.Server.Agent/Properties/AssemblyInfo.cs @@ -4,5 +4,4 @@ [assembly: AssemblyCompany("Rackspace Cloud")] [assembly: AssemblyProduct("Rackspace Cloud Server Agent")] [assembly: AssemblyCopyright("Copyright (c) 2009 2010 2011, Rackspace Cloud. All Rights Reserved")] -[assembly: AssemblyVersion("1.2.2.0")] - +[assembly: AssemblyVersion("1.2.3.0")]