aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2017-01-13 11:36:34 +0100
committerJulien HENRY <henryju@yahoo.fr>2017-01-13 11:58:22 +0100
commit25b8af28ff4636a8222cc65af59200ac7140ff67 (patch)
tree3325bd762659df6d3472a8e37e88ddfce1800340 /src
parentae19303ed23f5120e228a4f7cdfb4ebe383abbd5 (diff)
downloadsonar-scanner-cli-25b8af28ff4636a8222cc65af59200ac7140ff67.tar.gz
sonar-scanner-cli-25b8af28ff4636a8222cc65af59200ac7140ff67.zip
SQSCANNER-36 Don't loose error message in case of low level error (like OOM)
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/sonarsource/scanner/cli/Main.java8
-rw-r--r--src/test/java/org/sonarsource/scanner/cli/MainTest.java20
2 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/org/sonarsource/scanner/cli/Main.java b/src/main/java/org/sonarsource/scanner/cli/Main.java
index 8d030e4..a273381 100644
--- a/src/main/java/org/sonarsource/scanner/cli/Main.java
+++ b/src/main/java/org/sonarsource/scanner/cli/Main.java
@@ -65,22 +65,26 @@ public class Main {
Stats stats = new Stats(logger).start();
int status = Exit.ERROR;
+ boolean started = false;
try {
Properties p = conf.properties();
checkSkip(p);
configureLogging(p);
init(p);
runner.start();
+ started = true;
logger.info("SonarQube server " + runner.serverVersion());
runAnalysis(stats, p);
status = Exit.SUCCESS;
- } catch (Exception e) {
+ } catch (Throwable e) {
status = Exit.ERROR;
displayExecutionResult(stats, "FAILURE");
showError("Error during SonarQube Scanner execution", e, cli.isDebugEnabled());
} finally {
try {
- runner.stop();
+ if (started) {
+ runner.stop();
+ }
} catch (Throwable e) {
status = Exit.ERROR;
logger.error("Unable to properly stop the scanner", e);
diff --git a/src/test/java/org/sonarsource/scanner/cli/MainTest.java b/src/test/java/org/sonarsource/scanner/cli/MainTest.java
index b410cbd..9fd5f22 100644
--- a/src/test/java/org/sonarsource/scanner/cli/MainTest.java
+++ b/src/test/java/org/sonarsource/scanner/cli/MainTest.java
@@ -79,7 +79,7 @@ public class MainTest {
}
@Test
- public void should_stop_on_error() {
+ public void should_call_stop_on_error_during_analysis() {
EmbeddedScanner runner = mock(EmbeddedScanner.class);
Exception e = new NullPointerException("NPE");
e = new IllegalStateException("Error", e);
@@ -95,6 +95,24 @@ public class MainTest {
}
@Test
+ public void should_not_call_stop_on_error_during_start() {
+ EmbeddedScanner runner = mock(EmbeddedScanner.class);
+ Exception e = new NullPointerException("NPE");
+ e = new IllegalStateException("Error", e);
+ doThrow(e).when(runner).start();
+ when(runnerFactory.create(any(Properties.class))).thenReturn(runner);
+
+ Main main = new Main(exit, cli, conf, runnerFactory, logs);
+ main.execute();
+
+ verify(runner).start();
+ verify(runner, never()).runAnalysis(any());
+ verify(runner, never()).stop();
+ verify(exit).exit(Exit.ERROR);
+ verify(logs).error("Error during SonarQube Scanner execution", e);
+ }
+
+ @Test
public void should_exit_on_error() {
EmbeddedScanner runner = mock(EmbeddedScanner.class);
Exception e = new NullPointerException("NPE");