}
}
public void testExceptionSettingActionBefore() throws Exception
{
OperationContext ctx = OperationContextImpl.getContext(factory);
ctx.storeLineUp();
String msg = "I'm an exception";
ctx.onError(5, msg);
final AtomicInteger lastError = new AtomicInteger(0);
final List<String> msgsResult = new ArrayList<String>();
final CountDownLatch latch = new CountDownLatch(1);
ctx.executeOnCompletion(new IOAsyncTask()
{
public void onError(final int errorCode, final String errorMessage)
{
lastError.set(errorCode);
msgsResult.add(errorMessage);
latch.countDown();
}
public void done()
{
}
});
Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
Assert.assertEquals(5, lastError.get());
Assert.assertEquals(1, msgsResult.size());
Assert.assertEquals(msg, msgsResult.get(0));
final CountDownLatch latch2 = new CountDownLatch(1);
// Adding the Task after the exception should still throw an exception
ctx.executeOnCompletion(new IOAsyncTask()
{
public void onError(final int errorCode, final String errorMessage)
{
lastError.set(errorCode);
msgsResult.add(errorMessage);
latch2.countDown();
}
public void done()
{
}
});
Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS));
Assert.assertEquals(2, msgsResult.size());
Assert.assertEquals(msg, msgsResult.get(0));
Assert.assertEquals(msg, msgsResult.get(1));
final CountDownLatch latch3 = new CountDownLatch(1);
ctx.executeOnCompletion(new IOAsyncTask()
{
public void onError(final int errorCode, final String errorMessage)
{
}