Adding ability to delay before executing a step in STC.
Change-Id: I9822ac35d37e6735068ebdf39b952db913a10e14
Showing
9 changed files
with
55 additions
and
21 deletions
| ... | @@ -73,7 +73,7 @@ | ... | @@ -73,7 +73,7 @@ |
| 73 | exec="mvn clean install"/> | 73 | exec="mvn clean install"/> |
| 74 | <step name="Install-REST-App" requires="^,~Verify-UI-Topo" | 74 | <step name="Install-REST-App" requires="^,~Verify-UI-Topo" |
| 75 | exec="onos-app ${OCI} reinstall! target/test-app-1.2.3.oar"/> | 75 | exec="onos-app ${OCI} reinstall! target/test-app-1.2.3.oar"/> |
| 76 | - <Xstep name="Verify-REST-App" requires="^" delay="2" | 76 | + <step name="Verify-REST-App" requires="^" delay="2" |
| 77 | exec="curl --fail -isS --user ${ONOS_WEB_USER}:${ONOS_WEB_PASS} http://${OCI}:8181/onos/test-app/sample"/> | 77 | exec="curl --fail -isS --user ${ONOS_WEB_USER}:${ONOS_WEB_PASS} http://${OCI}:8181/onos/test-app/sample"/> |
| 78 | 78 | ||
| 79 | <step name="Uninstall-App" requires="^" | 79 | <step name="Uninstall-App" requires="^" | ... | ... |
| ... | @@ -32,6 +32,7 @@ import java.util.Set; | ... | @@ -32,6 +32,7 @@ import java.util.Set; |
| 32 | 32 | ||
| 33 | import static com.google.common.base.Preconditions.*; | 33 | import static com.google.common.base.Preconditions.*; |
| 34 | import static com.google.common.base.Strings.isNullOrEmpty; | 34 | import static com.google.common.base.Strings.isNullOrEmpty; |
| 35 | +import static java.lang.Integer.parseInt; | ||
| 35 | import static org.onlab.graph.DepthFirstSearch.EdgeType.BACK_EDGE; | 36 | import static org.onlab.graph.DepthFirstSearch.EdgeType.BACK_EDGE; |
| 36 | import static org.onlab.graph.GraphPathSearch.ALL_PATHS; | 37 | import static org.onlab.graph.GraphPathSearch.ALL_PATHS; |
| 37 | import static org.onlab.stc.Scenario.loadScenario; | 38 | import static org.onlab.stc.Scenario.loadScenario; |
| ... | @@ -56,6 +57,7 @@ public class Compiler { | ... | @@ -56,6 +57,7 @@ public class Compiler { |
| 56 | private static final String COMMAND = "[@exec]"; | 57 | private static final String COMMAND = "[@exec]"; |
| 57 | private static final String ENV = "[@env]"; | 58 | private static final String ENV = "[@env]"; |
| 58 | private static final String CWD = "[@cwd]"; | 59 | private static final String CWD = "[@cwd]"; |
| 60 | + private static final String DELAY = "[@delay]"; | ||
| 59 | private static final String REQUIRES = "[@requires]"; | 61 | private static final String REQUIRES = "[@requires]"; |
| 60 | private static final String IF = "[@if]"; | 62 | private static final String IF = "[@if]"; |
| 61 | private static final String UNLESS = "[@unless]"; | 63 | private static final String UNLESS = "[@unless]"; |
| ... | @@ -245,9 +247,10 @@ public class Compiler { | ... | @@ -245,9 +247,10 @@ public class Compiler { |
| 245 | String command = expand(cfg.getString(COMMAND, parentGroup != null ? parentGroup.command() : null), true); | 247 | String command = expand(cfg.getString(COMMAND, parentGroup != null ? parentGroup.command() : null), true); |
| 246 | String env = expand(cfg.getString(ENV, parentGroup != null ? parentGroup.env() : null)); | 248 | String env = expand(cfg.getString(ENV, parentGroup != null ? parentGroup.env() : null)); |
| 247 | String cwd = expand(cfg.getString(CWD, parentGroup != null ? parentGroup.cwd() : null)); | 249 | String cwd = expand(cfg.getString(CWD, parentGroup != null ? parentGroup.cwd() : null)); |
| 250 | + int delay = parseInt(expand(cfg.getString(DELAY, parentGroup != null ? "" + parentGroup.delay() : "0"))); | ||
| 248 | 251 | ||
| 249 | - print("step name=%s command=%s env=%s cwd=%s", name, command, env, cwd); | 252 | + print("step name=%s command=%s env=%s cwd=%s delay=%d", name, command, env, cwd, delay); |
| 250 | - Step step = new Step(name, command, env, cwd, parentGroup); | 253 | + Step step = new Step(name, command, env, cwd, parentGroup, delay); |
| 251 | registerStep(step, cfg, namespace, parentGroup); | 254 | registerStep(step, cfg, namespace, parentGroup); |
| 252 | } | 255 | } |
| 253 | 256 | ||
| ... | @@ -264,9 +267,10 @@ public class Compiler { | ... | @@ -264,9 +267,10 @@ public class Compiler { |
| 264 | String command = expand(cfg.getString(COMMAND, parentGroup != null ? parentGroup.command() : null), true); | 267 | String command = expand(cfg.getString(COMMAND, parentGroup != null ? parentGroup.command() : null), true); |
| 265 | String env = expand(cfg.getString(ENV, parentGroup != null ? parentGroup.env() : null)); | 268 | String env = expand(cfg.getString(ENV, parentGroup != null ? parentGroup.env() : null)); |
| 266 | String cwd = expand(cfg.getString(CWD, parentGroup != null ? parentGroup.cwd() : null)); | 269 | String cwd = expand(cfg.getString(CWD, parentGroup != null ? parentGroup.cwd() : null)); |
| 270 | + int delay = parseInt(expand(cfg.getString(DELAY, parentGroup != null ? "" + parentGroup.delay() : "0"))); | ||
| 267 | 271 | ||
| 268 | - print("group name=%s command=%s env=%s cwd=%s", name, command, env, cwd); | 272 | + print("group name=%s command=%s env=%s cwd=%s delay=%d", name, command, env, cwd, delay); |
| 269 | - Group group = new Group(name, command, env, cwd, parentGroup); | 273 | + Group group = new Group(name, command, env, cwd, parentGroup, delay); |
| 270 | if (registerStep(group, cfg, namespace, parentGroup)) { | 274 | if (registerStep(group, cfg, namespace, parentGroup)) { |
| 271 | compile(cfg, namespace, group); | 275 | compile(cfg, namespace, group); |
| 272 | } | 276 | } | ... | ... |
| ... | @@ -35,9 +35,10 @@ public class Group extends Step { | ... | @@ -35,9 +35,10 @@ public class Group extends Step { |
| 35 | * @param env default path to file to be sourced into the environment | 35 | * @param env default path to file to be sourced into the environment |
| 36 | * @param cwd default path to current working directory for the step | 36 | * @param cwd default path to current working directory for the step |
| 37 | * @param group optional group to which this step belongs | 37 | * @param group optional group to which this step belongs |
| 38 | + * @param delay seconds to delay before executing | ||
| 38 | */ | 39 | */ |
| 39 | - public Group(String name, String command, String env, String cwd, Group group) { | 40 | + public Group(String name, String command, String env, String cwd, Group group, int delay) { |
| 40 | - super(name, command, env, cwd, group); | 41 | + super(name, command, env, cwd, group, delay); |
| 41 | } | 42 | } |
| 42 | 43 | ||
| 43 | /** | 44 | /** | ... | ... |
| ... | @@ -32,6 +32,7 @@ public class Step implements Vertex { | ... | @@ -32,6 +32,7 @@ public class Step implements Vertex { |
| 32 | protected final String env; | 32 | protected final String env; |
| 33 | protected final String cwd; | 33 | protected final String cwd; |
| 34 | protected final Group group; | 34 | protected final Group group; |
| 35 | + protected final int delay; | ||
| 35 | 36 | ||
| 36 | /** | 37 | /** |
| 37 | * Creates a new test step. | 38 | * Creates a new test step. |
| ... | @@ -41,10 +42,12 @@ public class Step implements Vertex { | ... | @@ -41,10 +42,12 @@ public class Step implements Vertex { |
| 41 | * @param env path to file to be sourced into the environment | 42 | * @param env path to file to be sourced into the environment |
| 42 | * @param cwd path to current working directory for the step | 43 | * @param cwd path to current working directory for the step |
| 43 | * @param group optional group to which this step belongs | 44 | * @param group optional group to which this step belongs |
| 45 | + * @param delay seconds to delay before executing | ||
| 44 | */ | 46 | */ |
| 45 | - public Step(String name, String command, String env, String cwd, Group group) { | 47 | + public Step(String name, String command, String env, String cwd, Group group, int delay) { |
| 46 | this.name = checkNotNull(name, "Name cannot be null"); | 48 | this.name = checkNotNull(name, "Name cannot be null"); |
| 47 | this.group = group; | 49 | this.group = group; |
| 50 | + this.delay = delay; | ||
| 48 | 51 | ||
| 49 | // Set the command, environment and cwd | 52 | // Set the command, environment and cwd |
| 50 | // If one is not given use the value from the enclosing group | 53 | // If one is not given use the value from the enclosing group |
| ... | @@ -98,6 +101,14 @@ public class Step implements Vertex { | ... | @@ -98,6 +101,14 @@ public class Step implements Vertex { |
| 98 | return group; | 101 | return group; |
| 99 | } | 102 | } |
| 100 | 103 | ||
| 104 | + /** | ||
| 105 | + * Returns the start delay in seconds. | ||
| 106 | + * | ||
| 107 | + * @return number of seconds | ||
| 108 | + */ | ||
| 109 | + public int delay() { | ||
| 110 | + return delay; | ||
| 111 | + } | ||
| 101 | 112 | ||
| 102 | @Override | 113 | @Override |
| 103 | public int hashCode() { | 114 | public int hashCode() { |
| ... | @@ -124,6 +135,7 @@ public class Step implements Vertex { | ... | @@ -124,6 +135,7 @@ public class Step implements Vertex { |
| 124 | .add("env", env) | 135 | .add("env", env) |
| 125 | .add("cwd", cwd) | 136 | .add("cwd", cwd) |
| 126 | .add("group", group) | 137 | .add("group", group) |
| 138 | + .add("delay", delay) | ||
| 127 | .toString(); | 139 | .toString(); |
| 128 | } | 140 | } |
| 129 | } | 141 | } | ... | ... |
| ... | @@ -38,6 +38,7 @@ class StepProcessor implements Runnable { | ... | @@ -38,6 +38,7 @@ class StepProcessor implements Runnable { |
| 38 | private static final String NEGATE_CODE = "!"; | 38 | private static final String NEGATE_CODE = "!"; |
| 39 | 39 | ||
| 40 | private static final int FAIL = -1; | 40 | private static final int FAIL = -1; |
| 41 | + private static final int SECONDS = 1_000; | ||
| 41 | 42 | ||
| 42 | static String launcher = "stc-launcher "; | 43 | static String launcher = "stc-launcher "; |
| 43 | 44 | ||
| ... | @@ -67,6 +68,7 @@ class StepProcessor implements Runnable { | ... | @@ -67,6 +68,7 @@ class StepProcessor implements Runnable { |
| 67 | @Override | 68 | @Override |
| 68 | public void run() { | 69 | public void run() { |
| 69 | delegate.onStart(step, command); | 70 | delegate.onStart(step, command); |
| 71 | + delayIfNeeded(); | ||
| 70 | int code = execute(); | 72 | int code = execute(); |
| 71 | boolean ignoreCode = step.env() != null && step.env.equals(IGNORE_CODE); | 73 | boolean ignoreCode = step.env() != null && step.env.equals(IGNORE_CODE); |
| 72 | boolean negateCode = step.env() != null && step.env.equals(NEGATE_CODE); | 74 | boolean negateCode = step.env() != null && step.env.equals(NEGATE_CODE); |
| ... | @@ -76,6 +78,19 @@ class StepProcessor implements Runnable { | ... | @@ -76,6 +78,19 @@ class StepProcessor implements Runnable { |
| 76 | } | 78 | } |
| 77 | 79 | ||
| 78 | /** | 80 | /** |
| 81 | + * Pauses if the step requires it. | ||
| 82 | + */ | ||
| 83 | + private void delayIfNeeded() { | ||
| 84 | + if (step.delay() > 0) { | ||
| 85 | + try { | ||
| 86 | + Thread.sleep(step.delay() * SECONDS); | ||
| 87 | + } catch (InterruptedException e) { | ||
| 88 | + throw new RuntimeException("Interrupted", e); | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 79 | * Executes the step process. | 94 | * Executes the step process. |
| 80 | * | 95 | * |
| 81 | * @return exit code | 96 | * @return exit code | ... | ... |
| ... | @@ -32,8 +32,8 @@ public class DependencyTest extends StepTest { | ... | @@ -32,8 +32,8 @@ public class DependencyTest extends StepTest { |
| 32 | @Before | 32 | @Before |
| 33 | public void setUp() throws ConfigurationException { | 33 | public void setUp() throws ConfigurationException { |
| 34 | super.setUp(); | 34 | super.setUp(); |
| 35 | - step1 = new Step("step1", CMD, null, null, null); | 35 | + step1 = new Step("step1", CMD, null, null, null, 0); |
| 36 | - step2 = new Step("step2", CMD, null, null, null); | 36 | + step2 = new Step("step2", CMD, null, null, null, 0); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | @Test | 39 | @Test | ... | ... |
| ... | @@ -28,23 +28,24 @@ public class GroupTest extends StepTest { | ... | @@ -28,23 +28,24 @@ public class GroupTest extends StepTest { |
| 28 | 28 | ||
| 29 | @Test | 29 | @Test |
| 30 | public void basics() { | 30 | public void basics() { |
| 31 | - Group group = new Group(NAME, CMD, ENV, CWD, parent); | 31 | + Group group = new Group(NAME, CMD, ENV, CWD, parent, 1); |
| 32 | assertEquals("incorrect name", NAME, group.name()); | 32 | assertEquals("incorrect name", NAME, group.name()); |
| 33 | assertEquals("incorrect command", CMD, group.command()); | 33 | assertEquals("incorrect command", CMD, group.command()); |
| 34 | assertEquals("incorrect env", ENV, group.env()); | 34 | assertEquals("incorrect env", ENV, group.env()); |
| 35 | assertEquals("incorrect cwd", CWD, group.cwd()); | 35 | assertEquals("incorrect cwd", CWD, group.cwd()); |
| 36 | assertSame("incorrect group", parent, group.group()); | 36 | assertSame("incorrect group", parent, group.group()); |
| 37 | + assertEquals("incorrect delay", 1, group.delay()); | ||
| 37 | 38 | ||
| 38 | - Step step = new Step("step", null, null, null, group); | 39 | + Step step = new Step("step", null, null, null, group, 0); |
| 39 | group.addChild(step); | 40 | group.addChild(step); |
| 40 | assertSame("incorrect child", step, group.children().iterator().next()); | 41 | assertSame("incorrect child", step, group.children().iterator().next()); |
| 41 | } | 42 | } |
| 42 | 43 | ||
| 43 | @Test | 44 | @Test |
| 44 | public void equality() { | 45 | public void equality() { |
| 45 | - Group g1 = new Group(NAME, CMD, null, null, parent); | 46 | + Group g1 = new Group(NAME, CMD, null, null, parent, 0); |
| 46 | - Group g2 = new Group(NAME, CMD, ENV, CWD, null); | 47 | + Group g2 = new Group(NAME, CMD, ENV, CWD, null, 0); |
| 47 | - Group g3 = new Group("foo", null, null, null, parent); | 48 | + Group g3 = new Group("foo", null, null, null, parent, 0); |
| 48 | new EqualsTester() | 49 | new EqualsTester() |
| 49 | .addEqualityGroup(g1, g2) | 50 | .addEqualityGroup(g1, g2) |
| 50 | .addEqualityGroup(g3) | 51 | .addEqualityGroup(g3) | ... | ... |
| ... | @@ -50,7 +50,7 @@ public class StepProcessorTest { | ... | @@ -50,7 +50,7 @@ public class StepProcessorTest { |
| 50 | 50 | ||
| 51 | @Test | 51 | @Test |
| 52 | public void basics() { | 52 | public void basics() { |
| 53 | - Step step = new Step("foo", "ls " + DIR.getAbsolutePath(), null, null, null); | 53 | + Step step = new Step("foo", "ls " + DIR.getAbsolutePath(), null, null, null, 0); |
| 54 | StepProcessor processor = new StepProcessor(step, DIR, delegate, step.command()); | 54 | StepProcessor processor = new StepProcessor(step, DIR, delegate, step.command()); |
| 55 | processor.run(); | 55 | processor.run(); |
| 56 | assertTrue("should be started", delegate.started); | 56 | assertTrue("should be started", delegate.started); | ... | ... |
| ... | @@ -36,24 +36,25 @@ public class StepTest { | ... | @@ -36,24 +36,25 @@ public class StepTest { |
| 36 | 36 | ||
| 37 | @Before | 37 | @Before |
| 38 | public void setUp() throws ConfigurationException { | 38 | public void setUp() throws ConfigurationException { |
| 39 | - parent = new Group("parent", null, null, null, null); | 39 | + parent = new Group("parent", null, null, null, null, 0); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | @Test | 42 | @Test |
| 43 | public void basics() { | 43 | public void basics() { |
| 44 | - Step step = new Step(NAME, CMD, ENV, CWD, parent); | 44 | + Step step = new Step(NAME, CMD, ENV, CWD, parent, 1); |
| 45 | assertEquals("incorrect name", NAME, step.name()); | 45 | assertEquals("incorrect name", NAME, step.name()); |
| 46 | assertEquals("incorrect command", CMD, step.command()); | 46 | assertEquals("incorrect command", CMD, step.command()); |
| 47 | assertEquals("incorrect env", ENV, step.env()); | 47 | assertEquals("incorrect env", ENV, step.env()); |
| 48 | assertEquals("incorrect cwd", CWD, step.cwd()); | 48 | assertEquals("incorrect cwd", CWD, step.cwd()); |
| 49 | assertSame("incorrect group", parent, step.group()); | 49 | assertSame("incorrect group", parent, step.group()); |
| 50 | + assertEquals("incorrect delay", 1, step.delay()); | ||
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | @Test | 53 | @Test |
| 53 | public void equality() { | 54 | public void equality() { |
| 54 | - Step s1 = new Step(NAME, CMD, null, null, parent); | 55 | + Step s1 = new Step(NAME, CMD, null, null, parent, 0); |
| 55 | - Step s2 = new Step(NAME, CMD, ENV, CWD, null); | 56 | + Step s2 = new Step(NAME, CMD, ENV, CWD, null, 0); |
| 56 | - Step s3 = new Step("foo", null, null, null, parent); | 57 | + Step s3 = new Step("foo", null, null, null, parent, 0); |
| 57 | new EqualsTester() | 58 | new EqualsTester() |
| 58 | .addEqualityGroup(s1, s2) | 59 | .addEqualityGroup(s1, s2) |
| 59 | .addEqualityGroup(s3) | 60 | .addEqualityGroup(s3) | ... | ... |
-
Please register or login to post a comment