public GoConfigInvalidMergeException(List<PartialConfig> partials, GoConfigInvalidException failed) { this(failed.getCruiseConfig(), partials, failed.getCruiseConfig().getAllErrors(), failed); }
public String getAllErrorMessages() { return new AllConfigErrors(cruiseConfig.getAllErrors()).asString(); }
private void updateConfig(Username currentUser, LocalizedOperationResult result, EntityConfigUpdateCommand<AdminsConfig> command) { try { goConfigService.updateConfig(command, currentUser); } catch (Exception e) { if (e instanceof GoConfigInvalidException) { String adminsTag = AdminsConfig.class.getAnnotation(ConfigTag.class).value(); String errors = deDuplicatedErrors(((GoConfigInvalidException) e).getCruiseConfig().getAllErrors()); result.unprocessableEntity(LocalizedMessage.entityConfigValidationFailed(adminsTag, errors)); } else { if (!result.hasMessage()) { LOGGER.error(e.getMessage(), e); result.internalServerError(saveFailedWithReason("An error occurred while updating the System Admins. Please check the logs for more information.")); } } } }
@Override public boolean isValid(CruiseConfig preprocessedConfig) { preProcessedRolesConfig = preprocessedConfig.server().security().getRoles(); List<CaseInsensitiveString> roleNames = goCDRolesBulkUpdateRequest.getRolesToUpdate(); boolean isValid = new RolesConfigUpdateValidator(roleNames).isValid(preprocessedConfig); if (!isValid) { result.unprocessableEntity("Validations failed for bulk update of roles. Error(s): " + preprocessedConfig.getAllErrors()); } return isValid; }
public boolean isValid(CruiseConfig preprocessedConfig) { EnvironmentConfig config = preprocessedConfig.getEnvironments().find(this.environmentConfig.name()); boolean isValid = config.validateTree(ConfigSaveValidationContext.forChain(preprocessedConfig), preprocessedConfig); if (!isValid) { String allErrors = new AllConfigErrors(preprocessedConfig.getAllErrors()).asString(); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, allErrors)); } return isValid; }
@Test public void shouldNotDuplicateErrorWhenPipelineDoesnotExist() throws Exception { CruiseConfig cruiseConfig = createCruiseConfig(); PipelineConfig pipelineConfig = goConfigMother.addPipeline(cruiseConfig, "pipeline1", "stage", "build"); PipelineConfig pipelineConfig2 = goConfigMother.addPipeline(cruiseConfig, "pipeline2", "stage", "build"); goConfigMother.addStageToPipeline(cruiseConfig, "pipeline1", "ft", "build"); goConfigMother.setDependencyOn(cruiseConfig, pipelineConfig2, "pipeline1", "ft"); goConfigMother.setDependencyOn(cruiseConfig, pipelineConfig, "invalid", "invalid"); cruiseConfig.validate(null); List<ConfigErrors> allErrors = cruiseConfig.getAllErrors(); List<String> errors = new ArrayList<>(); for (ConfigErrors allError : allErrors) { errors.addAll(allError.getAllOn("base")); } assertThat(errors.size(), is(1)); assertThat(errors.get(0), is("Pipeline \"invalid\" does not exist. It is used from pipeline \"pipeline1\".")); }
@Test public void getAllErrors_shouldCollectAllErrorsInTheChildren() { CruiseConfig config = GoConfigMother.configWithPipelines("pipeline-1"); SecurityAuthConfig ldapConfig = new SecurityAuthConfig("ldap", "cd.go.authorization.ldap"); ldapConfig.errors().add("uri", "invalid ldap uri"); ldapConfig.errors().add("searchBase", "invalid search base"); config.server().security().securityAuthConfigs().add(ldapConfig); PipelineConfig pipelineConfig = config.pipelineConfigByName(new CaseInsensitiveString("pipeline-1")); pipelineConfig.errors().add("base", "Some base errors"); P4MaterialConfig p4MaterialConfig = new P4MaterialConfig("localhost:1999", "view"); pipelineConfig.addMaterialConfig(p4MaterialConfig); p4MaterialConfig.errors().add("materialName", "material name does not follow pattern"); StageConfig stage = pipelineConfig.first(); stage.errors().add("role", "Roles must be proper"); List<ConfigErrors> allErrors = config.getAllErrors(); assertThat(allErrors.size(), is(4)); assertThat(allErrors.get(0).on("uri"), is("invalid ldap uri")); assertThat(allErrors.get(0).on("searchBase"), is("invalid search base")); assertThat(allErrors.get(1).on("base"), is("Some base errors")); assertThat(allErrors.get(2).on("role"), is("Roles must be proper")); assertThat(allErrors.get(3).on("materialName"), is("material name does not follow pattern")); }
@Test public void shouldCheckCyclicDependency() throws Exception { PipelineConfig p1 = createPipelineConfig("p1", "s1", "j1"); PipelineConfig p2 = createPipelineConfig("p2", "s2", "j1"); p2.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("p1"), new CaseInsensitiveString("s1"))); PipelineConfig p3 = createPipelineConfig("p3", "s3", "j1"); p3.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("p2"), new CaseInsensitiveString("s2"))); p1.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("p3"), new CaseInsensitiveString("s3"))); pipelines.addAll(Arrays.asList(p1, p2, p3)); BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); ConfigReposConfig reposConfig = new ConfigReposConfig(); GitMaterialConfig configRepo = new GitMaterialConfig("http://git"); reposConfig.add(new ConfigRepoConfig(configRepo, "myplug")); mainCruiseConfig.setConfigRepos(reposConfig); PartialConfig partialConfig = PartialConfigMother.withPipeline("pipe2"); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, partialConfig); cruiseConfig.validate(mock(ValidationContext.class)); List<ConfigErrors> allErrors = cruiseConfig.getAllErrors(); assertThat((allErrors.get(0).on("base")), is("Circular dependency: p1 <- p2 <- p3 <- p1")); }