@Override protected void validateConcreteMaterial(ValidationContext validationContext) { CaseInsensitiveString upstreamPipelineName = this.getPipelineName(); CaseInsensitiveString upstreamStageName = this.getStageName(); PipelineConfig upstreamPipeline = validationContext.getPipelineConfigByName(upstreamPipelineName); PipelineConfig pipeline = validationContext.getPipeline(); if (upstreamPipeline==null) { errors.add(DependencyMaterialConfig.PIPELINE_STAGE_NAME, String.format("Pipeline with name '%s' does not exist, it is defined as a dependency for pipeline '%s' (%s)", upstreamPipelineName, pipeline.name(), pipeline.getOriginDisplayName())); } else if (upstreamPipeline.findBy(upstreamStageName) == null) { errors.add(DependencyMaterialConfig.PIPELINE_STAGE_NAME, String.format("Stage with name '%s' does not exist on pipeline '%s', it is being referred to from pipeline '%s' (%s)", upstreamStageName, upstreamPipelineName, pipeline.name(), pipeline.getOriginDisplayName())); } }
public void validatePipelineNameUniqueness() { List<PipelineConfig> visited = new ArrayList<>(); HashMap<CaseInsensitiveString, Set<String>> duplicates = new HashMap<>(); for (PipelineConfigs group : this) { for (PipelineConfig pipeline : group) { for (PipelineConfig visitedPipeline : visited) { if (visitedPipeline.name().equals(pipeline.name())) { if(!duplicates.containsKey(pipeline.name())){ duplicates.put(pipeline.name(), new HashSet<>()); } duplicates.get(pipeline.name()).add(pipeline.getOriginDisplayName()); duplicates.get(pipeline.name()).add(visitedPipeline.getOriginDisplayName()); pipeline.errors().remove(PipelineConfig.NAME); pipeline.addError(PipelineConfig.NAME, String.format("You have defined multiple pipelines named '%s'. Pipeline names must be unique. Source(s): %s", pipeline.name(), duplicates.get(pipeline.name()))); visitedPipeline.errors().remove(PipelineConfig.NAME); visitedPipeline.addError(PipelineConfig.NAME, String.format("You have defined multiple pipelines named '%s'. Pipeline names must be unique. Source(s): %s", pipeline.name(), duplicates.get(pipeline.name()))); } } visited.add(pipeline); } } }
@Test public void shouldReturnConfigRepoOriginDisplayNameWhenOriginIsNotSet() { PipelineConfig pipelineConfig = new PipelineConfig(); assertThat(pipelineConfig.getOriginDisplayName(), is("cruise-config.xml")); }
@Override public boolean isValid(CruiseConfig preprocessedConfig) { for (PipelineConfig pipeline : preprocessedConfig.getAllPipelineConfigs()) { if(pipeline.materialConfigs().hasDependencyMaterial(pipelineConfig)){ this.result.unprocessableEntity("Cannot delete pipeline '" + pipelineConfig.name() + "' as pipeline '" + String.format("%s (%s)", pipeline.name(), pipeline.getOriginDisplayName()) + "' depends on it"); return false; } } for (EnvironmentConfig environment : preprocessedConfig.getEnvironments()) { if(environment.getPipelineNames().contains(pipelineConfig.name())){ this.result.unprocessableEntity("Cannot delete pipeline '" + pipelineConfig.name() + "' as it is present in environment '" + environment.name() + "'."); return false; } } return true; }
@Test public void shouldReturnConfigRepoOriginDisplayNameWhenOriginIsFile() { PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setOrigin(new FileConfigOrigin()); assertThat(pipelineConfig.getOriginDisplayName(), is("cruise-config.xml")); }
@Test public void shouldReturnConfigRepoOriginDisplayNameWhenOriginIsRemote() { PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(MaterialConfigsMother.gitMaterialConfig(), "plugin"), "revision1")); assertThat(pipelineConfig.getOriginDisplayName(), is("AwesomeGitMaterial at revision1")); }
@Test public void shouldErrorOutIfDuplicatePipelineIsAdded() { PipelineConfig pipeline1 = createPipelineConfig("pipeline1", "stage1"); PipelineConfig pipeline2 = createPipelineConfig("pipeline1", "stage1"); PipelineConfig pipeline3 = createPipelineConfig("pipeline1", "stage1"); PipelineConfig pipeline4 = createPipelineConfig("pipeline1", "stage1"); pipeline3.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(MaterialConfigsMother.gitMaterialConfig(), "plugin"), "rev1")); pipeline4.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(MaterialConfigsMother.svnMaterialConfig(), "plugin"), "1")); PipelineConfigs defaultGroup = createGroup("defaultGroup", pipeline1); PipelineConfigs anotherGroup = createGroup("anotherGroup", pipeline2); PipelineConfigs thirdGroup = createGroup("thirdGroup", pipeline3); PipelineConfigs fourthGroup = createGroup("fourthGroup", pipeline4); PipelineGroups pipelineGroups = new PipelineGroups(defaultGroup, anotherGroup, thirdGroup, fourthGroup); pipelineGroups.validate(null); List<String> expectedSources = asList(pipeline1.getOriginDisplayName(), pipeline2.getOriginDisplayName(), pipeline3.getOriginDisplayName(), pipeline4.getOriginDisplayName()); assertDuplicateNameErrorOnPipeline(pipeline1, expectedSources, 3); assertDuplicateNameErrorOnPipeline(pipeline2, expectedSources, 3); assertDuplicateNameErrorOnPipeline(pipeline3, expectedSources, 3); assertDuplicateNameErrorOnPipeline(pipeline4, expectedSources, 3); }