Example #1
0
        public void StopStopsProjects()
        {
            var started = false;
            var stopped = false;
            var project = new ProjectStub
            {
                Name        = "Test",
                OnStart     = () => started = true,
                OnStop      = () => stopped = true,
                OnLoadState = () => { }
            };
            var server      = new Server(project);
            var application = new Application
            {
                Configuration = server
            };

            application.Start();

            // Give the projects time to start
            SpinWait.SpinUntil(() => started, TimeSpan.FromSeconds(5));
            Assert.IsTrue(started);
            application.Stop();

            // Give the projects time to stop
            SpinWait.SpinUntil(() => stopped, TimeSpan.FromSeconds(5));
            Assert.IsTrue(stopped);
        }
Example #2
0
        public void LoadConfigurationFailsErrorInValidation()
        {
            var path    = Path.Combine(Environment.CurrentDirectory, "ccnet.config");
            var project = new ProjectStub
            {
                OnValidate = vl =>
                {
                    throw new ConfigurationException("Oops");
                }
            };
            var server      = new Server("Test", project);
            var stream      = new MemoryStream();
            var serviceMock = new Mock <IConfigurationService>(MockBehavior.Strict);

            serviceMock.Setup(s => s.Load(stream)).Returns(server);
            var fileSystemMock = new Mock <IFileSystem>(MockBehavior.Strict);

            fileSystemMock.Setup(fs => fs.OpenFileForRead(path)).Returns(stream);
            var application = new Application
            {
                ConfigurationService = serviceMock.Object,
                FileSystem           = fileSystemMock.Object,
                ValidationLog        = new LoggingValidationLog()
            };

            Assert.Throws <ConfigurationException>(application.LoadConfiguration);
        }
        public void StopCleansUpTriggers()
        {
            var cleaned = false;
            var trigger = new TriggerStub
            {
                OnCleanUp     = () => cleaned = true,
                OnCheckAction = () => null
            };
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(cleaned);
            Assert.IsNull(project.MainThreadException);
        }
Example #4
0
        public void GivenXmlWithSingleProject__WhenCallingParse__ShouldReturnArrayWithMatchingProject()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""TestProject"">
                                      <Jobs>
                                        <Job Id=""idvalue1"">
                                          <Tasks>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            const string projectName = "TestProject";

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                Project = new ProjectStub()
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            IEnumerable <IProject> projects = sut.Parse(Path);

            ProjectStub actual     = projects.ToList()[0] as ProjectStub;
            string      actualName = actual?.Name;

            AssertProjectNameEquals(projectName, actualName);
        }
        public void IntegrationHandlesExceptionDuringIntegration()
        {
            var triggered            = false;
            var trigger              = GenerateRunOnceTrigger(() => triggered = true);
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test")
            {
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock       = new SystemClock(),
                OnIntegrate = ir =>
                {
                    throw new Exception();
                }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsNull(project.MainThreadException);
            Assert.AreEqual(IntegrationStatus.Error, project.PersistedState.LastIntegration.Status);
        }
Example #6
0
        public void AskToIntegrateFailsIfUnableToLock()
        {
            var project = new ProjectStub();
            var queue   = new TestQueue();
            var context = new IntegrationContext(project);

            queue.Lock();
            Assert.Throws <Exception>(() => queue.AskToIntegrate(context));
        }
Example #7
0
        public void CompletingAnIntegrationFailsIfUnableToLock()
        {
            var project = new ProjectStub();
            var queue   = new TestQueue();
            var context = new IntegrationContext(project);

            queue.AskToIntegrate(context);
            queue.Lock();
            Assert.Throws <Exception>(context.Complete);
        }
Example #8
0
        public void Should_build_all_specified_targets()
        {
            var project = new ProjectStub();
            var built = new List<string>();
            project.HasTargetHandler = x => true;
            project.RunHandler = built.Add;

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions("BuildFile", "Target1", "Target2"));

            built.ShouldEqual(new[]{ "Target1", "Target2" });
        }
Example #9
0
        public void CompletingAnIntegrationRemovesItFromActiveRequests()
        {
            var project = new ProjectStub();
            var queue   = new Queue();
            var context = new IntegrationContext(project);

            queue.AskToIntegrate(context);
            context.Complete();
            Assert.AreEqual(0, queue.GetActiveRequests().Count());
            Assert.AreEqual(0, queue.GetPendingRequests().Count());
        }
Example #10
0
        public void StartHandlesError()
        {
            var project     = new ProjectStub();
            var server      = new Server(project);
            var application = new Application
            {
                Configuration = server
            };
            var error = Assert.Throws <InvalidOperationException>(application.Start);

            Assert.AreEqual("Cannot start a project without a name", error.Message);
        }
Example #11
0
        public bool Update(ProjectStub project)
        {
            var updatedProject = Api.Put <Project>("/projects/{0}.json".FormatWith(project.Id), project);

            if (updatedProject != null)
            {
                ModelCopier.CopyModel(updatedProject, project);
                return(true);
            }

            return(false);
        }
Example #12
0
        public void ValidateValidatesChildren()
        {
            var validated   = false;
            var projectStub = new ProjectStub
            {
                OnValidate = vl => validated = true
            };
            var validationMock = new Mock <IValidationLog>();
            var queue          = new Queue("Test", projectStub);

            queue.Validate(validationMock.Object);
            Assert.IsTrue(validated);
        }
        public void StartFailsIfAlreadyStarted()
        {
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            Assert.Throws <InvalidOperationException>(project.Start);
        }
Example #14
0
        public void Should_run_dependencies_before_self()
        {
            var targetsExecuted = new List<string>();
            var dependencies = new List<string>();
            dependencies.Add("Core");
            dependencies.Add("Build");

            var project = new ProjectStub();
            project.RunHandler = targetsExecuted.Add;
            var target = new TargetStub(project, dependencies);
            target.ExecuteHandler = () => Assert.AreEqual(dependencies, targetsExecuted);
            target.Execute();
        }
        public void ValidateValidatesChildren()
        {
            var validated = false;
            var project   = new ProjectStub
            {
                Name       = "Project",
                OnValidate = vl => validated = true
            };
            var server         = new Server("Server", project);
            var validationStub = new ValidationLogStub();

            server.Validate(validationStub);
            Assert.IsTrue(validated);
        }
Example #16
0
        public void Original_current_directory_should_be_restored_when_finished()
        {
            var project = new ProjectStub
                          {
                              HasTargetHandler = x => true,
                              PlatformHandler = () => new ExecutionEnvironmentStub()
                          };

            var originalDirectory = project.Platform.CurrentDirectory;

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions(@"path\to\BuildFile", "whatever" ));

            Assert.AreEqual(originalDirectory, project.Platform.CurrentDirectory);
        }
Example #17
0
        public void Project_should_have_its_source_scripts_folder_as_current_directory()
        {
            var project = new ProjectStub
                          {
                              HasTargetHandler = x => true,
                              PlatformHandler = () => new ExecutionEnvironmentStub()
                          };

            string projectCurrentDirectory = null;
            project.RunHandler = s => projectCurrentDirectory = project.Platform.CurrentDirectory;

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions(@"path\to\BuildFile", "whatever"));

            StringAssert.EndsWith(@"path\to", projectCurrentDirectory);
        }
        public void StartStartsTheProject()
        {
            var stateLoaded = false;
            var project     = new ProjectStub("Test")
            {
                OnLoadState = () => stateLoaded = true
            };

            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            Assert.AreEqual(ProjectState.Running, project.State);
            Assert.IsTrue(stateLoaded);
        }
        public void StartMessageStartsProject()
        {
            var started = false;
            var project = new ProjectStub
            {
                Name        = "Test",
                OnLoadState = () => { },
                OnStart     = () => started = true
            };
            var request = new Messages.Blank();

            project.Start(request);
            Thread.Sleep(100);
            Assert.IsTrue(started);
        }
Example #20
0
        public void AskToIntegrateWillTriggerProjectIfFirst()
        {
            var project = new ProjectStub();
            var queue   = new Queue();
            var context = new IntegrationContext(project);

            queue.AskToIntegrate(context);
            var canIntegrate = context.Wait(TimeSpan.FromSeconds(5));

            Assert.IsTrue(canIntegrate);
            var active = queue.GetActiveRequests();

            Assert.AreEqual(1, active.Count());
            Assert.AreEqual(0, queue.GetPendingRequests().Count());
            Assert.AreSame(active.First(), context);
        }
Example #21
0
        public void CompletingReleasingSubsequentItems()
        {
            var queue    = new Queue();
            var project1 = new ProjectStub();
            var project2 = new ProjectStub();
            var context1 = new IntegrationContext(project1);
            var context2 = new IntegrationContext(project2);

            queue.AskToIntegrate(context1);
            queue.AskToIntegrate(context2);
            context1.Complete();
            var active = queue.GetActiveRequests();

            Assert.AreEqual(1, active.Count());
            Assert.AreEqual(0, queue.GetPendingRequests().Count());
            Assert.AreSame(context2, active.First());
        }
        public void StopStopsAStartedProject()
        {
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.AreEqual(ProjectState.Stopped, project.State);
            Assert.IsNull(project.MainThreadException);
        }
Example #23
0
        public void AskToIntegrateWillQueueSubsequentItems()
        {
            var queue    = new Queue();
            var project1 = new ProjectStub();
            var project2 = new ProjectStub();
            var context1 = new IntegrationContext(project1);
            var context2 = new IntegrationContext(project2);

            queue.AskToIntegrate(context1);
            queue.AskToIntegrate(context2);
            var active  = queue.GetActiveRequests();
            var pending = queue.GetPendingRequests();

            Assert.AreEqual(1, active.Count());
            Assert.AreEqual(1, pending.Count());
            Assert.AreSame(active.First(), context1);
            Assert.AreSame(pending.First(), context2);
        }
Example #24
0
        public void GivenConfigWithProjectAndJob__WhenParsing__ProjectShouldHaveJob()
        {
            const string lua = @"
                local p = project('test')
                p:add_job('test-job')  
            ";

            _mockFileData.TextContents = lua;

            JobStub jobStub = new JobStub();
            BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub);
            IEnumerable <IProject>    projects    = MakeSutAndParse(factoryStub);

            ProjectStub actual    = projects.First() as ProjectStub;
            IJob        actualJob = actual?.Jobs.First();

            Assert.AreSame(jobStub, actualJob);
            Assert.AreEqual("test-job", actualJob?.Name);
        }
Example #25
0
        public void GivenLuaProjectWithJob__WhenGettingProject__ProjectShouldHaveJob()
        {
            JobStub jobStub = new JobStub();
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project = new ProjectStub(),
                Job     = jobStub
            };

            LuaProject sut = new LuaProject("TestProject", factoryStub);

            sut.add_job("test-job");

            ProjectStub actual    = sut.Project as ProjectStub;
            IJob        actualJob = actual?.Jobs.First();

            Assert.AreSame(jobStub, actualJob);
            Assert.AreEqual("test-job", actualJob?.Name);
        }
        public void StartInitialisesTriggers()
        {
            var initialised = false;
            var trigger     = new TriggerStub
            {
                OnInitialise = () => initialised = true
            };
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            Assert.IsTrue(initialised);
        }
Example #27
0
        public async Task <Project> ConvertProject(ProjectStub project, string env, string channelRange, string tag)
        {
            var projectRes = await this.GetProject(project.ProjectId);

            var packages = channelRange == null ? null : await this.GetPackages(projectRes, channelRange, tag);

            List <RequiredVariable> requiredVariables = await GetVariables(projectRes.VariableSetId);

            return(new Project {
                CurrentRelease = (await this.GetReleasedVersion(project.ProjectId, env)).Release,
                ProjectName = project.ProjectName,
                ProjectId = project.ProjectId,
                Checked = true,
                ProjectGroupId = project.ProjectGroupId,
                AvailablePackages = packages,
                LifeCycleId = project.LifeCycleId,
                RequiredVariables = requiredVariables
            });
        }
        public void IntegrationAsksHostAndContinuesOnAllowed()
        {
            var triggered = false;
            var trigger   = GenerateRunOnceTrigger(() => triggered = true);
            var ran       = false;
            var task      = new TaskStub
            {
                OnRunAction = tc =>
                {
                    ran = true;
                    return(null);
                }
            };
            var hostMock = new Mock <ServerItem>(MockBehavior.Strict);

            hostMock.Setup(h => h.AskToIntegrate(It.IsAny <IntegrationContext>()));
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test", task)
            {
                Host = hostMock.Object,
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock = new SystemClock()
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsTrue(ran);
            Assert.IsNull(project.MainThreadException);
        }
        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);
        }
Example #30
0
        public void GivenProjectWithTwoJobs__WhenCallingParse__ShouldAddBothJobsToProject()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"">
                                      <Jobs>
                                        <Job Id=""FirstJob"" Name=""FirstJob"">
                                          <Tasks></Tasks>
                                        </Job>

                                        <Job Id=""SecondJob"" Name=""SecondJob"">
                                          <Tasks></Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            List <IJob> expectedJobs = new List <IJob> {
                new JobStub(), new JobStub()
            };
            ProjectStub projectStub = new ProjectStub();
            JobIteratingBuildComponentFactoryStub factoryStub = new JobIteratingBuildComponentFactoryStub
            {
                Project = projectStub,
                Jobs    = expectedJobs
            };

            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);

            CollectionAssert.AreEqual(expectedJobs, projectStub.Jobs);
        }
        public void IntegrationStartsFromTrigger()
        {
            var triggered = false;
            var trigger   = GenerateRunOnceTrigger(() => triggered = true);
            var ran       = false;
            var task      = new TaskStub
            {
                OnRunAction = tc =>
                {
                    ran = true;
                    return(null);
                }
            };
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test", task)
            {
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock = new SystemClock()
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsTrue(ran);
            Assert.IsNull(project.MainThreadException);
        }
Example #32
0
        public void GivenXmlWithSingleProjectAndJob__WhenCallingParse__ProjectShouldHaveMatchingJob()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"">
                                      <Jobs>
                                        <Job Id=""idvalue1"" Name=""TestJob"">
                                          <Tasks>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            const string jobName = "TestJob";

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project = new ProjectStub(), Job = new JobStub()
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            IEnumerable <IProject> projects = sut.Parse(Path);

            ProjectStub actualProject = (ProjectStub)projects.ToList()[0];
            IJob        actualJob     = actualProject.Jobs[0];

            AssertJobNameEquals(jobName, actualJob);
        }
Example #33
0
 public IEnumerable <Event> GetForProject(ProjectStub project, DateTime since)
 {
     return(GetForProject(project.Id, since));
 }
Example #34
0
        public void Should_return_failure_if_no_default_and_no_targets_specified()
        {
            var project = new ProjectStub();
            var built = new List<string>();
            project.HasTargetHandler = x => true;
            project.RunHandler = built.Add;
            project.DefaultTargetHandler = x => null;

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions("BuildFile"));

            built.ShouldBeEmpty();
        }
Example #35
0
 public bool Delete(ProjectStub project)
 {
     return(Delete(project.Id));
 }
Example #36
0
        public void Should_not_build_default_target_if_explicit_targets_are_supplied()
        {
            var project = new ProjectStub();
            var built = new List<string>();
            project.HasTargetHandler = x => true;
            project.RunHandler = built.Add;
            project.DefaultTargetHandler = x => "Default";

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions("BuildFile", "Target1", "Target2" ));

            Assert.That(built, Contains.Item("Target1").And.Contains("Target2"));
            CollectionAssert.DoesNotContain(built, "Default");
        }
Example #37
0
        public void BuildTarget_should_return_Success_if_valid_target_and_successful_build()
        {
            var project = new ProjectStub {HasTargetHandler = x => true};

            Assert.That(Program.BuildTarget(project, "Target"), Is.EqualTo(Program.Success));
        }
Example #38
0
        public void Should_run_default_target_if_no_target_specified()
        {
            var project = new ProjectStub();
            var built = new List<string>();
            project.HasTargetHandler = x => true;
            project.RunHandler = built.Add;
            project.DefaultTargetHandler = x => "Target1";

            new Program(Logger.Null, new StubProjectCompiler(project)).Run(new StubOptions("BuildFile"));

            built.ShouldEqual(new[] { "Target1" });
        }
Example #39
0
        public void BuildTarget_should_return_Failure_if_target_not_in_Project()
        {
            var project = new ProjectStub {HasTargetHandler = x => false};

            Assert.That(Program.BuildTarget(project, "Target"), Is.EqualTo(Program.Failure));
        }