public void MustRepeatOperations() { var operationA = new Mock <IRepeatableOperation>(); var operationB = new Mock <IRepeatableOperation>(); var operationC = new Mock <IRepeatableOperation>(); var operations = new Queue <IRepeatableOperation>(); operationA.Setup(o => o.Repeat()).Returns(OperationResult.Success); operationB.Setup(o => o.Repeat()).Returns(OperationResult.Success); operationC.Setup(o => o.Repeat()).Returns(OperationResult.Success); operations.Enqueue(operationA.Object); operations.Enqueue(operationB.Object); operations.Enqueue(operationC.Object); var sut = new RepeatableOperationSequence(logger.Object, operations); var result = sut.TryRepeat(); operationA.Verify(o => o.Perform(), Times.Never); operationA.Verify(o => o.Repeat(), Times.Once); operationA.Verify(o => o.Revert(), Times.Never); operationB.Verify(o => o.Perform(), Times.Never); operationB.Verify(o => o.Repeat(), Times.Once); operationB.Verify(o => o.Revert(), Times.Never); operationC.Verify(o => o.Perform(), Times.Never); operationC.Verify(o => o.Repeat(), Times.Once); operationC.Verify(o => o.Revert(), Times.Never); Assert.AreEqual(OperationResult.Success, result); }
public void MustSucceedRepeatingWithoutCallingPerform() { var sut = new RepeatableOperationSequence(logger.Object, new Queue <IRepeatableOperation>()); var result = sut.TryRepeat(); Assert.AreEqual(OperationResult.Success, result); }
public void MustNotRevertOperationsInCaseOfError() { var operationA = new Mock <IRepeatableOperation>(); var operationB = new Mock <IRepeatableOperation>(); var operationC = new Mock <IRepeatableOperation>(); var operationD = new Mock <IRepeatableOperation>(); var operations = new Queue <IRepeatableOperation>(); operationA.Setup(o => o.Repeat()).Returns(OperationResult.Success); operationB.Setup(o => o.Repeat()).Returns(OperationResult.Success); operationC.Setup(o => o.Repeat()).Throws <Exception>(); operations.Enqueue(operationA.Object); operations.Enqueue(operationB.Object); operations.Enqueue(operationC.Object); operations.Enqueue(operationD.Object); var sut = new RepeatableOperationSequence(logger.Object, operations); var result = sut.TryRepeat(); operationA.Verify(o => o.Repeat(), Times.Once); operationA.Verify(o => o.Revert(), Times.Never); operationB.Verify(o => o.Repeat(), Times.Once); operationB.Verify(o => o.Revert(), Times.Never); operationC.Verify(o => o.Repeat(), Times.Once); operationC.Verify(o => o.Revert(), Times.Never); operationD.Verify(o => o.Repeat(), Times.Never); operationD.Verify(o => o.Revert(), Times.Never); Assert.AreEqual(OperationResult.Failed, result); }
internal void BuildObjectGraph(Action shutdown) { const int FIVE_SECONDS = 5000; const int THIRTY_SECONDS = 30000; var args = Environment.GetCommandLineArgs(); var nativeMethods = new NativeMethods(); logger = new Logger(); systemInfo = new SystemInfo(); InitializeConfiguration(); InitializeLogging(); InitializeText(); var messageBox = new MessageBox(text); var desktopFactory = new DesktopFactory(ModuleLogger(nameof(DesktopFactory))); var explorerShell = new ExplorerShell(ModuleLogger(nameof(ExplorerShell)), nativeMethods); var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory))); var proxyFactory = new ProxyFactory(new ProxyObjectFactory(), logger); var runtimeHost = new RuntimeHost(appConfig.RuntimeAddress, new HostObjectFactory(), ModuleLogger(nameof(RuntimeHost)), FIVE_SECONDS); var serviceProxy = new ServiceProxy(appConfig.ServiceAddress, new ProxyObjectFactory(), ModuleLogger(nameof(ServiceProxy))); var sessionContext = new SessionContext(); var uiFactory = new UserInterfaceFactory(text); var bootstrapOperations = new Queue <IOperation>(); var sessionOperations = new Queue <IRepeatableOperation>(); bootstrapOperations.Enqueue(new I18nOperation(logger, text, textResource)); bootstrapOperations.Enqueue(new CommunicationHostOperation(runtimeHost, logger)); sessionOperations.Enqueue(new SessionInitializationOperation(configuration, logger, runtimeHost, sessionContext)); sessionOperations.Enqueue(new ConfigurationOperation(args, configuration, new HashAlgorithm(), logger, sessionContext)); sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS)); sessionOperations.Enqueue(new KioskModeTerminationOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext)); sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS)); sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext)); sessionOperations.Enqueue(new ClientOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS)); sessionOperations.Enqueue(new SessionActivationOperation(logger, sessionContext)); var bootstrapSequence = new OperationSequence(logger, bootstrapOperations); var sessionSequence = new RepeatableOperationSequence(logger, sessionOperations); RuntimeController = new RuntimeController( appConfig, logger, messageBox, bootstrapSequence, sessionSequence, runtimeHost, serviceProxy, sessionContext, shutdown, text, uiFactory); }
public void MustNotFailInCaseOfUnexpectedErrorWhenRepeating() { var sut = new RepeatableOperationSequence(logger.Object, new Queue <IRepeatableOperation>()); sut.ProgressChanged += (args) => throw new Exception(); var result = sut.TryRepeat(); Assert.AreEqual(OperationResult.Failed, result); }
public void MustRepeatOperationsInSequence() { int current = 0, a = 0, b = 0, c = 0; var operationA = new Mock <IRepeatableOperation>(); var operationB = new Mock <IRepeatableOperation>(); var operationC = new Mock <IRepeatableOperation>(); var operations = new Queue <IRepeatableOperation>(); operationA.Setup(o => o.Repeat()).Returns(OperationResult.Success).Callback(() => a = ++current); operationB.Setup(o => o.Repeat()).Returns(OperationResult.Success).Callback(() => b = ++current); operationC.Setup(o => o.Repeat()).Returns(OperationResult.Success).Callback(() => c = ++current); operations.Enqueue(operationA.Object); operations.Enqueue(operationB.Object); operations.Enqueue(operationC.Object); var sut = new RepeatableOperationSequence(logger.Object, operations); var result = sut.TryRepeat(); Assert.AreEqual(OperationResult.Success, result); Assert.IsTrue(a == 1); Assert.IsTrue(b == 2); Assert.IsTrue(c == 3); }
internal void BuildObjectGraph(Action shutdown) { const int FIVE_SECONDS = 5000; const int THIRTY_SECONDS = 30000; logger = new Logger(); systemInfo = new SystemInfo(); InitializeConfiguration(); InitializeLogging(); InitializeText(); var args = Environment.GetCommandLineArgs(); var messageBox = new MessageBoxFactory(text); var nativeMethods = new NativeMethods(); var uiFactory = new UserInterfaceFactory(text); var desktopFactory = new DesktopFactory(ModuleLogger(nameof(DesktopFactory))); var explorerShell = new ExplorerShell(ModuleLogger(nameof(ExplorerShell)), nativeMethods); var fileSystem = new FileSystem(); var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory))); var proxyFactory = new ProxyFactory(new ProxyObjectFactory(), ModuleLogger(nameof(ProxyFactory))); var remoteSessionDetector = new RemoteSessionDetector(ModuleLogger(nameof(RemoteSessionDetector))); var runtimeHost = new RuntimeHost(appConfig.RuntimeAddress, new HostObjectFactory(), ModuleLogger(nameof(RuntimeHost)), FIVE_SECONDS); var runtimeWindow = uiFactory.CreateRuntimeWindow(appConfig); var server = new ServerProxy(appConfig, ModuleLogger(nameof(ServerProxy))); var serviceProxy = new ServiceProxy(appConfig.ServiceAddress, new ProxyObjectFactory(), ModuleLogger(nameof(ServiceProxy)), Interlocutor.Runtime); var sessionContext = new SessionContext(); var splashScreen = uiFactory.CreateSplashScreen(appConfig); var userInfo = new UserInfo(ModuleLogger(nameof(UserInfo))); var vmDetector = new VirtualMachineDetector(ModuleLogger(nameof(VirtualMachineDetector)), systemInfo); var bootstrapOperations = new Queue <IOperation>(); var sessionOperations = new Queue <IRepeatableOperation>(); bootstrapOperations.Enqueue(new I18nOperation(logger, text)); bootstrapOperations.Enqueue(new CommunicationHostOperation(runtimeHost, logger)); sessionOperations.Enqueue(new SessionInitializationOperation(configuration, fileSystem, logger, runtimeHost, sessionContext)); sessionOperations.Enqueue(new ConfigurationOperation(args, configuration, new FileSystem(), new HashAlgorithm(), logger, sessionContext)); sessionOperations.Enqueue(new DisclaimerOperation(logger, sessionContext)); sessionOperations.Enqueue(new ServerOperation(args, configuration, fileSystem, logger, sessionContext, server)); sessionOperations.Enqueue(new RemoteSessionOperation(remoteSessionDetector, logger, sessionContext)); sessionOperations.Enqueue(new VirtualMachineOperation(vmDetector, logger, sessionContext)); sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo)); sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS)); sessionOperations.Enqueue(new ProctoringWorkaroundOperation(logger, sessionContext)); sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, explorerShell, logger, processFactory, sessionContext)); sessionOperations.Enqueue(new ClientOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS)); sessionOperations.Enqueue(new SessionActivationOperation(logger, sessionContext)); var bootstrapSequence = new OperationSequence(logger, bootstrapOperations); var sessionSequence = new RepeatableOperationSequence(logger, sessionOperations); RuntimeController = new RuntimeController( appConfig, logger, messageBox, bootstrapSequence, sessionSequence, runtimeHost, runtimeWindow, serviceProxy, sessionContext, shutdown, splashScreen, text, uiFactory); }