Browse Source

SQSCANNER-58 Return a different error code for functional errors

tags/3.4.0.1729
Simon Brandhof 5 years ago
parent
commit
03a5ab2517

+ 1
- 1
src/main/java/org/sonarsource/scanner/cli/Cli.java View File

@@ -135,7 +135,7 @@ class Cli {
private void printErrorAndExit(String message) {
logger.error(message);
printUsage();
exit.exit(Exit.ERROR);
exit.exit(Exit.INTERNAL_ERROR);
}

private void printUsage() {

+ 2
- 1
src/main/java/org/sonarsource/scanner/cli/Exit.java View File

@@ -21,7 +21,8 @@ package org.sonarsource.scanner.cli;

class Exit {
static final int SUCCESS = 0;
static final int ERROR = 1;
static final int INTERNAL_ERROR = 1;
static final int USER_ERROR = 2;

void exit(int status) {
System.exit(status);

+ 5
- 4
src/main/java/org/sonarsource/scanner/cli/Main.java View File

@@ -64,7 +64,7 @@ public class Main {
void execute() {
Stats stats = new Stats(logger).start();

int status = Exit.ERROR;
int status = Exit.INTERNAL_ERROR;
try {
Properties p = conf.properties();
checkSkip(p);
@@ -77,6 +77,7 @@ public class Main {
} catch (Throwable e) {
displayExecutionResult(stats, "FAILURE");
showError("Error during SonarQube Scanner execution", e, cli.isDebugEnabled());
status = isUserError(e) ? Exit.USER_ERROR : Exit.INTERNAL_ERROR;
} finally {
exit.exit(status);
}
@@ -121,7 +122,7 @@ public class Main {
}

private void showError(String message, Throwable e, boolean debug) {
if (showStackTrace(e, debug)) {
if (debug && !isUserError(e)) {
logger.error(message, e);
} else {
logger.error(message);
@@ -141,9 +142,9 @@ public class Main {
}
}

private static boolean showStackTrace(Throwable e, boolean debug) {
private static boolean isUserError(Throwable e) {
// class not available at compile time (loaded by isolated classloader)
return debug && !"org.sonar.api.utils.MessageException".equals(e.getClass().getName());
return "org.sonar.api.utils.MessageException".equals(e.getClass().getName());
}

private void suggestDebugMode() {

+ 2
- 2
src/test/java/org/sonarsource/scanner/cli/CliTest.java View File

@@ -53,7 +53,7 @@ public class CliTest {
cli = new Cli(exit, logs);
cli.parse(new String[] {"-D"});
verify(logs).error("Missing argument for option -D/--define");
verify(exit).exit(Exit.ERROR);
verify(exit).exit(Exit.INTERNAL_ERROR);
}

@Test
@@ -142,7 +142,7 @@ public class CliTest {
cli.parse(new String[] {"-w"});
verify(logs).error("Unrecognized option: -w");
verify(logs).info("usage: sonar-scanner [options]");
verify(exit).exit(Exit.ERROR);
verify(exit).exit(Exit.INTERNAL_ERROR);
}

@Test

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

@@ -88,7 +88,7 @@ public class MainTest {
Main main = new Main(exit, cli, conf, scannerFactory, logs);
main.execute();

verify(exit).exit(Exit.ERROR);
verify(exit).exit(Exit.INTERNAL_ERROR);
verify(logs).error("Error during SonarQube Scanner execution", e);
}

@@ -106,14 +106,14 @@ public class MainTest {

verify(runner).start();
verify(runner, never()).execute(any());
verify(exit).exit(Exit.ERROR);
verify(exit).exit(Exit.INTERNAL_ERROR);
verify(logs).error("Error during SonarQube Scanner execution", e);
}

@Test
public void show_error_MessageException() {
Exception e = createException(true);
testException(e, false, false);
testException(e, false, false, Exit.USER_ERROR);

verify(logs).error("Error during SonarQube Scanner execution");
verify(logs).error("Caused by: NPE");
@@ -123,7 +123,7 @@ public class MainTest {
@Test
public void show_error_MessageException_embedded() {
Exception e = createException(true);
testException(e, false, true);
testException(e, false, true, Exit.USER_ERROR);

verify(logs).error("Error during SonarQube Scanner execution");
verify(logs).error("Caused by: NPE");
@@ -132,7 +132,7 @@ public class MainTest {
@Test
public void show_error_MessageException_debug() {
Exception e = createException(true);
testException(e, true, false);
testException(e, true, false, Exit.USER_ERROR);

verify(logs).error("Error during SonarQube Scanner execution");
verify(logs).error("my message");
@@ -142,7 +142,7 @@ public class MainTest {
@Test
public void show_error_MessageException_debug_embedded() {
Exception e = createException(true);
testException(e, true, true);
testException(e, true, true, Exit.USER_ERROR);

verify(logs).error("Error during SonarQube Scanner execution");
verify(logs).error("my message");
@@ -152,13 +152,13 @@ public class MainTest {
@Test
public void show_error_debug() {
Exception e = createException(false);
testException(e, true, false);
testException(e, true, false, Exit.INTERNAL_ERROR);

verify(logs).error("Error during SonarQube Scanner execution", e);
verify(logs, never()).error("Re-run SonarQube Scanner using the -X switch to enable full debug logging.");
}

private void testException(Exception e, boolean debugEnabled, boolean isEmbedded) {
private void testException(Exception e, boolean debugEnabled, boolean isEmbedded, int expectedExitCode) {
when(cli.isDebugEnabled()).thenReturn(debugEnabled);
when(cli.isEmbedded()).thenReturn(isEmbedded);

@@ -169,7 +169,7 @@ public class MainTest {
Main main = new Main(exit, cli, conf, scannerFactory, logs);
main.execute();

verify(exit).exit(Exit.ERROR);
verify(exit).exit(expectedExitCode);
}

private Exception createException(boolean messageException) {

Loading…
Cancel
Save