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