private void validateCustomRule(NewCustomRule newRule, DbSession dbSession, RuleKey templateKey) { List<String> errors = new ArrayList<>(); validateRuleKey(errors, newRule.ruleKey()); validateName(errors, newRule); validateDescription(errors, newRule); String severity = newRule.severity(); if (Strings.isNullOrEmpty(severity)) { errors.add("The severity is missing"); } else if (!Severity.ALL.contains(severity)) { errors.add(format("Severity \"%s\" is invalid", severity)); } if (newRule.status() == null) { errors.add("The status is missing"); } for (RuleParamDto ruleParam : dbClient.ruleDao().selectRuleParamsByRuleKey(dbSession, templateKey)) { try { validateParam(ruleParam, newRule.parameter(ruleParam.getName())); } catch (BadRequestException validationError) { errors.addAll(validationError.errors()); } } checkRequest(errors.isEmpty(), errors); }
@Test public void create_exception_from_list() { BadRequestException underTest = BadRequestException.create(asList("error1", "error2")); assertThat(underTest.errors()).containsOnly("error1", "error2"); }
@Test public void create_exception_from_var_args() { BadRequestException underTest = BadRequestException.create("error1", "error2"); assertThat(underTest.errors()).containsOnly("error1", "error2"); }
@Test public void fail_with_BadRequestException_when_EmailException_is_generated() throws Exception { logInAsSystemAdministrator(); IllegalArgumentException exception1 = new IllegalArgumentException("root cause"); IllegalArgumentException exception2 = new IllegalArgumentException("parent cause", exception1); IllegalArgumentException exception3 = new IllegalArgumentException("child cause", exception2); EmailException emailException = new EmailException("last message", exception3); doThrow(emailException).when(emailNotificationChannel).sendTestEmail(anyString(), anyString(), anyString()); try { executeRequest("john@doo.com", "Test Message from SonarQube", "This is a test message from SonarQube at http://localhost:9000"); fail(); } catch (BadRequestException e) { assertThat(e.errors()).containsExactly( "root cause", "parent cause", "child cause", "last message"); } }
private BulkChangeResult doBulk(DbSession dbSession, QProfileDto profile, RuleQuery ruleQuery, BiFunction<RuleActivationContext, RuleDefinitionDto, List<ActiveRuleChange>> fn) { BulkChangeResult result = new BulkChangeResult(); Collection<Integer> ruleIds = Sets.newHashSet(ruleIndex.searchAll(ruleQuery)); RuleActivationContext context = ruleActivator.createContextForUserProfile(dbSession, profile, ruleIds); for (Integer ruleId : ruleIds) { try { context.reset(ruleId); RuleDefinitionDto ruleDefinition = context.getRule().get(); List<ActiveRuleChange> changes = fn.apply(context, ruleDefinition); result.addChanges(changes); if (!changes.isEmpty()) { result.incrementSucceeded(); } } catch (BadRequestException e) { // other exceptions stop the bulk activation result.incrementFailed(); result.getErrors().addAll(e.errors()); } } activeRuleIndexer.commitAndIndex(dbSession, result.getChanges()); return result; } }
} catch (BadRequestException e) { result.incrementFailed(); result.getErrors().addAll(e.errors());
public void execute(Request request, Response response) { try { ActionExtractor actionExtractor = new ActionExtractor(request.getPath()); WebService.Action action = getAction(actionExtractor); checkFound(action, "Unknown url : %s", request.getPath()); if (request instanceof ValidatingRequest) { ((ValidatingRequest) request).setAction(action); ((ValidatingRequest) request).setLocalConnector(this); } checkActionExtension(actionExtractor.getExtension()); verifyRequest(action, request); action.handler().handle(request, response); } catch (IllegalArgumentException e) { sendErrors(request, response, e, 400, singletonList(e.getMessage())); } catch (BadRequestException e) { sendErrors(request, response, e, 400, e.errors()); } catch (ServerException e) { sendErrors(request, response, e, e.httpCode(), singletonList(e.getMessage())); } catch (Exception e) { sendErrors(request, response, e, 500, singletonList("An error has occurred. Please contact your administrator")); } }
@Test public void fail_to_create_custom_rule_with_invalid_parameters() { // insert template rule RuleDefinitionDto templateRule = createTemplateRuleWithTwoIntParams(); // Create custom rule NewCustomRule newRule = NewCustomRule.createForCustomRule("CUSTOM_RULE", templateRule.getKey()) .setName("My custom") .setMarkdownDescription("Some description") .setSeverity(Severity.MAJOR) .setStatus(RuleStatus.READY) .setParameters(ImmutableMap.of("first", "polop", "second", "palap")); try { underTest.create(dbSession, newRule); Fail.failBecauseExceptionWasNotThrown(BadRequestException.class); } catch (BadRequestException badRequest) { assertThat(badRequest.errors().toString()).contains("palap").contains("polop"); } }
@Test public void fail_if_project_key_already_exists_as_module() { ComponentDto project = db.components().insertPrivateProject(db.getDefaultOrganization()); ComponentDto module = db.components().insertComponent(newModuleDto(project)); userSession.logIn().addProjectPermission(SCAN_EXECUTION, project); mockSuccessfulPrepareSubmitCall(); try { underTest.submit(defaultOrganizationKey, module.getDbKey(), null, module.name(), emptyMap(), IOUtils.toInputStream("{binary}")); fail(); } catch (BadRequestException e) { assertThat(e.errors()).contains( format("The project '%s' is already defined in SonarQube but as a module of project '%s'. " + "If you really want to stop directly analysing project '%s', please first delete it from SonarQube and then relaunch the analysis of project '%s'.", module.getKey(), project.getKey(), project.getKey(), module.getKey())); } }
@Test public void fail_to_create_user_with_many_errors() { try { underTest.createAndCommit(db.getSession(), NewUser.builder() .setLogin("") .setName("") .setEmail("marius@mail.com") .setPassword("") .build(), u -> { }); fail(); } catch (BadRequestException e) { assertThat(e.errors()).containsExactlyInAnyOrder("Name can't be empty", "Password can't be empty"); } }
private void validateCustomRule(NewCustomRule newRule, DbSession dbSession, RuleKey templateKey) { List<String> errors = new ArrayList<>(); validateRuleKey(errors, newRule.ruleKey()); validateName(errors, newRule); validateDescription(errors, newRule); String severity = newRule.severity(); if (Strings.isNullOrEmpty(severity)) { errors.add("The severity is missing"); } else if (!Severity.ALL.contains(severity)) { errors.add(format("Severity \"%s\" is invalid", severity)); } if (newRule.status() == null) { errors.add("The status is missing"); } for (RuleParamDto ruleParam : dbClient.ruleDao().selectRuleParamsByRuleKey(dbSession, templateKey)) { try { validateParam(ruleParam, newRule.parameter(ruleParam.getName())); } catch (BadRequestException validationError) { errors.addAll(validationError.errors()); } } checkRequest(errors.isEmpty(), errors); }
} catch (BadRequestException e) { result.incrementFailed(); result.getErrors().addAll(e.errors());
private BulkChangeResult doBulk(DbSession dbSession, QProfileDto profile, RuleQuery ruleQuery, BiFunction<RuleActivationContext, RuleDefinitionDto, List<ActiveRuleChange>> fn) { BulkChangeResult result = new BulkChangeResult(); Collection<Integer> ruleIds = Sets.newHashSet(ruleIndex.searchAll(ruleQuery)); RuleActivationContext context = ruleActivator.createContextForUserProfile(dbSession, profile, ruleIds); for (Integer ruleId : ruleIds) { try { context.reset(ruleId); RuleDefinitionDto ruleDefinition = context.getRule().get(); List<ActiveRuleChange> changes = fn.apply(context, ruleDefinition); result.addChanges(changes); if (!changes.isEmpty()) { result.incrementSucceeded(); } } catch (BadRequestException e) { // other exceptions stop the bulk activation result.incrementFailed(); result.getErrors().addAll(e.errors()); } } activeRuleIndexer.commitAndIndex(dbSession, result.getChanges()); return result; } }
public void execute(Request request, Response response) { try { ActionExtractor actionExtractor = new ActionExtractor(request.getPath()); WebService.Action action = getAction(actionExtractor); checkFound(action, "Unknown url : %s", request.getPath()); if (request instanceof ValidatingRequest) { ((ValidatingRequest) request).setAction(action); ((ValidatingRequest) request).setLocalConnector(this); } checkActionExtension(actionExtractor.getExtension()); verifyRequest(action, request); action.handler().handle(request, response); } catch (IllegalArgumentException e) { sendErrors(request, response, e, 400, singletonList(e.getMessage())); } catch (BadRequestException e) { sendErrors(request, response, e, 400, e.errors()); } catch (ServerException e) { sendErrors(request, response, e, e.httpCode(), singletonList(e.getMessage())); } catch (Exception e) { sendErrors(request, response, e, 500, singletonList("An error has occurred. Please contact your administrator")); } }