@Test public void testProjectOverThreshold() { // add enough violations to be over threshold int threshold = settings.getInt(ProfileProgressionPlugin.QUALITY_PROFILE_CHANGE_THRESHOLD_KEY); List<ActiveRule> rules = testProjectModel.getRulesProfile().getActiveRules(); int numberOfRules = rules.size(); List<Violation> violations = decoratorContext.getViolations(); int initialNumberOfViolations = violations.size(); int numberOfExtraViolations = ((threshold + 1) * (numberOfRules / 100)) - initialNumberOfViolations; for (int i = 0; i < numberOfExtraViolations; i++) { violations.add(Violation.create(rules.get(initialNumberOfViolations + i), testProject)); } // test profile isn't progressed String profileBefore = testProjectModel.getRulesProfile().getName(); runAnalysis(); String profileAfter = testProjectModel.getRulesProfile().getName(); testOutcome( "Projects profile has been changed despite the violation threshold not met.", profileBefore, profileAfter, false); }
private void computeViolationsPerRules(DecoratorContext context) { Map<RulePriority, Multiset<Rule>> rulesPerSeverity = Maps.newHashMap(); for (Violation violation : context.getViolations()) { Multiset<Rule> rulesBag = initRules(rulesPerSeverity, violation.getSeverity()); rulesBag.add(violation.getRule()); } for (RulePriority severity : RulePriority.values()) { Metric metric = SeverityUtils.severityToViolationMetric(severity); Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(metric)); for (Measure child : children) { RuleMeasure childRuleMeasure = (RuleMeasure) child; Rule rule = childRuleMeasure.getRule(); if (rule != null && MeasureUtils.hasValue(childRuleMeasure)) { Multiset<Rule> rulesBag = initRules(rulesPerSeverity, severity); rulesBag.add(rule, childRuleMeasure.getIntValue()); } } Multiset<Rule> rulesBag = rulesPerSeverity.get(severity); if (rulesBag != null) { for (Multiset.Entry<Rule> entry : rulesBag.entrySet()) { RuleMeasure measure = RuleMeasure.createForRule(metric, entry.getElement(), (double) entry.getCount()); measure.setSeverity(severity); context.saveMeasure(measure); } } } }
private void computeTotalViolations(DecoratorContext context) { if (context.getMeasure(CoreMetrics.VIOLATIONS) == null) { Collection<Measure> childrenViolations = context.getChildrenMeasures(CoreMetrics.VIOLATIONS); Double sum = MeasureUtils.sum(true, childrenViolations); context.saveMeasure(CoreMetrics.VIOLATIONS, sum + context.getViolations().size()); } }
@Test public void shouldSaveZeroOnProjects() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(Collections.<Violation>emptyList()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); verify(context).saveMeasure(CoreMetrics.VIOLATIONS, 0.0); }
private int saveValue(DecoratorContext context, Metric metric, String ruleKey) { int result; result = MeasureUtils.sum(true, context.getChildrenMeasures(metric)).intValue(); for (Violation violation : context.getViolations()) { if (violation.getRule().getKey().equals(ruleKey)) { result++; } } context.saveMeasure(metric, (double) result); return result; }
private void computeViolationsPerSeverities(DecoratorContext context) { Multiset<RulePriority> severitiesBag = HashMultiset.create(); for (Violation violation : context.getViolations()) { severitiesBag.add(violation.getSeverity()); } for (RulePriority severity : RulePriority.values()) { Metric metric = SeverityUtils.severityToViolationMetric(severity); if (context.getMeasure(metric) == null) { Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric)); int sum = MeasureUtils.sum(true, children).intValue() + severitiesBag.count(severity); context.saveMeasure(metric, (double) sum); } } }
@Test public void sameRuleShouldHaveDifferentSeverities() { List<Violation> violations = Lists.newArrayList(); violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.MINOR)); when(context.getViolations()).thenReturn(violations); decorator.decorate(resource, context); verify(context) .saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.CRITICAL_VIOLATIONS, ruleA1, 2.0))); verify(context) .saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.MINOR_VIOLATIONS, ruleA1, 1.0))); }
@Test public void shouldCountViolationsBySeverity() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); verify(context).saveMeasure(CoreMetrics.BLOCKER_VIOLATIONS, 0.0); verify(context).saveMeasure(CoreMetrics.CRITICAL_VIOLATIONS, 2.0); verify(context).saveMeasure(CoreMetrics.MAJOR_VIOLATIONS, 1.0); verify(context).saveMeasure(CoreMetrics.MINOR_VIOLATIONS, 1.0); verify(context).saveMeasure(CoreMetrics.INFO_VIOLATIONS, 0.0); }
@Test public void ruleViolations() { when(context.getViolations()).thenReturn(createViolations()); decorator.decorate(resource, context); // remember : period1 is 5daysAgo, period2 is 10daysAgo verify(context) .saveMeasure( argThat( new IsVariationRuleMeasure(CoreMetrics.NEW_CRITICAL_VIOLATIONS, rule1, 1.0, 1.0))); verify(context) .saveMeasure( argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_MAJOR_VIOLATIONS, rule2, 0.0, 1.0))); verify(context) .saveMeasure( argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_MINOR_VIOLATIONS, rule3, 0.0, 1.0))); }
/** See http://jira.codehaus.org/browse/SONAR-1729 */ @Test public void shouldNotCountViolationsIfMeasureAlreadyExists() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); when(context.getMeasure(CoreMetrics.VIOLATIONS)) .thenReturn(new Measure(CoreMetrics.VIOLATIONS, 3000.0)); when(context.getMeasure(CoreMetrics.MAJOR_VIOLATIONS)) .thenReturn(new Measure(CoreMetrics.MAJOR_VIOLATIONS, 500.0)); decorator.decorate(resource, context); verify(context, never()).saveMeasure(eq(CoreMetrics.VIOLATIONS), anyDouble()); // not changed verify(context, never()) .saveMeasure(eq(CoreMetrics.MAJOR_VIOLATIONS), anyDouble()); // not changed verify(context, times(1)) .saveMeasure(eq(CoreMetrics.CRITICAL_VIOLATIONS), anyDouble()); // did not exist }
@Test public void shouldClearCacheAfterExecution() { Violation violation1 = Violation.create(rule1, resource).setSeverity(RulePriority.CRITICAL).setCreatedAt(rightNow); Violation violation2 = Violation.create(rule2, resource).setSeverity(RulePriority.CRITICAL).setCreatedAt(rightNow); when(context.getViolations()) .thenReturn(Arrays.asList(violation1)) .thenReturn(Arrays.asList(violation2)); decorator.decorate(resource, context); decorator.decorate(resource, context); verify(context, times(2)) .saveMeasure( argThat(new IsVariationMeasure(CoreMetrics.NEW_CRITICAL_VIOLATIONS, 1.0, 1.0))); verify(context, never()) .saveMeasure( argThat(new IsVariationMeasure(CoreMetrics.NEW_CRITICAL_VIOLATIONS, 2.0, 2.0))); }