SEBWIN-296: Extended unit tests for runtime host and controller.
This commit is contained in:
		
							parent
							
								
									9892ace4d9
								
							
						
					
					
						commit
						f32bf19f50
					
				
					 2 changed files with 126 additions and 2 deletions
				
			
		| 
						 | 
					@ -274,6 +274,22 @@ namespace SafeExamBrowser.Runtime.UnitTests.Communication
 | 
				
			||||||
			Assert.AreEqual(SimpleResponsePurport.UnknownMessage, (response as SimpleResponse)?.Purport);
 | 
								Assert.AreEqual(SimpleResponsePurport.UnknownMessage, (response as SimpleResponse)?.Purport);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void MustNotFailIfNoEventHandlersSubscribed()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								sut.AllowConnection = true;
 | 
				
			||||||
 | 
								sut.StartupToken = Guid.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var token = sut.Connect(Guid.Empty).CommunicationToken.Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Send(new SimpleMessage(SimpleMessagePurport.ClientIsReady) { CommunicationToken = token });
 | 
				
			||||||
 | 
								sut.Send(new SimpleMessage(SimpleMessagePurport.ConfigurationNeeded) { CommunicationToken = token });
 | 
				
			||||||
 | 
								sut.Send(new SimpleMessage(SimpleMessagePurport.RequestShutdown) { CommunicationToken = token });
 | 
				
			||||||
 | 
								sut.Send(new MessageBoxReplyMessage(Guid.Empty, MessageBoxResult.Cancel) { CommunicationToken = token });
 | 
				
			||||||
 | 
								sut.Send(new PasswordReplyMessage(Guid.Empty, false, "") { CommunicationToken = token });
 | 
				
			||||||
 | 
								sut.Send(new ReconfigurationMessage("") { CommunicationToken = token });
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private class TestMessage : Message { };
 | 
							private class TestMessage : Message { };
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@ using SafeExamBrowser.Contracts.Communication.Proxies;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Configuration;
 | 
					using SafeExamBrowser.Contracts.Configuration;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
					using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Core.OperationModel;
 | 
					using SafeExamBrowser.Contracts.Core.OperationModel;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Core.OperationModel.Events;
 | 
				
			||||||
using SafeExamBrowser.Contracts.I18n;
 | 
					using SafeExamBrowser.Contracts.I18n;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Logging;
 | 
					using SafeExamBrowser.Contracts.Logging;
 | 
				
			||||||
using SafeExamBrowser.Contracts.UserInterface;
 | 
					using SafeExamBrowser.Contracts.UserInterface;
 | 
				
			||||||
| 
						 | 
					@ -114,8 +115,7 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
				
			||||||
		public void ClientProxy_MustShutdownWhenConnectionLost()
 | 
							public void ClientProxy_MustShutdownWhenConnectionLost()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			StartSession();
 | 
								StartSession();
 | 
				
			||||||
 | 
								clientProxy.Raise(c => c.ConnectionLost += null);
 | 
				
			||||||
			clientProcess.Raise(c => c.Terminated += null, -1);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			messageBox.Verify(m => m.Show(
 | 
								messageBox.Verify(m => m.Show(
 | 
				
			||||||
				It.IsAny<TextKey>(),
 | 
									It.IsAny<TextKey>(),
 | 
				
			||||||
| 
						 | 
					@ -201,6 +201,19 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
				
			||||||
			shutdown.Verify(s => s(), Times.Once);
 | 
								shutdown.Verify(s => s(), Times.Once);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Operations_MustAllowToAbortStartupForClientConfiguration()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var args = new ConfigurationCompletedEventArgs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								messageBox.Setup(m => m.Show(It.IsAny<TextKey>(), It.IsAny<TextKey>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>(), It.IsAny<IWindow>())).Returns(MessageBoxResult.Yes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.TryStart();
 | 
				
			||||||
 | 
								sessionSequence.Raise(s => s.ActionRequired += null, args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.IsTrue(args.AbortStartup);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[TestMethod]
 | 
							[TestMethod]
 | 
				
			||||||
		public void Operations_MustRequestPasswordViaDialogOnDefaultDesktop()
 | 
							public void Operations_MustRequestPasswordViaDialogOnDefaultDesktop()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -337,6 +350,45 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
				
			||||||
				It.IsAny<Guid>()), Times.Once);
 | 
									It.IsAny<Guid>()), Times.Once);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Operations_MustUpdateProgress()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var args = new ProgressChangedEventArgs
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									CurrentValue = 23,
 | 
				
			||||||
 | 
									IsIndeterminate = true,
 | 
				
			||||||
 | 
									MaxValue = 150,
 | 
				
			||||||
 | 
									Progress = true,
 | 
				
			||||||
 | 
									Regress = true
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								var runtimeWindow = new Mock<IRuntimeWindow>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								uiFactory.Setup(u => u.CreateRuntimeWindow(It.IsAny<AppConfig>())).Returns(runtimeWindow.Object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.TryStart();
 | 
				
			||||||
 | 
								sessionSequence.Raise(o => o.ProgressChanged += null, args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.SetValue(It.Is<int>(i => i == args.CurrentValue)), Times.Once);
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.SetIndeterminate(), Times.Once);
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.SetMaxValue(It.Is<int>(i => i == args.MaxValue)), Times.Once);
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.Progress(), Times.Once);
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.Regress(), Times.Once);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Operations_MustUpdateStatus()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var key = TextKey.OperationStatus_EmptyClipboard;
 | 
				
			||||||
 | 
								var runtimeWindow = new Mock<IRuntimeWindow>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								uiFactory.Setup(u => u.CreateRuntimeWindow(It.IsAny<AppConfig>())).Returns(runtimeWindow.Object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.TryStart();
 | 
				
			||||||
 | 
								sessionSequence.Raise(o => o.StatusChanged += null, key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								runtimeWindow.Verify(s => s.UpdateStatus(It.Is<TextKey>(k => k == key), It.IsAny<bool>()), Times.Once);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[TestMethod]
 | 
							[TestMethod]
 | 
				
			||||||
		public void Shutdown_MustRevertSessionThenBootstrapSequence()
 | 
							public void Shutdown_MustRevertSessionThenBootstrapSequence()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -392,6 +444,26 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
				
			||||||
			Assert.AreEqual(1, bootstrap);
 | 
								Assert.AreEqual(1, bootstrap);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Shutdown_MustIndicateFailureToUser()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var order = 0;
 | 
				
			||||||
 | 
								var bootstrap = 0;
 | 
				
			||||||
 | 
								var session = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.TryStart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								bootstrapSequence.Reset();
 | 
				
			||||||
 | 
								sessionSequence.Reset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								bootstrapSequence.Setup(b => b.TryRevert()).Returns(OperationResult.Failed).Callback(() => bootstrap = ++order);
 | 
				
			||||||
 | 
								sessionSequence.Setup(b => b.TryRevert()).Returns(OperationResult.Success).Callback(() => session = ++order);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Terminate();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								messageBox.Verify(m => m.Show(It.IsAny<TextKey>(), It.IsAny<TextKey>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>(), It.IsAny<IWindow>()), Times.AtLeastOnce);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[TestMethod]
 | 
							[TestMethod]
 | 
				
			||||||
		public void Startup_MustPerformBootstrapThenSessionSequence()
 | 
							public void Startup_MustPerformBootstrapThenSessionSequence()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -440,6 +512,42 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
				
			||||||
			Assert.AreEqual(0, session);
 | 
								Assert.AreEqual(0, session);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Startup_MustTerminateOnSessionStartFailure()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								bootstrapSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Success);
 | 
				
			||||||
 | 
								sessionSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Failed).Callback(() => sessionContext.Current = currentSession.Object);
 | 
				
			||||||
 | 
								sessionContext.Current = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var success = sut.TryStart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								bootstrapSequence.Verify(b => b.TryPerform(), Times.Once);
 | 
				
			||||||
 | 
								bootstrapSequence.Verify(b => b.TryRevert(), Times.Never);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryPerform(), Times.Once);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryRepeat(), Times.Never);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryRevert(), Times.Once);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								shutdown.Verify(s => s(), Times.Once);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Startup_MustNotTerminateOnSessionStartAbortion()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								bootstrapSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Success);
 | 
				
			||||||
 | 
								sessionSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Aborted).Callback(() => sessionContext.Current = currentSession.Object);
 | 
				
			||||||
 | 
								sessionContext.Current = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var success = sut.TryStart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								bootstrapSequence.Verify(b => b.TryPerform(), Times.Once);
 | 
				
			||||||
 | 
								bootstrapSequence.Verify(b => b.TryRevert(), Times.Never);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryPerform(), Times.Once);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryRepeat(), Times.Never);
 | 
				
			||||||
 | 
								sessionSequence.Verify(b => b.TryRevert(), Times.Never);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								shutdown.Verify(s => s(), Times.Never);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private void StartSession()
 | 
							private void StartSession()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			bootstrapSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Success);
 | 
								bootstrapSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Success);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue