]> source.dussan.org Git - sonarqube.git/commitdiff
Duration should not accept hours more than 24 and minutes more than 60
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 4 Apr 2014 08:50:46 +0000 (10:50 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 4 Apr 2014 08:50:46 +0000 (10:50 +0200)
sonar-plugin-api/src/main/java/org/sonar/api/server/debt/internal/DefaultDebtRemediationFunction.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/Duration.java
sonar-plugin-api/src/test/java/org/sonar/api/server/debt/DefaultDebtRemediationFunctionTest.java
sonar-plugin-api/src/test/java/org/sonar/api/utils/DurationTest.java

index 66c8e337f0cf823c9b256f9d2728bb74a6a17fe0..fc4bec8305462b3393e5271f994bfb4bd31a6b76 100644 (file)
@@ -51,7 +51,7 @@ public class DefaultDebtRemediationFunction implements DebtRemediationFunction {
         Duration duration = Duration.decode(s, HOURS_IN_DAY);
         return duration.encode(HOURS_IN_DAY);
       } catch (Exception e) {
-        throw new IllegalArgumentException(String.format("Invalid %s: %s", label, s), e);
+        throw new IllegalArgumentException(String.format("Invalid %s: %s (%s)", label, s, e.getMessage()), e);
       }
     }
     return null;
index e340f8051242f793a2cf6540f3e4de7f42d75ff1..63367f10780ea173a9185568ab18aa8fefee984e 100644 (file)
@@ -79,11 +79,17 @@ public class Duration implements Serializable {
         String hoursText = matcher.group(2);
         if (hoursText != null) {
           hours = Integer.parseInt(hoursText);
+          if (hours > 24) {
+            throw new IllegalArgumentException(String.format("The number of hours should not be greater than 24, got %s", hours));
+          }
           sanitizedText = sanitizedText.replace(hoursText + HOUR, "");
         }
         String minutesText = matcher.group(3);
         if (minutesText != null) {
           minutes = Integer.parseInt(minutesText);
+          if (minutes > 60) {
+            throw new IllegalArgumentException(String.format("The number of minutes should not be greater than 60, got %s", minutes));
+          }
           sanitizedText = sanitizedText.replace(minutesText + MINUTE, "");
         }
         if (sanitizedText.isEmpty()) {
index b165c6b1556b0117aba4b5e11308419535acd1e9..fb9e6e6d2b3c82db656899ca529d22d9d452d5b3 100644 (file)
@@ -162,7 +162,7 @@ public class DefaultDebtRemediationFunctionTest {
       new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, "foo", null);
       fail();
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessage("Invalid coefficient: foo");
+      assertThat(e).hasMessage("Invalid coefficient: foo (Duration 'foo' is invalid, it should use the following sample format : 2d 10h 15min)");
     }
 
   }
index ebddda39ef844ff4c5e3146af4c8165059e5053d..e5b36d8f8645d6041f47b56df89a5feecc2d77e7 100644 (file)
@@ -50,13 +50,33 @@ public class DurationTest {
 
   @Test
   public void decode() throws Exception {
-    assertThat(Duration.decode("    15 d  26  h     42min  ", HOURS_IN_DAY)).isEqualTo(Duration.create(15 * ONE_DAY_IN_MINUTES + 26 * ONE_HOUR_IN_MINUTES + 42 * ONE_MINUTE));
-    assertThat(Duration.decode("15d26h42min", HOURS_IN_DAY)).isEqualTo(Duration.create(15 * ONE_DAY_IN_MINUTES + 26 * ONE_HOUR_IN_MINUTES + 42 * ONE_MINUTE));
-    assertThat(Duration.decode("26h", HOURS_IN_DAY)).isEqualTo(Duration.create(26 * ONE_HOUR_IN_MINUTES));
+    assertThat(Duration.decode("    15 d  23  h     42min  ", HOURS_IN_DAY)).isEqualTo(Duration.create(15 * ONE_DAY_IN_MINUTES + 23 * ONE_HOUR_IN_MINUTES + 42 * ONE_MINUTE));
+    assertThat(Duration.decode("15d23h42min", HOURS_IN_DAY)).isEqualTo(Duration.create(15 * ONE_DAY_IN_MINUTES + 23 * ONE_HOUR_IN_MINUTES + 42 * ONE_MINUTE));
+    assertThat(Duration.decode("23h", HOURS_IN_DAY)).isEqualTo(Duration.create(23 * ONE_HOUR_IN_MINUTES));
     assertThat(Duration.decode("15d", HOURS_IN_DAY)).isEqualTo(Duration.create(15 * ONE_DAY_IN_MINUTES));
     assertThat(Duration.decode("42min", HOURS_IN_DAY)).isEqualTo(Duration.create(42 * ONE_MINUTE));
   }
 
+  @Test
+  public void fail_to_decode_if_more_than_24_hours() throws Exception {
+    try {
+      Duration.decode("25h", HOURS_IN_DAY);
+      fail();
+    } catch (Exception e) {
+      assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The number of hours should not be greater than 24, got 25");
+    }
+  }
+
+  @Test
+  public void fail_to_decode_if_more_than_60_minutes() throws Exception {
+    try {
+      Duration.decode("61min", HOURS_IN_DAY);
+      fail();
+    } catch (Exception e) {
+      assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The number of minutes should not be greater than 60, got 61");
+    }
+  }
+
   @Test
   public void fail_to_decode_if_unit_with_invalid_number() throws Exception {
     try {