public static StageConfig custom(String stageName, boolean artifactCleanupProhibited, String... buildNames) { StageConfig stageConfig = new StageConfig(new CaseInsensitiveString(stageName), BuildPlanMother.jobConfigs(buildNames)); ReflectionUtil.setField(stageConfig, "artifactCleanupProhibited", artifactCleanupProhibited); return stageConfig; }
private StageConfig completedStage() { JobConfigs plans = new JobConfigs(); plans.add(new JobConfig("completed")); return new StageConfig(new CaseInsensitiveString("completed stage"), plans); }
@Test public void shouldHandleNullStageNamesWhileValidating() { StageConfig s1 = new StageConfig(); StageConfig s2 = new StageConfig(new CaseInsensitiveString("s2"), new JobConfigs()); PipelineConfig pipeline = new PipelineConfig(new CaseInsensitiveString("p1"), new MaterialConfigs(), s1, s2); pipeline.validate(null); assertThat(s1.errors().on(StageConfig.NAME).contains("Invalid stage name 'null'"), is(true)); }
public StageConfig toStage(CRStage crStage) { Approval approval = toApproval(crStage.getApproval()); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString(crStage.getName()), crStage.isFetchMaterials(), crStage.isCleanWorkingDir(), approval, crStage.isArtifactCleanupProhibited(), toJobConfigs(crStage.getJobs())); EnvironmentVariablesConfig environmentVariableConfigs = stageConfig.getVariables(); for (CREnvironmentVariable crEnvironmentVariable : crStage.getEnvironmentVariables()) { environmentVariableConfigs.add(toEnvironmentVariableConfig(crEnvironmentVariable)); } return stageConfig; }
public static PipelineConfig createPipelineConfigWithStages(String pipelineName, String... stageNames) { StageConfig[] configs = new StageConfig[stageNames.length]; int i = 0; for (String stageName : stageNames) { configs[i++] = new StageConfig(new CaseInsensitiveString(stageName), BuildPlanMother.jobConfigs("dev")); } return new PipelineConfig(new CaseInsensitiveString(pipelineName), MaterialConfigsMother.defaultMaterialConfigs(), configs); }
private void addPipelineWithStages(String pipelineName, String stageName, JobConfig... jobConfigs) { PipelineConfig pipeline = new PipelineConfig(new CaseInsensitiveString(pipelineName), null); pipeline.add(new StageConfig(new CaseInsensitiveString(stageName), new JobConfigs(jobConfigs))); pipeline.add(new StageConfig(new CaseInsensitiveString(stageName + "2"), new JobConfigs(jobConfigs))); pipelines.add(pipeline); }
@Test public void shouldIncludeDependencyMaterialsFromManualPipelinesInSchedulableMaterials() { DependencyMaterialConfig dependencyMaterialConfig = MaterialConfigsMother.dependencyMaterialConfig(); PipelineConfig pipeline1 = new PipelineConfig(new CaseInsensitiveString("pipeline1"), new MaterialConfigs(dependencyMaterialConfig)); pipeline1.add(new StageConfig(new CaseInsensitiveString("manual-stage"), new JobConfigs(), new Approval())); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1)); Set<MaterialConfig> materialConfigs = config.getAllUniqueMaterialsBelongingToAutoPipelines(); assertThat(materialConfigs.size(), is(1)); assertThat(materialConfigs.contains(dependencyMaterialConfig), is(true)); }
@Test public void uniqueMaterialForAutoPipelinesShouldNotReturnPackageMaterialsWithAutoUpdateFalse() throws Exception { PipelineConfig pipeline1 = pipelineWithManyMaterials(false); pipeline1.add(new StageConfig(new CaseInsensitiveString("manual-stage"), new JobConfigs(), new Approval())); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1)); assertThat(config.getAllUniqueMaterialsBelongingToAutoPipelines().size(), is(3)); }
@Test public void shouldFindCorrectJobIfJobIsOnAllAgents() throws Exception { JobConfig allAgentsJob = new JobConfig("job-for-all-agents"); allAgentsJob.setRunOnAllAgents(true); JobConfigs jobs = new JobConfigs(); jobs.add(allAgentsJob); jobs.add(new JobConfig("job")); StageConfig stage = new StageConfig(new CaseInsensitiveString("stage-name"), jobs); JobConfig found = stage.jobConfigByInstanceName("job-for-all-agents-" + RunOnAllAgentsJobTypeConfig.MARKER + "-1", true); assertThat(found, is(allAgentsJob)); }
@Test public void shouldPickupJobConfigDetailsFromAttributeMap() throws Exception{ StageConfig config = new StageConfig(); Map stageAttrs = m(StageConfig.JOBS, a(m(JobConfig.NAME, "con-job"), m(JobConfig.NAME, "boring-job"))); config.setConfigAttributes(stageAttrs); assertThat(config.getJobs().get(0).name(), is(new CaseInsensitiveString("con-job"))); assertThat(config.getJobs().get(1).name(), is(new CaseInsensitiveString("boring-job"))); }
@Test public void shouldPopulateErrorsIfFetchArtifactDoesNotHaveStageAndOrJobDefined() { FetchPluggableArtifactTask task = new FetchPluggableArtifactTask(new CaseInsensitiveString(""), new CaseInsensitiveString(""), new CaseInsensitiveString(""), "s3"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, new StageConfig(), new JobConfig())); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.STAGE), is("Stage is a required field.")); assertThat(task.errors().on(FetchTask.JOB), is("Job is a required field.")); }
@Test public void shouldFindCorrectJobIfJobIsOnAllAgentsAndAmbiguousName() throws Exception { JobConfig allAgentsJob = new JobConfig("job-for-all-agents"); JobConfig ambiguousJob = new JobConfig("job-for-all"); allAgentsJob.setRunOnAllAgents(true); ambiguousJob.setRunOnAllAgents(true); JobConfigs jobs = new JobConfigs(); jobs.add(ambiguousJob); jobs.add(allAgentsJob); StageConfig stage = new StageConfig(new CaseInsensitiveString("stage-name"), jobs); JobConfig found = stage.jobConfigByInstanceName(RunOnAllAgents.CounterBasedJobNameGenerator.appendMarker("job-for-all-agents", 1), true); assertThat(found, is(allAgentsJob)); }
public static StageConfig stageWithTasks(String stageName) { JobConfig job = new JobConfig("job"); job.addTask(new ExecTask("ls", "-la", "pwd")); job.addTask(new AntTask()); return new StageConfig(new CaseInsensitiveString(stageName), new JobConfigs(job)); }
@Test public void shouldPopulateErrorsIfFetchArtifactDoesNotHaveStageAndOrJobDefined() { FetchTask task = new FetchTask(new CaseInsensitiveString(""), new CaseInsensitiveString(""), new CaseInsensitiveString(""), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, new StageConfig(), new JobConfig())); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.STAGE), is("Stage is a required field.")); assertThat(task.errors().on(FetchTask.JOB), is("Job is a required field.")); }
@Test public void shouldNotIncludePackageMaterialsWithAutoUpdateFalse() { PipelineConfig pipeline1 = pipelineWithManyMaterials(false); pipeline1.addMaterialConfig(getPackageMaterialConfigWithAutoUpdateFalse()); pipeline1.addMaterialConfig(getPackageMaterialConfigWithAutoUpdateTrue()); pipeline1.add(new StageConfig(new CaseInsensitiveString("manual-stage"), new JobConfigs(), new Approval())); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1)); assertThat(config.getAllUniqueMaterialsBelongingToAutoPipelines().size(), is(4)); }
@Test public void shouldValidatePipelineToCheckItDoesNotAllowBothTemplateAndStages() throws Exception { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("p"), new MaterialConfigs()); pipelineConfig.templatize(new CaseInsensitiveString("template")); pipelineConfig.addStageWithoutValidityAssertion(new StageConfig(new CaseInsensitiveString("stage"), new JobConfigs())); preprocessor.process(new BasicCruiseConfig(new BasicPipelineConfigs(pipelineConfig))); assertThat(pipelineConfig.hasTemplateApplied(), is(false)); assertThat(pipelineConfig.errors().on("stages"), is("Cannot add stages to pipeline 'p' which already references template 'template'")); assertThat(pipelineConfig.errors().on("template"), is("Cannot set template 'template' on pipeline 'p' because it already has stages defined")); }
@Test public void shouldRemoveErrorLogWhenCorrespondingMaterialIsMissing() throws Exception { serverHealthService.update(ServerHealthState.error("hg-message", "description", HealthStateType.general(forMaterial(MaterialsMother.hgMaterial())))); SvnMaterialConfig svnMaterialConfig = MaterialConfigsMother.svnMaterialConfig(); serverHealthService.update(ServerHealthState.error("svn-message", "description", HealthStateType.general(forMaterialConfig(svnMaterialConfig)))); CruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.addPipeline("defaultGroup", new PipelineConfig(new CaseInsensitiveString("dev"), new MaterialConfigs(svnMaterialConfig), new StageConfig(new CaseInsensitiveString("first"), new JobConfigs()))); serverHealthService.purgeStaleHealthMessages(cruiseConfig); assertThat(serverHealthService.logs().size(), is(1)); }
@Test public void shouldCreateAStageInstanceThroughInstanceFactory() { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("cruise"), new MaterialConfigs(), new StageConfig(new CaseInsensitiveString("first"), new JobConfigs(new JobConfig("job1"), new JobConfig("job2")))); Stage actualStage = instanceFactory.createStageInstance(pipelineConfig, new CaseInsensitiveString("first"), new DefaultSchedulingContext(), "md5", clock); JobInstances jobInstances = new JobInstances(); jobInstances.add(new JobInstance("job1", clock)); jobInstances.add(new JobInstance("job2", clock)); Stage expectedStage = new Stage("first", jobInstances, "Unknown", null, Approval.SUCCESS, clock); assertThat(actualStage, is(expectedStage)); }
public static PipelineConfig templateBasedPipelineWithElasticJobs(String templateName, String elasticProfileId, String pipelineName, String stageName, String... jobNames) { final StageConfig stageConfig = new StageConfig(new CaseInsensitiveString(stageName), BuildPlanMother.jobConfigs(jobNames)); for (JobConfig job : stageConfig.getJobs()) { job.setElasticProfileId(elasticProfileId); } final PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setName(pipelineName); pipelineConfig.setTemplateName(new CaseInsensitiveString(templateName)); pipelineConfig.usingTemplate(new PipelineTemplateConfig(new CaseInsensitiveString(templateName), stageConfig)); return pipelineConfig; }
private StageConfig getStageConfig(String stageName, String jobName) { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString(jobName)); jobConfig.addTask(new AntTask()); jobConfig.addTask(new ExecTask("command", "", "workingDir")); jobConfig.artifactConfigs().add(new BuildArtifactConfig("src", "dest")); jobConfig.addVariable("env1", "val1"); jobConfig.addResourceConfig("powerful"); JobConfigs jobConfigs = new JobConfigs(jobConfig); return new StageConfig(new CaseInsensitiveString(stageName), jobConfigs); }