]> source.dussan.org Git - sonarqube.git/commitdiff
Add context when failing to map a db measure to a ws measure 898/head
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 14 Apr 2016 14:24:29 +0000 (16:24 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 14 Apr 2016 14:34:16 +0000 (16:34 +0200)
server/sonar-server/src/main/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasure.java
server/sonar-server/src/test/java/org/sonar/server/measure/ws/MeasureDtoToWsMeasureTest.java [new file with mode: 0644]

index bf9156fc46fe1704ae25f11c68a378c519f8251b..85019fac7d652d23f82484855a0d304b7ede97fb 100644 (file)
@@ -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 (file)
index 0000000..5b29ea2
--- /dev/null
@@ -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();
+  }
+}