From 11b5185acd1215b4eec4243caab19e4c14004e89 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Tue, 12 Jun 2018 12:52:27 +0200 Subject: [PATCH] SONAR-10881 Log flooding when a WS param is not an integer as expected --- .../server/ws/internal/ValidatingRequest.java | 2 +- .../org/sonar/api/server/ws/RequestTest.java | 19 +++++++++++++++---- .../ws/internal/SimpleGetRequestTest.java | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java index 3a97c67b92e9..88f4b6f24bf9 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java @@ -216,7 +216,7 @@ private static int validateAsNumeric(String key, String value) { try { return Integer.parseInt(value); } catch (NumberFormatException exception) { - throw new IllegalStateException(format("'%s' value '%s' cannot be parsed as an integer", key, value), exception); + throw new IllegalArgumentException(format("'%s' value '%s' cannot be parsed as an integer", key, value), exception); } } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java index d8d9562ce87d..9dade321f4d4 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java @@ -60,7 +60,7 @@ public class RequestTest { @Rule public ExpectedException expectedException = ExpectedException.none(); - FakeRequest underTest = new FakeRequest(); + private FakeRequest underTest = new FakeRequest(); @Before public void before() { @@ -144,6 +144,17 @@ public void maximum_value_not_ok() { underTest.setParam(param, "11").param(param); } + @Test + public void paramAsInt_throws_IAE_if_maximum_defined_and_value_not_a_number() { + String param = "maximum_value_param"; + defineParameterTestAction(newParam -> newParam.setMaximumValue(10), param); + + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("'maximum_value_param' value 'foo' cannot be parsed as an integer"); + + underTest.setParam(param, "foo").paramAsInt(param); + } + @Test public void required_param_as_strings() { underTest.setParam("a_required_string", "foo,bar"); @@ -214,7 +225,7 @@ public void null_param() { } @Test - public void param_as_int() { + public void paramAsInt() { assertThat(underTest.setParam("a_number", "123").paramAsInt("a_number")).isEqualTo(123); assertThat(underTest.setParam("a_number", "123").paramAsInt("a_number", 42)).isEqualTo(123); assertThat(underTest.setParam("a_number", null).paramAsInt("a_number", 42)).isEqualTo(123); @@ -609,7 +620,7 @@ public void param_as_input_stream() throws Exception { } @Test - public void param_as_part() throws Exception { + public void param_as_part() { InputStream inputStream = mock(InputStream.class); underTest.setPart("key", inputStream, "filename"); @@ -621,7 +632,7 @@ public void param_as_part() throws Exception { } @Test - public void mandatory_param_as_part() throws Exception { + public void mandatory_param_as_part() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The 'required_param' parameter is missing"); diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java index 3aa51ed7be1d..46974bd8201c 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java @@ -50,7 +50,7 @@ public void has_param() { } @Test - public void get_part() throws Exception { + public void get_part() { InputStream inputStream = mock(InputStream.class); underTest.setPart("key", inputStream, "filename");