Search in sources :

Example 21 with ReactorGraphBuilder

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

the class CompletableReactorTest method single_detached_merge_point.

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

        final ReactorGraphBuilder builder = new ReactorGraphBuilder(this);

        MergePoint<IdListPayload> mergePoint = builder.mergePoint().forPayload(IdListPayload.class).withMerger(pld -> {
            pld.idSequence.add(1);
            return Status.OK;
        }).buildMergePoint();

        ReactorGraph buildGraph() {
            return builder.payload(SingleDetachedMergePointPayload.class).merge(mergePoint).mergePoint(mergePoint).onAny().complete().coordinates().start(500, 100).merge(mergePoint, 615, 179).complete(mergePoint, 615, 263).buildGraph();
        }
    }
    val graph = new Config().buildGraph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    SingleDetachedMergePointPayload resultPayload = reactor.submit(new SingleDetachedMergePointPayload()).getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(1), resultPayload.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Test(org.junit.Test)

Example 22 with ReactorGraphBuilder

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

the class CompletableReactorTest method optional_processor_execution.

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

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

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

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

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

        MergePoint<OptionalProcessorExecutionPayload> mergePoint = graphBuilder.mergePoint().forPayload(OptionalProcessorExecutionPayload.class).withMerger("getWhereToGo", new String[] { "returns destination from payload" }, pld -> {
            return pld.getWhereToGo();
        }).buildMergePoint();

        ReactorGraph<OptionalProcessorExecutionPayload> graph() {
            return graphBuilder.payload(OptionalProcessorExecutionPayload.class).merge(mergePoint).mergePoint(mergePoint).on(OPTIONAL_DECISION.LEFT).handle(idProcessor2).on(OPTIONAL_DECISION.RIGHT).handle(idProcessor1).mergePoint(idProcessor1).onAny().handle(idProcessor2).mergePoint(idProcessor2).onAny().handle(idProcessor3).mergePoint(idProcessor3).onAny().complete().coordinates().start(0, 17).proc(idProcessor1, 246, 147).proc(idProcessor2, -17, 252).proc(idProcessor3, -15, 413).merge(idProcessor1, 287, 223).merge(idProcessor2, 21, 328).merge(idProcessor3, 23, 504).merge(mergePoint, 98, 79).complete(idProcessor3, 129, 537).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    CompletableReactor.Execution<OptionalProcessorExecutionPayload> result = reactor.submit(new OptionalProcessorExecutionPayload().setWhereToGo(OPTIONAL_DECISION.RIGHT));
    OptionalProcessorExecutionPayload resultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(1, 2, 3), resultPayload.getIdSequence());
    result = reactor.submit(new OptionalProcessorExecutionPayload().setWhereToGo(OPTIONAL_DECISION.LEFT));
    resultPayload = result.getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(2, 3), 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) Test(org.junit.Test)

Example 23 with ReactorGraphBuilder

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

the class CompletableReactorTest method dead_transition_breaks_flow.

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

        ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);

        Processor<DeadTransitionBreaksFlow> idProcessor1 = graphBuilder.processor().forPayload(DeadTransitionBreaksFlow.class).withHandler(new IdProcessor(1)::handle).withMerger((pld, id) -> {
            pld.getIdSequence().add(id);
            return pld.getFlowDecision();
        }).buildProcessor();

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

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

        Processor<IdListPayload> idProcessor4 = buildProcessor(graphBuilder, new IdProcessor(4));

        MergePoint<DeadTransitionBreaksFlow> decisionMergePoint = graphBuilder.mergePoint().forPayload(DeadTransitionBreaksFlow.class).withMerger(DeadTransitionBreaksFlow::getFlowDecision).buildMergePoint();

        ReactorGraph<DeadTransitionBreaksFlow> graph() {
            return graphBuilder.payload(DeadTransitionBreaksFlow.class).merge(decisionMergePoint).mergePoint(decisionMergePoint).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor2).on(DeadTransitionBreaksFlow.FlowDecision.THREE).handle(idProcessor3).on(DeadTransitionBreaksFlow.FlowDecision.TWO).handle(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.TWO).handle(idProcessor3).mergePoint(idProcessor1).on(DeadTransitionBreaksFlow.FlowDecision.THREE).merge(idProcessor2).on(DeadTransitionBreaksFlow.FlowDecision.TWO).merge(idProcessor3).mergePoint(idProcessor2).onAny().merge(idProcessor3).mergePoint(idProcessor3).onAny().handle(idProcessor4).mergePoint(idProcessor4).onAny().complete().coordinates().start(500, 100).proc(idProcessor1, 399, 309).proc(idProcessor2, 551, 319).proc(idProcessor3, 725, 302).proc(idProcessor4, 713, 609).merge(idProcessor1, 422, 473).merge(idProcessor2, 584, 410).merge(idProcessor3, 704, 526).merge(idProcessor4, 754, 706).merge(decisionMergePoint, 551, 173).complete(idProcessor4, 765, 773).buildGraph();
        }
    }
    val graph = new Config().graph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    var result = reactor.submit(new DeadTransitionBreaksFlow().setFlowDecision(DeadTransitionBreaksFlow.FlowDecision.THREE)).getResultFuture().get(5, TimeUnit.MINUTES);
    assertEquals(Arrays.asList(1, 2, 3, 4), result.getIdSequence());
    result = reactor.submit(new DeadTransitionBreaksFlow().setFlowDecision(DeadTransitionBreaksFlow.FlowDecision.TWO)).getResultFuture().get(5, TimeUnit.MINUTES);
    assertEquals(Arrays.asList(1, 3, 4), result.getIdSequence());
}
Also used : lombok.val(lombok.val) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) lombok.experimental.var(lombok.experimental.var) MergePoint(ru.fix.completable.reactor.runtime.dsl.MergePoint) Test(org.junit.Test)

Example 24 with ReactorGraphBuilder

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

the class CompletableReactorTest method two_processors_sequential_merge.

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

        final ReactorGraphBuilder builder = new ReactorGraphBuilder(this);

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

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

        ReactorGraph buildGraph() {
            return builder.payload(TwoProcessorSequentialMergePayload.class).handle(idProcessor1).handle(idProcessor2).mergePoint(idProcessor1).on(Status.OK, Status.UNUSED).merge(idProcessor2).mergePoint(idProcessor2).onAny().complete().coordinates().start(366, 103).proc(idProcessor1, 358, 184).proc(idProcessor2, 549, 183).merge(idProcessor1, 427, 291).merge(idProcessor2, 571, 356).complete(idProcessor2, 610, 454).buildGraph();
        }
    }
    val graph = new Config().buildGraph();
    printGraph(graph);
    reactor.registerReactorGraph(graph);
    TwoProcessorSequentialMergePayload resultPayload = reactor.submit(new TwoProcessorSequentialMergePayload()).getResultFuture().get(10, TimeUnit.SECONDS);
    assertEquals(Arrays.asList(1, 2), 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