@Override public boolean isValid(CruiseConfig preprocessedConfig) { preprocessedPipelineConfigs = pipelineConfigs; validateGroupName(pipelineConfigs.getGroup()); Authorization authorization = preprocessedPipelineConfigs.getAuthorization(); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(preprocessedConfig, preprocessedPipelineConfigs, authorization); preprocessedPipelineConfigs.validate(validationContext); boolean authorizationIsValid = true; if (authorization != null) { authorization.validateTree(new DelegatingValidationContext(validationContext) { @Override public boolean shouldNotCheckRole() { return false; } }); authorizationIsValid = authorization.getAllErrors().isEmpty(); } return preprocessedPipelineConfigs.errors().getAll().isEmpty() && authorizationIsValid; }
@Test public void validate_shouldMarkDuplicatePipelineGroupNamesAsError() { PipelineConfigs first = createGroup("first", "pipeline"); PipelineConfigs dup = createGroup("first", "pipeline"); PipelineGroups groups = new PipelineGroups(first, dup); groups.validate(null); assertThat(first.errors().on(BasicPipelineConfigs.GROUP), is("Group with name 'first' already exists")); assertThat(dup.errors().on(BasicPipelineConfigs.GROUP), is("Group with name 'first' already exists")); }
@Test public void validate_shouldMakeSureTheNameIsAppropriate() { PipelineConfigs group = createEmpty(); group.validate(null); assertThat(group.errors().on(BasicPipelineConfigs.GROUP), is("Invalid group name 'null'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); } @Test
@Test public void shouldValidateGroupNameUniqueness() { Map<String, PipelineConfigs> nameToConfig = new HashMap<>(); PipelineConfigs group1 = createEmpty(); group1.setGroup("joe"); PipelineConfigs group2 = createEmpty(); group2.setGroup("joe"); group1.validateNameUniqueness(nameToConfig); group2.validateNameUniqueness(nameToConfig); assertThat(group1.errors().on(PipelineConfigs.GROUP), is("Group with name 'joe' already exists")); }
@Test public void validate_shouldMakeSureTheNameIsAppropriate_When2ConfigParts() { PipelineConfigs group = new MergePipelineConfigs(new BasicPipelineConfigs(),new BasicPipelineConfigs()); group.validate(null); assertThat(group.errors().on(BasicPipelineConfigs.GROUP), is("Invalid group name 'null'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); }
@Test public void shouldNotThrowExceptionIfNoRoleUsed() { StageConfig stage = new StageConfig(new CaseInsensitiveString("stage-foo"), new JobConfigs(new JobConfig(new CaseInsensitiveString("build-1"), new ResourceConfigs(), new ArtifactConfigs(), new Tasks(new ExecTask("ls", "-la", "work")) )) ); PipelineConfigs pipelinesConfig = new BasicPipelineConfigs("group", new Authorization(), new PipelineConfig(new CaseInsensitiveString("pipeline"), new MaterialConfigs(), stage)); CruiseConfig config = new BasicCruiseConfig(pipelinesConfig); config.server().security().addRole(new RoleConfig(new CaseInsensitiveString("role1"))); pipelinesConfig.validate(ConfigSaveValidationContext.forChain(config)); assertThat(pipelinesConfig.errors().isEmpty(), is(true)); }