e2.waitForSuspension();
e3.waitForSuspension();
Thread.sleep(1000); // TODO why is this necessary?
assertFalse(b2.isBuilding());
assertEquals(Result.NOT_BUILT, b2.getResult());
InterruptedBuildAction iba = b2.getAction(InterruptedBuildAction.class);
assertNotNull(iba);
List<CauseOfInterruption> causes = iba.getCauses();
assertEquals(1, causes.size());
assertEquals(StageStepExecution.CanceledCause.class, causes.get(0).getClass());
assertEquals(b3, ((StageStepExecution.CanceledCause) causes.get(0)).getNewerBuild());
assertTrue(b3.isBuilding());
story.j.assertLogNotContains("done", b1);