summaryrefslogtreecommitdiffstats
path: root/it
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2015-12-04 11:41:15 +0100
committerSimon Brandhof <simon.brandhof@sonarsource.com>2015-12-07 17:26:43 +0100
commit6cf62f0adc9677404df3ff457135591c17ad89a5 (patch)
tree08b31db10e52e92575a6343768f93e46b13266b7 /it
parent541c15654fc024534c45710b30b9cfc8ec551d96 (diff)
downloadsonarqube-6cf62f0adc9677404df3ff457135591c17ad89a5.tar.gz
sonarqube-6cf62f0adc9677404df3ff457135591c17ad89a5.zip
SONAR-6939 ability for plugins to override the decimal scale of float
measures
Diffstat (limited to 'it')
-rw-r--r--it/it-plugins/batch-plugin/src/main/java/com/sonarsource/BatchPlugin.java10
-rw-r--r--it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMeasureComputer.java34
-rw-r--r--it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMetric.java25
-rw-r--r--it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleProperty.java13
-rw-r--r--it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleSensor.java36
-rw-r--r--it/it-tests/src/test/java/it/Category3Suite.java7
-rw-r--r--it/it-tests/src/test/java/it/measure/DecimalScaleMetricTest.java39
7 files changed, 162 insertions, 2 deletions
diff --git a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/BatchPlugin.java b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/BatchPlugin.java
index 7c4c479c64b..f26975594f9 100644
--- a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/BatchPlugin.java
+++ b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/BatchPlugin.java
@@ -1,5 +1,9 @@
package com.sonarsource;
+import com.sonarsource.decimal_scale_of_measures.DecimalScaleMeasureComputer;
+import com.sonarsource.decimal_scale_of_measures.DecimalScaleMetric;
+import com.sonarsource.decimal_scale_of_measures.DecimalScaleProperty;
+import com.sonarsource.decimal_scale_of_measures.DecimalScaleSensor;
import java.util.Arrays;
import java.util.List;
import org.sonar.api.SonarPlugin;
@@ -8,6 +12,12 @@ public class BatchPlugin extends SonarPlugin {
public List getExtensions() {
return Arrays.asList(
+ // SONAR-6939 decimal_scale_of_measures
+ DecimalScaleMeasureComputer.class,
+ DecimalScaleMetric.class,
+ DecimalScaleSensor.class,
+ DecimalScaleProperty.definition(),
+
DumpSettingsInitializer.class,
RaiseMessageException.class,
TempFolderExtension.class,
diff --git a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMeasureComputer.java b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMeasureComputer.java
new file mode 100644
index 00000000000..f3dc985c7e8
--- /dev/null
+++ b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMeasureComputer.java
@@ -0,0 +1,34 @@
+package com.sonarsource.decimal_scale_of_measures;
+
+import org.sonar.api.ce.measure.Measure;
+import org.sonar.api.ce.measure.MeasureComputer;
+
+public class DecimalScaleMeasureComputer implements MeasureComputer {
+
+ @Override
+ public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) {
+ return defContext.newDefinitionBuilder()
+ // Output metrics must contains at least one metric
+ .setOutputMetrics(DecimalScaleMetric.KEY)
+
+ .build();
+ }
+
+ @Override
+ public void compute(MeasureComputerContext context) {
+ if (context.getMeasure(DecimalScaleMetric.KEY) == null) {
+ Iterable<Measure> childMeasures = context.getChildrenMeasures(DecimalScaleMetric.KEY);
+ int count = 0;
+ double total = 0.0;
+ for (Measure childMeasure : childMeasures) {
+ count++;
+ total += childMeasure.getDoubleValue();
+ }
+ double value = 0.0;
+ if (count > 0) {
+ value = total / count;
+ }
+ context.addMeasure(DecimalScaleMetric.KEY, value);
+ }
+ }
+}
diff --git a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMetric.java b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMetric.java
new file mode 100644
index 00000000000..ef12e051fb1
--- /dev/null
+++ b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleMetric.java
@@ -0,0 +1,25 @@
+package com.sonarsource.decimal_scale_of_measures;
+
+import java.util.Collections;
+import java.util.List;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.Metrics;
+
+public class DecimalScaleMetric implements Metrics {
+
+ public static final String KEY = "decimal_scale";
+
+ private static final Metric METRIC = new Metric.Builder(KEY, "Decimal Scale", Metric.ValueType.FLOAT)
+ .setDescription("Numeric metric with overridden decimal scale")
+ .setDecimalScale(4)
+ .create();
+
+ @Override
+ public List getMetrics() {
+ return Collections.singletonList(definition());
+ }
+
+ public static Metric definition() {
+ return METRIC;
+ }
+}
diff --git a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleProperty.java b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleProperty.java
new file mode 100644
index 00000000000..5fa85e71e59
--- /dev/null
+++ b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleProperty.java
@@ -0,0 +1,13 @@
+package com.sonarsource.decimal_scale_of_measures;
+
+import org.sonar.api.PropertyType;
+import org.sonar.api.config.PropertyDefinition;
+
+public class DecimalScaleProperty {
+
+ public static final String KEY = "sonar.scanner.feedDecimalScaleMetric";
+
+ public static PropertyDefinition definition() {
+ return PropertyDefinition.builder(KEY).name("Enable test decimal_scale_of_measures").type(PropertyType.BOOLEAN).defaultValue(String.valueOf(false)).build();
+ }
+}
diff --git a/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleSensor.java b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleSensor.java
new file mode 100644
index 00000000000..c6fe8c6ea03
--- /dev/null
+++ b/it/it-plugins/batch-plugin/src/main/java/com/sonarsource/decimal_scale_of_measures/DecimalScaleSensor.java
@@ -0,0 +1,36 @@
+package com.sonarsource.decimal_scale_of_measures;
+
+import org.sonar.api.batch.Sensor;
+import org.sonar.api.batch.SensorContext;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
+import org.sonar.api.resources.Project;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
+
+public class DecimalScaleSensor implements Sensor {
+ private static final Logger LOG = Loggers.get(DecimalScaleSensor.class);
+
+ @Override
+ public boolean shouldExecuteOnProject(Project project) {
+ return true;
+ }
+
+ @Override
+ public void analyse(Project module, SensorContext context) {
+ if (context.settings().getBoolean(DecimalScaleProperty.KEY)) {
+ FilePredicate all = context.fileSystem().predicates().all();
+ Iterable<InputFile> files = context.fileSystem().inputFiles(all);
+ double value = 0.0001;
+ for (InputFile file : files) {
+ LOG.info("Value for {}: {}", file.relativePath(), value);
+ context.newMeasure()
+ .on(file)
+ .forMetric(DecimalScaleMetric.definition())
+ .withValue(value)
+ .save();
+ value += 0.0001;
+ }
+ }
+ }
+}
diff --git a/it/it-tests/src/test/java/it/Category3Suite.java b/it/it-tests/src/test/java/it/Category3Suite.java
index 61bfc18575a..cd1f4974f5c 100644
--- a/it/it-tests/src/test/java/it/Category3Suite.java
+++ b/it/it-tests/src/test/java/it/Category3Suite.java
@@ -7,6 +7,7 @@ package it;
import com.sonar.orchestrator.Orchestrator;
import it.analysis.*;
+import it.measure.DecimalScaleMetricTest;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -29,7 +30,9 @@ import static util.ItUtils.xooPlugin;
BatchTest.class,
IssuesModeTest.class,
SettingsEncryptionTest.class,
- ReportDumpTest.class
+ ReportDumpTest.class,
+ // measures
+ DecimalScaleMetricTest.class
})
public class Category3Suite {
@@ -45,7 +48,7 @@ public class Category3Suite {
// Used by IssuesModeTest
.addPlugin(pluginArtifact("access-secured-props-plugin"))
- // used by TempFolderTest
+ // used by TempFolderTest and DecimalScaleMetricTest
.addPlugin(pluginArtifact("batch-plugin"))
// used by ExtensionLifecycleTest
diff --git a/it/it-tests/src/test/java/it/measure/DecimalScaleMetricTest.java b/it/it-tests/src/test/java/it/measure/DecimalScaleMetricTest.java
new file mode 100644
index 00000000000..63c716051cf
--- /dev/null
+++ b/it/it-tests/src/test/java/it/measure/DecimalScaleMetricTest.java
@@ -0,0 +1,39 @@
+package it.measure;
+
+import com.sonar.orchestrator.Orchestrator;
+import it.Category3Suite;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonar.wsclient.services.Resource;
+import org.sonar.wsclient.services.ResourceQuery;
+import util.ItUtils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * SONAR-6939
+ */
+public class DecimalScaleMetricTest {
+
+ /**
+ * Requires the plugin "batch-plugin"
+ */
+ @ClassRule
+ public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR;
+
+ @Test
+ public void override_decimal_scale_of_numeric_metric() {
+ String projectKey = "DecimalScaleMetricTest.override_decimal_scale_of_numeric_metric";
+ // see DecimalScaleMetric
+ String metricKey = "decimal_scale";
+ ItUtils.runProjectAnalysis(orchestrator, "shared/xoo-sample",
+ "sonar.projectKey", projectKey,
+ "sonar.scanner.feedDecimalScaleMetric", String.valueOf(true));
+
+ Resource resource = orchestrator.getServer().getWsClient()
+ .find(ResourceQuery.createForMetrics(projectKey, metricKey));
+ // Ability to define decimal scale of metrics was introduced in v5.3. By default it is 1.
+ assertThat(resource.getMeasureValue(metricKey)).isEqualTo(0.0001);
+ assertThat(resource.getMeasureFormattedValue(metricKey, null)).isEqualTo("0.0001");
+ }
+}