Thomas Vachuska
Committed by Gerrit Code Review

Adding support for SKIPPED state to STC.

Change-Id: I5a90bedb6272f0bb1d76f0bc5e19e67e8d05eec8
...@@ -23,5 +23,5 @@ ...@@ -23,5 +23,5 @@
23 <dependency name="Archetypes" requires="Setup"/> 23 <dependency name="Archetypes" requires="Setup"/>
24 24
25 <import file="${ONOS_ROOT}/tools/test/scenarios/wrapup.xml"/> 25 <import file="${ONOS_ROOT}/tools/test/scenarios/wrapup.xml"/>
26 - <dependency name="Wrapup" requires="~Archetypes,Setup"/> 26 + <dependency name="Wrapup" requires="~Archetypes,~Setup"/>
27 </scenario> 27 </scenario>
......
...@@ -204,19 +204,20 @@ public class Coordinator { ...@@ -204,19 +204,20 @@ public class Coordinator {
204 */ 204 */
205 private synchronized void execute(Step step) { 205 private synchronized void execute(Step step) {
206 Directive directive = nextAction(step); 206 Directive directive = nextAction(step);
207 - if (directive == RUN || directive == SKIP) { 207 + if (directive == RUN) {
208 store.markStarted(step); 208 store.markStarted(step);
209 if (step instanceof Group) { 209 if (step instanceof Group) {
210 Group group = (Group) step; 210 Group group = (Group) step;
211 delegate.onStart(group); 211 delegate.onStart(group);
212 - if (directive == RUN) { 212 + executeRoots(group);
213 - executeRoots(group);
214 - } else {
215 - group.children().forEach(child -> delegate.onCompletion(child, 1));
216 - }
217 } else { 213 } else {
218 - executor.execute(new StepProcessor(step, directive == SKIP, 214 + executor.execute(new StepProcessor(step, logDir, delegate));
219 - logDir, delegate)); 215 + }
216 + } else if (directive == SKIP) {
217 + if (step instanceof Group) {
218 + Group group = (Group) step;
219 + group.children().forEach(child -> delegate.onCompletion(child, SKIPPED));
220 + delegate.onCompletion(step, SKIPPED);
220 } 221 }
221 } 222 }
222 } 223 }
...@@ -237,7 +238,8 @@ public class Coordinator { ...@@ -237,7 +238,8 @@ public class Coordinator {
237 Status depStatus = store.getStatus(dependency.dst()); 238 Status depStatus = store.getStatus(dependency.dst());
238 if (depStatus == WAITING || depStatus == IN_PROGRESS) { 239 if (depStatus == WAITING || depStatus == IN_PROGRESS) {
239 return NOOP; 240 return NOOP;
240 - } else if (depStatus == FAILED && !dependency.isSoft()) { 241 + } else if ((depStatus == FAILED || depStatus == SKIPPED) &&
242 + !dependency.isSoft()) {
241 return SKIP; 243 return SKIP;
242 } 244 }
243 } 245 }
...@@ -270,7 +272,7 @@ public class Coordinator { ...@@ -270,7 +272,7 @@ public class Coordinator {
270 failed = failed || status == FAILED; 272 failed = failed || status == FAILED;
271 } 273 }
272 if (done) { 274 if (done) {
273 - delegate.onCompletion(group, failed ? 1 : 0); 275 + delegate.onCompletion(group, failed ? FAILED : SUCCEEDED);
274 } 276 }
275 } 277 }
276 } 278 }
...@@ -296,9 +298,9 @@ public class Coordinator { ...@@ -296,9 +298,9 @@ public class Coordinator {
296 } 298 }
297 299
298 @Override 300 @Override
299 - public void onCompletion(Step step, int exitCode) { 301 + public void onCompletion(Step step, Status status) {
300 - store.markComplete(step, exitCode == 0 ? SUCCEEDED : FAILED); 302 + store.markComplete(step, status);
301 - listeners.forEach(listener -> listener.onCompletion(step, exitCode)); 303 + listeners.forEach(listener -> listener.onCompletion(step, status));
302 executeSucessors(step); 304 executeSucessors(step);
303 latch.countDown(); 305 latch.countDown();
304 } 306 }
......
...@@ -172,8 +172,8 @@ public final class Main { ...@@ -172,8 +172,8 @@ public final class Main {
172 } 172 }
173 173
174 @Override 174 @Override
175 - public void onCompletion(Step step, int exitCode) { 175 + public void onCompletion(Step step, Status status) {
176 - logStatus(currentTimeMillis(), step.name(), exitCode == 0 ? SUCCEEDED : FAILED); 176 + logStatus(currentTimeMillis(), step.name(), status);
177 } 177 }
178 178
179 @Override 179 @Override
......
...@@ -31,10 +31,10 @@ public interface StepProcessListener { ...@@ -31,10 +31,10 @@ public interface StepProcessListener {
31 /** 31 /**
32 * Indicates that process step has completed. 32 * Indicates that process step has completed.
33 * 33 *
34 - * @param step subject step 34 + * @param step subject step
35 - * @param exitCode step process exit exitCode 35 + * @param status step completion status
36 */ 36 */
37 - default void onCompletion(Step step, int exitCode) { 37 + default void onCompletion(Step step, Coordinator.Status status) {
38 } 38 }
39 39
40 /** 40 /**
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onlab.stc; 16 package org.onlab.stc;
17 17
18 +import org.onlab.stc.Coordinator.Status;
19 +
18 import java.io.BufferedReader; 20 import java.io.BufferedReader;
19 import java.io.File; 21 import java.io.File;
20 import java.io.IOException; 22 import java.io.IOException;
...@@ -23,6 +25,8 @@ import java.io.InputStreamReader; ...@@ -23,6 +25,8 @@ import java.io.InputStreamReader;
23 import java.io.PrintWriter; 25 import java.io.PrintWriter;
24 26
25 import static java.lang.String.format; 27 import static java.lang.String.format;
28 +import static org.onlab.stc.Coordinator.Status.FAILED;
29 +import static org.onlab.stc.Coordinator.Status.SUCCEEDED;
26 import static org.onlab.stc.Coordinator.print; 30 import static org.onlab.stc.Coordinator.print;
27 31
28 /** 32 /**
...@@ -30,12 +34,12 @@ import static org.onlab.stc.Coordinator.print; ...@@ -30,12 +34,12 @@ import static org.onlab.stc.Coordinator.print;
30 */ 34 */
31 class StepProcessor implements Runnable { 35 class StepProcessor implements Runnable {
32 36
37 + private static final String IGNORE_CODE = "~";
33 private static final int FAIL = -1; 38 private static final int FAIL = -1;
34 39
35 static String launcher = "stc-launcher "; 40 static String launcher = "stc-launcher ";
36 41
37 private final Step step; 42 private final Step step;
38 - private final boolean skip;
39 private final File logDir; 43 private final File logDir;
40 44
41 private Process process; 45 private Process process;
...@@ -45,25 +49,22 @@ class StepProcessor implements Runnable { ...@@ -45,25 +49,22 @@ class StepProcessor implements Runnable {
45 * Creates a process monitor. 49 * Creates a process monitor.
46 * 50 *
47 * @param step step or group to be executed 51 * @param step step or group to be executed
48 - * @param skip indicates the process should not actually execute
49 * @param logDir directory where step process log should be stored 52 * @param logDir directory where step process log should be stored
50 * @param delegate process lifecycle listener 53 * @param delegate process lifecycle listener
51 */ 54 */
52 - StepProcessor(Step step, boolean skip, File logDir, StepProcessListener delegate) { 55 + StepProcessor(Step step, File logDir, StepProcessListener delegate) {
53 this.step = step; 56 this.step = step;
54 - this.skip = skip;
55 this.logDir = logDir; 57 this.logDir = logDir;
56 this.delegate = delegate; 58 this.delegate = delegate;
57 } 59 }
58 60
59 @Override 61 @Override
60 public void run() { 62 public void run() {
61 - int code = FAIL;
62 delegate.onStart(step); 63 delegate.onStart(step);
63 - if (!skip) { 64 + int code = execute();
64 - code = execute(); 65 + boolean ignoreCode = step.env() != null && step.env.equals(IGNORE_CODE);
65 - } 66 + Status status = ignoreCode || code == 0 ? SUCCEEDED : FAILED;
66 - delegate.onCompletion(step, code); 67 + delegate.onCompletion(step, status);
67 } 68 }
68 69
69 /** 70 /**
......
...@@ -68,8 +68,8 @@ public class CoordinatorTest { ...@@ -68,8 +68,8 @@ public class CoordinatorTest {
68 } 68 }
69 69
70 @Override 70 @Override
71 - public void onCompletion(Step step, int exitCode) { 71 + public void onCompletion(Step step, Coordinator.Status status) {
72 - print("< %s: %s", step.name(), exitCode == 0 ? "completed" : "failed"); 72 + print("< %s: %s", step.name(), status == Coordinator.Status.SUCCEEDED ? "completed" : "failed");
73 } 73 }
74 74
75 @Override 75 @Override
......
...@@ -23,7 +23,9 @@ import org.onlab.util.Tools; ...@@ -23,7 +23,9 @@ import org.onlab.util.Tools;
23 import java.io.File; 23 import java.io.File;
24 import java.io.IOException; 24 import java.io.IOException;
25 25
26 -import static org.junit.Assert.*; 26 +import static org.junit.Assert.assertEquals;
27 +import static org.junit.Assert.assertTrue;
28 +import static org.onlab.stc.Coordinator.Status.SUCCEEDED;
27 29
28 /** 30 /**
29 * Test of the step processor. 31 * Test of the step processor.
...@@ -46,31 +48,19 @@ public class StepProcessorTest { ...@@ -46,31 +48,19 @@ public class StepProcessorTest {
46 } 48 }
47 49
48 @Test 50 @Test
49 - public void executed() { 51 + public void basics() {
50 Step step = new Step("foo", "ls /tmp", null, null, null); 52 Step step = new Step("foo", "ls /tmp", null, null, null);
51 - StepProcessor processor = new StepProcessor(step, false, DIR, delegate); 53 + StepProcessor processor = new StepProcessor(step, DIR, delegate);
52 processor.run(); 54 processor.run();
53 assertTrue("should be started", delegate.started); 55 assertTrue("should be started", delegate.started);
54 assertTrue("should have output", delegate.output); 56 assertTrue("should have output", delegate.output);
55 assertTrue("should be stopped", delegate.stopped); 57 assertTrue("should be stopped", delegate.stopped);
56 - assertEquals("incorrect code", 0, delegate.code); 58 + assertEquals("incorrect status", SUCCEEDED, delegate.status);
57 - }
58 -
59 -
60 - @Test
61 - public void skipped() {
62 - Step step = new Step("foo", "ls /tmp", null, null, null);
63 - StepProcessor processor = new StepProcessor(step, true, DIR, delegate);
64 - processor.run();
65 - assertTrue("should be started", delegate.started);
66 - assertFalse("should have output", delegate.output);
67 - assertTrue("should be stopped", delegate.stopped);
68 - assertEquals("incorrect code", -1, delegate.code);
69 } 59 }
70 60
71 private class Listener implements StepProcessListener { 61 private class Listener implements StepProcessListener {
72 62
73 - private int code = 123; 63 + private Coordinator.Status status;
74 private boolean started, stopped, output; 64 private boolean started, stopped, output;
75 65
76 @Override 66 @Override
...@@ -79,9 +69,9 @@ public class StepProcessorTest { ...@@ -79,9 +69,9 @@ public class StepProcessorTest {
79 } 69 }
80 70
81 @Override 71 @Override
82 - public void onCompletion(Step step, int exitCode) { 72 + public void onCompletion(Step step, Coordinator.Status status) {
83 stopped = true; 73 stopped = true;
84 - this.code = exitCode; 74 + this.status = status;
85 } 75 }
86 76
87 @Override 77 @Override
......