public void ApplicationMonitor_MustValidateQuitPasswordIfTerminationFailed() { var hash = "12345"; var lockScreen = new Mock <ILockScreen>(); var result = new LockScreenResult { Password = "******" }; var attempt = 0; var correct = new Random().Next(1, 50); var lockScreenResult = new Func <LockScreenResult>(() => ++ attempt == correct ? result : new LockScreenResult()); context.Settings.Security.QuitPasswordHash = hash; hashAlgorithm.Setup(a => a.GenerateHashFor(It.Is <string>(p => p == result.Password))).Returns(hash); lockScreen.Setup(l => l.WaitForResult()).Returns(lockScreenResult); uiFactory .Setup(f => f.CreateLockScreen(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IEnumerable <LockScreenOption> >())) .Returns(lockScreen.Object); sut.TryStart(); applicationMonitor.Raise(m => m.TerminationFailed += null, new List <RunningApplication>()); hashAlgorithm.Verify(a => a.GenerateHashFor(It.Is <string>(p => p == result.Password)), Times.Once); hashAlgorithm.Verify(a => a.GenerateHashFor(It.Is <string>(p => p != result.Password)), Times.Exactly(attempt - 1)); messageBox.Verify(m => m.Show( It.IsAny <TextKey>(), It.IsAny <TextKey>(), It.IsAny <MessageBoxAction>(), It.IsAny <MessageBoxIcon>(), It.Is <IWindow>(w => w == lockScreen.Object)), Times.Exactly(attempt - 1)); }
public void ApplicationMonitor_MustRequestShutdownIfChosenByUserAfterFailedTermination() { var lockScreen = new Mock <ILockScreen>(); var result = new LockScreenResult(); lockScreen.Setup(l => l.WaitForResult()).Returns(result); runtimeProxy.Setup(p => p.RequestShutdown()).Returns(new CommunicationResult(true)); uiFactory .Setup(f => f.CreateLockScreen(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IEnumerable <LockScreenOption> >())) .Returns(lockScreen.Object) .Callback <string, string, IEnumerable <LockScreenOption> >((m, t, o) => result.OptionId = o.Last().Id); sut.TryStart(); applicationMonitor.Raise(m => m.TerminationFailed += null, new List <RunningApplication>()); runtimeProxy.Verify(p => p.RequestShutdown(), Times.Once); }
public void ApplicationMonitor_MustShowLockScreenIfTerminationFailed() { var activator1 = new Mock <IActivator>(); var activator2 = new Mock <IActivator>(); var activator3 = new Mock <IActivator>(); var lockScreen = new Mock <ILockScreen>(); var result = new LockScreenResult(); var order = 0; var pause = 0; var show = 0; var wait = 0; var close = 0; var resume = 0; activator1.Setup(a => a.Pause()).Callback(() => pause = ++order); activator1.Setup(a => a.Resume()).Callback(() => resume = ++order); context.Activators.Add(activator1.Object); context.Activators.Add(activator2.Object); context.Activators.Add(activator3.Object); lockScreen.Setup(l => l.Show()).Callback(() => show = ++order); lockScreen.Setup(l => l.WaitForResult()).Callback(() => wait = ++order).Returns(result); lockScreen.Setup(l => l.Close()).Callback(() => close = ++order); uiFactory .Setup(f => f.CreateLockScreen(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IEnumerable <LockScreenOption> >())) .Returns(lockScreen.Object); sut.TryStart(); applicationMonitor.Raise(m => m.TerminationFailed += null, new List <RunningApplication>()); activator1.Verify(a => a.Pause(), Times.Once); activator1.Verify(a => a.Resume(), Times.Once); activator2.Verify(a => a.Pause(), Times.Once); activator2.Verify(a => a.Resume(), Times.Once); activator3.Verify(a => a.Pause(), Times.Once); activator3.Verify(a => a.Resume(), Times.Once); lockScreen.Verify(l => l.Show(), Times.Once); lockScreen.Verify(l => l.WaitForResult(), Times.Once); lockScreen.Verify(l => l.Close(), Times.Once); Assert.IsTrue(pause == 1); Assert.IsTrue(show == 2); Assert.IsTrue(wait == 3); Assert.IsTrue(close == 4); Assert.IsTrue(resume == 5); }
public LockScreenResult WaitForResult() { var result = new LockScreenResult(); autoResetEvent.WaitOne(); Dispatcher.Invoke(() => { result.Password = Password.Password; foreach (var child in Options.Children) { if (child is RadioButton option && option.IsChecked == true) { result.OptionId = option.Tag as Guid?; } } }); return(result); }