Search in sources :

Example 1 with Subgraph

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

the class MockSubgraphTest method mock_subgraph.

@Test
public void mock_subgraph() throws Exception {
    class Config {

        final ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<MainPayload> processor1 = graphBuilder.processor().forPayload(MainPayload.class).withHandler(new Processor1()::handle).withMerger((mainPayload, any) -> Status.OK).buildProcessor();

        Subgraph<MainPayload> subgraph = graphBuilder.subgraph(SubgraphPayload.class).forPayload(MainPayload.class).passArg(pld -> new SubgraphPayload().setData(pld.getData())).withMerger((mainPayload, subgraphPayload) -> {
            mainPayload.setData(subgraphPayload.getData());
            return Status.OK;
        }).buildSubgraph();

        ReactorGraph<MainPayload> graph() {
            return graphBuilder.payload(MainPayload.class).handle(processor1).mergePoint(processor1).onAny().handle(subgraph).mergePoint(subgraph).onAny().complete().coordinates().start(488, -51).proc(processor1, 483, 19).proc(subgraph, 465, 175).merge(processor1, 519, 104).merge(subgraph, 526, 259).complete(subgraph, 532, 336).buildGraph();
        }
    }
    val graph = new Config().graph();
    ReactorGraphBuilder.write(graph);
    reactor.registerReactorGraph(graph);
    // mocking subgraph behaviour
    AtomicReference<SubgraphPayload> subgraphCapture = new AtomicReference<>();
    reactor.registerReactorGraph(SubgraphPayload.class, payload -> {
        subgraphCapture.set(payload);
        return CompletableFuture.completedFuture(new SubgraphPayload().setData("mock-subgraph-data"));
    });
    // override subgraph implementation by async method
    CompletableReactor.Execution<MainPayload> result = reactor.submit(new MainPayload().setData("main-payload-data"));
    MainPayload mainGraphResultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertNotNull(subgraphCapture.get());
    assertEquals("main-payload-data", subgraphCapture.get().getData());
    assertEquals("mock-subgraph-data", mainGraphResultPayload.getData());
}
Also used : Reactored(ru.fix.completable.reactor.api.Reactored) Accessors(lombok.experimental.Accessors) Assert.assertNotNull(org.junit.Assert.assertNotNull) lombok.val(lombok.val) Test(org.junit.Test) CompletableFuture(java.util.concurrent.CompletableFuture) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) AtomicReference(java.util.concurrent.atomic.AtomicReference) 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) Subgraph(ru.fix.completable.reactor.runtime.dsl.Subgraph) Data(lombok.Data) Profiler(ru.fix.commons.profiler.Profiler) Assert.assertEquals(org.junit.Assert.assertEquals) Before(org.junit.Before) SimpleProfiler(ru.fix.commons.profiler.impl.SimpleProfiler) lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) AtomicReference(java.util.concurrent.atomic.AtomicReference) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) Subgraph(ru.fix.completable.reactor.runtime.dsl.Subgraph) Test(org.junit.Test)

Example 2 with Subgraph

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

the class CompletableReactorTest method run_subgraph.

@Test
public void run_subgraph() throws Exception {
    class Config {

        ReactorGraphBuilder builder = new ReactorGraphBuilder(this);

        Processor<IdListPayload> idProcessor11 = buildProcessor(builder, new IdProcessor(11));

        Processor<IdListPayload> idProcessor12 = buildProcessor(builder, new IdProcessor(12));

        Processor<IdListPayload> idProcessor13 = buildProcessor(builder, new IdProcessor(13));

        ReactorGraph<SubgraphPayload> childGraph() {
            return builder.payload(SubgraphPayload.class).handle(idProcessor11).handle(idProcessor12).mergePoint(idProcessor11).onAny().merge(idProcessor12).mergePoint(idProcessor12).onAny().handle(idProcessor13).mergePoint(idProcessor13).onAny().complete().coordinates().proc(idProcessor11, 306, 216).proc(idProcessor12, 612, 218).proc(idProcessor13, 539, 596).merge(idProcessor11, 430, 365).merge(idProcessor12, 620, 421).merge(idProcessor13, 613, 693).start(500, 100).complete(idProcessor13, 587, 776).buildGraph();
        }

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

        Processor<IdListPayload> idProcessor2 = buildProcessor(builder, new IdProcessor(2));

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

        Subgraph<ParentGraphPayload> subgraphProcessor = builder.subgraph(SubgraphPayload.class).forPayload(ParentGraphPayload.class).passArg(payload -> new SubgraphPayload()).withMerger((payload, result) -> {
            payload.getIdSequence().addAll(result.getIdSequence());
            return Status.OK;
        }).buildSubgraph();

        ReactorGraph<ParentGraphPayload> parentGraph() {
            return builder.payload(ParentGraphPayload.class).handle(idProcessor1).mergePoint(idProcessor1).onAny().handle(idProcessor2).onAny().handle(subgraphProcessor).mergePoint(subgraphProcessor).onAny().merge(idProcessor2).mergePoint(idProcessor2).onAny().handle(idProcessor3).mergePoint(idProcessor3).onAny().complete().coordinates().proc(idProcessor1, 406, 228).proc(idProcessor2, 626, 408).proc(idProcessor3, 415, 730).proc(subgraphProcessor, 195, 418).merge(idProcessor1, 475, 342).merge(subgraphProcessor, 341, 565).merge(idProcessor2, 488, 620).merge(idProcessor3, 490, 840).start(460, 120).complete(idProcessor3, 460, 930).buildGraph();
        }
    }
    Config config = new Config();
    val childGraph = config.childGraph();
    val parentGraph = config.parentGraph();
    reactor.registerReactorGraph(childGraph);
    printGraph(childGraph, parentGraph);
    reactor.registerReactorGraph(parentGraph);
    ParentGraphPayload resultPaylaod = reactor.submit(new ParentGraphPayload()).getResultFuture().get(5, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(1, 11, 12, 13, 2, 3), resultPaylaod.getIdSequence());
}
Also used : Reactored(ru.fix.completable.reactor.api.Reactored) Arrays(java.util.Arrays) Accessors(lombok.experimental.Accessors) TimeoutException(java.util.concurrent.TimeoutException) CompletableFuture(java.util.concurrent.CompletableFuture) ArrayList(java.util.ArrayList) ReactorGraph(ru.fix.completable.reactor.runtime.ReactorGraph) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) lombok.experimental.var(lombok.experimental.var) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Before(org.junit.Before) Semaphore(java.util.concurrent.Semaphore) lombok.val(lombok.val) Test(org.junit.Test) EqualsAndHashCode(lombok.EqualsAndHashCode) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) TimeUnit(java.util.concurrent.TimeUnit) Mockito(org.mockito.Mockito) Slf4j(lombok.extern.slf4j.Slf4j) List(java.util.List) Subgraph(ru.fix.completable.reactor.runtime.dsl.Subgraph) Data(lombok.Data) Assert(org.junit.Assert) SimpleProfiler(ru.fix.commons.profiler.impl.SimpleProfiler) lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Subgraph(ru.fix.completable.reactor.runtime.dsl.Subgraph) Test(org.junit.Test)

Aggregations

CompletableFuture (java.util.concurrent.CompletableFuture)2 TimeUnit (java.util.concurrent.TimeUnit)2 Data (lombok.Data)2 Accessors (lombok.experimental.Accessors)2 lombok.val (lombok.val)2 Before (org.junit.Before)2 Test (org.junit.Test)2 SimpleProfiler (ru.fix.commons.profiler.impl.SimpleProfiler)2 Reactored (ru.fix.completable.reactor.api.Reactored)2 CompletableReactor (ru.fix.completable.reactor.runtime.CompletableReactor)2 ReactorGraph (ru.fix.completable.reactor.runtime.ReactorGraph)2 ReactorGraphBuilder (ru.fix.completable.reactor.runtime.ReactorGraphBuilder)2 Processor (ru.fix.completable.reactor.runtime.dsl.Processor)2 Subgraph (ru.fix.completable.reactor.runtime.dsl.Subgraph)2 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 List (java.util.List)1 Semaphore (java.util.concurrent.Semaphore)1 TimeoutException (java.util.concurrent.TimeoutException)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1