Search in sources :

Example 16 with TubeCall

use of com.sun.xml.ws.api.pipe.EngineTest.TubeCall in project metro-jax-ws by eclipse-ee4j.

the class FiberTest method testSuspendRunnableResume.

public void testSuspendRunnableResume() 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(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(request);
    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());
}
Also used : Packet(com.sun.xml.ws.api.message.Packet) TubeCall(com.sun.xml.ws.api.pipe.EngineTest.TubeCall) Semaphore(java.util.concurrent.Semaphore) NotNull(com.sun.istack.NotNull) TestTube(com.sun.xml.ws.api.pipe.EngineTest.TestTube) SimpleCompletionCallback(com.sun.xml.ws.api.pipe.EngineTest.SimpleCompletionCallback)

Aggregations

Packet (com.sun.xml.ws.api.message.Packet)16 TestTube (com.sun.xml.ws.api.pipe.EngineTest.TestTube)16 TubeCall (com.sun.xml.ws.api.pipe.EngineTest.TubeCall)16 NotNull (com.sun.istack.NotNull)15 SimpleCompletionCallback (com.sun.xml.ws.api.pipe.EngineTest.SimpleCompletionCallback)15 Semaphore (java.util.concurrent.Semaphore)8 Holder (jakarta.xml.ws.Holder)2 WebServiceException (jakarta.xml.ws.WebServiceException)1