@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);
  }
Пример #2
0
  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);
        }
      }
    }
  }
Пример #3
0
 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());
   }
 }
Пример #4
0
  @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);
  }
Пример #5
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;
 }
Пример #6
0
  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);
      }
    }
  }
Пример #7
0
  @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)));
  }
Пример #8
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);
  }
Пример #9
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)));
  }
Пример #10
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
  }
Пример #11
0
  @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)));
  }