use of ru.fix.completable.reactor.runtime.dsl.Processor 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());
}
use of ru.fix.completable.reactor.runtime.dsl.Processor 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());
}
use of ru.fix.completable.reactor.runtime.dsl.Processor 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());
}
Aggregations