diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2016-04-14 16:24:29 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2016-04-14 16:34:16 +0200 |
commit | c32b3042bfdc8991ee42d7ae3855226018561ae8 (patch) | |
tree | cf90c839b1dc4cfa47e97516480020ddbdbf8e76 /server | |
parent | d19b4f0f976a97c6428c8f5fdf7d2c383bf2e760 (diff) | |
download | sonarqube-c32b3042bfdc8991ee42d7ae3855226018561ae8.tar.gz sonarqube-c32b3042bfdc8991ee42d7ae3855226018561ae8.zip |
Add context when failing to map a db measure to a ws measure
Diffstat (limited to 'server')
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(); + } +} |