public void TestBasicRestartManager() { //Start up all the little dandies StartService(TestHelpers.TestService); RestartManagerSession manager = new RestartManagerSession(); manager.StartSession(); System.Threading.Thread.Sleep(1000); manager.RegisterResources(new List <string>() { ReplacementFileServicePath }); //Look for the processes locking on our poor file RM_REBOOT_REASON rebootReason = default(RM_REBOOT_REASON); var processes = RestartManager.RmProcessToNetProcess(manager.GetList(ref rebootReason)); //Make sure it's the service we expect. var serviceExecutable = GetServiceExecutablePath(TestHelpers.TestService); Assert.IsTrue(processes.Count > 0 && processes.Any(x => x.MainModule.FileName.ToLower() == serviceExecutable.ToLower())); manager.EndSession(); StopService(TestHelpers.TestService); }
public void Session_Variable() { var services = new MockContainer(MockBehavior.Strict) .Push <IRestartManagerService>() .RegisterResources() .GetProcesses() .Pop() .Push <IVariableService, MockVariableService>() .GetValue(SessionManager.VariableName, s => { var session = new RestartManagerSession(s); session.RegisterResources(files: new[] { @"C:\ShouldNotExist.txt" }); return(session); }) .Pop(); using (fixture.UseServices(services)) { var output = fixture.Create() .AddCommand(CommandName) .AddStatement() .AddCommand("Stop-RestartManagerSession") .Invoke <IProcessInfo>(); var expected = MockRestartManagerService.GetDefaultProcessesInfo(RebootReason.None); Assert.Equal(expected, output, ProcessComparer.Default); } services.Verify(); }
public void TestRestartManagerFakeFiles() { RestartManagerSession manager = new RestartManagerSession(); manager.StartSession(); manager.RegisterResources(new List <string>() { "REALLYNOTAFILE" }); RM_REBOOT_REASON rebootReason = default(RM_REBOOT_REASON); var processes = RestartManager.RmProcessToNetProcess(manager.GetList(ref rebootReason)); Assert.IsTrue(processes.Count == 0); manager.EndSession(); }
public void ProcessRecord_Throws() { var services = new MockContainer(MockBehavior.Strict) .Push <IRestartManagerService>() .RegisterResources() .GetProcesses(error: NativeMethods.ERROR_OUTOFMEMORY) .Pop(); using (var session = new RestartManagerSession(services)) { session.RegisterResources(files: new[] { @"C:\ShouldNotExist.txt" }); var sut = fixture.Create() .AddCommand(CommandName) .AddParameter("Session", session); var ex = Assert.Throws <CmdletInvocationException>(() => sut.Invoke()); Assert.IsType <OutOfMemoryException>(ex.InnerException); } services.Verify(); }
public void ProcessRecord() { var services = new MockContainer(MockBehavior.Strict) .Push <IRestartManagerService>() .RegisterResources() .GetProcesses() .Pop(); using (var session = new RestartManagerSession(services)) { session.RegisterResources(files: new[] { @"C:\ShouldNotExist.txt" }); var output = fixture.Create() .AddCommand(CommandName) .AddParameter("Session", session) .Invoke <IProcessInfo>(); var expected = MockRestartManagerService.GetDefaultProcessesInfo(RebootReason.None); Assert.Equal(expected, output, ProcessComparer.Default); } services.Verify(); }
public void TestRestartManagerProcessFileMove() { var ReplacementProcessCopy = ReplacementProcess + "2"; File.Copy(ReplacementProcess, ReplacementProcessCopy, true); //Start up the service and TRY to move the file. It should fail Process proc = Process.Start(ReplacementProcess); //We're hoping this will fail, as the process SHOULD be holding onto this guy MyAssert.ThrowsException(() => File.Copy(ReplacementProcessCopy, ReplacementProcess, true)); //Now startup the restart manager and lets hope the process will be restarted. RestartManagerSession manager = new RestartManagerSession(); manager.StartSession(); manager.RegisterResources(new List <string>() { ReplacementProcess }); RM_REBOOT_REASON rebootReason = default(RM_REBOOT_REASON); var processes = RestartManager.RmProcessToNetProcess(manager.GetList(ref rebootReason)); Assert.IsTrue(rebootReason == RM_REBOOT_REASON.RmRebootReasonNone); Assert.IsTrue(processes.Count > 0); //After shutdown, the file should be copyable manager.Shutdown(); ThreadingServices.WaitOnAction(() => File.Copy(ReplacementProcessCopy, ReplacementProcess, true), TimeSpan.FromSeconds(3)); //Now try to restart everything manager.Restart(); manager.EndSession(); }