Added shutdown hook to STC to print summary even when interrupted by user.
Change-Id: I2ddb0d46ddfd776101a27ea76fe5ae34d28ddded
Showing
1 changed file
with
31 additions
and
12 deletions
| ... | @@ -45,7 +45,12 @@ public final class Main { | ... | @@ -45,7 +45,12 @@ public final class Main { |
| 45 | private static final String BLUE = "\u001B[36m"; | 45 | private static final String BLUE = "\u001B[36m"; |
| 46 | 46 | ||
| 47 | private static final String SUCCESS_SUMMARY = "%sPassed! %d steps succeeded%s"; | 47 | private static final String SUCCESS_SUMMARY = "%sPassed! %d steps succeeded%s"; |
| 48 | - private static final String FAILURE_SUMMARY = "%sFailed! %d steps succeeded; %d steps failed; %d steps skipped%s"; | 48 | + private static final String MIXED_SUMMARY = |
| 49 | + "%s%d steps succeeded; %s%d steps failed; %s%d steps skipped%s"; | ||
| 50 | + private static final String FAILURE_SUMMARY = "%sFailed! " + MIXED_SUMMARY; | ||
| 51 | + private static final String ABORTED_SUMMARY = "%sAborted! " + MIXED_SUMMARY; | ||
| 52 | + | ||
| 53 | + private boolean isReported = false; | ||
| 49 | 54 | ||
| 50 | private enum Command { | 55 | private enum Command { |
| 51 | LIST, RUN, RUN_RANGE, HELP | 56 | LIST, RUN, RUN_RANGE, HELP |
| ... | @@ -181,26 +186,32 @@ public final class Main { | ... | @@ -181,26 +186,32 @@ public final class Main { |
| 181 | // Runs the coordinator and waits for it to finish. | 186 | // Runs the coordinator and waits for it to finish. |
| 182 | private void runCoordinator() { | 187 | private void runCoordinator() { |
| 183 | try { | 188 | try { |
| 189 | + Runtime.getRuntime().addShutdownHook(new ShutdownHook()); | ||
| 184 | coordinator.start(); | 190 | coordinator.start(); |
| 185 | int exitCode = coordinator.waitFor(); | 191 | int exitCode = coordinator.waitFor(); |
| 186 | pause(100); // allow stdout to flush | 192 | pause(100); // allow stdout to flush |
| 187 | - printSummary(exitCode); | 193 | + printSummary(exitCode, false); |
| 188 | System.exit(exitCode); | 194 | System.exit(exitCode); |
| 189 | } catch (InterruptedException e) { | 195 | } catch (InterruptedException e) { |
| 190 | print("Unable to execute scenario %s", scenarioFile); | 196 | print("Unable to execute scenario %s", scenarioFile); |
| 191 | } | 197 | } |
| 192 | } | 198 | } |
| 193 | 199 | ||
| 194 | - private void printSummary(int exitCode) { | 200 | + private synchronized void printSummary(int exitCode, boolean isAborted) { |
| 195 | - Set<Step> steps = coordinator.getSteps(); | 201 | + if (!isReported) { |
| 196 | - int count = steps.size(); | 202 | + isReported = true; |
| 197 | - if (exitCode == 0) { | 203 | + Set<Step> steps = coordinator.getSteps(); |
| 198 | - print(SUCCESS_SUMMARY, color(SUCCEEDED), count, color(null)); | 204 | + int count = steps.size(); |
| 199 | - } else { | 205 | + if (exitCode == 0) { |
| 200 | - long success = steps.stream().filter(s -> coordinator.getStatus(s) == SUCCEEDED).count(); | 206 | + print(SUCCESS_SUMMARY, color(SUCCEEDED), count, color(null)); |
| 201 | - long failed = steps.stream().filter(s -> coordinator.getStatus(s) == FAILED).count(); | 207 | + } else { |
| 202 | - long skipped = steps.stream().filter(s -> coordinator.getStatus(s) == SKIPPED).count(); | 208 | + long success = steps.stream().filter(s -> coordinator.getStatus(s) == SUCCEEDED).count(); |
| 203 | - print(FAILURE_SUMMARY, color(FAILED), success, failed, skipped, color(null)); | 209 | + long failed = steps.stream().filter(s -> coordinator.getStatus(s) == FAILED).count(); |
| 210 | + long skipped = steps.stream().filter(s -> coordinator.getStatus(s) == SKIPPED).count(); | ||
| 211 | + print(isAborted ? ABORTED_SUMMARY : FAILURE_SUMMARY, | ||
| 212 | + color(FAILED), color(SUCCEEDED), success, | ||
| 213 | + color(FAILED), failed, color(SKIPPED), skipped, color(null)); | ||
| 214 | + } | ||
| 204 | } | 215 | } |
| 205 | } | 216 | } |
| 206 | 217 | ||
| ... | @@ -270,6 +281,14 @@ public final class Main { | ... | @@ -270,6 +281,14 @@ public final class Main { |
| 270 | } | 281 | } |
| 271 | } | 282 | } |
| 272 | 283 | ||
| 284 | + // Shutdown hook to report status even when aborted. | ||
| 285 | + private class ShutdownHook extends Thread { | ||
| 286 | + @Override | ||
| 287 | + public void run() { | ||
| 288 | + printSummary(1, true); | ||
| 289 | + } | ||
| 290 | + } | ||
| 291 | + | ||
| 273 | // Logger to quiet Jetty down | 292 | // Logger to quiet Jetty down |
| 274 | private static class NullLogger implements Logger { | 293 | private static class NullLogger implements Logger { |
| 275 | @Override | 294 | @Override | ... | ... |
-
Please register or login to post a comment