Search in sources :

Example 11 with TubeCall

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

the class FiberTest method testNextActionAbortResponse.

public void testNextActionAbortResponse() {
    TestTube tubeC = new TestTube() {

        @Override
        @NotNull
        public NextAction processRequest(@NotNull Packet request) {
            super.processRequest(request);
            NextAction na = new NextAction();
            na.abortResponse(request);
            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);
    assertEquals(request, 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(1, calls.size());
    firstCall = calls.get(0);
    assertNotNull(firstCall);
    assertEquals(TubeCallType.REQUEST, firstCall.callType);
    assertEquals(testContainer, firstCall.container);
}
Also used : Packet(com.sun.xml.ws.api.message.Packet) TestTube(com.sun.xml.ws.api.pipe.EngineTest.TestTube) TubeCall(com.sun.xml.ws.api.pipe.EngineTest.TubeCall) SimpleCompletionCallback(com.sun.xml.ws.api.pipe.EngineTest.SimpleCompletionCallback) NotNull(com.sun.istack.NotNull)

Example 12 with TubeCall

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

the class FiberTest method testStartTubePacketCompletionCallback.

public void testStartTubePacketCompletionCallback() {
    final Holder<Boolean> isInExecutor = new Holder<Boolean>(Boolean.FALSE);
    TestTube testTube = new TestTube() {

        @Override
        @NotNull
        public NextAction processRequest(@NotNull Packet request) {
            isInExecutor.value = executor.isInExecutor();
            return super.processRequest(request);
        }
    };
    Packet request = new Packet();
    SimpleCompletionCallback callback = new SimpleCompletionCallback();
    Fiber fiber = engine.createFiber();
    assertNotNull(fiber);
    fiber.start(testTube, request, callback);
    assertEquals(request, callback.response);
    assertNull(callback.error);
    List<TubeCall> calls = testTube.getCalls();
    assertNotNull(calls);
    assertEquals(1, calls.size());
    TubeCall firstCall = calls.get(0);
    assertNotNull(firstCall);
    assertEquals(TubeCallType.REQUEST, firstCall.callType);
    assertEquals(testContainer, firstCall.container);
    assertTrue(isInExecutor.value);
}
Also used : Packet(com.sun.xml.ws.api.message.Packet) TestTube(com.sun.xml.ws.api.pipe.EngineTest.TestTube) Holder(jakarta.xml.ws.Holder) TubeCall(com.sun.xml.ws.api.pipe.EngineTest.TubeCall) SimpleCompletionCallback(com.sun.xml.ws.api.pipe.EngineTest.SimpleCompletionCallback) NotNull(com.sun.istack.NotNull)

Example 13 with TubeCall

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

the class FiberTest method testStartTubePacketCompletionCallbackBoolean.

public void testStartTubePacketCompletionCallbackBoolean() {
    final Holder<Boolean> isInExecutor = new Holder<Boolean>(Boolean.FALSE);
    TestTube testTube = new TestTube() {

        @Override
        @NotNull
        public NextAction processRequest(@NotNull Packet request) {
            isInExecutor.value = executor.isInExecutor();
            return super.processRequest(request);
        }
    };
    Packet request = new Packet();
    SimpleCompletionCallback callback = new SimpleCompletionCallback();
    Fiber fiber = engine.createFiber();
    assertNotNull(fiber);
    fiber.start(testTube, request, callback, true);
    assertEquals(request, callback.response);
    assertNull(callback.error);
    List<TubeCall> calls = testTube.getCalls();
    assertNotNull(calls);
    assertEquals(1, calls.size());
    TubeCall firstCall = calls.get(0);
    assertNotNull(firstCall);
    assertEquals(TubeCallType.REQUEST, firstCall.callType);
    assertEquals(testContainer, firstCall.container);
    assertFalse(isInExecutor.value);
}
Also used : Packet(com.sun.xml.ws.api.message.Packet) TestTube(com.sun.xml.ws.api.pipe.EngineTest.TestTube) Holder(jakarta.xml.ws.Holder) TubeCall(com.sun.xml.ws.api.pipe.EngineTest.TubeCall) SimpleCompletionCallback(com.sun.xml.ws.api.pipe.EngineTest.SimpleCompletionCallback) NotNull(com.sun.istack.NotNull)

Example 14 with TubeCall

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

the class FiberTest method testSuspendNextRunnableResumeThrowablePacket.

public void testSuspendNextRunnableResumeThrowablePacket() 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();
    Packet secondPacket = new Packet();
    fiber.resume(new RuntimeException(), secondPacket);
    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);
    assertEquals(secondPacket, secondCall.packet);
    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());
}
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)

Example 15 with TubeCall

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

the class FiberTest method testThreadLocalPropagationWithFiberContextSwitch.

public void testThreadLocalPropagationWithFiberContextSwitch() 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);
            // Before suspend, make sure thread-local is available thanks to MyFiberContextSwitchInterceptor.execute
            Integer threadLocalInteger = ThreadLocalHelper.get();
            assertNotNull(threadLocalInteger);
            assertEquals(retainMeInteger, threadLocalInteger);
            return doSuspend(new Runnable() {

                @Override
                public void run() {
                    atSuspend.release();
                    try {
                        checkCompleted.acquire();
                    } catch (InterruptedException e) {
                    }
                }
            });
        }

        @Override
        @NotNull
        public NextAction processResponse(@NotNull Packet response) {
            super.processResponse(response);
            // After resume, make sure thread-local is available thanks to MyFiberContextSwitchInterceptor.execute
            Integer threadLocalInteger = ThreadLocalHelper.get();
            assertNotNull(threadLocalInteger);
            assertEquals(retainMeInteger, threadLocalInteger);
            return doReturnWith(response);
        }
    };
    tubeB.setName("testThreadLocalPropagationWithFiberContextSwitch.tubeB");
    final FilterTestTube tubeA = new FilterTestTube(tubeB);
    tubeA.setName("testThreadLocalPropagationWithFiberContextSwitch.tubeA");
    final Packet request = new Packet();
    final MyCompletionCallback callback = new MyCompletionCallback() {

        @Override
        public void onCompletion(@NotNull Packet response) {
            super.onCompletion(response);
            if (super.fiberName != null)
                fiberNameToThreadLocalValueMap.remove(super.fiberName);
            atEnd.release();
        }

        @Override
        public void onCompletion(@NotNull Throwable error) {
            super.onCompletion(error);
            if (super.fiberName != null)
                fiberNameToThreadLocalValueMap.remove(super.fiberName);
            atEnd.release();
        }
    };
    final Fiber fiber = threadPoolEngine.createFiber();
    assertNotNull(fiber);
    // Put away some value (say, Transaction context gotten from the thread that is going to invoke fiber.start) before fiber.start
    // Post fiber.start, processing thread comes from a thread pool, no guarantee of same thread in force
    // This entry will be cleaned up when SimpleCompletionCallback callback method is called at last
    fiberNameToThreadLocalValueMap.put(fiber.toString(), retainMeInteger);
    // callback has to remember Fiber name so that it can remove the entry from fiberNameToThreadLocalValueMap having Fiber name as the key
    callback.setFiberName(fiber.toString());
    MyFiberContextSwitchInterceptor interceptor1 = new MyFiberContextSwitchInterceptor("testThreadLocalPropagationWithFiberContextSwitch.interceptor1");
    fiber.addInterceptor(interceptor1);
    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
    assertEquals(1, interceptor1.getCallCount());
    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");
    // Two context switches, 1) when fiber.start was done and 2) when fiber was suspended
    assertEquals(2, interceptor1.getCallCount());
    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)

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