Ejemplo n.º 1
0
        public void Setup()
        {
            this.mocks = new MockRepository();

            mockery           = new Mockery();
            targetMock        = mockery.NewDynamicMock(typeof(IIntegrationRunnerTarget));
            resultManagerMock = mockery.NewDynamicMock(typeof(IIntegrationResultManager));
            quietPeriodMock   = mockery.NewDynamicMock(typeof(IQuietPeriod));

            runner = new IntegrationRunner((IIntegrationResultManager)resultManagerMock.MockInstance,
                                           (IIntegrationRunnerTarget)targetMock.MockInstance,
                                           (IQuietPeriod)quietPeriodMock.MockInstance);


            request       = ModificationExistRequest();
            endTime       = new DateTime(2005, 2, 1);
            modifications = new Modification[] { new Modification() };

            resultMock = mockery.NewDynamicMock(typeof(IIntegrationResult));
            resultMock.SetupResult("WorkingDirectory", TempFileUtil.GetTempPath("workingDir"));
            resultMock.SetupResult("ArtifactDirectory", TempFileUtil.GetTempPath("artifactDir"));
            resultMock.SetupResult("BuildProgressInformation", new ThoughtWorks.CruiseControl.Core.Util.BuildProgressInformation("", string.Empty));
            resultMock.SetupResult("IntegrationProperties", new Dictionary <string, string>());
            result = (IIntegrationResult)resultMock.MockInstance;

            lastResultMock = mockery.NewDynamicMock(typeof(IIntegrationResult));
            lastResult     = (IIntegrationResult)lastResultMock.MockInstance;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Fires this instance.
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public IntegrationRequest Fire()
        {
            IntegrationRequest request = null;

            foreach (ITrigger trigger in triggers)
            {
                IntegrationRequest triggerRequest = trigger.Fire();
                //todo : shouldn't we loop over all triggers before we return null?
                // suppose you have operator AND     and    Operator Or
                // if the AND operator does not have a trigger request, we return null
                // but the OR part could have a valid request
                // nasty stuff concerning JIRA issue 1835
                if (Operator == Operator.And && triggerRequest == null)
                {
                    return(null);
                }

                if (triggerRequest != null)
                {
                    if (request == null || triggerRequest.BuildCondition == BuildCondition.ForceBuild)
                    {
                        request = triggerRequest;
                    }
                }
            }
            return(request);
        }
Ejemplo n.º 3
0
        public void CancelPendingRequestRemovesPendingItems()
        {
            IProject project = (IProject)projectMock.Object;

            IntegrationRequest request1 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            projectMock.Setup(_project => _project.NotifyPendingState()).Verifiable();
            integrationQueue.Enqueue(new IntegrationQueueItem(project, request1, integrator));

            IntegrationRequest request2 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            integrationQueue.Enqueue(new IntegrationQueueItem(project, request2, integrator));

            int queuedItemCount = integrationQueue.GetQueuedIntegrations().Length;

            Assert.AreEqual(2, queuedItemCount);
            integrationTriggerMock.Setup(_trigger => _trigger.IntegrationCompleted()).Verifiable();

            integrator.CancelPendingRequest();

            queuedItemCount = integrationQueue.GetQueuedIntegrations().Length;
            Assert.AreEqual(1, queuedItemCount);

            VerifyAll();
            projectMock.Verify(_project => _project.NotifyPendingState(), Times.Once);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Starts a new <see cref="TaskExecutionContext"/>.
        /// </summary>
        /// <param name="project">The project.</param>
        /// <param name="request">The request.</param>
        /// <returns>
        /// The new <see cref="TaskExecutionContext"/>.
        /// </returns>
        public TaskExecutionContext StartNew(Project project, IntegrationRequest request)
        {
            logger.Debug("Starting execution context for project '{0}", project.Name);
            var buildName = this.Clock.Now.ToString("yyyyMMddHHmmss");
            var logFile   = TaskExecutionContext.GenerateArtifactFileName(project, buildName, "build.log");

            this.FileSystem.EnsureFolderExists(Path.GetDirectoryName(logFile));
            var writer = this.FileSystem.CreateXmlWriter(logFile);

            writer.WriteStartElement("project");
            writer.WriteAttributeString("name", project.Name);
            writer.WriteElementString("start", this.Clock.Now.ToString("s"));
            var parameters = new TaskExecutionParameters
            {
                XmlWriter          = writer,
                FileSystem         = this.FileSystem,
                Clock              = this.Clock,
                IntegrationRequest = request,
                Project            = project,
                BuildName          = buildName
            };
            var context = new TaskExecutionContext(parameters);

            return(context);
        }
        public void SetUp()
        {
            integrationQueues = new IntegrationQueueSet();
            integrationQueues.Add(TestQueueName, new DefaultQueueConfiguration(TestQueueName));
            integrationQueues.Add(TestQueueName2, new DefaultQueueConfiguration(TestQueueName2));
            integrationQueue1 = integrationQueues[TestQueueName];
            integrationQueue2 = integrationQueues[TestQueueName2];

            integrationRequest = new IntegrationRequest(BuildCondition.ForceBuild, "Test", null);

            project1Mock        = new LatchMock(typeof(IProject));
            project1Mock.Strict = true;
            project1Mock.SetupResult("Name", "ProjectOne");
            project1Mock.SetupResult("QueueName", TestQueueName);
            project1Mock.SetupResult("QueuePriority", 0);

            project2Mock        = new LatchMock(typeof(IProject));
            project2Mock.Strict = true;
            project2Mock.SetupResult("Name", "ProjectTwo");
            project2Mock.SetupResult("QueueName", TestQueueName2);
            project2Mock.SetupResult("QueuePriority", 0);

            queueNotifier1Mock        = new LatchMock(typeof(IIntegrationQueueNotifier));
            queueNotifier1Mock.Strict = true;

            queueNotifier2Mock        = new LatchMock(typeof(IIntegrationQueueNotifier));
            queueNotifier2Mock.Strict = true;

            integrationQueueItem1 = new IntegrationQueueItem((IProject)project1Mock.MockInstance,
                                                             integrationRequest, (IIntegrationQueueNotifier)queueNotifier1Mock.MockInstance);

            integrationQueueItem2 = new IntegrationQueueItem((IProject)project2Mock.MockInstance,
                                                             integrationRequest, (IIntegrationQueueNotifier)queueNotifier2Mock.MockInstance);
        }
Ejemplo n.º 6
0
        public void Setup()
        {
            this.mocks = new MockRepository(MockBehavior.Default);

            mockery           = new Mockery();
            targetMock        = mockery.NewDynamicMock <IIntegrationRunnerTarget>();
            resultManagerMock = mockery.NewDynamicMock <IIntegrationResultManager>();
            quietPeriodMock   = mockery.NewDynamicMock <IQuietPeriod>();

            runner = new IntegrationRunner((IIntegrationResultManager)resultManagerMock.Object,
                                           (IIntegrationRunnerTarget)targetMock.Object,
                                           (IQuietPeriod)quietPeriodMock.Object);


            request       = ModificationExistRequest();
            endTime       = new DateTime(2005, 2, 1);
            modifications = new Modification[] { new Modification() };

            resultMock = mockery.NewDynamicMock <IIntegrationResult>();
            resultMock.SetupGet(_result => _result.WorkingDirectory).Returns(TempFileUtil.GetTempPath("workingDir"));
            resultMock.SetupGet(_result => _result.ArtifactDirectory).Returns(TempFileUtil.GetTempPath("artifactDir"));
            resultMock.SetupGet(_result => _result.BuildProgressInformation).Returns(new ThoughtWorks.CruiseControl.Core.Util.BuildProgressInformation("", string.Empty));
            resultMock.SetupGet(_result => _result.IntegrationProperties).Returns(new Dictionary <string, string>());
            result = (IIntegrationResult)resultMock.Object;

            lastResultMock = mockery.NewDynamicMock <IIntegrationResult>();
            lastResult     = (IIntegrationResult)lastResultMock.Object;
        }
        public void CompletingAllPendingQueueBuildsGoesToPendingState()
        {
            IProject project = (IProject)projectMock.MockInstance;

            IntegrationRequest request1 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            projectMock.Expect("NotifyPendingState");

            IntegrationRequest request2 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            // As first build completes we go to pending as still another build on queue
            integrationTriggerMock.Expect("IntegrationCompleted");
            projectMock.Expect("NotifyPendingState");
            // As second build completes, we can go to sleeping state
            integrationTriggerMock.Expect("IntegrationCompleted");
            projectMock.Expect("NotifySleepingState");

            integrationQueue.Enqueue(new IntegrationQueueItem(project, request1, integrator));
            integrationQueue.Enqueue(new IntegrationQueueItem(project, request2, integrator));
            // Simulate first build completed by dequeuing it to invoke notifcation.
            integrationQueue.Dequeue();
            // Simulate second build completed by dequeuing it to invoke notifcation.
            integrationQueue.Dequeue();

            VerifyAll();
        }
        public void RunForDirectoryWildCard()
        {
            IntegrationRequest request       = new IntegrationRequest(BuildCondition.ForceBuild, "Somewhere", null);
            IntegrationSummary summary       = new IntegrationSummary(IntegrationStatus.Success, "A Label", "Another Label", new DateTime(2009, 1, 1));
            IntegrationResult  result        = new IntegrationResult("Test project", "Working directory", "Artifact directory", request, summary);
            Modification       modification1 = GenerateModification("first file", "Add");
            Modification       modification2 = GenerateModification("second file", "Modify");

            result.Modifications     = new Modification[] { modification1, modification2 };
            result.Status            = IntegrationStatus.Success;
            result.ArtifactDirectory = Path.GetTempPath();

            string packageLocation = Path.Combine(Path.GetTempPath(), "Test Package-1");
            string packageName     = packageLocation + ".zip";

            if (File.Exists(packageName))
            {
                File.Delete(packageName);
            }
            PackagePublisher publisher = new PackagePublisher();

            publisher.PackageName = packageLocation;
            publisher.PackageList = new IPackageItem[] {
                new PackageFile(Path.Combine(Path.GetTempPath(), "**\\datafile.txt"))
            };
            publisher.Run(result);
            Assert.IsTrue(File.Exists(packageName), "Package not generated");
            Assert.IsTrue(
                File.Exists(Path.Combine(Path.GetTempPath(), Path.Combine("A Label", "Test project-packages.xml"))),
                "Project package list not generated");
        }
        public void CancelPendingRequestRemovesPendingItems()
        {
            IProject project = (IProject)projectMock.MockInstance;

            IntegrationRequest request1 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            projectMock.Expect("NotifyPendingState");
            integrationQueue.Enqueue(new IntegrationQueueItem(project, request1, integrator));

            IntegrationRequest request2 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);

            projectMock.ExpectNoCall("NotifyPendingState");
            integrationQueue.Enqueue(new IntegrationQueueItem(project, request2, integrator));

            int queuedItemCount = integrationQueue.GetQueuedIntegrations().Length;

            Assert.AreEqual(2, queuedItemCount);
            integrationTriggerMock.Expect("IntegrationCompleted");

            integrator.CancelPendingRequest();

            queuedItemCount = integrationQueue.GetQueuedIntegrations().Length;
            Assert.AreEqual(1, queuedItemCount);

            VerifyAll();
        }
Ejemplo n.º 10
0
        public void IntegrateHandlesErrorDuringTaskCleanUp()
        {
            var initialised = false;
            var ran         = false;
            var dummy       = new TaskStub
            {
                OnInitialiseAction = () => initialised = true,
                OnRunAction        = c =>
                {
                    ran = true;
                    return(null);
                },
                OnCleanUpAction = () =>
                {
                    throw new Exception("Oops");
                }
            };
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new Project("test", dummy)
            {
                TaskExecutionFactory = executionFactoryMock.Object
            };
            var request = new IntegrationRequest("Dummy");

            project.Integrate(request);
            Assert.IsTrue(initialised);
            Assert.IsTrue(ran);
        }
Ejemplo n.º 11
0
        public void FirePassesOnParameters()
        {
            var parameters = new[]
            {
                new NameValuePair("test", "testValue")
            };
            var request          = new IntegrationRequest(BuildCondition.IfModificationExists, "test", null);
            var innerTriggerMock = this.mocks.StrictMock <ITrigger>();

            Expect.Call(innerTriggerMock.Fire()).Return(request);
            var trigger = new ParameterTrigger
            {
                InnerTrigger = innerTriggerMock,
                Parameters   = parameters
            };

            mocks.ReplayAll();
            var actual = trigger.Fire();

            mocks.VerifyAll();
            Assert.AreSame(request, actual);
            Assert.AreEqual(1, request.BuildValues.Count);
            Assert.AreEqual(parameters[0].Value,
                            request.BuildValues[parameters[0].Name]);
        }
Ejemplo n.º 12
0
        public void SetUp()
        {
            integrationQueues = new IntegrationQueueSet();
            integrationQueues.Add(TestQueueName, new DefaultQueueConfiguration(TestQueueName));
            integrationQueues.Add(TestQueueName2, new DefaultQueueConfiguration(TestQueueName2));
            integrationQueue1 = integrationQueues[TestQueueName];
            integrationQueue2 = integrationQueues[TestQueueName2];

            integrationRequest = new IntegrationRequest(BuildCondition.ForceBuild, "Test", null);

            project1Mock = new Mock <IProject>(MockBehavior.Strict);
            project1Mock.SetupGet(project => project.Name).Returns("ProjectOne");
            project1Mock.SetupGet(project => project.QueueName).Returns(TestQueueName);
            project1Mock.SetupGet(project => project.QueuePriority).Returns(0);

            project2Mock = new Mock <IProject>(MockBehavior.Strict);
            project2Mock.SetupGet(project => project.Name).Returns("ProjectTwo");
            project2Mock.SetupGet(project => project.QueueName).Returns(TestQueueName2);
            project2Mock.SetupGet(project => project.QueuePriority).Returns(0);

            queueNotifier1Mock = new Mock <IIntegrationQueueNotifier>(MockBehavior.Strict);

            queueNotifier2Mock = new Mock <IIntegrationQueueNotifier>(MockBehavior.Strict);

            integrationQueueItem1 = new IntegrationQueueItem((IProject)project1Mock.Object,
                                                             integrationRequest, (IIntegrationQueueNotifier)queueNotifier1Mock.Object);

            integrationQueueItem2 = new IntegrationQueueItem((IProject)project2Mock.Object,
                                                             integrationRequest, (IIntegrationQueueNotifier)queueNotifier2Mock.Object);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Fires this instance.
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public IntegrationRequest Fire()
        {
            IntegrationRequest request = InnerTrigger.Fire();

            if (request == null)
            {
                return(null);
            }
            InnerTrigger.IntegrationCompleted();             // reset inner trigger (timer)

            try
            {
                currentStatus = GetCurrentProjectStatus();
                if (lastStatus == null)
                {
                    lastStatus = currentStatus;
                    if (TriggerFirstTime && currentStatus.BuildStatus == TriggerStatus)
                    {
                        return(request);
                    }
                    return(null);
                }
                if (currentStatus.LastBuildDate > lastStatus.LastBuildDate && currentStatus.BuildStatus == TriggerStatus)
                {
                    return(request);
                }
            }
            catch (SocketException)
            {
                Log.Warning("Skipping Fire() because ServerUri " + ServerUri + " was not found.");
            }

            return(null);
        }
Ejemplo n.º 14
0
        private void WriteRequest(IntegrationRequest request)
        {
            if (request == null)
            {
                return;
            }
            writer.WriteStartElement(Elements.Request);
            writer.WriteAttributeString("source", request.Source);
            writer.WriteAttributeString("buildCondition", request.BuildCondition.ToString());
            writer.WriteString(request.ToString());
            writer.WriteEndElement();

            // Output the parameters
            if ((request.BuildValues != null) && (request.BuildValues.Count > 0))
            {
                writer.WriteStartElement(Elements.Parameters);
                foreach (string key in request.BuildValues.Keys)
                {
                    writer.WriteStartElement(Elements.Parameter);
                    writer.WriteAttributeString("name", key);
                    writer.WriteAttributeString("value", request.BuildValues[key]);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
        }
        public void SuccessfulIntegrationUpdatesSuccessCounter()
        {
            var counters = this.InitialiseCounters();

            Mock.Get(counters).Setup(_counters => _counters.IncrementCounter(
                                         IntegrationPerformanceCountersExtension.CategoryName,
                                         IntegrationPerformanceCountersExtension.NumberCompletedCounter)).Verifiable();
            Mock.Get(counters).Setup(_counters => _counters.IncrementCounter(
                                         IntegrationPerformanceCountersExtension.CategoryName,
                                         IntegrationPerformanceCountersExtension.NumberTotalCounter)).Verifiable();
            Mock.Get(counters).Setup(_counters => _counters.IncrementCounter(
                                         IntegrationPerformanceCountersExtension.CategoryName,
                                         IntegrationPerformanceCountersExtension.AverageTimeCounter,
                                         It.IsAny <long>())).Verifiable();
            var extension = new IntegrationPerformanceCountersExtension
            {
                PerformanceCounters = counters
            };
            var serverMock = this.mocks.Create <ICruiseServer>(MockBehavior.Strict).Object;
            var config     = new ExtensionConfiguration();

            Mock.Get(serverMock).SetupAdd(_serverMock => _serverMock.IntegrationCompleted += It.IsAny <EventHandler <IntegrationCompletedEventArgs> >()).Verifiable();
            Mock.Get(serverMock).SetupAdd(_serverMock => _serverMock.IntegrationStarted   += It.IsAny <EventHandler <IntegrationStartedEventArgs> >()).Verifiable();
            var request = new IntegrationRequest(BuildCondition.ForceBuild, "Testing", null);

            extension.Initialise(serverMock, config);
            Mock.Get(serverMock).Raise(_serverMock => _serverMock.IntegrationStarted   += null, new IntegrationStartedEventArgs(request, "TestProject"));
            Mock.Get(serverMock).Raise(_serverMock => _serverMock.IntegrationCompleted += null, new IntegrationCompletedEventArgs(request, "TestProject", IntegrationStatus.Success));

            mocks.VerifyAll();
        }
        public void GenerateFullManifest()
        {
            ManifestGenerator  generator     = new ManifestGenerator();
            IntegrationRequest request       = new IntegrationRequest(BuildCondition.ForceBuild, "Somewhere", null);
            IntegrationSummary summary       = new IntegrationSummary(IntegrationStatus.Success, "A Label", "Another Label", new DateTime(2009, 1, 1));
            IntegrationResult  result        = new IntegrationResult("Test project", "Working directory", "Artifact directory", request, summary);
            Modification       modification1 = GenerateModification("first file", "Add");
            Modification       modification2 = GenerateModification("second file", "Modify");

            result.Modifications = new Modification[] { modification1, modification2 };
            List <string> files = new List <string>();

            files.Add("first file");
            XmlDocument manifest = generator.Generate(result, files.ToArray());

            Assert.IsNotNull(manifest);
            string actualManifest   = manifest.OuterXml;
            string expectedManifest = "<manifest>" +
                                      "<header project=\"Test project\" label=\"A Label\" build=\"ForceBuild\" status=\"Unknown\">" +
                                      "<modification user=\"johnDoe\" changeNumber=\"1\" time=\"2009-01-01T00:00:00\">" +
                                      "<comment>A comment</comment>" +
                                      "<file name=\"first file\" type=\"Add\" />" +
                                      "<file name=\"second file\" type=\"Modify\" />" +
                                      "</modification>" +
                                      "</header>" +
                                      "<file name=\"first file\" />" +
                                      "</manifest>";

            Assert.AreEqual(expectedManifest, actualManifest);
        }
 public void StartNewStartsANewContext()
 {
     var path = Path.Combine(
         Environment.CurrentDirectory,
         "Test",
         "20100101120101");
     var writerMock = new Mock<XmlWriter>(MockBehavior.Strict);
     writerMock.Setup(w => w.WriteStartElement(null, "project", null)).Verifiable();
     writerMock.MockWriteAttributeString("name", "Test");
     writerMock.MockWriteElementString("start", "2010-01-01T12:01:01");
     var clockMock = new Mock<IClock>(MockBehavior.Strict);
     clockMock.Setup(c => c.Now).Returns(new DateTime(2010, 1, 1, 12, 1, 1));
     var fileSystemMock = new Mock<IFileSystem>(MockBehavior.Strict);
     fileSystemMock.Setup(fs => fs.EnsureFolderExists(path));
     fileSystemMock.Setup(fs => fs.CreateXmlWriter(Path.Combine(path, "build.log"))).Returns(writerMock.Object);
     var factory = new TaskExecutionFactory
                       {
                           Clock = clockMock.Object,
                           FileSystem = fileSystemMock.Object
                       };
     var project = new Project("Test");
     var request = new IntegrationRequest("Testing");
     var actual = factory.StartNew(project, request);
     Assert.IsNotNull(actual);
     Assert.AreSame(project, actual.Project);
     Assert.AreSame(request, actual.Request);
     writerMock.Verify();
 }
        public void RequestFiresEvents()
        {
            string             projectName = "Project 1";
            string             enforcer    = "JohnDoe";
            IntegrationRequest request     = new IntegrationRequest(BuildCondition.ForceBuild, enforcer, null);
            bool forceBuildReceived        = false;

            server.ForceBuildReceived += delegate(object o, CancelProjectEventArgs <string> e)
            {
                forceBuildReceived = true;
                Assert.AreEqual(projectName, e.ProjectName);
            };

            bool forceBuildProcessed = false;

            server.ForceBuildProcessed += delegate(object o, ProjectEventArgs <string> e)
            {
                forceBuildProcessed = true;
                Assert.AreEqual(projectName, e.ProjectName);
            };

            server.CruiseManager.Request(projectName, request);
            Assert.IsTrue(forceBuildReceived, "ForceBuildReceived not fired");
            Assert.IsTrue(forceBuildProcessed, "ForceBuildProcessed not fired");
        }
Ejemplo n.º 19
0
        public void StartNewStartsANewContext()
        {
            var path = Path.Combine(
                Environment.CurrentDirectory,
                "Test",
                "20100101120101");
            var writerMock = new Mock <XmlWriter>(MockBehavior.Strict);

            writerMock.Setup(w => w.WriteStartElement(null, "project", null)).Verifiable();
            writerMock.MockWriteAttributeString("name", "Test");
            writerMock.MockWriteElementString("start", "2010-01-01T12:01:01");
            var clockMock = new Mock <IClock>(MockBehavior.Strict);

            clockMock.Setup(c => c.Now).Returns(new DateTime(2010, 1, 1, 12, 1, 1));
            var fileSystemMock = new Mock <IFileSystem>(MockBehavior.Strict);

            fileSystemMock.Setup(fs => fs.EnsureFolderExists(path));
            fileSystemMock.Setup(fs => fs.CreateXmlWriter(Path.Combine(path, "build.log"))).Returns(writerMock.Object);
            var factory = new TaskExecutionFactory
            {
                Clock      = clockMock.Object,
                FileSystem = fileSystemMock.Object
            };
            var project = new Project("Test");
            var request = new IntegrationRequest("Testing");
            var actual  = factory.StartNew(project, request);

            Assert.IsNotNull(actual);
            Assert.AreSame(project, actual.Project);
            Assert.AreSame(request, actual.Request);
            writerMock.Verify();
        }
        public void ImportRelativeBasedManifest()
        {
            string sourceFile       = Path.Combine(Path.GetTempPath(), "ImportManifest.xml");
            string expectedManifest = "<manifest>" +
                                      "From a file" +
                                      "</manifest>";

            if (File.Exists(sourceFile))
            {
                File.Delete(sourceFile);
            }
            File.WriteAllText(sourceFile, expectedManifest);

            ManifestImporter generator = new ManifestImporter();

            generator.FileName = "ImportManifest.xml";
            IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "Somewhere", null);
            IntegrationSummary summary = new IntegrationSummary(IntegrationStatus.Success, "A Label", "Another Label", new DateTime(2009, 1, 1));
            IntegrationResult  result  = new IntegrationResult("Test project", "Working directory", "Artifact directory", request, summary);
            List <string>      files   = new List <string>();

            result.WorkingDirectory = Path.GetTempPath();
            XmlDocument manifest = generator.Generate(result, files.ToArray());

            Assert.IsNotNull(manifest);
            string actualManifest = manifest.OuterXml;

            Assert.AreEqual(expectedManifest, actualManifest);
        }
        public IntegrationRequest Fire()
        {
            IntegrationRequest request = null;

            if (this.lastChanged.HasValue)
            {
                if (this.InnerTrigger.Fire() != null)
                {
                    var changeTime = File.GetLastWriteTime(this.MonitorFile);
                    if (changeTime > this.lastChanged.Value)
                    {
                        request = new IntegrationRequest(
                            this.BuildCondition,
                            this.GetType().Name,
                            null);
                        this.lastChanged = changeTime;
                    }
                }
            }
            else
            {
                this.lastChanged = File.GetLastWriteTime(this.MonitorFile);
            }

            return(request);
        }
Ejemplo n.º 22
0
        public void GetNextRequestIsNullWithNothingOnQueue()
        {
            IntegrationRequest ir = integrationQueueUseFirst.GetNextRequest((IProject)project1Mock.MockInstance);

            Assert.IsNull(ir);
            VerifyAll();
        }
Ejemplo n.º 23
0
        public void VerifyCreateQueryProcessInfoWithAttributes()
        {
            string             fromtime    = "01/02/2003 00:00:00";
            string             totime      = "23/02/2006 23:14:05";
            IntegrationRequest request     = new IntegrationRequest(BuildCondition.ForceBuild, "source", null);
            IntegrationSummary lastSummary = new IntegrationSummary(IntegrationStatus.Success, "label", "lastlabel", DateTime.Now);
            IntegrationResult  from        = new IntegrationResult("test", @"c:\workspace", @"c:\artifacts", request, lastSummary);

            from.StartTime = DateTime.ParseExact(fromtime, PlasticSCM.DATEFORMAT, System.Globalization.CultureInfo.InvariantCulture);
            IntegrationResult to = new IntegrationResult("test", @"c:\workspace", @"c:\artifacts", request, lastSummary);

            to.StartTime = DateTime.ParseExact(totime, PlasticSCM.DATEFORMAT, System.Globalization.CultureInfo.InvariantCulture);

            PlasticSCM plasticscm = new PlasticSCM();

            NetReflector.Read(PLASTICSCM_XML, plasticscm);
            string query = string.Format(
                @"c:\plastic\client\cm.exe find revision where branch = 'br:/main' and revno != 'CO' "
                + "and date between '{0}' and '{1}' on repository 'mainrep' ", fromtime, totime);
            string dateformat = string.Format(System.Globalization.CultureInfo.CurrentCulture, "--dateformat=\"{0}\" ", PlasticSCM.DATEFORMAT);
            string format     = string.Format(System.Globalization.CultureInfo.CurrentCulture, "--format=\"{0}\"", PlasticSCM.FORMAT);

            ProcessInfo info = plasticscm.CreateQueryProcessInfo(from, to);

            Assert.AreEqual(query + dateformat + format, info.FileName + " " + info.Arguments);
        }
Ejemplo n.º 24
0
        public void ProjectsInQueueShouldNotIntegrateIfQueueIsLocked()
        {
            // ensure we have the correct setup for testing
            string[] queues = integrationQueues.GetQueueNames();
            integrationQueues[queues[0]].Configuration.LockQueueNames = string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0},{1}", queues[1], queues[2]);
            integrationQueues[queues[1]].Configuration.LockQueueNames = queues[0];
            integrationQueues[queues[2]].Configuration.LockQueueNames = queues[0];

            // now lock one of the queues and add projects to it
            IDisposable lock1;

            Assert.IsTrue(integrationQueues[queues[0]].TryLock(out lock1));

            project1Mock.SetupResult("QueueName", queues[1]);
            project1Mock.SetupResult("QueuePriority", 1);
            queueNotifier1Mock.Expect("NotifyEnteringIntegrationQueue");
            integrationQueueReplace.Enqueue(integrationQueueItem1);

            Assert.IsNull(integrationQueueReplace.GetNextRequest((IProject)project1Mock.MockInstance), "Expected no next request, as queue is locked");

            lock1.Dispose();

            IntegrationRequest next = integrationQueueReplace.GetNextRequest((IProject)project1Mock.MockInstance);

            Assert.IsNotNull(next, "Expected next request as queue lock has been released");
        }
Ejemplo n.º 25
0
        public void IntegrateHandlesErrorDuringSourceControlCleanUp()
        {
            var initialised = false;
            var dummy       = new SourceControlBlockStub
            {
                OnInitialise = () => initialised = true,
                OnCleanUp    = () =>
                {
                    throw new Exception("Oops");
                }
            };
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new Project("test")
            {
                TaskExecutionFactory = executionFactoryMock.Object
            };

            project.SourceControl.Add(dummy);
            var request = new IntegrationRequest("Dummy");

            project.Integrate(request);
            Assert.IsTrue(initialised);
        }
        public IntegrationRequest Fire()
        {
            if (!started)
            {
                started = true;

                if (string.IsNullOrEmpty(this.EndPoint))
                {
                    this.EndPoint = DefaultEndPoint;
                }
                if (this.Branches == null || this.Branches.Length == 0)
                {
                    this.Branches = new string[] { "master" }
                }
                ;

                Log("Starting OWIN on " + this.EndPoint);

                webApp = OwinStartup.Start(this);

                Log("Started OWIN on " + this.EndPoint);
            }

            if (this.PushData != null)
            {
                IntegrationRequest req = new IntegrationRequest(this.BuildCondition, this.GetType().Name, this.PushData.PushedBy);
                req.BuildValues["Branch"] = this.PushData.Branch;
                this.PushData             = null;
                return(req);
            }
            return(null);
        }
Ejemplo n.º 27
0
        public void IntegrateInitialisesRunsAndCleansUp()
        {
            var initialised = false;
            var ran         = false;
            var cleanedUp   = false;
            var dummy       = new TaskStub
            {
                OnInitialiseAction = () => initialised = true,
                OnRunAction        = c => { ran = true; return(null); },
                OnCleanUpAction    = () => cleanedUp = true
            };
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new Project("test", dummy)
            {
                TaskExecutionFactory = executionFactoryMock.Object
            };
            var request = new IntegrationRequest("Dummy");

            project.Integrate(request);
            Assert.IsTrue(initialised);
            Assert.IsTrue(ran);
            Assert.IsTrue(cleanedUp);
        }
Ejemplo n.º 28
0
        public void ShouldOnlyBuildBetween7AMAnd7PMOnWeekdays()
        {
            FilterTrigger outerTrigger = new FilterTrigger((DateTimeProvider)mockDateTime.Object);

            outerTrigger.StartTime    = "19:00";
            outerTrigger.EndTime      = "7:00";
            outerTrigger.InnerTrigger = trigger;

            trigger.StartTime = "0:00";
            trigger.EndTime   = "23:59:59";
            trigger.WeekDays  = new DayOfWeek[] { DayOfWeek.Saturday, DayOfWeek.Sunday };
            IntegrationRequest request = ModificationExistRequest();

            mockTrigger.Setup(_trigger => _trigger.Fire()).Returns(request);

            mockDateTime.SetupGet(provider => provider.Now).Returns(new DateTime(2006, 8, 10, 11, 30, 0, 0));             // Thurs midday
            Assert.AreEqual(request, outerTrigger.Fire(), "outerTrigger.Fire()");

            mockDateTime.SetupGet(provider => provider.Now).Returns(new DateTime(2006, 8, 10, 19, 30, 0, 0));             // Thurs evening
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");

            mockDateTime.SetupGet(provider => provider.Now).Returns(new DateTime(2006, 8, 12, 11, 30, 0, 0));             // Sat midday
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");

            mockDateTime.SetupGet(provider => provider.Now).Returns(new DateTime(2006, 8, 12, 19, 30, 0, 0));             // Sat evening
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");
        }
 /// <summary>
 /// Fires the IntegrationCompleted event.
 /// </summary>
 /// <param name="request">The integration request.</param>
 /// <param name="projectName">The name of the project.</param>
 /// <param name="status">The outcome of the integration.</param>
 protected virtual void FireIntegrationCompleted(IntegrationRequest request, string projectName, IntegrationStatus status)
 {
     if (IntegrationCompleted != null)
     {
         IntegrationCompletedEventArgs args = new IntegrationCompletedEventArgs(request, projectName, status);
         IntegrationCompleted(this, args);
     }
 }
Ejemplo n.º 30
0
        /// <summary>
        /// Creates the initial integration result.
        /// </summary>
        /// <param name="project">The project.</param>
        /// <param name="workingDirectory">The working directory.</param>
        /// <param name="artifactDirectory">The artifact directory.</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static IntegrationResult CreateInitialIntegrationResult(string project, string workingDirectory, string artifactDirectory)
        {
            IntegrationRequest initialRequest = new IntegrationRequest(BuildCondition.ForceBuild, "Initial Build", null);
            IntegrationResult  result         = new IntegrationResult(project, workingDirectory, artifactDirectory, initialRequest, IntegrationSummary.Initial);

            result.StartTime = DateTime.Now.AddDays(-1);
            result.EndTime   = DateTime.Now;
            return(result);
        }
        private void PollTriggers()
        {
            IntegrationRequest triggeredRequest = trigger.Fire();

            if (triggeredRequest != null)
            {
                AddToQueue(triggeredRequest);
            }
        }
 public void ConstructorSetsProperties()
 {
     var request = new IntegrationRequest("Test");
     var project = new Project();
     var context = new TaskExecutionContext(new TaskExecutionParameters
                                                {
                                                    IntegrationRequest = request,
                                                    Project = project
                                                });
     Assert.AreSame(request, context.Request);
     Assert.AreSame(project, context.Project);
     Assert.IsNotNull(context.ModificationSets);
 }
Ejemplo n.º 33
0
 /// <summary>
 /// Starts a new <see cref="TaskExecutionContext"/>.
 /// </summary>
 /// <param name="project">The project.</param>
 /// <param name="request">The request.</param>
 /// <returns>
 /// The new <see cref="TaskExecutionContext"/>.
 /// </returns>
 public TaskExecutionContext StartNew(Project project, IntegrationRequest request)
 {
     logger.Debug("Starting execution context for project '{0}", project.Name);
     var buildName = this.Clock.Now.ToString("yyyyMMddHHmmss");
     var logFile = TaskExecutionContext.GenerateArtifactFileName(project, buildName, "build.log");
     this.FileSystem.EnsureFolderExists(Path.GetDirectoryName(logFile));
     var writer = this.FileSystem.CreateXmlWriter(logFile);
     writer.WriteStartElement("project");
     writer.WriteAttributeString("name", project.Name);
     writer.WriteElementString("start", this.Clock.Now.ToString("s"));
     var parameters = new TaskExecutionParameters
                          {
                              XmlWriter = writer,
                              FileSystem = this.FileSystem,
                              Clock = this.Clock,
                              IntegrationRequest = request,
                              Project = project,
                              BuildName = buildName
                          };
     var context = new TaskExecutionContext(parameters);
     return context;
 }
Ejemplo n.º 34
0
 public void IntegrateHandlesErrorDuringTaskCleanUp()
 {
     var initialised = false;
     var ran = false;
     var dummy = new TaskStub
                     {
                         OnInitialiseAction = () => initialised = true,
                         OnRunAction = c =>
                                           {
                                               ran = true;
                                               return null;
                                           },
                         OnCleanUpAction = () =>
                                               {
                                                   throw new Exception("Oops");
                                               }
                     };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new Project("test", dummy)
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(initialised);
     Assert.IsTrue(ran);
 }
Ejemplo n.º 35
0
 public void IntegrateInitialisesAndCleansUpSourceControl()
 {
     var initialised = false;
     var cleanedUp = false;
     var dummy = new SourceControlBlockStub
         {
             OnInitialise = () => initialised = true,
             OnCleanUp = () => cleanedUp = true
         };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new Project("test")
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     project.SourceControl.Add(dummy);
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(initialised);
     Assert.IsTrue(cleanedUp);
 }
 /// <summary>
 /// Initialise a new instance of <see cref="IntegrationStartedEventArgs"/>.
 /// </summary>
 /// <param name="projectName"></param>
 /// <param name="request">The request to process.</param>
 public IntegrationStartedEventArgs(IntegrationRequest request, string projectName)
     : base(projectName)
 {
     this.request = request;
 }
Ejemplo n.º 37
0
 public void IntegrateHandlesErrorDuringSourceControlCleanUp()
 {
     var initialised = false;
     var dummy = new SourceControlBlockStub
     {
         OnInitialise = () => initialised = true,
         OnCleanUp = () =>
                         {
                             throw new Exception("Oops");
                         }
     };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new Project("test")
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     project.SourceControl.Add(dummy);
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(initialised);
 }
Ejemplo n.º 38
0
 public void IntegrateResetsTriggers()
 {
     var reset = false;
     var dummy = new TriggerStub
                     {
                         OnResetAction = () => reset = true
                     };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new ProjectStub("test")
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     project.Triggers.Add(dummy);
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(reset);
 }
Ejemplo n.º 39
0
 public void IntegrateHandlesErrorDuringTriggerReset()
 {
     var dummy = new TriggerStub
                     {
                         OnResetAction = () =>
                                             {
                                                 throw new Exception("Oops");
                                             }
                     };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new Project("test")
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     project.Triggers.Add(dummy);
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
 }
Ejemplo n.º 40
0
 public void IntegrateSkipsTasksWhoseConditionsFail()
 {
     var conditionMock = new Mock<TaskCondition>(MockBehavior.Strict);
     conditionMock.Setup(c => c.Evaluate(It.IsAny<TaskExecutionContext>()))
         .Returns(false);
     var initialised = false;
     var ran = false;
     var cleanedUp = false;
     var dummy = new TaskStub
                     {
                         OnInitialiseAction = () => initialised = true,
                         OnRunAction = c =>
                                           {
                                               ran = true;
                                               return null;
                                           },
                         OnCleanUpAction = () => cleanedUp = true
                     };
     dummy.Conditions.Add(conditionMock.Object);
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     var contextMock = InitialiseExecutionContext(executionFactoryMock);
     contextMock.Setup(ec => ec.AddEntryToBuildLog("Task 'TaskStub' has been skipped"));
     var project = new Project("test", dummy)
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(initialised);
     Assert.IsFalse(ran);
     Assert.IsTrue(cleanedUp);
 }
 /// <summary>
 /// Initialise a new instance of <see cref="IntegrationCompletedEventArgs"/>.
 /// </summary>
 /// <param name="request">The request to process.</param>
 /// <param name="projectName"></param>
 /// <param name="status"></param>
 public IntegrationCompletedEventArgs(IntegrationRequest request, string projectName, IntegrationStatus status)
     : base(projectName)
 {
     this.request = request;
     this.status = status;
 }
Ejemplo n.º 42
0
 public void IntegrateHandlesErrorDuringInitialisation()
 {
     var ran = false;
     var cleanedUp = false;
     var dummy = new TaskStub
                     {
                         OnInitialiseAction = () =>
                                                  {
                                                      throw new Exception("Oops!");
                                                  },
                         OnRunAction = c =>
                                           {
                                               ran = true;
                                               return null;
                                           },
                         OnCleanUpAction = () => cleanedUp = true
                     };
     var project = new Project("test", dummy);
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsFalse(ran);
     Assert.IsTrue(cleanedUp);
 }
Ejemplo n.º 43
0
 public override IntegrationStatus Integrate(IntegrationRequest request)
 {
     return this.OnIntegrate == null ? 
         base.Integrate(request) : 
         this.OnIntegrate(request);
 }
Ejemplo n.º 44
0
 public void IntegrateInitialisesRunsAndCleansUp()
 {
     var initialised = false;
     var ran = false;
     var cleanedUp = false;
     var dummy = new TaskStub
                     {
                         OnInitialiseAction = () => initialised = true,
                         OnRunAction = c => { ran = true; return null; },
                         OnCleanUpAction = () => cleanedUp = true
                     };
     var executionFactoryMock = new Mock<ITaskExecutionFactory>(MockBehavior.Strict);
     InitialiseExecutionContext(executionFactoryMock);
     var project = new Project("test", dummy)
                       {
                           TaskExecutionFactory = executionFactoryMock.Object
                       };
     var request = new IntegrationRequest("Dummy");
     project.Integrate(request);
     Assert.IsTrue(initialised);
     Assert.IsTrue(ran);
     Assert.IsTrue(cleanedUp);
 }