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