Пример #1
0
        public void CanProcessFailedPostAction()
        {
            var engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true);
            var postActionProcessor       = new CaptureMePostAction(expectedResult: false);

            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), postActionProcessor);
            var postAction = new MockPostAction();
            MockCreationResult creationResult = new MockCreationResult(new List <IPostAction>()
            {
                postAction
            });
            MockCreationEffects creationEffects = new MockCreationEffects();
            var templateCreationResult          = new TemplateCreationResult(
                CreationResultStatus.Success,
                "TestTemplate",
                null,
                creationResult,
                "TestPath",
                creationEffects);

            PostActionDispatcher dispatcher = new PostActionDispatcher(
                engineEnvironmentSettings,
                new NewCommandCallbacks(),
                () => string.Empty);

            var result = dispatcher.Process(templateCreationResult, isDryRun: false, AllowRunScripts.Prompt);

            Assert.Equal(PostActionExecutionStatus.Failure, result);
            Assert.Equal(engineEnvironmentSettings, postActionProcessor.Calls.Single().EngineEnvironmentSettings);
            Assert.Equal(postAction, postActionProcessor.Calls.Single().PostAction);
            Assert.Equal(creationEffects, postActionProcessor.Calls.Single().CreationEffects);
            Assert.Equal(creationResult, postActionProcessor.Calls.Single().CreationResult);
            Assert.Equal("TestPath", postActionProcessor.Calls.Single().OutputPath);
        }
Пример #2
0
        public void CanDryRunSuccessPostAction()
        {
            var engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true);
            var postActionProcessor       = new CaptureMePostAction(expectedResult: true);

            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), postActionProcessor);
            var postAction = new MockPostAction();

            MockCreationEffects creationEffects = new MockCreationEffects();
            var templateCreationResult          = new TemplateCreationResult(
                CreationResultStatus.Success,
                "TestTemplate",
                null,
                null,
                "TestPath",
                creationEffects);

            PostActionDispatcher dispatcher = new PostActionDispatcher(
                engineEnvironmentSettings,
                new NewCommandCallbacks(),
                () => string.Empty);

            var result = dispatcher.Process(templateCreationResult, isDryRun: true, AllowRunScripts.Prompt);

            Assert.Equal(PostActionExecutionStatus.Success, result);
            Assert.Empty(postActionProcessor.Calls);
        }
Пример #3
0
        public void CanContinueOnErrorWhenConfigured()
        {
            var engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true);

            var trueProcessorGuid  = Guid.NewGuid();
            var falseProcessorGuid = Guid.NewGuid();
            var trueProcessor      = new CaptureMePostAction(expectedResult: true, guid: trueProcessorGuid);
            var falseProcessor     = new CaptureMePostAction(expectedResult: false, guid: falseProcessorGuid);

            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), trueProcessor);
            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), falseProcessor);

            var postAction1 = new MockPostAction
            {
                ActionId        = falseProcessorGuid,
                ContinueOnError = true
            };
            var postAction2 = new MockPostAction
            {
                ActionId        = trueProcessorGuid,
                ContinueOnError = true
            };

            MockCreationResult creationResult = new MockCreationResult(new List <IPostAction>()
            {
                postAction1, postAction2
            });
            MockCreationEffects creationEffects = new MockCreationEffects();
            var templateCreationResult          = new TemplateCreationResult(
                CreationResultStatus.Success,
                "TestTemplate",
                null,
                creationResult,
                "TestPath",
                creationEffects);

            PostActionDispatcher dispatcher = new PostActionDispatcher(
                engineEnvironmentSettings,
                new NewCommandCallbacks(),
                () => string.Empty);

            var result = dispatcher.Process(templateCreationResult, isDryRun: false, AllowRunScripts.Yes);

            // in case continue on error is true, success status is returned on failure
            Assert.Equal(PostActionExecutionStatus.Success, result);

            //2 post actions were executed
            Assert.Equal(1, trueProcessor.Calls.Count);
            Assert.Equal(1, falseProcessor.Calls.Count);
            Assert.Equal(postAction1, falseProcessor.Calls[0].PostAction);
            Assert.Equal(postAction2, trueProcessor.Calls[0].PostAction);
        }
Пример #4
0
        public void CanProcessRunScriptPostActionAndSuccessPostAction_WhenRunScriptPrompt_No()
        {
            var engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true);
            var postActionProcessor       = new CaptureMePostAction(expectedResult: true);

            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), postActionProcessor);

            engineEnvironmentSettings.Components.AddComponent(typeof(IPostActionProcessor), new ProcessStartPostActionProcessor());
            var postAction1 = new MockPostAction
            {
                ActionId = ProcessStartPostActionProcessor.ActionProcessorId,
                //the post action will fail, but that is OK for test purpose
                Args = new Dictionary <string, string>()
                {
                    { "executable", "do-not-exist" }
                },
                ContinueOnError = true
            };

            var postAction2 = new MockPostAction
            {
                ActionId        = Guid.Empty, //CaptureMePostAction
                ContinueOnError = true
            };

            MockCreationResult creationResult = new MockCreationResult(new List <IPostAction>()
            {
                postAction1, postAction2
            });
            MockCreationEffects creationEffects = new MockCreationEffects();
            var templateCreationResult          = new TemplateCreationResult(
                CreationResultStatus.Success,
                "TestTemplate",
                null,
                creationResult,
                Path.GetTempPath(),
                creationEffects);

            PostActionDispatcher dispatcher = new PostActionDispatcher(
                engineEnvironmentSettings,
                new NewCommandCallbacks(),
                () => "N"); // the user forbids to run post action

            var result = dispatcher.Process(templateCreationResult, isDryRun: false, AllowRunScripts.Prompt);

            Assert.Equal(PostActionExecutionStatus.Cancelled, result);
            Assert.NotEqual(PostActionExecutionStatus.Failure, result);
            Assert.Single(postActionProcessor.Calls);
            Assert.Equal(postAction2, postActionProcessor.Calls.Single().PostAction);
        }