Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }