From 25b8af28ff4636a8222cc65af59200ac7140ff67 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Fri, 13 Jan 2017 11:36:34 +0100 Subject: [PATCH] SQSCANNER-36 Don't loose error message in case of low level error (like OOM) --- .../org/sonarsource/scanner/cli/Main.java | 8 ++++++-- .../org/sonarsource/scanner/cli/MainTest.java | 20 ++++++++++++++++++- 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); @@ -94,6 +94,24 @@ public class MainTest { verify(logs).error("Error during SonarQube Scanner execution", e); } + @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); -- 2.39.5