@Before public void setUp() throws Exception { pipelineConfig = mock(PipelineConfig.class); pipelineContext = PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig); }
public String getParentDisplayName() { return getParent().getClass().getAnnotation(ConfigTag.class).value(); }
private void validateDependencyMaterialsForDownstreams(PipelineConfigSaveValidationContext validationContext, CaseInsensitiveString selected, PipelineConfig downstreamPipeline) { Node dependenciesOfSelectedPipeline = validationContext.getDependencyMaterialsFor(selected); for (Node.DependencyNode dependencyNode : dependenciesOfSelectedPipeline.getDependencies()) { if (dependencyNode.getPipelineName().equals(pipelineConfig.name())) { for (MaterialConfig materialConfig : downstreamPipeline.materialConfigs()) { if (materialConfig instanceof DependencyMaterialConfig) { DependencyMaterialConfig dependencyMaterialConfig = new Cloner().deepClone((DependencyMaterialConfig) materialConfig); dependencyMaterialConfig.validate(validationContext.withParent(downstreamPipeline)); List<String> allErrors = dependencyMaterialConfig.errors().getAll(); for (String error : allErrors) { pipelineConfig.errors().add("base", error); } } } } } }
private PipelineConfigSaveValidationContext(Validatable immediateParent, PipelineConfigSaveValidationContext parentContext) { this.isPipelineBeingCreated = parentContext.isPipelineBeingCreated(); this.groupName = parentContext.groupName; this.immediateParent = immediateParent; this.parentContext = parentContext; if (immediateParent instanceof BasicCruiseConfig) { this.cruiseConfig = (BasicCruiseConfig) immediateParent; } else if (parentContext.cruiseConfig != null) { this.cruiseConfig = parentContext.cruiseConfig; } if (immediateParent instanceof PipelineConfig) { this.pipeline = (PipelineConfig) immediateParent; } else if (parentContext.pipeline != null) { this.pipeline = parentContext.pipeline; } if (immediateParent instanceof JobConfig) { this.job = (JobConfig) immediateParent; } else if (parentContext.getJob() != null) { this.job = parentContext.job; } if (immediateParent instanceof StageConfig) { this.stage = (StageConfig) immediateParent; } else if (parentContext.stage != null) { this.stage = parentContext.stage; } this.pipelineBeingValidated = parentContext.pipelineBeingValidated; if (parentContext.pipelineBeingValidated == null) { this.pipelineBeingValidated = this.pipeline; } }
private void pipelineCreationSpecificValidations(PipelineConfigSaveValidationContext validationContext) { if (validationContext.isPipelineBeingCreated()) { validationContext.getGroups().validatePipelineNameUniqueness(); PipelineConfigs group = validationContext.getPipelineGroup(); group.validateGroupNameAndAddErrorsTo(pipelineConfig.errors()); } }
void validateDependencies(PipelineConfigSaveValidationContext validationContext) { if (validationContext.isPipelineBeingCreated()) return; for (CaseInsensitiveString selected : validationContext.getPipelinesWithDependencyMaterials()) { if (selected.equals(pipelineConfig.name())) continue; PipelineConfig selectedPipeline = validationContext.getPipelineConfigByName(selected); validateDependencyMaterialsForDownstreams(validationContext, selected, selectedPipeline); validateFetchTasksForOtherPipelines(validationContext, selectedPipeline); } }
@Test public void shouldValidateTree(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("stage$"), jobConfigs, approval); stageConfig.setVariables(variables); stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertThat(stageConfig.errors().on(StageConfig.NAME), contains("Invalid stage name 'stage$'")); ArgumentCaptor<PipelineConfigSaveValidationContext> captor = ArgumentCaptor.forClass(PipelineConfigSaveValidationContext.class); verify(jobConfigs).validateTree(captor.capture()); PipelineConfigSaveValidationContext childContext = captor.getValue(); assertThat(childContext.getParent(), is(stageConfig)); verify(approval).validateTree(childContext); verify(variables).validateTree(childContext); }
@Test public void shouldCreateStageValidationContextBasedOnParent() { StageConfig stageConfig = mock(StageConfig.class); PipelineConfigSaveValidationContext stageContext = PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig, stageConfig); assertThat(stageContext.getPipeline(), is(pipelineConfig)); assertThat(stageContext.getStage(), is(stageConfig)); assertThat(stageContext.getJob(), is(nullValue())); }
@Test public void shouldReturnNullWhenNoMatchingPipelineIsFound() throws Exception { BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("p1"); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig, new PipelineConfig(new CaseInsensitiveString("p2"), new MaterialConfigs())); assertThat(context.getPipelineConfigByName(new CaseInsensitiveString("does_not_exist")), is(nullValue())); }
@Test public void shouldReturnNullIfMatchingMaterialConfigIsNotFound() throws Exception { CruiseConfig cruiseConfig = new GoConfigMother().cruiseConfigWithPipelineUsingTwoMaterials(); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig); assertThat(context.getAllMaterialsByFingerPrint("does_not_exist"), is(nullValue())); }
@Test public void shouldGetPipelineGroupForPipelineInContext(){ String pipelineName = "p1"; BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines(pipelineName); PipelineConfig p1 = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString(pipelineName)); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, PipelineConfigs.DEFAULT_GROUP, cruiseConfig, p1); assertThat(context.getPipelineGroup(), is(cruiseConfig.findGroup(PipelineConfigs.DEFAULT_GROUP))); }
@Test public void shouldGetDependencyMaterialsForPipelines(){ BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("p1", "p2", "p3"); PipelineConfig p2 = cruiseConfig.getPipelineConfigByName(new CaseInsensitiveString("p2")); p2.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("p1"),new CaseInsensitiveString("stage") )); PipelineConfig p3 = cruiseConfig.getPipelineConfigByName(new CaseInsensitiveString("p3")); p3.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("p2"),new CaseInsensitiveString("stage") )); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig); assertThat(context.getDependencyMaterialsFor(new CaseInsensitiveString("p1")).getDependencies().isEmpty(), is(true)); assertThat(context.getDependencyMaterialsFor(new CaseInsensitiveString("p2")).getDependencies(), contains(new Node.DependencyNode(new CaseInsensitiveString("p1"),new CaseInsensitiveString("stage")))); assertThat(context.getDependencyMaterialsFor(new CaseInsensitiveString("p3")).getDependencies(), contains(new Node.DependencyNode(new CaseInsensitiveString("p2"),new CaseInsensitiveString("stage")))); assertThat(context.getDependencyMaterialsFor(new CaseInsensitiveString("junk")).getDependencies().isEmpty(), is(true)); }
@Test public void shouldGetParentDisplayName(){ assertThat(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig()).getParentDisplayName(), is("pipeline")); assertThat(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), new StageConfig()).getParentDisplayName(), is("stage")); assertThat(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), new StageConfig(), new JobConfig()).getParentDisplayName(), is("job")); }
@Test public void shouldCheckForExistenceOfTemplate(){ BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.addTemplate(new PipelineTemplateConfig(new CaseInsensitiveString("t1"))); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig, new PipelineConfig()); assertThat(context.doesTemplateExist(new CaseInsensitiveString("t1")), is(true)); assertThat(context.doesTemplateExist(new CaseInsensitiveString("t2")), is(false)); }
@Test public void shouldGetServerSecurityContext() { BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); SecurityConfig securityConfig = new SecurityConfig(); securityConfig.addRole(new RoleConfig(new CaseInsensitiveString("admin"))); securityConfig.adminsConfig().add(new AdminUser(new CaseInsensitiveString("super-admin"))); cruiseConfig.server().useSecurity(securityConfig); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig); Assert.assertThat(context.getServerSecurityConfig(), is(securityConfig)); }
@Test public void shouldCreatePipelineValidationContext() { assertThat(pipelineContext.getPipeline(), is(pipelineConfig)); assertThat(pipelineContext.getStage(), is(nullValue())); assertThat(pipelineContext.getJob(), is(nullValue())); }
@Override public boolean hasPipeline(CaseInsensitiveString key) { return validationContext.getPipelineConfigByName(key) != null; }
@Override public Node getDependencyMaterials(CaseInsensitiveString pipelineName) { if (pipelineConfig.name().equals(pipelineName)) return pipelineConfig.getDependenciesAsNode(); return validationContext.getDependencyMaterialsFor(pipelineName); } }
jobConfig.setVariables(variables); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), new StageConfig(), jobConfig); assertThat(jobConfig.validateTree(context), is(true)); verify(tasks).validateTree(captor.capture()); PipelineConfigSaveValidationContext childContext = captor.getValue(); assertThat(childContext.getParent(), is(jobConfig)); verify(resourceConfigs).validateTree(childContext); verify(properties).validateTree(childContext);
@Test public void shouldCreateJobValidationContextBasedOnParent() { StageConfig stageConfig = mock(StageConfig.class); JobConfig jobConfig = mock(JobConfig.class); PipelineConfigSaveValidationContext jobContext = PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig, stageConfig, jobConfig); assertThat(jobContext.getPipeline(), is(pipelineConfig)); assertThat(jobContext.getStage(), is(stageConfig)); assertThat(jobContext.getJob(), is(jobConfig)); }