use of org.eclipse.scout.rt.platform.util.concurrent.IRunnable in project scout.rt by eclipse.
the class BlockingConditionTest method testHintsUponInterruption.
@Test
public void testHintsUponInterruption() throws Throwable {
final IBlockingCondition blockingCondition = Jobs.newBlockingCondition(true);
final BlockingCountDownLatch setupLatch = new BlockingCountDownLatch(1);
final P_ExceptionCapturer exceptionCapturer = new P_ExceptionCapturer();
IFuture<Void> future = Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
setupLatch.countDown();
try {
blockingCondition.waitFor(10, TimeUnit.SECONDS, "hint-blocking");
fail("ThreadInterruptedError expected");
} catch (ThreadInterruptedError e) {
assertFalse("hint not unset", IFuture.CURRENT.get().containsExecutionHint("hint-blocking"));
}
}
}, Jobs.newInput().withExceptionHandling(exceptionCapturer, true));
setupLatch.await();
future.cancel(true);
future.awaitFinished(10, TimeUnit.SECONDS);
exceptionCapturer.throwOnError();
}
use of org.eclipse.scout.rt.platform.util.concurrent.IRunnable in project scout.rt by eclipse.
the class ExecutionHintTest method testWaitingForTaggedJobs.
@Test
public void testWaitingForTaggedJobs() throws InterruptedException {
// synchronized because modified/read by different threads.
final Set<String> protocol = Collections.synchronizedSet(new HashSet<String>());
final BlockingCountDownLatch setupLatch = new BlockingCountDownLatch(4);
final BlockingCountDownLatch finishLatch = new BlockingCountDownLatch(3);
// job-1
Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
try {
setupLatch.countDownAndBlock();
} catch (InterruptedException e) {
protocol.add("job-1-interrupted");
finishLatch.countDown();
}
}
}, Jobs.newInput().withName("job-1").withExecutionHint("UI-JOB"));
// job-2
Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
try {
setupLatch.countDownAndBlock();
} catch (InterruptedException e) {
protocol.add("job-2-interrupted");
finishLatch.countDown();
}
}
}, Jobs.newInput().withName("job-2").withExecutionHint("UI-JOB"));
// job-3
Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
try {
setupLatch.countDownAndBlock();
} catch (InterruptedException e) {
protocol.add("job-3-interrupted");
}
}
}, Jobs.newInput().withName("job-3").withExecutionHint("COMPUTATION-JOB"));
// job-4
Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
try {
IFuture.CURRENT.get().addExecutionHint("UI-JOB");
setupLatch.countDownAndBlock();
} catch (InterruptedException e) {
protocol.add("job-4-interrupted");
finishLatch.countDown();
}
}
}, Jobs.newInput().withName("job-4").withExecutionHint("COMPUTATION-JOB"));
assertTrue(setupLatch.await());
// cancel all jobs tagged as 'UI-JOB'. That should be job1, job2, and job3
Jobs.getJobManager().cancel(Jobs.newFutureFilterBuilder().andMatchExecutionHint("UI-JOB").toFilter(), true);
assertTrue(finishLatch.await());
Set<String> expected = new HashSet<>();
expected.add("job-1-interrupted");
expected.add("job-2-interrupted");
expected.add("job-4-interrupted");
assertEquals(expected, protocol);
setupLatch.unblock();
}
use of org.eclipse.scout.rt.platform.util.concurrent.IRunnable in project scout.rt by eclipse.
the class FutureAwaitTest method testAwaitDoneWithTimeout_Interrupted.
@Test(timeout = 5000)
public void testAwaitDoneWithTimeout_Interrupted() throws java.lang.InterruptedException {
final BlockingCountDownLatch setupLatch = new BlockingCountDownLatch(1);
// Init
final IFuture<String> future = Jobs.schedule(new Callable<String>() {
@Override
public String call() throws Exception {
setupLatch.countDownAndBlock();
return "result";
}
}, Jobs.newInput().withRunContext(RunContexts.copyCurrent()));
// Run the test in a separate thread
IFuture<Void> controller = Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
Thread.currentThread().interrupt();
try {
future.awaitDone(10, TimeUnit.SECONDS);
fail("interruption expected");
} catch (ThreadInterruptedError e) {
assertTrue(Thread.currentThread().isInterrupted());
}
}
}, Jobs.newInput());
controller.awaitDoneAndGet(10, TimeUnit.SECONDS);
setupLatch.unblock();
future.awaitDone(10, TimeUnit.SECONDS);
}
use of org.eclipse.scout.rt.platform.util.concurrent.IRunnable in project scout.rt by eclipse.
the class FutureAwaitTest method testBlockingConditionWaitFor_Interrupted.
@Test(timeout = 5000)
public void testBlockingConditionWaitFor_Interrupted() throws java.lang.InterruptedException {
final IBlockingCondition condition = Jobs.newBlockingCondition(true);
// Run the test in a separate thread
IFuture<Void> controller = Jobs.schedule(new IRunnable() {
@Override
public void run() throws Exception {
Thread.currentThread().interrupt();
try {
condition.waitFor();
fail("interruption expected");
} catch (ThreadInterruptedError e) {
assertTrue(Thread.currentThread().isInterrupted());
}
}
}, Jobs.newInput());
controller.awaitDoneAndGet(10, TimeUnit.SECONDS);
}
use of org.eclipse.scout.rt.platform.util.concurrent.IRunnable in project scout.rt by eclipse.
the class JobAsyncExceptionTest method testExceptionInChainInterceptor.
@Test
public void testExceptionInChainInterceptor() throws Exception {
registerTestBeans(new P_InterceptorThrowingExceptionProducer());
P_JobManager jobManager = new P_JobManager();
IFuture<Void> future = jobManager.schedule(new IRunnable() {
@Override
public void run() throws Exception {
// NOP
}
}, Jobs.newInput().withRunContext(RunContexts.copyCurrent()));
future.awaitDone();
Assert.assertTrue(jobManager.e1 instanceof PlatformException);
Assert.assertTrue(jobManager.e2 instanceof PlatformException);
Assert.assertNull(jobManager.e3);
}
Aggregations