@Test public void define_xoo_rules() { RulesDefinition.Repository repo = context.repository("xoo"); assertThat(repo).isNotNull(); assertThat(repo.name()).isEqualTo("Xoo"); assertThat(repo.language()).isEqualTo("xoo"); assertThat(repo.rules()).hasSize(19); RulesDefinition.Rule rule = repo.rule(OneIssuePerLineSensor.RULE_KEY); assertThat(rule.name()).isNotEmpty(); assertThat(rule.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.LINEAR); assertThat(rule.debtRemediationFunction().gapMultiplier()).isEqualTo("1min"); assertThat(rule.debtRemediationFunction().baseEffort()).isNull(); assertThat(rule.gapDescription()).isNotEmpty(); }
@Test public void test_deprecated_remediation_function() { String xml = "" + "<rules>" + " <rule>" + " <key>1</key>" + " <name>One</name>" + " <description>Desc</description>" + " <effortToFixDescription>lines</effortToFixDescription>" + " <debtRemediationFunction>LINEAR_OFFSET</debtRemediationFunction>" + " <debtRemediationFunctionCoefficient>2d 3h</debtRemediationFunctionCoefficient>" + " <debtRemediationFunctionOffset>5min</debtRemediationFunctionOffset>" + " </rule>" + "</rules>"; RulesDefinition.Rule rule = load(xml).rule("1"); assertThat(rule.gapDescription()).isEqualTo("lines"); DebtRemediationFunction function = rule.debtRemediationFunction(); assertThat(function).isNotNull(); assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET); assertThat(function.gapMultiplier()).isEqualTo("2d3h"); assertThat(function.baseEffort()).isEqualTo("5min"); }
@Test public void test_linear_with_offset_remediation_function() { String xml = "" + "<rules>" + " <rule>" + " <key>1</key>" + " <name>One</name>" + " <description>Desc</description>" + " <effortToFixDescription>lines</effortToFixDescription>" + " <remediationFunction>LINEAR_OFFSET</remediationFunction>" + " <remediationFunctionGapMultiplier>2d 3h</remediationFunctionGapMultiplier>" + " <remediationFunctionBaseEffort>5min</remediationFunctionBaseEffort>" + " </rule>" + "</rules>"; RulesDefinition.Rule rule = load(xml).rule("1"); assertThat(rule.gapDescription()).isEqualTo("lines"); DebtRemediationFunction function = rule.debtRemediationFunction(); assertThat(function).isNotNull(); assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET); assertThat(function.gapMultiplier()).isEqualTo("2d3h"); assertThat(function.baseEffort()).isEqualTo("5min"); }
ruleDto.setDescriptionFormat(Format.MARKDOWN); DebtRemediationFunction debtRemediationFunction = ruleDef.debtRemediationFunction(); if (debtRemediationFunction != null) { ruleDto.setDefRemediationFunction(debtRemediationFunction.type().name());
@Test public void test() { PerlCriticRulesDefinition def = new PerlCriticRulesDefinition(); RulesDefinition.Context context = new RulesDefinition.Context(); def.define(context); RulesDefinition.Repository repository = context.repository(PerlCriticRulesDefinition.getRepositoryKey()); assertThat(repository.name()).isEqualTo(PerlCriticRulesDefinition.getRepositoryName()); assertThat(repository.language()).isEqualTo(PerlLanguage.KEY); List<Rule> rules = repository.rules(); assertThat(rules).hasSize(272); for (Rule rule : rules) { assertThat(rule.debtRemediationFunction()).describedAs(rule.key()).isNotNull(); assertThat(rule.debtRemediationFunction().type()).describedAs(rule.key()).isEqualTo(LINEAR); } }
private static boolean mergeDebtDefinitions(RulesDefinition.Rule def, RuleDefinitionDto dto) { // Debt definitions are set to null if the sub-characteristic and the remediation function are null DebtRemediationFunction debtRemediationFunction = def.debtRemediationFunction(); boolean hasDebt = debtRemediationFunction != null; if (hasDebt) { return mergeDebtDefinitions(dto, debtRemediationFunction.type().name(), debtRemediationFunction.gapMultiplier(), debtRemediationFunction.baseEffort(), def.gapDescription()); } return mergeDebtDefinitions(dto, null, null, null, null); }
private void assertRuleProperties(RulesDefinition.Repository repository) { RulesDefinition.Rule rule = repository.rule("S2068"); assertThat(rule).isNotNull(); assertThat(rule.name()).isEqualTo("Credentials should not be hard-coded"); assertThat(rule.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE); assertThat(rule.type()).isEqualTo(RuleType.VULNERABILITY); }
ruleDto.setDescriptionFormat(Format.MARKDOWN); DebtRemediationFunction debtRemediationFunction = ruleDef.debtRemediationFunction(); if (debtRemediationFunction != null) { ruleDto.setDefRemediationFunction(debtRemediationFunction.type().name());
@Test public void define_rule_debt() { RulesDefinition.Context context = new RulesDefinition.Context(); List<DebtModelXMLExporter.RuleDebt> ruleDebts = newArrayList( new DebtModelXMLExporter.RuleDebt() .setRuleKey(RuleKey.of("checkstyle", "ConstantName")) .setFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setCoefficient("1d") .setOffset("10min")); Reader javaModelReader = mock(Reader.class); when(debtModelRepository.createReaderForXMLFile("java")).thenReturn(javaModelReader); when(debtModelRepository.getContributingPluginList()).thenReturn(newArrayList("java")); when(importer.importXML(eq(javaModelReader), any(ValidationMessages.class))).thenReturn(ruleDebts); new DeprecatedRulesDefinitionLoader(i18n, debtModelRepository, importer, pluginRepository, new RuleRepository[] {new CheckstyleRules()}).complete(context); assertThat(context.repositories()).hasSize(1); RulesDefinition.Repository checkstyle = context.repository("checkstyle"); assertThat(checkstyle.rules()).hasSize(1); RulesDefinition.Rule rule = checkstyle.rule("ConstantName"); assertThat(rule).isNotNull(); assertThat(rule.key()).isEqualTo("ConstantName"); assertThat(rule.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET); assertThat(rule.debtRemediationFunction().gapMultiplier()).isEqualTo("1d"); assertThat(rule.debtRemediationFunction().baseEffort()).isEqualTo("10min"); }
@Test public void test_linear_remediation_function() throws Exception { String xml = "" + "<rules>" + " <rule>" + " <key>1</key>" + " <name>One</name>" + " <description>Desc</description>" + " <gapDescription>lines</gapDescription>" + " <remediationFunction>LINEAR</remediationFunction>" + " <remediationFunctionGapMultiplier>2d 3h</remediationFunctionGapMultiplier>" + " </rule>" + "</rules>"; RulesDefinition.Rule rule = load(xml).rule("1"); assertThat(rule.gapDescription()).isEqualTo("lines"); DebtRemediationFunction function = rule.debtRemediationFunction(); assertThat(function).isNotNull(); assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR); assertThat(function.gapMultiplier()).isEqualTo("2d3h"); assertThat(function.baseEffort()).isNull(); }
@Test public void test_constant_remediation_function() { String xml = "" + "<rules>" + " <rule>" + " <key>1</key>" + " <name>One</name>" + " <description>Desc</description>" + " <remediationFunction>CONSTANT_ISSUE</remediationFunction>" + " <remediationFunctionBaseEffort>5min</remediationFunctionBaseEffort>" + " </rule>" + "</rules>"; RulesDefinition.Rule rule = load(xml).rule("1"); DebtRemediationFunction function = rule.debtRemediationFunction(); assertThat(function).isNotNull(); assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE); assertThat(function.gapMultiplier()).isNull(); assertThat(function.baseEffort()).isEqualTo("5min"); }
@Test public void define_rules_with_remediation_function() { RulesDefinition.NewRepository newRepo = context.createRepository("common-java", "java"); RulesDefinition.NewRule newRule = newRepo.createRule("InsufficientBranchCoverage") .setName("Insufficient condition coverage") .setHtmlDescription("Insufficient condition coverage by unit tests") .setSeverity(Severity.MAJOR) .setGapDescription("Effort to test one uncovered branch"); newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().linearWithOffset("1h", "10min")); newRepo.done(); RulesDefinition.Repository repo = context.repository("common-java"); assertThat(repo.rules()).hasSize(1); RulesDefinition.Rule rule = repo.rule("InsufficientBranchCoverage"); assertThat(rule.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET); assertThat(rule.debtRemediationFunction().gapMultiplier()).isEqualTo("1h"); assertThat(rule.debtRemediationFunction().baseEffort()).isEqualTo("10min"); assertThat(rule.gapDescription()).isEqualTo("Effort to test one uncovered branch"); }
@Test public void define_rule_with_default_fields() { RulesDefinition.NewRepository newFindbugs = context.createRepository("findbugs", "java"); newFindbugs.createRule("NPE").setName("NPE").setHtmlDescription("NPE"); newFindbugs.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.key()).isEqualTo("NPE"); assertThat(rule.severity()).isEqualTo(Severity.MAJOR); assertThat(rule.params()).isEmpty(); assertThat(rule.internalKey()).isNull(); assertThat(rule.status()).isEqualTo(RuleStatus.defaultStatus()); assertThat(rule.tags()).isEmpty(); assertThat(rule.securityStandards()).isEmpty(); assertThat(rule.debtRemediationFunction()).isNull(); }
private static boolean mergeDebtDefinitions(RulesDefinition.Rule def, RuleDefinitionDto dto) { // Debt definitions are set to null if the sub-characteristic and the remediation function are null DebtRemediationFunction debtRemediationFunction = def.debtRemediationFunction(); boolean hasDebt = debtRemediationFunction != null; if (hasDebt) { return mergeDebtDefinitions(dto, debtRemediationFunction.type().name(), debtRemediationFunction.gapMultiplier(), debtRemediationFunction.baseEffort(), def.gapDescription()); } return mergeDebtDefinitions(dto, null, null, null, null); }