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);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[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 { };
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ using SafeExamBrowser.Contracts.Communication.Proxies;
 | 
			
		|||
using SafeExamBrowser.Contracts.Configuration;
 | 
			
		||||
using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
			
		||||
using SafeExamBrowser.Contracts.Core.OperationModel;
 | 
			
		||||
using SafeExamBrowser.Contracts.Core.OperationModel.Events;
 | 
			
		||||
using SafeExamBrowser.Contracts.I18n;
 | 
			
		||||
using SafeExamBrowser.Contracts.Logging;
 | 
			
		||||
using SafeExamBrowser.Contracts.UserInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -114,8 +115,7 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
			
		|||
		public void ClientProxy_MustShutdownWhenConnectionLost()
 | 
			
		||||
		{
 | 
			
		||||
			StartSession();
 | 
			
		||||
 | 
			
		||||
			clientProcess.Raise(c => c.Terminated += null, -1);
 | 
			
		||||
			clientProxy.Raise(c => c.ConnectionLost += null);
 | 
			
		||||
 | 
			
		||||
			messageBox.Verify(m => m.Show(
 | 
			
		||||
				It.IsAny<TextKey>(),
 | 
			
		||||
| 
						 | 
				
			
			@ -201,6 +201,19 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
			
		|||
			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]
 | 
			
		||||
		public void Operations_MustRequestPasswordViaDialogOnDefaultDesktop()
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -337,6 +350,45 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
			
		|||
				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]
 | 
			
		||||
		public void Shutdown_MustRevertSessionThenBootstrapSequence()
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -392,6 +444,26 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
			
		|||
			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]
 | 
			
		||||
		public void Startup_MustPerformBootstrapThenSessionSequence()
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +512,42 @@ namespace SafeExamBrowser.Runtime.UnitTests
 | 
			
		|||
			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()
 | 
			
		||||
		{
 | 
			
		||||
			bootstrapSequence.Setup(b => b.TryPerform()).Returns(OperationResult.Success);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue