Search in sources :

Example 1 with ReactorGraphBuilder

use of ru.fix.completable.reactor.runtime.ReactorGraphBuilder in project completable-reactor by ru-fix.

the class CompletableReactorHandlerArgumentsTest method arguments_test_7.

@Test
public void arguments_test_7() throws Exception {
    @Reactored("Payload with string")
    @Data
    class Payload {

        String data;
    }
    class Service {

        @Reactored("method with 7 arguments")
        public CompletableFuture<String> foo(String arg1, int arg2, short arg3, boolean arg4, Object arg5, BigInteger arg6, long arg7) {
            return CompletableFuture.completedFuture(arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7);
        }
    }
    final Service service = new Service();
    class Config {

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<Payload> processor = graphBuilder.processor().forPayload(Payload.class).passArg(pld -> "1").passArg(pld -> 2).passArg(pld -> (short) 3).passArg(pld -> true).passArg(pld -> 5).passArg(pld -> BigInteger.valueOf(6L)).passArg(pld -> 7L).withHandler(service::foo).withMerger((payload, result) -> {
            payload.data = result;
            return CompletableReactorTest.Status.OK;
        }).buildProcessor();

        ReactorGraph<Payload> graph() {
            return graphBuilder.payload(Payload.class).handle(processor).mergePoint(processor).onAny().complete().coordinates().buildGraph();
        }
    }
    reactor.registerReactorGraph(new Config().graph());
    assertEquals("123true567", reactor.submit(new Payload()).getResultFuture().get(5, TimeUnit.SECONDS).getData());
}
Also used : Reactored(ru.fix.completable.reactor.api.Reactored) lombok.val(lombok.val) Test(org.junit.Test) CompletableFuture(java.util.concurrent.CompletableFuture) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) TimeUnit(java.util.concurrent.TimeUnit) ReactorGraph(ru.fix.completable.reactor.runtime.ReactorGraph) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Data(lombok.Data) BigInteger(java.math.BigInteger) Assert.assertEquals(org.junit.Assert.assertEquals) Before(org.junit.Before) SimpleProfiler(ru.fix.commons.profiler.impl.SimpleProfiler) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Reactored(ru.fix.completable.reactor.api.Reactored) BigInteger(java.math.BigInteger) Data(lombok.Data) Test(org.junit.Test)

Example 2 with ReactorGraphBuilder

use of ru.fix.completable.reactor.runtime.ReactorGraphBuilder in project completable-reactor by ru-fix.

the class CompletableReactorHandlerArgumentsTest method arguments_test_0.

@Test
public void arguments_test_0() throws Exception {
    @Reactored("Payload with string")
    @Data
    class Payload {

        String data;
    }
    class Service {

        @Reactored("method with 0 arguments")
        public CompletableFuture<String> foo() {
            return CompletableFuture.completedFuture("");
        }
    }
    final Service service = new Service();
    class Config {

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<Payload> processor = graphBuilder.processor().forPayload(Payload.class).withHandler(service::foo).withMerger((payload, result) -> {
            payload.data = result;
            return CompletableReactorTest.Status.OK;
        }).buildProcessor();

        ReactorGraph<Payload> graph() {
            return graphBuilder.payload(Payload.class).handle(processor).mergePoint(processor).onAny().complete().coordinates().buildGraph();
        }
    }
    val graph = new Config().graph();
    reactor.registerReactorGraph(graph);
    assertEquals("", reactor.submit(new Payload()).getResultFuture().get(5, TimeUnit.SECONDS).getData());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Reactored(ru.fix.completable.reactor.api.Reactored) Data(lombok.Data) Test(org.junit.Test)

Example 3 with ReactorGraphBuilder

use of ru.fix.completable.reactor.runtime.ReactorGraphBuilder in project completable-reactor by ru-fix.

the class CompletableReactorTest method graph_with_detached_merge_point_connected_to_start_point.

@Test
public void graph_with_detached_merge_point_connected_to_start_point() throws Exception {
    Semaphore mergePoint2Semaphore = new Semaphore(0);
    class Config {

        final ReactorGraphBuilder builder = new ReactorGraphBuilder(this);

        Processor<IdListPayload> idProcessor0 = buildProcessor(builder, new IdProcessor(0));

        Processor<IdListPayload> idProcessor1 = buildProcessor(builder, new IdProcessor(1));

        MergePoint<StartPointMergeGroupPayload> mergePoint2 = builder.mergePoint().forPayload(CompletableReactorTest.StartPointMergeGroupPayload.class).withMerger("mergePoint-2", pld -> {
            try {
                mergePoint2Semaphore.acquire();
            } catch (Exception exc) {
                log.error("Failed to acquire semaphore", exc);
            }
            pld.getIdSequence().add(2);
            return CompletableReactorTest.Status.OK;
        }).buildMergePoint();

        Processor<IdListPayload> idProcessor3 = buildProcessor(builder, new IdProcessor(3));

        ReactorGraph<StartPointMergeGroupPayload> buildGraph() {
            return builder.payload(CompletableReactorTest.StartPointMergeGroupPayload.class).handle(idProcessor0).handle(idProcessor1).merge(mergePoint2).mergePoint(idProcessor0).onAny().merge(idProcessor1).mergePoint(idProcessor1).onAny().merge(idProcessor3).mergePoint(mergePoint2).onAny().handle(idProcessor3).onAny().merge(idProcessor0).mergePoint(idProcessor3).onAny().complete().coordinates().start(476, 88).proc(idProcessor0, 339, 224).proc(idProcessor1, 537, 218).proc(idProcessor3, 747, 247).merge(idProcessor0, 382, 314).merge(idProcessor1, 580, 346).merge(idProcessor3, 809, 403).merge(mergePoint2, 739, 140).complete(idProcessor3, 914, 512).buildGraph();
        }
    }
    val graph = new Config().buildGraph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    val resultFuture = reactor.submit(new StartPointMergeGroupPayload()).getResultFuture();
    try {
        resultFuture.get(1, TimeUnit.SECONDS);
        fail("Failed to wait for mergePoint2");
    } catch (TimeoutException exc) {
    // ignore timeout exception
    }
    mergePoint2Semaphore.release();
    val result = resultFuture.get(5, TimeUnit.MINUTES);
    assertEquals(Arrays.asList(2, 0, 1, 3), result.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Semaphore(java.util.concurrent.Semaphore) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) TimeoutException(java.util.concurrent.TimeoutException) TimeoutException(java.util.concurrent.TimeoutException) Test(org.junit.Test)

Example 4 with ReactorGraphBuilder

use of ru.fix.completable.reactor.runtime.ReactorGraphBuilder in project completable-reactor by ru-fix.

the class CompletableReactorTest method detached_merge_point_from_start_point.

@Test
public void detached_merge_point_from_start_point() throws Exception {
    final int MERGE_POINT_ID = 42;
    class Config {

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<IdListPayload> idProcessor0 = buildProcessor(graphBuilder, new IdProcessor(0));

        Processor<IdListPayload> idProcessor1 = buildProcessor(graphBuilder, new IdProcessor(1));

        MergePoint<DetachedMergePointFromStartPointPayload> mergePoint = graphBuilder.mergePoint().forPayload(DetachedMergePointFromStartPointPayload.class).withMerger("mergePointTitle", new String[] { "merge point documentation", "here" }, pld -> {
            pld.getIdSequence().add(MERGE_POINT_ID);
            return Status.OK;
        }).buildMergePoint();

        ReactorGraph<DetachedMergePointFromStartPointPayload> graph() {
            return graphBuilder.payload(DetachedMergePointFromStartPointPayload.class).handle(idProcessor0).handle(idProcessor1).merge(mergePoint).mergePoint(mergePoint).onAny().merge(idProcessor1).mergePoint(idProcessor1).onAny().merge(idProcessor0).mergePoint(idProcessor0).onAny().complete().coordinates().start(107, 9).proc(idProcessor0, 22, 78).proc(idProcessor1, 211, 79).merge(idProcessor0, 126, 215).merge(idProcessor1, 267, 187).merge(mergePoint, 424, 160).complete(idProcessor0, 57, 274).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    CompletableReactor.Execution<DetachedMergePointFromStartPointPayload> result = reactor.submit(new DetachedMergePointFromStartPointPayload());
    DetachedMergePointFromStartPointPayload resultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(42, 1, 0), resultPayload.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Test(org.junit.Test)

Example 5 with ReactorGraphBuilder

use of ru.fix.completable.reactor.runtime.ReactorGraphBuilder in project completable-reactor by ru-fix.

the class CompletableReactorTest method use_interface_mock_as_processor_with_mockito.

@Test
public void use_interface_mock_as_processor_with_mockito() throws Exception {
    IdProcessorInterface processorInterface = Mockito.mock(IdProcessorInterface.class);
    Mockito.when(processorInterface.handle()).thenReturn(CompletableFuture.completedFuture(42));
    class Config {

        ReactorGraphBuilder builder = new ReactorGraphBuilder(this);

        Processor<SingleInterfaceProcessorPayload> idProcessor1 = builder.processor().forPayload(SingleInterfaceProcessorPayload.class).withHandler(processorInterface::handle).withMerger((pld, id) -> {
            pld.getIdSequence().add(id);
            return Status.OK;
        }).buildProcessor();

        ReactorGraph<SingleInterfaceProcessorPayload> graph() {
            return builder.payload(SingleInterfaceProcessorPayload.class).handle(idProcessor1).mergePoint(idProcessor1).onAny().complete().coordinates().proc(idProcessor1, 450, 184).merge(idProcessor1, 522, 299).start(500, 100).complete(idProcessor1, 498, 398).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    SingleInterfaceProcessorPayload resultPayload = reactor.submit(new SingleInterfaceProcessorPayload()).getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(42), resultPayload.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)24 ReactorGraphBuilder (ru.fix.completable.reactor.runtime.ReactorGraphBuilder)24 lombok.val (lombok.val)23 Processor (ru.fix.completable.reactor.runtime.dsl.Processor)23 CompletableReactor (ru.fix.completable.reactor.runtime.CompletableReactor)13 Data (lombok.Data)10 Reactored (ru.fix.completable.reactor.api.Reactored)10 CompletableFuture (java.util.concurrent.CompletableFuture)8 TimeUnit (java.util.concurrent.TimeUnit)8 Before (org.junit.Before)8 SimpleProfiler (ru.fix.commons.profiler.impl.SimpleProfiler)8 ReactorGraph (ru.fix.completable.reactor.runtime.ReactorGraph)8 Assert.assertEquals (org.junit.Assert.assertEquals)7 MergePoint (ru.fix.completable.reactor.runtime.dsl.MergePoint)7 BigInteger (java.math.BigInteger)6 Semaphore (java.util.concurrent.Semaphore)3 TimeoutException (java.util.concurrent.TimeoutException)3 Accessors (lombok.experimental.Accessors)2 lombok.experimental.var (lombok.experimental.var)2 Subgraph (ru.fix.completable.reactor.runtime.dsl.Subgraph)2