aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2016-04-14 16:24:29 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2016-04-14 16:34:16 +0200
commitc32b3042bfdc8991ee42d7ae3855226018561ae8 (patch)
treecf90c839b1dc4cfa47e97516480020ddbdbf8e76 /server
parentd19b4f0f976a97c6428c8f5fdf7d2c383bf2e760 (diff)
downloadsonarqube-c32b3042bfdc8991ee42d7ae3855226018561ae8.tar.gz
sonarqube-c32b3042bfdc8991ee42d7ae3855226018561ae8.zip
Add context when failing to map a db measure to a ws measure
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java36
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasureTest.java53
2 files changed, 73 insertions, 16 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java b/server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java
index bf9156fc46f..85019fac7d6 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java
@@ -33,24 +33,28 @@ class MeasureDtoToWsMeasure {
}
static WsMeasures.Measure measureDtoToWsMeasure(MetricDto metricDto, MeasureDto measureDto) {
- WsMeasures.Measure.Builder measure = WsMeasures.Measure.newBuilder();
- measure.setMetric(metricDto.getKey());
- // a measure value can be null, new_violations metric for example
- if (measureDto.getValue() != null
- || measureDto.getData() != null) {
- measure.setValue(formatMeasureValue(measureDto, metricDto));
- }
+ try {
+ WsMeasures.Measure.Builder measure = WsMeasures.Measure.newBuilder();
+ measure.setMetric(metricDto.getKey());
+ // a measure value can be null, new_violations metric for example
+ if (measureDto.getValue() != null
+ || measureDto.getData() != null) {
+ measure.setValue(formatMeasureValue(measureDto, metricDto));
+ }
- WsMeasures.PeriodValue.Builder periodBuilder = WsMeasures.PeriodValue.newBuilder();
- for (int i = 1; i <= 5; i++) {
- if (measureDto.getVariation(i) != null) {
- measure.getPeriodsBuilder().addPeriodsValue(periodBuilder
- .clear()
- .setIndex(i)
- .setValue(formatNumericalValue(measureDto.getVariation(i), metricDto)));
+ WsMeasures.PeriodValue.Builder periodBuilder = WsMeasures.PeriodValue.newBuilder();
+ for (int i = 1; i <= 5; i++) {
+ if (measureDto.getVariation(i) != null) {
+ measure.getPeriodsBuilder().addPeriodsValue(periodBuilder
+ .clear()
+ .setIndex(i)
+ .setValue(formatNumericalValue(measureDto.getVariation(i), metricDto)));
+ }
}
- }
- return measure.build();
+ return measure.build();
+ } catch (Exception e) {
+ throw new IllegalStateException(String.format("Error while mapping a measure of metric key '%s' and parameters %s", metricDto.getKey(), measureDto.toString()), e);
+ }
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasureTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasureTest.java
new file mode 100644
index 00000000000..5b29ea233bf
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasureTest.java
@@ -0,0 +1,53 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.measure.ws;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.db.metric.MetricDto;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+import static org.sonar.db.measure.MeasureTesting.newMeasureDto;
+import static org.sonar.db.metric.MetricTesting.newMetricDto;
+import static org.sonar.test.TestUtils.hasOnlyPrivateConstructors;
+
+public class MeasureDtoToWsMeasureTest {
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void fail_when_mapping_fails() {
+ MetricDto metric = spy(newMetricDto().setKey("metric-key"));
+ when(metric.getValueType()).thenThrow(NullPointerException.class);
+ expectedException.expect(IllegalStateException.class);
+ expectedException.expectMessage("Error while mapping a measure of metric key 'metric-key' and parameters ");
+
+ MeasureDtoToWsMeasure.measureDtoToWsMeasure(metric, newMeasureDto(metric, 1L).setValue(5.5d).setData("data"));
+ }
+
+ @Test
+ public void utility_class() {
+ assertThat(hasOnlyPrivateConstructors(MeasureDtoToWsMeasure.class)).isTrue();
+ }
+}