This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 47c7a72ed [ISSUE #3121] remove the disabled plugin from webhandler's
plugins (#3339)
47c7a72ed is described below
commit 47c7a72ed920540db2b218f1a312427b9dc1c22c
Author: Codd <[email protected]>
AuthorDate: Fri Apr 29 13:23:58 2022 +0800
[ISSUE #3121] remove the disabled plugin from webhandler's plugins (#3339)
* [ISSUE #3121] remove the disabled plugin from webhandler's plugins
* [ISSUE #3121] remove the disabled plugin from webhandler's plugins
* [ISSUE #3121] remove the disabled plugin from webhandler's plugins
* [ISSUE #3121] update CommonPluginDataSubscriberTest test case
* [ISSUE #3121] update LocalPluginControllerTest test case
* [ISSUE #3121] update LocalPluginControllerTest test case
* [ISSUE #3121] modify ShenyuWebHandlerTest test cases
* [ISSUE #3121] modify ShenyuWebHandlerTest test cases
* [ISSUE #3121] enabled local dispatcher
* [ISSUE #3121] disabled local dispatcher
* [ISSUE #3121] modify ShenyuWebHandlerTest test cases and removed logic of
plugin
* [ISSUE #3121] modify checkStyle
* [ISSUE #3121] modify removed logic of plugin
* [ISSUE #3121] optimize ShenyuWebHandler remove plugin.
* [ISSUE #3121] modify ShenyuWebHandlerTest test cases and removed logic of
plugin
---
.../common/enums/PluginHandlerEventEnums.java | 30 ++++--
.../base/cache/CommonPluginDataSubscriber.java | 12 ++-
...ortPluginEvent.java => PluginHandlerEvent.java} | 17 +++-
.../base/cache/CommonPluginDataSubscriberTest.java | 13 ++-
.../shenyu/web/handler/ShenyuWebHandler.java | 74 +++++++++++---
.../web/controller/LocalPluginControllerTest.java | 10 +-
.../shenyu/web/handler/ShenyuWebHandlerTest.java | 109 ++++++++++++++++++++-
7 files changed, 233 insertions(+), 32 deletions(-)
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginHandlerEventEnums.java
similarity index 72%
copy from
shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
copy to
shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginHandlerEventEnums.java
index fccfd5b7e..eb06b6a6e 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
+++
b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/PluginHandlerEventEnums.java
@@ -15,16 +15,30 @@
* limitations under the License.
*/
-package org.apache.shenyu.plugin.base.cache;
-
-import org.springframework.context.ApplicationEvent;
+package org.apache.shenyu.common.enums;
/**
- * event of sort plugin.
+ * plugin handler event.
*/
-public class SortPluginEvent extends ApplicationEvent {
+public enum PluginHandlerEventEnums {
+
+ /**
+ * plugin enabled.
+ */
+ ENABLED,
+
+ /**
+ * plugin disabled.
+ */
+ DISABLED,
+
+ /**
+ * plugin deleted.
+ */
+ DELETE,
- public SortPluginEvent(final Object source) {
- super(source);
- }
+ /**
+ * plugin sorted.
+ */
+ SORTED;
}
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
index 9ae2d12c9..f166c6933 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
+++
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
@@ -22,6 +22,7 @@ import org.apache.shenyu.common.dto.PluginData;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.enums.DataEventTypeEnum;
+import org.apache.shenyu.common.enums.PluginHandlerEventEnums;
import org.apache.shenyu.plugin.base.handler.PluginDataHandler;
import org.apache.shenyu.sync.data.api.PluginDataSubscriber;
import org.slf4j.Logger;
@@ -173,11 +174,17 @@ public class CommonPluginDataSubscriber implements
PluginDataSubscriber {
private <T> void updateCacheData(@NonNull final T data) {
if (data instanceof PluginData) {
PluginData pluginData = (PluginData) data;
- PluginData oldPluginData =
BaseDataCache.getInstance().obtainPluginData(pluginData.getName());
+ final PluginData oldPluginData =
BaseDataCache.getInstance().obtainPluginData(pluginData.getName());
BaseDataCache.getInstance().cachePluginData(pluginData);
Optional.ofNullable(handlerMap.get(pluginData.getName()))
.ifPresent(handler -> handler.handlerPlugin(pluginData));
+ // update enabled plugins
+ PluginHandlerEventEnums state =
Boolean.TRUE.equals(pluginData.getEnabled())
+ ? PluginHandlerEventEnums.ENABLED :
PluginHandlerEventEnums.DISABLED;
+ eventPublisher.publishEvent(new PluginHandlerEvent(state,
pluginData));
+
+ // sorted plugin
sortPluginIfOrderChange(oldPluginData, pluginData);
} else if (data instanceof SelectorData) {
SelectorData selectorData = (SelectorData) data;
@@ -206,7 +213,7 @@ public class CommonPluginDataSubscriber implements
PluginDataSubscriber {
}
if (Objects.isNull(oldPluginData) ||
Objects.isNull(oldPluginData.getSort())
|| (!Objects.equals(oldPluginData.getSort(),
pluginData.getSort()))) {
- eventPublisher.publishEvent(new SortPluginEvent(new Object()));
+ eventPublisher.publishEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.SORTED, pluginData));
}
}
@@ -222,6 +229,7 @@ public class CommonPluginDataSubscriber implements
PluginDataSubscriber {
BaseDataCache.getInstance().removePluginData(pluginData);
Optional.ofNullable(handlerMap.get(pluginData.getName()))
.ifPresent(handler -> handler.removePlugin(pluginData));
+ eventPublisher.publishEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.DELETE, pluginData));
} else if (data instanceof SelectorData) {
SelectorData selectorData = (SelectorData) data;
BaseDataCache.getInstance().removeSelectData(selectorData);
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/PluginHandlerEvent.java
similarity index 61%
rename from
shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
rename to
shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/PluginHandlerEvent.java
index fccfd5b7e..d73e664b7 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/SortPluginEvent.java
+++
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/PluginHandlerEvent.java
@@ -17,14 +17,27 @@
package org.apache.shenyu.plugin.base.cache;
+import org.apache.shenyu.common.dto.PluginData;
+import org.apache.shenyu.common.enums.PluginHandlerEventEnums;
import org.springframework.context.ApplicationEvent;
/**
* event of sort plugin.
*/
-public class SortPluginEvent extends ApplicationEvent {
+public class PluginHandlerEvent extends ApplicationEvent {
- public SortPluginEvent(final Object source) {
+ private final PluginHandlerEventEnums pluginHandlerEventEnums;
+
+ public PluginHandlerEvent(final PluginHandlerEventEnums
pluginHandlerEventEnums, final PluginData source) {
super(source);
+ this.pluginHandlerEventEnums = pluginHandlerEventEnums;
+ }
+
+ /**
+ * get plugin handler.
+ * @return plugin handler event
+ */
+ public PluginHandlerEventEnums getPluginStateEnums() {
+ return pluginHandlerEventEnums;
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriberTest.java
b/shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriberTest.java
index cb3ea386a..c6b9c39e7 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriberTest.java
+++
b/shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriberTest.java
@@ -24,6 +24,12 @@ import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.plugin.base.handler.PluginDataHandler;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+import org.springframework.context.ApplicationEventPublisher;
import java.util.ArrayList;
import java.util.List;
@@ -35,6 +41,8 @@ import static org.junit.jupiter.api.Assertions.assertNull;
/**
* Test cases for CommonPluginDataSubscriber.
*/
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
public final class CommonPluginDataSubscriberTest {
private final String mockName1 = "MOCK_NAME_1";
@@ -50,13 +58,16 @@ public final class CommonPluginDataSubscriberTest {
private final String mockSelectorId2 = "MOCK_SELECTOR_ID_2";
private CommonPluginDataSubscriber commonPluginDataSubscriber;
+
+ @Mock
+ private ApplicationEventPublisher eventPublisher;
private BaseDataCache baseDataCache;
@BeforeEach
public void setup() {
ArrayList<PluginDataHandler> pluginDataHandlerList =
Lists.newArrayList();
- commonPluginDataSubscriber = new
CommonPluginDataSubscriber(pluginDataHandlerList);
+ commonPluginDataSubscriber = new
CommonPluginDataSubscriber(pluginDataHandlerList, eventPublisher);
baseDataCache = BaseDataCache.getInstance();
}
diff --git
a/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
b/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
index 772a646e6..efb413203 100644
---
a/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
+++
b/shenyu-web/src/main/java/org/apache/shenyu/web/handler/ShenyuWebHandler.java
@@ -20,10 +20,11 @@ package org.apache.shenyu.web.handler;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shenyu.common.config.ShenyuConfig;
import org.apache.shenyu.common.dto.PluginData;
+import org.apache.shenyu.common.enums.PluginHandlerEventEnums;
import org.apache.shenyu.plugin.api.ShenyuPlugin;
import org.apache.shenyu.plugin.api.ShenyuPluginChain;
import org.apache.shenyu.plugin.base.cache.BaseDataCache;
-import org.apache.shenyu.plugin.base.cache.SortPluginEvent;
+import org.apache.shenyu.plugin.base.cache.PluginHandlerEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
@@ -40,19 +41,25 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
/**
* This is web handler request starter.
*/
-public final class ShenyuWebHandler implements WebHandler,
ApplicationListener<SortPluginEvent> {
+public final class ShenyuWebHandler implements WebHandler,
ApplicationListener<PluginHandlerEvent> {
private static final Logger LOG =
LoggerFactory.getLogger(ShenyuWebHandler.class);
/**
* this filed can not set to be final, because we should copyOnWrite to
update plugins.
*/
- private List<ShenyuPlugin> plugins;
+ private final List<ShenyuPlugin> plugins;
+
+ /**
+ * source plugins, these plugins load from ShenyuPlugin, this filed can't
change.
+ */
+ private final List<ShenyuPlugin> sourcePlugins;
private final boolean scheduled;
@@ -65,7 +72,8 @@ public final class ShenyuWebHandler implements WebHandler,
ApplicationListener<S
* @param shenyuConfig plugins config
*/
public ShenyuWebHandler(final List<ShenyuPlugin> plugins, final
ShenyuConfig shenyuConfig) {
- this.plugins = plugins;
+ this.sourcePlugins = new ArrayList<>(plugins);
+ this.plugins = new CopyOnWriteArrayList<>(plugins);
ShenyuConfig.Scheduler config = shenyuConfig.getScheduler();
this.scheduled = config.getEnabled();
if (scheduled) {
@@ -101,40 +109,76 @@ public final class ShenyuWebHandler implements
WebHandler, ApplicationListener<S
if (CollectionUtils.isEmpty(extPlugins)) {
return;
}
- List<ShenyuPlugin> shenyuPlugins = extPlugins.stream()
+ final List<ShenyuPlugin> shenyuPlugins = extPlugins.stream()
.filter(e -> plugins.stream().noneMatch(plugin ->
plugin.named().equals(e.named())))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(shenyuPlugins)) {
shenyuPlugins.forEach(plugin -> LOG.info("shenyu auto add extends
plugins:{}", plugin.named()));
shenyuPlugins.addAll(plugins);
- this.plugins = sortPlugins(shenyuPlugins);
+ onSortedPlugins();
}
}
/**
- * listen sort plugin event and sort plugin.
+ * listen plugin handler event and handle plugin.
*
* @param event sort plugin event
*/
@Override
- public void onApplicationEvent(final SortPluginEvent event) {
- // copy a new one, or there will be concurrency problems
- this.plugins = sortPlugins(new ArrayList<>(plugins));
+ public void onApplicationEvent(final PluginHandlerEvent event) {
+ PluginHandlerEventEnums stateEnums = event.getPluginStateEnums();
+ PluginData pluginData = (PluginData) event.getSource();
+ switch (stateEnums) {
+ case ENABLED:
+ onPluginEnabled(pluginData);
+ break;
+ case DELETE:
+ case DISABLED:
+ // disable or removed plugin.
+ onPluginRemoved(pluginData);
+ break;
+ case SORTED:
+ // copy a new one, or there will be concurrency problems
+ onSortedPlugins();
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " +
event.getPluginStateEnums());
+ }
+ onSortedPlugins();
}
/**
* sort plugins.
*
- * @param list list of plugin
* @return sorted list
*/
- private List<ShenyuPlugin> sortPlugins(final List<ShenyuPlugin> list) {
- Map<String, Integer> pluginSortMap =
list.stream().collect(Collectors.toMap(ShenyuPlugin::named, plugin -> {
+ private void onSortedPlugins() {
+ Map<String, Integer> pluginSortMap =
this.plugins.stream().collect(Collectors.toMap(ShenyuPlugin::named, plugin -> {
PluginData pluginData =
BaseDataCache.getInstance().obtainPluginData(plugin.named());
return
Optional.ofNullable(pluginData).map(PluginData::getSort).orElse(plugin.getOrder());
}));
- list.sort(Comparator.comparingLong(plugin ->
pluginSortMap.get(plugin.named())));
- return list;
+ this.plugins.sort(Comparator.comparingLong(plugin ->
pluginSortMap.get(plugin.named())));
+ }
+
+ /**
+ * handle enabled plugins.
+ * @param pluginData plugin data
+ * @return enabled plugins
+ */
+ private void onPluginEnabled(final PluginData pluginData) {
+ LOG.info("shenyu use plugin:[{}]", pluginData.getName());
+ final List<ShenyuPlugin> enabledPlugins =
this.sourcePlugins.stream().filter(plugin ->
plugin.named().equals(pluginData.getName())
+ && pluginData.getEnabled()).collect(Collectors.toList());
+ enabledPlugins.removeAll(this.plugins);
+ this.plugins.addAll(enabledPlugins);
+ }
+
+ /**
+ * handle removed or disabled plugin.
+ * @param pluginData plugin data
+ */
+ private void onPluginRemoved(final PluginData pluginData) {
+ this.plugins.removeIf(plugin ->
plugin.named().equals(pluginData.getName()));
}
private static class DefaultShenyuPluginChain implements ShenyuPluginChain
{
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/controller/LocalPluginControllerTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/controller/LocalPluginControllerTest.java
index 5945dc8a1..b98e71db4 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/controller/LocalPluginControllerTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/controller/LocalPluginControllerTest.java
@@ -39,7 +39,11 @@ import
org.apache.shenyu.web.controller.LocalPluginController.SelectorRuleData;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+import org.springframework.context.ApplicationEventPublisher;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -61,6 +65,7 @@ import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.
* The type Plugin controller Test.
*/
@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
public final class LocalPluginControllerTest {
private PluginDataSubscriber subscriber;
@@ -69,10 +74,13 @@ public final class LocalPluginControllerTest {
private BaseDataCache baseDataCache;
+ @Mock
+ private ApplicationEventPublisher eventPublisher;
+
@BeforeEach
public void setup() {
ArrayList<PluginDataHandler> pluginDataHandlerList =
Lists.newArrayList();
- subscriber = new CommonPluginDataSubscriber(pluginDataHandlerList);
+ subscriber = new CommonPluginDataSubscriber(pluginDataHandlerList,
eventPublisher);
mockMvc = MockMvcBuilders.standaloneSetup(new
LocalPluginController(subscriber))
.build();
baseDataCache = BaseDataCache.getInstance();
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/handler/ShenyuWebHandlerTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/handler/ShenyuWebHandlerTest.java
index 6d2d211ef..8bd4e63e6 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/handler/ShenyuWebHandlerTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/handler/ShenyuWebHandlerTest.java
@@ -19,12 +19,21 @@ package org.apache.shenyu.web.handler;
import org.apache.shenyu.common.config.ShenyuConfig;
import org.apache.shenyu.common.constant.Constants;
+import org.apache.shenyu.common.dto.PluginData;
+import org.apache.shenyu.common.enums.PluginHandlerEventEnums;
import org.apache.shenyu.plugin.api.ShenyuPlugin;
+import org.apache.shenyu.plugin.api.ShenyuPluginChain;
import org.apache.shenyu.plugin.api.context.ShenyuContext;
+import org.apache.shenyu.plugin.base.cache.BaseDataCache;
+import org.apache.shenyu.plugin.base.cache.PluginHandlerEvent;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange;
+import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@@ -32,23 +41,31 @@ import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
-import static org.mockito.Mockito.mock;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
/**
* test for ShenyuWebHandler.
*
*/
+@ExtendWith(MockitoExtension.class)
public final class ShenyuWebHandlerTest {
+ @Mock
private ShenyuWebHandler shenyuWebHandler;
private final List<ShenyuPlugin> listPlugins = new ArrayList<>();
+ private final ShenyuPlugin plugin1 = new TestPlugin1();
+
+ private final ShenyuPlugin plugin2 = new TestPlugin2();
+
@BeforeEach
public void setUp() {
- final ShenyuPlugin plugins = mock(ShenyuPlugin.class);
- listPlugins.add(plugins);
+ listPlugins.add(plugin1);
+ listPlugins.add(plugin2);
shenyuWebHandler = new ShenyuWebHandler(listPlugins, new
ShenyuConfig());
}
@@ -62,4 +79,90 @@ public final class ShenyuWebHandlerTest {
Mono<Void> handle = shenyuWebHandler.handle(exchange);
assertNotNull(handle);
}
+
+ @Test
+ public void testOnApplicationEvent() {
+ PluginData pluginData1 = PluginData.builder().id("1")
+ .name("test-plugin1")
+ .enabled(true)
+ .config("config")
+ .role("test")
+ .sort(50)
+ .build();
+ PluginData pluginData2 = PluginData.builder().id("2")
+ .name("test-plugin2")
+ .enabled(false)
+ .config("config")
+ .role("test")
+ .sort(60)
+ .build();
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.ENABLED, pluginData1));
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.DISABLED, pluginData2));
+ List<ShenyuPlugin> plugins = (List<ShenyuPlugin>)
ReflectionTestUtils.getField(shenyuWebHandler, "plugins");
+ assertNotNull(plugins);
+ assertTrue(plugins.contains(plugin1) && !plugins.contains(plugin2));
+
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.ENABLED, pluginData1));
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.DELETE, pluginData2));
+ List<ShenyuPlugin> pluginDelete = (List<ShenyuPlugin>)
ReflectionTestUtils.getField(shenyuWebHandler, "plugins");
+ assertNotNull(pluginDelete);
+ assertTrue(pluginDelete.contains(plugin1) &&
!pluginDelete.contains(plugin2));
+
+ pluginData1.setSort(70);
+ pluginData2.setEnabled(true);
+ BaseDataCache.getInstance().cachePluginData(pluginData1);
+ BaseDataCache.getInstance().cachePluginData(pluginData2);
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.ENABLED, pluginData1));
+ shenyuWebHandler.onApplicationEvent(new
PluginHandlerEvent(PluginHandlerEventEnums.ENABLED, pluginData2));
+ List<ShenyuPlugin> pluginDataSorted = (List<ShenyuPlugin>)
ReflectionTestUtils.getField(shenyuWebHandler, "plugins");
+ assertNotNull(pluginDataSorted);
+ assertEquals(pluginDataSorted.get(0), plugin2);
+ assertEquals(pluginDataSorted.get(1), plugin1);
+ }
+
+ static class TestPlugin1 implements ShenyuPlugin {
+
+ @Override
+ public Mono<Void> execute(final ServerWebExchange exchange, final
ShenyuPluginChain chain) {
+ return chain.execute(exchange);
+ }
+
+ @Override
+ public int getOrder() {
+ return 1;
+ }
+
+ @Override
+ public String named() {
+ return "test-plugin1";
+ }
+
+ @Override
+ public boolean skip(final ServerWebExchange exchange) {
+ return ShenyuPlugin.super.skip(exchange);
+ }
+ }
+
+ static class TestPlugin2 implements ShenyuPlugin {
+
+ @Override
+ public Mono<Void> execute(final ServerWebExchange exchange, final
ShenyuPluginChain chain) {
+ return chain.execute(exchange);
+ }
+
+ @Override
+ public int getOrder() {
+ return 2;
+ }
+
+ @Override
+ public String named() {
+ return "test-plugin2";
+ }
+
+ @Override
+ public boolean skip(final ServerWebExchange exchange) {
+ return ShenyuPlugin.super.skip(exchange);
+ }
+ }
}