diff --git a/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/pom.xml b/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/pom.xml
index acea97cd75..99034b5c20 100644
--- a/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/pom.xml
+++ b/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/pom.xml
@@ -67,7 +67,7 @@
javax.servlet
javax.servlet-api
${servlet-api.version}
- provided
+ test
org.springframework.boot
diff --git a/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/src/main/java/com/huawei/flowcontrol/DispatcherServletInterceptor.java b/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/src/main/java/com/huawei/flowcontrol/DispatcherServletInterceptor.java
index 62ce0c0970..dcfb304d74 100644
--- a/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/src/main/java/com/huawei/flowcontrol/DispatcherServletInterceptor.java
+++ b/sermant-plugins/sermant-flowcontrol/flowcontrol-plugin/src/main/java/com/huawei/flowcontrol/DispatcherServletInterceptor.java
@@ -24,16 +24,15 @@
import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
import com.huaweicloud.sermant.core.utils.LogUtils;
+import com.huaweicloud.sermant.core.utils.ReflectUtils;
+import java.io.PrintWriter;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
/**
* DispatcherServlet 的 API接口增强 埋点定义sentinel资源
*
@@ -49,18 +48,18 @@ public class DispatcherServletInterceptor extends InterceptorSupporter {
* @param request 请求
* @return HttpRequestEntity
*/
- private Optional convertToHttpEntity(HttpServletRequest request) {
+ private Optional convertToHttpEntity(Object request) {
if (request == null) {
return Optional.empty();
}
- String uri = request.getRequestURI();
+ String uri = getRequestUri(request);
return Optional.of(new HttpRequestEntity.Builder()
.setRequestType(RequestType.SERVER)
- .setPathInfo(request.getPathInfo())
+ .setPathInfo(getPathInfo(request))
.setServletPath(uri)
.setHeaders(getHeaders(request))
- .setMethod(request.getMethod())
- .setServiceName(request.getHeader(ConfigConst.FLOW_REMOTE_SERVICE_NAME_HEADER_KEY))
+ .setMethod(getMethod(request))
+ .setServiceName(getHeader(request, ConfigConst.FLOW_REMOTE_SERVICE_NAME_HEADER_KEY))
.build());
}
@@ -70,12 +69,12 @@ private Optional convertToHttpEntity(HttpServletRequest reque
* @param request 请求信息
* @return headers
*/
- private Map getHeaders(HttpServletRequest request) {
- final Enumeration headerNames = request.getHeaderNames();
+ private Map getHeaders(Object request) {
+ final Enumeration headerNames = getHeaderNames(request);
final Map headers = new HashMap<>();
while (headerNames.hasMoreElements()) {
final String headerName = headerNames.nextElement();
- headers.put(headerName, request.getHeader(headerName));
+ headers.put(headerName, getHeader(request, headerName));
}
return Collections.unmodifiableMap(headers);
}
@@ -84,19 +83,19 @@ private Map getHeaders(HttpServletRequest request) {
protected final ExecuteContext doBefore(ExecuteContext context) throws Exception {
LogUtils.printHttpRequestBeforePoint(context);
final Object[] allArguments = context.getArguments();
- final HttpServletRequest argument = (HttpServletRequest) allArguments[0];
+ final Object request = allArguments[0];
final FlowControlResult result = new FlowControlResult();
- final Optional httpRequestEntity = convertToHttpEntity(argument);
+ final Optional httpRequestEntity = convertToHttpEntity(request);
if (!httpRequestEntity.isPresent()) {
return context;
}
chooseHttpService().onBefore(className, httpRequestEntity.get(), result);
if (result.isSkip()) {
context.skip(null);
- final HttpServletResponse response = (HttpServletResponse) allArguments[1];
+ final Object response = allArguments[1];
if (response != null) {
- response.setStatus(result.getResponse().getCode());
- response.getWriter().print(result.buildResponseMsg());
+ setStatus(response, result.getResponse().getCode());
+ getWriter(response).print(result.buildResponseMsg());
}
}
return context;
@@ -115,4 +114,39 @@ protected final ExecuteContext doThrow(ExecuteContext context) {
LogUtils.printHttpRequestOnThrowPoint(context);
return context;
}
+
+ private String getRequestUri(Object httpServletRequest) {
+ return getString(httpServletRequest, "getRequestURI");
+ }
+
+ private String getPathInfo(Object httpServletRequest) {
+ return getString(httpServletRequest, "getPathInfo");
+ }
+
+ private String getMethod(Object httpServletRequest) {
+ return getString(httpServletRequest, "getMethod");
+ }
+
+ private Enumeration getHeaderNames(Object httpServletRequest) {
+ return (Enumeration) ReflectUtils.invokeMethodWithNoneParameter(httpServletRequest, "getHeaderNames")
+ .orElse(null);
+ }
+
+ private String getHeader(Object httpServletRequest, String key) {
+ return (String) ReflectUtils.invokeMethod(httpServletRequest, "getHeader", new Class[]{String.class},
+ new Object[]{key}).orElse(null);
+ }
+
+ private PrintWriter getWriter(Object httpServletRequest) {
+ return (PrintWriter) ReflectUtils.invokeMethodWithNoneParameter(httpServletRequest, "getWriter")
+ .orElse(null);
+ }
+
+ private void setStatus(Object httpServletResponse, int code) {
+ ReflectUtils.invokeMethod(httpServletResponse, "setStatus", new Class[]{int.class}, new Object[]{code});
+ }
+
+ private String getString(Object object, String method) {
+ return (String) ReflectUtils.invokeMethodWithNoneParameter(object, method).orElse(null);
+ }
}
diff --git a/sermant-plugins/sermant-monitor/monitor-plugin/pom.xml b/sermant-plugins/sermant-monitor/monitor-plugin/pom.xml
index 8e8383e5f3..21f7f68421 100644
--- a/sermant-plugins/sermant-monitor/monitor-plugin/pom.xml
+++ b/sermant-plugins/sermant-monitor/monitor-plugin/pom.xml
@@ -40,12 +40,6 @@
${apache.dubbo.version}
provided
-
- javax.servlet
- javax.servlet-api
- ${servlet-api.version}
- provided
-
junit
junit
diff --git a/sermant-plugins/sermant-monitor/monitor-plugin/src/main/java/com/huawei/monitor/interceptor/DispatcherServletInterceptor.java b/sermant-plugins/sermant-monitor/monitor-plugin/src/main/java/com/huawei/monitor/interceptor/DispatcherServletInterceptor.java
index 3f8edcd52b..e1d73cd471 100644
--- a/sermant-plugins/sermant-monitor/monitor-plugin/src/main/java/com/huawei/monitor/interceptor/DispatcherServletInterceptor.java
+++ b/sermant-plugins/sermant-monitor/monitor-plugin/src/main/java/com/huawei/monitor/interceptor/DispatcherServletInterceptor.java
@@ -23,8 +23,7 @@
import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
import com.huaweicloud.sermant.core.plugin.agent.interceptor.AbstractInterceptor;
import com.huaweicloud.sermant.core.utils.LogUtils;
-
-import javax.servlet.http.HttpServletRequest;
+import com.huaweicloud.sermant.core.utils.ReflectUtils;
/**
* HTTP拦截定义
@@ -51,7 +50,7 @@ public ExecuteContext after(ExecuteContext context) {
LogUtils.printHttpRequestAfterPoint(context);
return context;
}
- String uri = ((HttpServletRequest) context.getArguments()[0]).getRequestURI();
+ String uri = getRequestUri(context.getArguments()[0]);
MetricCalEntity metricCalEntity = MonitorCacheUtil.getMetricCalEntity(uri);
metricCalEntity.getReqNum().incrementAndGet();
long startTime = (Long) context.getExtMemberFieldValue(START_TIME);
@@ -71,11 +70,15 @@ public ExecuteContext onThrow(ExecuteContext context) {
LogUtils.printHttpRequestOnThrowPoint(context);
return context;
}
- String uri = ((HttpServletRequest) context.getArguments()[0]).getRequestURI();
+ String uri = getRequestUri(context.getArguments()[0]);
MetricCalEntity metricCalEntity = MonitorCacheUtil.getMetricCalEntity(uri);
metricCalEntity.getReqNum().incrementAndGet();
metricCalEntity.getFailedReqNum().incrementAndGet();
LogUtils.printHttpRequestOnThrowPoint(context);
return context;
}
+
+ private String getRequestUri(Object httpServletRequest) {
+ return (String) ReflectUtils.invokeMethodWithNoneParameter(httpServletRequest, "getRequestURI").orElse(null);
+ }
}
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/SpringWebHandlerDeclarer.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/DispatcherServletDeclarer.java
similarity index 84%
rename from sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/SpringWebHandlerDeclarer.java
rename to sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/DispatcherServletDeclarer.java
index 030591734f..38a395ea5b 100644
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/SpringWebHandlerDeclarer.java
+++ b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/declarers/DispatcherServletDeclarer.java
@@ -17,7 +17,7 @@
package com.huawei.registry.grace.declarers;
-import com.huawei.registry.grace.interceptors.SpringWebHandlerInterceptor;
+import com.huawei.registry.grace.interceptors.DispatcherServletInterceptor;
import com.huaweicloud.sermant.core.plugin.agent.declarer.AbstractPluginDeclarer;
import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer;
@@ -30,16 +30,16 @@
* @author zhouss
* @since 2022-05-23
*/
-public class SpringWebHandlerDeclarer extends AbstractPluginDeclarer {
+public class DispatcherServletDeclarer extends AbstractPluginDeclarer {
/**
* 增强类的全限定名
*/
- private static final String ENHANCE_CLASS = "org.springframework.web.servlet.HandlerExecutionChain";
+ private static final String ENHANCE_CLASS = "org.springframework.web.servlet.DispatcherServlet";
/**
* 拦截类的全限定名
*/
- private static final String INTERCEPT_CLASS = SpringWebHandlerInterceptor.class.getCanonicalName();
+ private static final String INTERCEPT_CLASS = DispatcherServletInterceptor.class.getCanonicalName();
@Override
public ClassMatcher getClassMatcher() {
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/inject/grace/SpringRequestInterceptor.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptor.java
similarity index 57%
rename from sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/inject/grace/SpringRequestInterceptor.java
rename to sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptor.java
index 4c8cb6c15a..73bdea5bd8 100644
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/inject/grace/SpringRequestInterceptor.java
+++ b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptor.java
@@ -20,7 +20,7 @@
* from the Apache Dubbo project.
*/
-package com.huawei.registry.inject.grace;
+package com.huawei.registry.grace.interceptors;
import com.huawei.registry.config.GraceConfig;
import com.huawei.registry.config.grace.GraceConstants;
@@ -30,23 +30,19 @@
import com.huawei.registry.context.RegisterContext.ClientInfo;
import com.huawei.registry.services.GraceService;
+import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
import com.huaweicloud.sermant.core.plugin.config.PluginConfigManager;
import com.huaweicloud.sermant.core.plugin.service.PluginServiceManager;
+import com.huaweicloud.sermant.core.utils.ReflectUtils;
import com.huaweicloud.sermant.core.utils.StringUtils;
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
/**
- * Spring Web请求前置拦截器, 由拦截器动态加入, 每次请求都会添加, {@link com.huawei.registry.grace.interceptors.SpringWebHandlerInterceptor}
+ * Spring Web请求拦截器
*
* @author zhouss
* @since 2022-05-23
*/
-public class SpringRequestInterceptor implements HandlerInterceptor {
+public class DispatcherServletInterceptor extends GraceSwitchInterceptor {
private final GraceService graceService;
private final GraceConfig graceConfig;
@@ -54,55 +50,78 @@ public class SpringRequestInterceptor implements HandlerInterceptor {
/**
* 构造方法
*/
- public SpringRequestInterceptor() {
+ public DispatcherServletInterceptor() {
graceService = PluginServiceManager.getPluginService(GraceService.class);
graceConfig = PluginConfigManager.getPluginConfig(GraceConfig.class);
}
@Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ public ExecuteContext doBefore(ExecuteContext context) {
if (GraceContext.INSTANCE.getStartWarmUpTime() == 0) {
GraceContext.INSTANCE.setStartWarmUpTime(System.currentTimeMillis());
}
+ Object[] arguments = context.getArguments();
+ Object request = arguments[0];
+ Object response = arguments[1];
+
addGraceAddress(request);
final GraceShutDownManager graceShutDownManager = GraceContext.INSTANCE.getGraceShutDownManager();
graceShutDownManager.increaseRequestCount();
if (graceShutDownManager.isShutDown() && graceConfig.isEnableGraceShutdown()) {
// 已被标记为关闭状态, 开始统计进入的请求数
final ClientInfo clientInfo = RegisterContext.INSTANCE.getClientInfo();
- response.addHeader(GraceConstants.MARK_SHUTDOWN_SERVICE_ENDPOINT,
+ addHeader(response, GraceConstants.MARK_SHUTDOWN_SERVICE_ENDPOINT,
buildEndpoint(clientInfo.getIp(), clientInfo.getPort()));
- response.addHeader(GraceConstants.MARK_SHUTDOWN_SERVICE_ENDPOINT,
+ addHeader(response, GraceConstants.MARK_SHUTDOWN_SERVICE_ENDPOINT,
buildEndpoint(clientInfo.getHost(), clientInfo.getPort()));
- response.addHeader(GraceConstants.MARK_SHUTDOWN_SERVICE_NAME, clientInfo.getServiceName());
+ addHeader(response, GraceConstants.MARK_SHUTDOWN_SERVICE_NAME, clientInfo.getServiceName());
}
- return true;
+ return context;
}
@Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
- ModelAndView modelAndView) {
+ public ExecuteContext doAfter(ExecuteContext context) {
+ GraceContext.INSTANCE.getGraceShutDownManager().decreaseRequestCount();
+ return context;
}
@Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
- Exception ex) {
+ public ExecuteContext doThrow(ExecuteContext context) {
GraceContext.INSTANCE.getGraceShutDownManager().decreaseRequestCount();
+ return context;
}
- private String buildEndpoint(String host, int port) {
- return host + ":" + port;
- }
-
- private void addGraceAddress(HttpServletRequest request) {
+ private void addGraceAddress(Object request) {
if (graceConfig.isEnableSpring() && graceConfig.isEnableGraceShutdown() && graceConfig.isEnableOfflineNotify()
&& GraceConstants.GRACE_OFFLINE_SOURCE_VALUE
- .equals(request.getHeader(GraceConstants.GRACE_OFFLINE_SOURCE_KEY))) {
- String address = request.getHeader(GraceConstants.SERMANT_GRACE_ADDRESS);
+ .equals(getHeader(request, GraceConstants.GRACE_OFFLINE_SOURCE_KEY))) {
+ String address = getHeader(request, GraceConstants.SERMANT_GRACE_ADDRESS);
if (StringUtils.isBlank(address)) {
- address = request.getRemoteAddr() + ":" + request.getServerPort();
+ address = getRemoteAddr(request) + ":" + getServerPort(request);
}
graceService.addAddress(address);
}
}
+
+ private void addHeader(Object httpServletRequest, String key, String value) {
+ ReflectUtils.invokeMethod(httpServletRequest, "addHeader", new Class[]{String.class, String.class},
+ new Object[]{key, value});
+ }
+
+ private int getServerPort(Object httpServletRequest) {
+ return (int) ReflectUtils.invokeMethodWithNoneParameter(httpServletRequest, "getServerPort").orElse(0);
+ }
+
+ private String getRemoteAddr(Object httpServletRequest) {
+ return getString(httpServletRequest, "getRemoteAddr");
+ }
+
+ private String getHeader(Object httpServletRequest, String key) {
+ return (String) ReflectUtils.invokeMethod(httpServletRequest, "getHeader", new Class[]{String.class},
+ new Object[]{key}).orElse(null);
+ }
+
+ private String getString(Object object, String method) {
+ return (String) ReflectUtils.invokeMethodWithNoneParameter(object, method).orElse(null);
+ }
}
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/GraceSwitchInterceptor.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/GraceSwitchInterceptor.java
index c1345034aa..8b4bb9cc64 100644
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/GraceSwitchInterceptor.java
+++ b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/GraceSwitchInterceptor.java
@@ -75,7 +75,7 @@ protected boolean isEnabled() {
* @return endpoint
*/
protected String buildEndpoint(String host, int port) {
- return String.format(Locale.ENGLISH, "%s:%s", host, port);
+ return host + ":" + port;
}
/**
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptor.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptor.java
deleted file mode 100644
index f314e4f891..0000000000
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved.
- *
- * 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
- *
- * http://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.huawei.registry.grace.interceptors;
-
-import com.huawei.registry.inject.grace.SpringRequestInterceptor;
-
-import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
-
-import org.springframework.web.servlet.HandlerExecutionChain;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-/**
- * 注入请求拦截器
- *
- * @author zhouss
- * @since 2022-05-23
- */
-public class SpringWebHandlerInterceptor extends GraceSwitchInterceptor {
- private HandlerInterceptor handlerInterceptor;
-
- @Override
- protected ExecuteContext doBefore(ExecuteContext context) {
- final Object object = context.getObject();
- if (object instanceof HandlerExecutionChain) {
- HandlerExecutionChain chain = (HandlerExecutionChain) object;
- chain.addInterceptor(getInterceptor());
- }
- return context;
- }
-
- private HandlerInterceptor getInterceptor() {
- if (handlerInterceptor == null) {
- handlerInterceptor = new SpringRequestInterceptor();
- }
- return handlerInterceptor;
- }
-}
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer
index be843d2224..b303333db4 100644
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer
+++ b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer
@@ -36,7 +36,7 @@ com.huawei.registry.declarers.health.HealthIndicatorDeclarer
com.huawei.registry.grace.declarers.RegistryDelayDeclarer
com.huawei.registry.grace.declarers.SpringRibbonWarmUpDeclarer
com.huawei.registry.grace.declarers.SpringLoadbalancerWarmUpDeclarer
-com.huawei.registry.grace.declarers.SpringWebHandlerDeclarer
+com.huawei.registry.grace.declarers.DispatcherServletDeclarer
com.huawei.registry.grace.declarers.SpringRibbonBalancerDeclarer
com.huawei.registry.grace.declarers.SpringCacheManagerDeclarer
com.huawei.registry.grace.declarers.SpringLoadbalancerFeignResponseDeclarer
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/inject/grace/SpringRequestInterceptorTest.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptorTest.java
similarity index 81%
rename from sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/inject/grace/SpringRequestInterceptorTest.java
rename to sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptorTest.java
index ab824aed3c..1888fc4aaa 100644
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/inject/grace/SpringRequestInterceptorTest.java
+++ b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/DispatcherServletInterceptorTest.java
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved.
+ * Copyright (C) 2022-2024 Huawei Technologies Co., Ltd. All rights reserved.
*
* 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
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://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,
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-package com.huawei.registry.inject.grace;
+package com.huawei.registry.grace.interceptors;
import com.huawei.registry.config.GraceConfig;
import com.huawei.registry.config.grace.GraceConstants;
import com.huawei.registry.config.grace.GraceContext;
import com.huawei.registry.services.GraceService;
+import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
import com.huaweicloud.sermant.core.plugin.config.PluginConfigManager;
import com.huaweicloud.sermant.core.plugin.service.PluginServiceManager;
@@ -45,7 +46,7 @@
* @author zhouss
* @since 2022-09-06
*/
-public class SpringRequestInterceptorTest {
+public class DispatcherServletInterceptorTest {
private final String testAddress = "localhost:8099";
private final List addresses = new ArrayList<>();
@@ -64,7 +65,9 @@ public void addAddress(String address) {
}
};
- private SpringRequestInterceptor interceptor;
+ private ExecuteContext executeContext;
+
+ private DispatcherServletInterceptor interceptor;
@Mock
private HttpServletRequest request;
@@ -77,7 +80,7 @@ public void addAddress(String address) {
private MockedStatic pluginConfigManagerMockedStatic;
@Before
- public void setUp() {
+ public void setUp() throws NoSuchMethodException {
MockitoAnnotations.openMocks(this);
pluginServiceManagerMockedStatic = Mockito.mockStatic(PluginServiceManager.class);
pluginConfigManagerMockedStatic = Mockito.mockStatic(PluginConfigManager.class);
@@ -92,7 +95,10 @@ public void setUp() {
.thenReturn(GraceConstants.GRACE_OFFLINE_SOURCE_VALUE);
Mockito.when(request.getHeader(GraceConstants.SERMANT_GRACE_ADDRESS))
.thenReturn(testAddress);
- interceptor = new SpringRequestInterceptor();
+ interceptor = new DispatcherServletInterceptor();
+ Object[] arguments = new Object[]{request, response};
+ executeContext = ExecuteContext.forMemberMethod(new Object(), String.class.getMethod("trim"), arguments, null,
+ null);
}
@After
@@ -102,9 +108,9 @@ public void tearDown() throws Exception {
}
@Test
- public void preHandle() {
+ public void before() {
GraceContext.INSTANCE.getGraceShutDownManager().setShutDown(true);
- interceptor.preHandle(request, response, new Object());
+ interceptor.doBefore(executeContext);
Assert.assertTrue(GraceContext.INSTANCE.getStartWarmUpTime() > 0);
Assert.assertTrue(addresses.contains(testAddress));
Assert.assertTrue(GraceContext.INSTANCE.getGraceShutDownManager().getRequestCount() > 0);
@@ -115,13 +121,13 @@ public void preHandle() {
}
@Test
- public void postHandle() {
- interceptor.postHandle(request, response, new Object(), null);
+ public void after() {
+ interceptor.doAfter(executeContext);
}
@Test
- public void afterCompletion() {
- interceptor.afterCompletion(request, response, new Object(), null);
+ public void doThrow() {
+ interceptor.doThrow(executeContext);
Assert.assertTrue(GraceContext.INSTANCE.getGraceShutDownManager().getRequestCount() < 0);
GraceContext.INSTANCE.getGraceShutDownManager().increaseRequestCount();
}
diff --git a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptorTest.java b/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptorTest.java
deleted file mode 100644
index a46c7ac444..0000000000
--- a/sermant-plugins/sermant-service-registry/spring-cloud-registry-plugin/src/test/java/com/huawei/registry/grace/interceptors/SpringWebHandlerInterceptorTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved.
- *
- * 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
- *
- * http://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.huawei.registry.grace.interceptors;
-
-import com.huawei.registry.config.GraceConfig;
-import com.huawei.registry.config.RegisterConfig;
-import com.huawei.registry.services.GraceService;
-
-import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
-import com.huaweicloud.sermant.core.plugin.config.PluginConfigManager;
-import com.huaweicloud.sermant.core.plugin.service.PluginServiceManager;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
-import org.springframework.web.servlet.HandlerExecutionChain;
-
-import java.util.Objects;
-
-/**
- * 添加拦截器测试
- *
- * @author zhouss
- * @since 2022-06-30
- */
-public class SpringWebHandlerInterceptorTest {
- private final GraceConfig graceConfig = new GraceConfig();
-
- /**
- * PluginConfigManager mock对象
- */
- public MockedStatic pluginConfigManagerMockedStatic;
-
- private MockedStatic pluginServiceManagerMockedStatic;
-
- /**
- * 初始化
- */
- @Before
- public void init() {
- graceConfig.setEnableSpring(true);
- pluginConfigManagerMockedStatic = Mockito.mockStatic(PluginConfigManager.class);
- pluginConfigManagerMockedStatic.when(() -> PluginConfigManager.getPluginConfig(GraceConfig.class))
- .thenReturn(graceConfig);
- pluginConfigManagerMockedStatic.when(() -> PluginConfigManager.getPluginConfig(RegisterConfig.class))
- .thenReturn(new RegisterConfig());
- pluginServiceManagerMockedStatic = Mockito.mockStatic(PluginServiceManager.class);
- pluginServiceManagerMockedStatic.when(() -> PluginServiceManager.getPluginService(GraceService.class))
- .thenReturn(new GraceService() {
- @Override
- public void shutdown() {
-
- }
-
- @Override
- public void addAddress(String address) {
-
- }
- });
- }
-
- @After
- public void tearDown() {
- pluginConfigManagerMockedStatic.close();
- pluginServiceManagerMockedStatic.close();
- }
-
- /**
- * 测试添加拦截器
- */
- @Test
- public void testAddInterceptor() {
- final HandlerExecutionChain chain = new HandlerExecutionChain(new Object());
- final ExecuteContext executeContext = ExecuteContext.forMemberMethod(chain, null, null, null, null);
- final SpringWebHandlerInterceptor springWebHandlerInterceptor = new SpringWebHandlerInterceptor();
- springWebHandlerInterceptor.doBefore(executeContext);
- Assert.assertTrue(Objects.requireNonNull(chain.getInterceptors()).length > 0);
- }
-}