Ejemplo n.º 1
0
        public void MappingProcessor_should_call_post_deploy_action_when_script_not_specified()
        {
            // Arrange
            var deployAgentProvider    = new DeployAgentProvider();
            var deploymentFolderSource = MockRepository.GenerateStub <IDeploymentFolderSource>();
            var mappingEvaluator       = MockRepository.GenerateStub <IMappingEvaluator>();
            var mappingProcessor       = new MappingProcessor(deployAgentProvider, deploymentFolderSource, mappingEvaluator);
            var postDeployAction       = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping {
                                       RetainBuildSpecified = true, RetainBuild = true
                                   } };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            // Act
            mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction);

            // Assert
            postDeployAction.AssertWasCalled(o => o.DeploymentFinished(
                                                 Arg <Mapping> .Is.Equal(mappings[0]),
                                                 Arg <DeployAgentResult> .Matches(result => !result.HasErrors))
                                             );
        }
Ejemplo n.º 2
0
        public void MappingProcessor_should_record_mapped_event_for_applicable_mappings()
        {
            // Arrange
            const int eventId                       = 7;
            var       mappingEvaluator              = MockRepository.GenerateStub <IMappingEvaluator>();
            var       deploymentEventRecorder       = MockRepository.GenerateStub <IDeploymentEventRecorder>();
            var       mappingExecutor               = MockRepository.GenerateStub <IMappingExecutor>();
            Func <IMappingExecutor> executorFactory = () => mappingExecutor;

            var mappingProcessor = new MappingProcessor(mappingEvaluator, deploymentEventRecorder, executorFactory);
            var postDeployAction = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping {
                                       Script = "AScript.ps1", Queue = "AQueue"
                                   } };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            // Act
            mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction, eventId);

            // Assert
            deploymentEventRecorder.AssertWasCalled(o => o.RecordQueued(eventId, mappings[0].Script, mappings[0].Queue));
        }
Ejemplo n.º 3
0
        public void MappingProcessor_should_process_multiple_mappings_in_same_queue_in_series()
        {
            // Arrange
            var deployAgent = new ParallelDeployAgent();

            var deployAgentProvider = MockRepository.GenerateStub <IDeployAgentProvider>();

            deployAgentProvider.Stub(o => o.GetDeployAgent(Arg <Mapping> .Is.Anything))
            .Return(deployAgent);

            var deploymentFolderSource = MockRepository.GenerateStub <IDeploymentFolderSource>();
            var mappingEvaluator       = MockRepository.GenerateStub <IMappingEvaluator>();
            var postDeployAction       = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping {
                                       Queue = "A"
                                   }, new Mapping {
                                       Queue = "A"
                                   } };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            var mappingProcessor = new MappingProcessor(deployAgentProvider, deploymentFolderSource, mappingEvaluator);

            // Act
            mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction);
            var expire = DateTime.UtcNow.AddSeconds(5);

            while (!deployAgent.HasExecuted && DateTime.UtcNow < expire)
            {
                Thread.Sleep(500);
            }

            // Assert
            Assert.IsFalse(deployAgent.WasParallel);
        }
Ejemplo n.º 4
0
        public void MappingProcessor_should_process_multiple_mappings_in_parallel()
        {
            // Arrange
            var mappingEvaluator        = MockRepository.GenerateStub <IMappingEvaluator>();
            var deploymentEventRecorder = MockRepository.GenerateStub <IDeploymentEventRecorder>();

            var postDeployAction = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping(), new Mapping() };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            int threadCount;

            using (var mappingExecutor = new ThreadCountingMappingExecutor())
            {
                Func <IMappingExecutor> executorFactory = () => mappingExecutor;
                var mappingProcessor = new MappingProcessor(mappingEvaluator, deploymentEventRecorder, executorFactory);

                // Act
                mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction, 0);
                Thread.Sleep(250);
                threadCount = mappingExecutor.ConcurrentThreadCount;
                mappingExecutor.WaitHandle.Set();
            }

            // Assert
            Assert.IsTrue(threadCount > 1);
        }