use of io.gravitee.gateway.api.stream.ReadWriteStream in project gravitee-gateway by gravitee-io.
the class StreamablePolicyChain method prepareStreamablePolicyChain.
private void prepareStreamablePolicyChain(final Request request, final Response response) {
ReadWriteStream<Buffer> previousPolicyStreamer = null;
for (Policy policy : policies) {
if (policy.isStreamable()) {
try {
// Run OnXXXContent to get ReadWriteStream object
final ReadWriteStream streamer = stream(policy, request, response, this, executionContext);
if (streamer != null) {
// An handler was never assigned to start the chain, so let's do it
if (streamablePolicyHandlerChain == null) {
streamablePolicyHandlerChain = streamer;
}
// Chain policy stream using the previous one
if (previousPolicyStreamer != null) {
previousPolicyStreamer.bodyHandler(streamer::write);
previousPolicyStreamer.endHandler(result1 -> streamer.end());
}
// Previous stream is now the current policy stream
previousPolicyStreamer = streamer;
}
} catch (Exception ex) {
logger.error("Unexpected error while running onXXXXContent for policy {}", policy, ex);
}
}
}
ReadWriteStream<Buffer> tailPolicyStreamer = previousPolicyStreamer;
if (streamablePolicyHandlerChain != null && tailPolicyStreamer != null) {
tailPolicyStreamer.bodyHandler(bodyPart -> {
if (bodyHandler != null)
bodyHandler.handle(bodyPart);
});
tailPolicyStreamer.endHandler(result -> {
if (endHandler != null)
endHandler.handle(result);
});
}
}
use of io.gravitee.gateway.api.stream.ReadWriteStream in project gravitee-gateway by gravitee-io.
the class RequestPolicyChainTest method doNext_streamablePolicies_streaming.
@Test
public void doNext_streamablePolicies_streaming() throws Exception {
StreamablePolicy policy4 = spy(new StreamablePolicy());
StreamablePolicy policy5 = spy(new StreamablePolicy());
ExecutionContext executionContext = mock(ExecutionContext.class);
ReadWriteStream streamPolicy4 = spy(new BufferedReadWriteStream());
when(policy4.onRequestContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy4);
ReadWriteStream streamPolicy5 = spy(new BufferedReadWriteStream());
when(policy5.onRequestContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy5);
InOrder inOrder = inOrder(streamPolicy4, streamPolicy5);
PolicyChain chain = RequestPolicyChain.create(Arrays.asList(policy4, policy5), executionContext);
chain.setResultHandler(result -> {
});
chain.bodyHandler(mock(Handler.class));
chain.endHandler(mock(Handler.class));
chain.doNext(null, null);
chain.write(Buffer.buffer("TEST"));
chain.write(Buffer.buffer("TEST"));
chain.end();
inOrder.verify(streamPolicy4, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy4, atLeastOnce()).endHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).endHandler(any(Handler.class));
verify(policy4, atLeastOnce()).onRequest(null, null, chain, executionContext);
}
use of io.gravitee.gateway.api.stream.ReadWriteStream in project gravitee-gateway by gravitee-io.
the class RequestPolicyChainTest method doNext_streamablePolicies.
@Test
public void doNext_streamablePolicies() throws Exception {
StreamablePolicy policy4 = spy(new StreamablePolicy());
StreamablePolicy policy5 = spy(new StreamablePolicy());
ExecutionContext executionContext = mock(ExecutionContext.class);
ReadWriteStream streamPolicy4 = spy(new BufferedReadWriteStream());
when(policy4.onRequestContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy4);
ReadWriteStream streamPolicy5 = spy(new BufferedReadWriteStream());
when(policy5.onRequestContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy5);
InOrder inOrder = inOrder(streamPolicy4, streamPolicy5);
PolicyChain chain = RequestPolicyChain.create(Arrays.asList(policy4, policy5), executionContext);
chain.setResultHandler(result -> {
});
chain.doNext(null, null);
inOrder.verify(streamPolicy4, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy4, atLeastOnce()).endHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).endHandler(any(Handler.class));
verify(policy4, atLeastOnce()).onRequest(null, null, chain, executionContext);
}
use of io.gravitee.gateway.api.stream.ReadWriteStream in project gravitee-gateway by gravitee-io.
the class RequestPolicyChainTest method doNext_streamablePolicy.
@Test
public void doNext_streamablePolicy() throws Exception {
StreamablePolicy policy4 = spy(new StreamablePolicy());
ExecutionContext executionContext = mock(ExecutionContext.class);
ReadWriteStream stream = spy(new BufferedReadWriteStream());
when(policy4.onRequestContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(stream);
PolicyChain chain = RequestPolicyChain.create(Collections.singletonList(policy4), executionContext);
chain.setResultHandler(result -> {
});
chain.doNext(null, null);
verify(stream, atLeastOnce()).bodyHandler(any(Handler.class));
verify(stream, atLeastOnce()).endHandler(any(Handler.class));
verify(policy4, atLeastOnce()).onRequest(null, null, chain, executionContext);
}
use of io.gravitee.gateway.api.stream.ReadWriteStream in project gravitee-gateway by gravitee-io.
the class ResponsePolicyChainTest method doNext_streamablePolicies.
@Test
public void doNext_streamablePolicies() throws Exception {
StreamablePolicy policy4 = spy(new StreamablePolicy());
StreamablePolicy policy5 = spy(new StreamablePolicy());
ExecutionContext executionContext = mock(ExecutionContext.class);
ReadWriteStream streamPolicy4 = spy(new BufferedReadWriteStream());
when(policy4.onResponseContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy4);
ReadWriteStream streamPolicy5 = spy(new BufferedReadWriteStream());
when(policy5.onResponseContent(any(Request.class), any(Response.class), any(io.gravitee.policy.api.PolicyChain.class), eq(executionContext))).thenReturn(streamPolicy5);
InOrder inOrder = inOrder(streamPolicy4, streamPolicy5);
PolicyChain chain = ResponsePolicyChain.create(Arrays.asList(policy4, policy5), executionContext);
chain.setResultHandler(result -> {
});
chain.doNext(null, null);
inOrder.verify(streamPolicy4, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy4, atLeastOnce()).endHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).bodyHandler(any(Handler.class));
inOrder.verify(streamPolicy5, atLeastOnce()).endHandler(any(Handler.class));
verify(policy4, atLeastOnce()).onResponse(null, null, chain, executionContext);
}
Aggregations