From 113afab38055a40fa036f5377e3ccc405852df9c Mon Sep 17 00:00:00 2001 From: liqiangz Date: Thu, 20 Aug 2020 10:09:43 +0800 Subject: [PATCH] adapter: Add test cases for Spring WebFlux HandlerFunction (#1678) --- .../SentinelWebFluxIntegrationTest.java | 24 ++++++++++++ .../webflux/test/WebFluxTestRouter.java | 38 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestRouter.java diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxIntegrationTest.java b/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxIntegrationTest.java index 2e0ec9e4..6d84d256 100644 --- a/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxIntegrationTest.java +++ b/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/SentinelWebFluxIntegrationTest.java @@ -71,6 +71,30 @@ public class SentinelWebFluxIntegrationTest { assertEquals(1, cn.passQps(), 0.01); } + @Test + public void testWebFluxRouterFunction() throws Exception { + + String url = "/router/hello"; + this.webClient.get() + .uri(url) + .accept(MediaType.TEXT_PLAIN) + .exchange() + .expectStatus().isOk() + .expectBody(String.class).isEqualTo(HELLO_STR); + + ClusterNode cn = ClusterBuilderSlot.getClusterNode(url); + assertNotNull(cn); + assertEquals(1, cn.passQps(), 0.01); + + configureRulesFor(url, 0); + this.webClient.get() + .uri(url) + .accept(MediaType.TEXT_PLAIN) + .exchange() + .expectStatus().isEqualTo(HttpStatus.TOO_MANY_REQUESTS) + .expectBody(String.class).value(StringContains.containsString(BLOCK_MSG_PREFIX)); + } + @Test public void testCustomizedUrlCleaner() throws Exception { final String fooPrefix = "/foo/"; diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestRouter.java b/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestRouter.java new file mode 100644 index 00000000..d4ad648a --- /dev/null +++ b/sentinel-adapter/sentinel-spring-webflux-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webflux/test/WebFluxTestRouter.java @@ -0,0 +1,38 @@ +/* + * Copyright 1999-2020 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.spring.webflux.test; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.ServerResponse; + +import static org.springframework.web.reactive.function.BodyInserters.fromObject; +import static org.springframework.web.reactive.function.server.RequestPredicates.GET; +import static org.springframework.web.reactive.function.server.RouterFunctions.route; + +/** + * @author liqiangz + */ +@Configuration +public class WebFluxTestRouter { + + @Bean + RouterFunction routingFunction() { + return route(GET("/router/hello"), + req -> ServerResponse.ok().body(fromObject("Hello!"))); + } +}