use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.
the class FiberTest method testSuspendNextRunnableResumeAndReturn.
public void testSuspendNextRunnableResumeAndReturn() throws InterruptedException {
final Semaphore atSuspend = new Semaphore(0);
final Semaphore checkCompleted = new Semaphore(0);
final Semaphore atEnd = new Semaphore(0);
final TestTube tubeC = new TestTube();
final FilterTestTube tubeB = new FilterTestTube(tubeC) {
@Override
@NotNull
public NextAction processRequest(@NotNull Packet request) {
super.processRequest(request);
return doSuspend(next, new Runnable() {
@Override
public void run() {
atSuspend.release();
try {
checkCompleted.acquire();
} catch (InterruptedException e) {
}
}
});
}
};
final FilterTestTube tubeA = new FilterTestTube(tubeB);
final Packet request = new Packet();
final SimpleCompletionCallback callback = new SimpleCompletionCallback() {
@Override
public void onCompletion(@NotNull Packet response) {
super.onCompletion(response);
atEnd.release();
}
@Override
public void onCompletion(@NotNull Throwable error) {
super.onCompletion(error);
atEnd.release();
}
};
final Fiber fiber = threadPoolEngine.createFiber();
assertNotNull(fiber);
fiber.start(tubeA, request, callback);
if (!atSuspend.tryAcquire(3, TimeUnit.MINUTES))
fail("timeout");
// ensure test thread really blocked
assertEquals(0, atEnd.availablePermits());
// thread is suspended
assertNull(callback.response);
assertNull(callback.error);
List<TubeCall> calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
TubeCall firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(0, calls.size());
checkCompleted.release();
fiber.resumeAndReturn(request, false);
if (!atEnd.tryAcquire(3, TimeUnit.MINUTES))
fail("timeout");
assertEquals(request, callback.response);
assertNull(callback.error);
calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
TubeCall secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.RESPONSE, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.RESPONSE, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(0, calls.size());
}
use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.
the class FiberTest method testCancel.
public void testCancel() throws InterruptedException {
final Semaphore atResponse = new Semaphore(0);
final Semaphore mayProceed = new Semaphore(0);
TestTube tubeC = new TestTube();
FilterTestTube tubeB = new FilterTestTube(tubeC) {
@Override
@NotNull
public NextAction processResponse(@NotNull Packet response) {
try {
atResponse.release();
mayProceed.acquire();
} catch (InterruptedException e) {
throw new WebServiceException(e);
}
return super.processResponse(response);
}
};
final FilterTestTube tubeA = new FilterTestTube(tubeB);
final Packet request = new Packet();
final SimpleCompletionCallback callback = new SimpleCompletionCallback();
final Fiber fiber = engine.createFiber();
assertNotNull(fiber);
Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
fiber.start(tubeA, request, callback, true);
}
});
testThread.start();
if (!atResponse.tryAcquire(3, TimeUnit.MINUTES))
fail("timeout");
fiber.cancel(false);
mayProceed.release();
testThread.join(3 * 60 * 1000);
assertNull(callback.response);
assertNull(callback.error);
List<TubeCall> calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
TubeCall firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
TubeCall secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.RESPONSE, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
}
use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.
the class FiberTest method testSuspendNextRunnableResumeThrowable.
public void testSuspendNextRunnableResumeThrowable() throws InterruptedException {
final Semaphore atSuspend = new Semaphore(0);
final Semaphore checkCompleted = new Semaphore(0);
final Semaphore atEnd = new Semaphore(0);
final TestTube tubeC = new TestTube();
final FilterTestTube tubeB = new FilterTestTube(tubeC) {
@Override
@NotNull
public NextAction processRequest(@NotNull Packet request) {
super.processRequest(request);
return doSuspend(next, new Runnable() {
@Override
public void run() {
atSuspend.release();
try {
checkCompleted.acquire();
} catch (InterruptedException e) {
}
}
});
}
};
final FilterTestTube tubeA = new FilterTestTube(tubeB);
final Packet request = new Packet();
final SimpleCompletionCallback callback = new SimpleCompletionCallback() {
@Override
public void onCompletion(@NotNull Packet response) {
super.onCompletion(response);
atEnd.release();
}
@Override
public void onCompletion(@NotNull Throwable error) {
super.onCompletion(error);
atEnd.release();
}
};
final Fiber fiber = threadPoolEngine.createFiber();
assertNotNull(fiber);
fiber.start(tubeA, request, callback);
if (!atSuspend.tryAcquire(3, TimeUnit.MINUTES))
fail("timeout");
// ensure test thread really blocked
assertEquals(0, atEnd.availablePermits());
// thread is suspended
assertNull(callback.response);
assertNull(callback.error);
List<TubeCall> calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
TubeCall firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(0, calls.size());
checkCompleted.release();
fiber.resume(new RuntimeException());
if (!atEnd.tryAcquire(3, TimeUnit.MINUTES))
fail("timeout");
assertNull(callback.response);
assertTrue(callback.error instanceof RuntimeException);
calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
TubeCall secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.EXCEPTION, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.EXCEPTION, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(0, calls.size());
}
use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.
the class FiberTest method testNextActionThrowAbortResponse.
public void testNextActionThrowAbortResponse() {
TestTube tubeC = new TestTube() {
@Override
@NotNull
public NextAction processRequest(@NotNull Packet request) {
super.processRequest(request);
NextAction na = new NextAction();
na.throwExceptionAbortResponse(new RuntimeException());
return na;
}
};
FilterTestTube tubeB = new FilterTestTube(tubeC);
FilterTestTube tubeA = new FilterTestTube(tubeB);
Packet request = new Packet();
SimpleCompletionCallback callback = new SimpleCompletionCallback();
Fiber fiber = engine.createFiber();
assertNotNull(fiber);
fiber.start(tubeA, request, callback, true);
assertNull(callback.response);
assertTrue(callback.error instanceof RuntimeException);
List<TubeCall> calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
TubeCall firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
}
use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.
the class FiberTest method testNextActionInvokeAndForget.
public void testNextActionInvokeAndForget() {
TestTube tubeC = new TestTube();
FilterTestTube tubeB = new FilterTestTube(tubeC) {
@Override
@NotNull
public NextAction processRequest(@NotNull Packet request) {
super.processRequest(request);
return doInvokeAndForget(next, request);
}
};
FilterTestTube tubeA = new FilterTestTube(tubeB);
Packet request = new Packet();
SimpleCompletionCallback callback = new SimpleCompletionCallback();
Fiber fiber = engine.createFiber();
assertNotNull(fiber);
fiber.start(tubeA, request, callback, true);
assertEquals(request, callback.response);
assertNull(callback.error);
List<TubeCall> calls = tubeA.getCalls();
assertNotNull(calls);
assertEquals(2, calls.size());
TubeCall firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
TubeCall secondCall = calls.get(1);
assertNotNull(secondCall);
assertEquals(TubeCallType.RESPONSE, secondCall.callType);
assertEquals(testContainer, secondCall.container);
calls = tubeB.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
calls = tubeC.getCalls();
assertNotNull(calls);
assertEquals(1, calls.size());
firstCall = calls.get(0);
assertNotNull(firstCall);
assertEquals(TubeCallType.REQUEST, firstCall.callType);
assertEquals(testContainer, firstCall.container);
}
Aggregations