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)) ); }
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)); }
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); }
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); }