Browse Source

SONAR-21052 Drop specific key validation for custom rules from rule templates

tags/10.5.0.89998
Julien HENRY 1 month ago
parent
commit
36aac65805

+ 0
- 17
server/sonar-webserver-common/src/it/java/org/sonar/server/common/rule/RuleCreatorIT.java View File

} }
} }


@Test
public void fail_to_create_custom_rule_when_invalid_key() {
// insert template rule
RuleDto templateRule = createTemplateRule();

NewCustomRule newRule = NewCustomRule.createForCustomRule(RuleKey.of("java", "*INVALID*"), templateRule.getKey())
.setName("My custom")
.setMarkdownDescription("some description")
.setSeverity(Severity.MAJOR)
.setStatus(RuleStatus.READY)
.setParameters(Map.of("regex", "a.*"));

assertThatThrownBy(() -> underTest.create(dbSession, newRule))
.isInstanceOf(BadRequestException.class)
.hasMessage("The rule key \"*INVALID*\" is invalid, it should only contain: a-z, 0-9, \"_\"");
}

@Test @Test
public void fail_to_create_custom_rule_when_rule_key_already_exists() { public void fail_to_create_custom_rule_when_rule_key_already_exists() {
// insert template rule // insert template rule

+ 2
- 8
server/sonar-webserver-common/src/main/java/org/sonar/server/common/rule/RuleCreator.java View File

import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ServerSide @ServerSide
public class RuleCreator { public class RuleCreator {
private static final String TEMPLATE_KEY_NOT_EXIST_FORMAT = "The template key doesn't exist: %s"; private static final String TEMPLATE_KEY_NOT_EXIST_FORMAT = "The template key doesn't exist: %s";
private static final Pattern RULE_KEY_REGEX = Pattern.compile("^[\\w]+$");

private final System2 system2; private final System2 system2;
private final RuleIndexer ruleIndexer; private final RuleIndexer ruleIndexer;
private final DbClient dbClient; private final DbClient dbClient;
if (!ruleKey.repository().equals(templateKey.repository())) { if (!ruleKey.repository().equals(templateKey.repository())) {
errors.add("Custom and template keys must be in the same repository"); errors.add("Custom and template keys must be in the same repository");
} }
if (!RULE_KEY_REGEX.matcher(ruleKey.rule()).matches()) {
errors.add(format("The rule key \"%s\" is invalid, it should only contain: a-z, 0-9, \"_\"", ruleKey.rule()));
}
} }


private Optional<RuleDto> loadRule(DbSession dbSession, RuleKey ruleKey) { private Optional<RuleDto> loadRule(DbSession dbSession, RuleKey ruleKey) {
SoftwareQuality softwareQuality = ImpactMapper.convertToSoftwareQuality(RuleType.valueOf(type)); SoftwareQuality softwareQuality = ImpactMapper.convertToSoftwareQuality(RuleType.valueOf(type));
org.sonar.api.issue.impact.Severity impactSeverity = ImpactMapper.convertToImpactSeverity(severity); org.sonar.api.issue.impact.Severity impactSeverity = ImpactMapper.convertToImpactSeverity(severity);
ruleDto.addDefaultImpact(new ImpactDto() ruleDto.addDefaultImpact(new ImpactDto()
.setSoftwareQuality(softwareQuality)
.setSeverity(impactSeverity))
.setSoftwareQuality(softwareQuality)
.setSeverity(impactSeverity))
.setType(type) .setType(type)
.setSeverity(severity); .setSeverity(severity);
} }

Loading…
Cancel
Save