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