use of reactor.core.publisher.Mono in project spring-framework by spring-projects.
the class ServerHttpResponseTests method monoResponseShouldNotLeakIfCancelled.
// gh-26232
@Test
void monoResponseShouldNotLeakIfCancelled() {
LeakAwareDataBufferFactory bufferFactory = new LeakAwareDataBufferFactory();
MockServerHttpRequest request = MockServerHttpRequest.get("/").build();
MockServerHttpResponse response = new MockServerHttpResponse(bufferFactory);
response.setWriteHandler(flux -> {
throw AbortedException.beforeSend();
});
HttpMessageWriter<Object> messageWriter = new EncoderHttpMessageWriter<>(new Jackson2JsonEncoder());
Mono<Void> result = messageWriter.write(Mono.just(Collections.singletonMap("foo", "bar")), ResolvableType.forClass(Mono.class), ResolvableType.forClass(Map.class), null, request, response, Collections.emptyMap());
StepVerifier.create(result).expectError(AbortedException.class).verify();
bufferFactory.checkForLeaks();
}
use of reactor.core.publisher.Mono in project spring-framework by spring-projects.
the class RouterFunctionTests method andRoute.
@Test
public void andRoute() {
RouterFunction<ServerResponse> routerFunction1 = request -> Mono.empty();
RequestPredicate requestPredicate = request -> true;
RouterFunction<ServerResponse> result = routerFunction1.andRoute(requestPredicate, this::handlerMethod);
assertThat(result).isNotNull();
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://example.com").build();
ServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<? extends HandlerFunction<?>> resultHandlerFunction = result.route(request);
StepVerifier.create(resultHandlerFunction).expectNextCount(1).expectComplete().verify();
}
use of reactor.core.publisher.Mono in project spring-framework by spring-projects.
the class RouterFunctionTests method andOther.
@Test
public void andOther() {
HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.ok().bodyValue("42");
RouterFunction<?> routerFunction1 = request -> Mono.empty();
RouterFunction<ServerResponse> routerFunction2 = request -> Mono.just(handlerFunction);
RouterFunction<?> result = routerFunction1.andOther(routerFunction2);
assertThat(result).isNotNull();
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://example.com").build();
ServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<? extends HandlerFunction<?>> resultHandlerFunction = result.route(request);
StepVerifier.create(resultHandlerFunction).expectNextMatches(o -> o.equals(handlerFunction)).expectComplete().verify();
}
use of reactor.core.publisher.Mono in project spring-framework by spring-projects.
the class RouterFunctionBuilderTests method route.
@Test
public void route() {
RouterFunction<ServerResponse> route = RouterFunctions.route().GET("/foo", request -> ServerResponse.ok().build()).POST("/", RequestPredicates.contentType(MediaType.TEXT_PLAIN), request -> ServerResponse.noContent().build()).route(HEAD("/foo"), request -> ServerResponse.accepted().build()).build();
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://example.com/foo").build();
ServerRequest getRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> responseMono = route.route(getRequest).flatMap(handlerFunction -> handlerFunction.handle(getRequest)).map(ServerResponse::statusCode).map(HttpStatus::value);
StepVerifier.create(responseMono).expectNext(200).verifyComplete();
mockRequest = MockServerHttpRequest.head("https://example.com/foo").build();
ServerRequest headRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
responseMono = route.route(headRequest).flatMap(handlerFunction -> handlerFunction.handle(headRequest)).map(ServerResponse::statusCode).map(HttpStatus::value);
StepVerifier.create(responseMono).expectNext(202).verifyComplete();
mockRequest = MockServerHttpRequest.post("https://example.com/").contentType(MediaType.TEXT_PLAIN).build();
ServerRequest barRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
responseMono = route.route(barRequest).flatMap(handlerFunction -> handlerFunction.handle(barRequest)).map(ServerResponse::statusCode).map(HttpStatus::value);
StepVerifier.create(responseMono).expectNext(204).verifyComplete();
mockRequest = MockServerHttpRequest.post("https://example.com/").build();
ServerRequest invalidRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
responseMono = route.route(invalidRequest).flatMap(handlerFunction -> handlerFunction.handle(invalidRequest)).map(ServerResponse::statusCode).map(HttpStatus::value);
StepVerifier.create(responseMono).verifyComplete();
}
use of reactor.core.publisher.Mono in project spring-framework by spring-projects.
the class RouterFunctionBuilderTests method filters.
@Test
public void filters() {
AtomicInteger filterCount = new AtomicInteger();
RouterFunction<?> route = RouterFunctions.route().GET("/foo", request -> ServerResponse.ok().build()).GET("/bar", request -> Mono.error(new IllegalStateException())).before(request -> {
int count = filterCount.getAndIncrement();
assertThat(count).isEqualTo(0);
return request;
}).after((request, response) -> {
int count = filterCount.getAndIncrement();
assertThat(count).isEqualTo(3);
return response;
}).filter((request, next) -> {
int count = filterCount.getAndIncrement();
assertThat(count).isEqualTo(1);
Mono<ServerResponse> responseMono = next.handle(request);
count = filterCount.getAndIncrement();
assertThat(count).isEqualTo(2);
return responseMono;
}).onError(IllegalStateException.class, (e, request) -> ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).build()).build();
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://localhost/foo").build();
ServerRequest fooRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<ServerResponse> fooResponseMono = route.route(fooRequest).flatMap(handlerFunction -> handlerFunction.handle(fooRequest));
StepVerifier.create(fooResponseMono).consumeNextWith(serverResponse -> assertThat(filterCount.get()).isEqualTo(4)).verifyComplete();
filterCount.set(0);
mockRequest = MockServerHttpRequest.get("https://localhost/bar").build();
ServerRequest barRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> barResponseMono = route.route(barRequest).flatMap(handlerFunction -> handlerFunction.handle(barRequest)).map(ServerResponse::statusCode).map(HttpStatus::value);
StepVerifier.create(barResponseMono).expectNext(500).verifyComplete();
}
Aggregations