Browse Source

SQSCANNER-36 Don't loose error message in case of low level error (like OOM)

tags/2.9.0.670
Julien HENRY 7 years ago
parent
commit
25b8af28ff

+ 6
- 2
src/main/java/org/sonarsource/scanner/cli/Main.java View File

@@ -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);

+ 19
- 1
src/test/java/org/sonarsource/scanner/cli/MainTest.java View File

@@ -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);

Loading…
Cancel
Save