Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public void MustSucceedRepeatingWithoutCallingPerform()
        {
            var sut    = new RepeatableOperationSequence(logger.Object, new Queue <IRepeatableOperation>());
            var result = sut.TryRepeat();

            Assert.AreEqual(OperationResult.Success, result);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }