Skip to content

Commit

Permalink
checking if XenServerVssProvider service exists before restart
Browse files Browse the repository at this point in the history
  • Loading branch information
Kashi Reddy committed Jan 8, 2013
1 parent 6147bc0 commit 455a649
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 26 deletions.
2 changes: 1 addition & 1 deletion Properties.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
12 changes: 12 additions & 0 deletions src/Rackspace.Cloud.Server.Agent.Specs/RestartServiceSpec.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
}
}
30 changes: 23 additions & 7 deletions src/Rackspace.Cloud.Server.Agent.Specs/XentoolsUpdateSpec.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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:https://something.com/file.zip,544564abc453de787ad";

_downloader = MockRepository.GenerateMock<IDownloader>();
Expand All @@ -37,8 +39,8 @@ public void Setup()
_finalizer = MockRepository.GenerateMock<IFinalizer>();
_connectionChecker = MockRepository.GenerateMock<IConnectionChecker>();
_sleeper = MockRepository.GenerateMock<ISleeper>();
_logger = MockRepository.GenerateMock<ILogger>();
_serviceRestarter = MockRepository.GenerateMock<IServiceRestarter>();
_logger = MockRepository.GenerateMock<ILogger>();
_serviceRestarter = _mockRepo.StrictMock<IServiceRestarter>();
_agentUpdateMessageHandler = new AgentUpdateMessageHandler();

_logger.Stub(x => x.Log(Arg<string>.Is.Anything));
Expand Down Expand Up @@ -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()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
16 changes: 13 additions & 3 deletions src/Rackspace.Cloud.Server.Agent/Actions/ServiceRestarter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}
}
}
10 changes: 1 addition & 9 deletions src/Rackspace.Cloud.Server.Agent/Commands/XentoolsUpdate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<string> { "Update failed" }, ExitCode = "1" };
}
Expand All @@ -86,12 +85,5 @@ public ExecutableResult Execute(string value)
_finalizer.Finalize(new List<string>{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;
}
}
}
3 changes: 1 addition & 2 deletions src/Rackspace.Cloud.Server.Agent/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]

0 comments on commit 455a649

Please sign in to comment.