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/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new a13a935a3 [type:test] Improve the unit test coverage. (#3831)
a13a935a3 is described below
commit a13a935a3129f95f76c496a7f5dec80d3666a252
Author: yunlongn <[email protected]>
AuthorDate: Mon Aug 29 15:30:39 2022 +0800
[type:test] Improve the unit test coverage. (#3831)
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-web.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
* [type:test] Improve the unit test coverage of shenyu-loadbalancer.
---
.../tars/TarsServiceBeanPostProcessorTest.java | 11 ++
.../loadbalancer/factory/LoadBalancerFactory.java | 5 +-
.../cache/UpstreamCacheManagerTest.java | 82 ++++++++++++++
.../loadbalancer/cache/UpstreamCheckTaskTest.java | 1 +
.../cache/UpstreamWithSelectorIdTest.java | 49 +++++++++
.../shenyu/loadbalancer/entity/UpstreamTest.java | 79 +++++++++++++
.../loadbalancer/spi/HashLoadBalanceTest.java | 73 ++++++++++++
...alanceTest.java => RandomLoadBalancerTest.java} | 58 +++++-----
.../spi/RoundRobinLoadBalanceTest.java | 22 ++++
.../shenyu/web/loader/ShenyuPluginPathBuilder.java | 7 +-
.../ShenyuThreadPoolConfigurationTest.java | 7 +-
.../web/controller/LocalPluginControllerTest.java | 122 ++++++++++++++++++++-
.../apache/shenyu/web/filter/CrossFilterTest.java | 48 +++++++-
.../shenyu/web/filter/ExcludeFilterTest.java | 9 ++
.../shenyu/web/filter/FallbackFilterTest.java | 9 ++
.../shenyu/web/filter/FileSizeFilterTest.java | 43 ++++++++
.../apache/shenyu/web/filter/HealthFilterTest.java | 15 +++
.../ForwardedRemoteAddressResolverTest.java | 15 +++
.../shenyu/web/handler/GlobalErrorHandlerTest.java | 3 +
.../shenyu/web/handler/ShenyuWebHandlerTest.java | 21 +++-
.../shenyu/web/loader/ShenyuLoaderServiceTest.java | 79 ++++++++++++-
.../shenyu/web/loader/ShenyuPluginLoaderTest.java | 75 +++++++++++--
.../org/apache/shenyu/web/logo/ShenyuLogoTest.java | 1 +
23 files changed, 779 insertions(+), 55 deletions(-)
diff --git
a/shenyu-client/shenyu-client-tars/src/test/java/org/apache/shenyu/client/tars/TarsServiceBeanPostProcessorTest.java
b/shenyu-client/shenyu-client-tars/src/test/java/org/apache/shenyu/client/tars/TarsServiceBeanPostProcessorTest.java
index d4055cd7d..17bc19052 100644
---
a/shenyu-client/shenyu-client-tars/src/test/java/org/apache/shenyu/client/tars/TarsServiceBeanPostProcessorTest.java
+++
b/shenyu-client/shenyu-client-tars/src/test/java/org/apache/shenyu/client/tars/TarsServiceBeanPostProcessorTest.java
@@ -61,6 +61,8 @@ public final class TarsServiceBeanPostProcessorTest {
private final TarsDemoService2 tarsDemoService2 = new TarsDemoService2();
+ private final TarsDemoService3 tarsDemoService3 = new TarsDemoService3();
+
@Mock
private ApplicationContext applicationContext;
@@ -71,6 +73,7 @@ public final class TarsServiceBeanPostProcessorTest {
Map<String, Object> results = new LinkedHashMap();
results.put("tarsDemoService", tarsDemoService);
results.put("tarsDemoService2", tarsDemoService2);
+ results.put("tarsDemoService3", tarsDemoService3);
when(applicationContext.getBeansWithAnnotation(any())).thenReturn(results);
contextRefreshedEvent = new ContextRefreshedEvent(applicationContext);
@@ -136,4 +139,12 @@ public final class TarsServiceBeanPostProcessorTest {
return hello + "";
}
}
+
+ @ShenyuTarsService(serviceName = "testObj3")
+ @ShenyuTarsClient
+ static class TarsDemoService3 {
+ public String test(final String hello) {
+ return hello + "";
+ }
+ }
}
diff --git
a/shenyu-loadbalancer/src/main/java/org/apache/shenyu/loadbalancer/factory/LoadBalancerFactory.java
b/shenyu-loadbalancer/src/main/java/org/apache/shenyu/loadbalancer/factory/LoadBalancerFactory.java
index 2e7f21a50..bf1acd88c 100644
---
a/shenyu-loadbalancer/src/main/java/org/apache/shenyu/loadbalancer/factory/LoadBalancerFactory.java
+++
b/shenyu-loadbalancer/src/main/java/org/apache/shenyu/loadbalancer/factory/LoadBalancerFactory.java
@@ -25,7 +25,10 @@ import org.apache.shenyu.spi.ExtensionLoader;
/**
* The type Load balance Factory.
*/
-public class LoadBalancerFactory {
+public final class LoadBalancerFactory {
+
+ private LoadBalancerFactory() {
+ }
/**
* Selector upstream.
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCacheManagerTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCacheManagerTest.java
new file mode 100644
index 000000000..051f3b773
--- /dev/null
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCacheManagerTest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shenyu.loadbalancer.cache;
+
+import org.apache.shenyu.common.config.ShenyuConfig;
+import org.apache.shenyu.common.utils.Singleton;
+import org.apache.shenyu.loadbalancer.entity.Upstream;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Assertions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * The type UpstreamCacheManager check task test.
+ */
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+public class UpstreamCacheManagerTest {
+
+ private static final String SELECTOR_ID = "SELECTOR_ID";
+
+ @Test
+ @Order(1)
+ public void initUpstreamCacheManagerTest() throws InterruptedException {
+ final ShenyuConfig shenyuConfig = new ShenyuConfig();
+ shenyuConfig.getUpstreamCheck().setEnabled(true);
+ shenyuConfig.getUpstreamCheck().setPrintEnabled(true);
+ shenyuConfig.getUpstreamCheck().setPrintInterval(1);
+ Singleton.INST.single(ShenyuConfig.class, shenyuConfig);
+ Assertions.assertNotNull(UpstreamCacheManager.getInstance());
+ Thread.sleep(3);
+ }
+
+ @Test
+ @Order(2)
+ public void submitTest() {
+ final UpstreamCacheManager upstreamCacheManager =
UpstreamCacheManager.getInstance();
+ List<Upstream> upstreamList = new ArrayList<>(2);
+ upstreamCacheManager.submit(SELECTOR_ID, upstreamList);
+ upstreamList.add(Upstream.builder().url("url").status(true).build());
+ upstreamList.add(Upstream.builder().status(true).build());
+ upstreamCacheManager.submit(SELECTOR_ID, upstreamList);
+ // hit `existUpstream.stream().filter`
+ upstreamList.clear();
+ upstreamList.add(Upstream.builder().url("url2").status(true).build());
+ upstreamList.add(Upstream.builder().url("url").status(true).build());
+ upstreamCacheManager.submit(SELECTOR_ID, upstreamList);
+ }
+
+ @Test
+ @Order(3)
+ public void removeByKeyTest() {
+ final UpstreamCacheManager upstreamCacheManager =
UpstreamCacheManager.getInstance();
+ upstreamCacheManager.removeByKey(SELECTOR_ID);
+ }
+
+ @Test
+ @Order(4)
+ public void findUpstreamListBySelectorIdTest() {
+ final UpstreamCacheManager upstreamCacheManager =
UpstreamCacheManager.getInstance();
+
Assertions.assertNull(upstreamCacheManager.findUpstreamListBySelectorId(SELECTOR_ID));
+ }
+}
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCheckTaskTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCheckTaskTest.java
index 51c0a21cd..0c0bf9e12 100644
---
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCheckTaskTest.java
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamCheckTaskTest.java
@@ -89,6 +89,7 @@ public class UpstreamCheckTaskTest {
healthCheckTask.run();
Awaitility.await().pollDelay(1, TimeUnit.SECONDS).untilAsserted(() ->
assertFalse(healthCheckTask.getCheckStarted().get()));
assertTrue(healthCheckTask.getHealthyUpstream().get(selectorId1).size() > 0);
+ healthCheckTask.print();
}
/**
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamWithSelectorIdTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamWithSelectorIdTest.java
new file mode 100644
index 000000000..794026550
--- /dev/null
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/cache/UpstreamWithSelectorIdTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shenyu.loadbalancer.cache;
+
+import org.apache.shenyu.loadbalancer.entity.Upstream;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * The type UpstreamWithSelectorId check task test.
+ */
+public class UpstreamWithSelectorIdTest {
+
+ private static final String SELECTOR_ID = "selectorId";
+
+ @Test
+ public void initUpstreamCacheManagerTest() {
+ final UpstreamWithSelectorId upstream = new
UpstreamWithSelectorId(SELECTOR_ID, null);
+ Assertions.assertEquals(upstream, upstream);
+ final UpstreamWithSelectorId upstream2 = new
UpstreamWithSelectorId(SELECTOR_ID, null);
+ Assertions.assertEquals(upstream, upstream2);
+ upstream.setUpstream(null);
+ upstream.setSelectorId(null);
+ Assertions.assertTrue(upstream.hashCode() >= 0);
+ Assertions.assertNotNull(upstream.toString());
+ Assertions.assertNotEquals(upstream, upstream2);
+ Assertions.assertNotEquals(upstream, null);
+ Assertions.assertNotEquals(upstream, SELECTOR_ID);
+ final UpstreamWithSelectorId upstream3 = new
UpstreamWithSelectorId(SELECTOR_ID, Upstream.builder().build());
+ Assertions.assertNotEquals(upstream, upstream3);
+ final UpstreamWithSelectorId upstream4 = new
UpstreamWithSelectorId(null, Upstream.builder().build());
+ Assertions.assertNotEquals(upstream, upstream4);
+ }
+}
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/entity/UpstreamTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/entity/UpstreamTest.java
new file mode 100644
index 000000000..f9fa0ef39
--- /dev/null
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/entity/UpstreamTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shenyu.loadbalancer.entity;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * The type Upstream check task test.
+ */
+public class UpstreamTest {
+
+ @Test
+ public void upstreamTest() {
+ Upstream upstream = Upstream.builder()
+ .group("group")
+ .url("url")
+ .timestamp(1)
+ .warmup(1)
+ .version("version")
+ .weight(1)
+ .status(true)
+ .build();
+ upstream.setGroup("group");
+ upstream.setHealthy(true);
+ upstream.setUrl("url");
+ upstream.setLastHealthTimestamp(1L);
+ upstream.setStatus(true);
+ upstream.setLastUnhealthyTimestamp(1L);
+ upstream.setVersion("version");
+ Assertions.assertEquals(upstream.buildDomain(), "http://url");
+ Assertions.assertEquals(upstream.getGroup(), "group");
+ Assertions.assertNull(upstream.getProtocol());
+ Assertions.assertEquals(upstream.getLastHealthTimestamp(), 1L);
+ Assertions.assertEquals(upstream.getLastUnhealthyTimestamp(), 1L);
+ Assertions.assertEquals(upstream.getUrl(), "url");
+ Assertions.assertEquals(upstream.getWarmup(), 1);
+ Assertions.assertEquals(upstream.getWeight(), 1);
+ Assertions.assertEquals(upstream.getVersion(), "version");
+ Assertions.assertEquals(upstream.getTimestamp(), 1);
+ Assertions.assertTrue(upstream.isHealthy());
+ Assertions.assertTrue(upstream.isStatus());
+ Upstream upstream2 = Upstream.builder()
+ .protocol("https://")
+ .url("url")
+ .weight(1)
+ .status(true)
+ .build();
+ Assertions.assertEquals(upstream2.buildDomain(), "https://url");
+ Assertions.assertNotEquals(upstream, upstream2);
+ Assertions.assertNotEquals(upstream, null);
+ Assertions.assertNotEquals(upstream, "");
+ Assertions.assertEquals(upstream, upstream);
+ Upstream upstream3 = Upstream.builder()
+ .protocol("https://")
+ .url("url")
+ .weight(1)
+ .status(true)
+ .build();
+ Assertions.assertEquals(upstream2, upstream3);
+ Assertions.assertNotNull(upstream2.toString());
+ Assertions.assertTrue(upstream2.hashCode() >= 0);
+ }
+}
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/HashLoadBalanceTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/HashLoadBalanceTest.java
index 9fd1345f1..bd85b7a4a 100644
---
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/HashLoadBalanceTest.java
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/HashLoadBalanceTest.java
@@ -18,10 +18,15 @@
package org.apache.shenyu.loadbalancer.spi;
import org.apache.shenyu.loadbalancer.entity.Upstream;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.SortedMap;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -29,6 +34,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mockStatic;
/**
* The type Hash balance test.
@@ -37,6 +44,8 @@ public final class HashLoadBalanceTest {
private Method hash;
+ private List<Upstream> onlyOneList;
+
private List<Upstream> hashLoadBalancesOrdered;
private List<Upstream> hashLoadBalancesDisordered;
@@ -53,6 +62,12 @@ public final class HashLoadBalanceTest {
public void setUp() throws Exception {
this.hash = HashLoadBalancer.class.getDeclaredMethod("hash",
String.class);
this.hash.setAccessible(true);
+ this.onlyOneList = Stream.of(1)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .status(false)
+ .build())
+ .collect(Collectors.toList());
this.hashLoadBalancesOrdered = Stream.of(1, 2, 3)
.map(weight -> Upstream.builder()
.url("upstream-" + weight)
@@ -94,6 +109,46 @@ public final class HashLoadBalanceTest {
}
}
+ /**
+ * Hash load balance test.
+ */
+ @Test
+ public void onlyOneListTest() {
+ final String ip = "127.0.0.1";
+ final HashLoadBalancer hashLoadBalance = new HashLoadBalancer();
+ Assertions.assertNotNull(hashLoadBalance.select(onlyOneList, ip));
+
Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder().status(false).build()),
0);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .timestamp(System.currentTimeMillis() - 3L)
+ .warmup(4)
+ .weight(1)
+ .build()), 1);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .timestamp(System.currentTimeMillis() + 3L)
+ .warmup(4)
+ .weight(1)
+ .build()), 1);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .timestamp(System.currentTimeMillis() - 3L)
+ .warmup(4)
+ .weight(4)
+ .build()), 3);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .timestamp(System.currentTimeMillis() - 3L)
+ .warmup(1)
+ .weight(1)
+ .build()), 1);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .warmup(1)
+ .weight(0)
+ .build()), 0);
+ Assertions.assertEquals(hashLoadBalance.getWeight(Upstream.builder()
+ .warmup(0)
+ .weight(1)
+ .build()), 1);
+
+ }
+
/**
* Hash load balance test.
*/
@@ -101,12 +156,30 @@ public final class HashLoadBalanceTest {
public void hashLoadBalanceOrderedWeightTest() throws Exception {
final String ip = "127.0.0.1";
final HashLoadBalancer hashLoadBalance = new HashLoadBalancer();
+ Assertions.assertNull(hashLoadBalance.select(null, ip));
final Upstream upstream =
hashLoadBalance.select(hashLoadBalancesOrdered, ip);
final Long hashKey = Long.parseLong(hash.invoke(null, ip).toString());
final SortedMap<Long, Upstream> lastRing =
treeMapOrdered.tailMap(hashKey);
final Upstream assertUp = lastRing.get(lastRing.firstKey());
assertEquals(assertUp.getUrl(), upstream.getUrl());
+ }
+ @Test
+ public void selectTest() {
+ final String ip = "SHENYU-upstream-2-HASH-100";
+ final HashLoadBalancer hashLoadBalance = new HashLoadBalancer();
+ Assertions.assertNull(hashLoadBalance.select(null, ip));
+ final Upstream upstream =
hashLoadBalance.select(hashLoadBalancesOrdered, ip);
+ assertEquals(treeMapOrdered.firstEntry().getValue().getUrl(),
upstream.getUrl());
+ }
+
+ @Test
+ public void hashErrorTest() throws NoSuchAlgorithmException {
+ final String ip = "127.0.0.1";
+ MockedStatic<MessageDigest> messageDigestMockedStatic =
mockStatic(MessageDigest.class);
+ messageDigestMockedStatic.when((MockedStatic.Verification)
MessageDigest.getInstance("MD5")).thenThrow(NoSuchAlgorithmException.class);
+ assertThrows(InvocationTargetException.class, () -> hash.invoke(null,
ip));
+ messageDigestMockedStatic.close();
}
@Test
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalanceTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalancerTest.java
similarity index 60%
rename from
shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalanceTest.java
rename to
shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalancerTest.java
index 8ef15e4e7..b6c8ad979 100644
---
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalanceTest.java
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RandomLoadBalancerTest.java
@@ -18,10 +18,8 @@
package org.apache.shenyu.loadbalancer.spi;
import org.apache.shenyu.loadbalancer.entity.Upstream;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -30,36 +28,28 @@ import static
org.junit.jupiter.api.Assertions.assertNotNull;
/**
* The type random balance test.
*/
-public class RandomLoadBalanceTest {
+public class RandomLoadBalancerTest {
- private List<Upstream> randomLoadBalancesWeightDisordered;
-
- private List<Upstream> randomLoadBalancesWeightOrdered;
-
- private List<Upstream> randomLoadBalancesWeightReversed;
-
- @BeforeEach
- public void setUp() {
- this.randomLoadBalancesWeightDisordered = Stream.of(10, 50, 40)
- .map(weight -> Upstream.builder()
- .url("upstream-" + weight)
- .weight(weight)
- .build())
- .collect(Collectors.toList());
-
- this.randomLoadBalancesWeightOrdered = Stream.of(10, 40, 50)
+ @Test
+ public void randomLoadBalancesWeightEqualTest() {
+ final Upstream upstreamOrdered = new
RandomLoadBalancer().select(Stream.of(10, 10, 10)
.map(weight -> Upstream.builder()
.url("upstream-" + weight)
.weight(weight)
.build())
- .collect(Collectors.toList());
+ .collect(Collectors.toList()), "");
+ assertNotNull(upstreamOrdered);
+ }
- this.randomLoadBalancesWeightReversed = Stream.of(50, 40, 10)
+ @Test
+ public void randomLoadBalancesWeightZeroTest() {
+ final Upstream upstreamOrdered = new
RandomLoadBalancer().select(Stream.of(0, 0, 0)
.map(weight -> Upstream.builder()
.url("upstream-" + weight)
.weight(weight)
.build())
- .collect(Collectors.toList());
+ .collect(Collectors.toList()), "");
+ assertNotNull(upstreamOrdered);
}
/**
@@ -67,22 +57,34 @@ public class RandomLoadBalanceTest {
*/
@Test
public void randomLoadBalanceOrderedWeightTest() {
- final RandomLoadBalancer randomLoadBalancer = new RandomLoadBalancer();
- final Upstream upstreamOrdered =
randomLoadBalancer.select(randomLoadBalancesWeightOrdered, "");
+ final Upstream upstreamOrdered = new
RandomLoadBalancer().select(Stream.of(10, 40, 50)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .weight(weight)
+ .build())
+ .collect(Collectors.toList()), "");
assertNotNull(upstreamOrdered);
}
@Test
public void randomLoadBalanceDisOrderedWeightTest() {
- final RandomLoadBalancer randomLoadBalancer = new RandomLoadBalancer();
- final Upstream upstreamDisordered =
randomLoadBalancer.select(randomLoadBalancesWeightDisordered, "");
+ final Upstream upstreamDisordered = new
RandomLoadBalancer().select(Stream.of(10, 50, 40)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .weight(weight)
+ .build())
+ .collect(Collectors.toList()), "");
assertNotNull(upstreamDisordered);
}
@Test
public void randomLoadBalanceReversedWeightTest() {
- final RandomLoadBalancer randomLoadBalancer = new RandomLoadBalancer();
- final Upstream upstreamReversed =
randomLoadBalancer.select(randomLoadBalancesWeightReversed, "");
+ final Upstream upstreamReversed = new
RandomLoadBalancer().select(Stream.of(50, 40, 10)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .weight(weight)
+ .build())
+ .collect(Collectors.toList()), "");
assertNotNull(upstreamReversed);
}
}
diff --git
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RoundRobinLoadBalanceTest.java
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RoundRobinLoadBalanceTest.java
index 1ac8571a8..01af4dd61 100644
---
a/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RoundRobinLoadBalanceTest.java
+++
b/shenyu-loadbalancer/src/test/java/org/apache/shenyu/loadbalancer/spi/RoundRobinLoadBalanceTest.java
@@ -96,4 +96,26 @@ public final class RoundRobinLoadBalanceTest {
});
assertEquals(60, countMap.get("upstream-50").intValue());
}
+
+ @Test
+ public void roundRobinLoadBalanceTest() {
+ List<Upstream> upstreamList =
+ Stream.of(50, 30, 20)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .weight(weight)
+ .build())
+ .collect(Collectors.toList());
+ List<Upstream> upstreamList2 =
+ Stream.of(50, 40, 20)
+ .map(weight -> Upstream.builder()
+ .url("upstream-" + weight)
+ .weight(1)
+ .build())
+ .collect(Collectors.toList());
+
+ RoundRobinLoadBalancer roundRobinLoadBalancer = new
RoundRobinLoadBalancer();
+ roundRobinLoadBalancer.select(upstreamList, "");
+ roundRobinLoadBalancer.select(upstreamList2, "");
+ }
}
diff --git
a/shenyu-web/src/main/java/org/apache/shenyu/web/loader/ShenyuPluginPathBuilder.java
b/shenyu-web/src/main/java/org/apache/shenyu/web/loader/ShenyuPluginPathBuilder.java
index 5b7fa32ce..173f2b67e 100644
---
a/shenyu-web/src/main/java/org/apache/shenyu/web/loader/ShenyuPluginPathBuilder.java
+++
b/shenyu-web/src/main/java/org/apache/shenyu/web/loader/ShenyuPluginPathBuilder.java
@@ -27,11 +27,14 @@ import java.util.Optional;
* The type Shenyu plugin path builder.
*/
public final class ShenyuPluginPathBuilder {
-
+
private static final String PLUGIN_PATH = "plugin-ext";
private static final String DEFAULT_EXT_PLUGIN_PATH = "/ext-lib/";
-
+
+ private ShenyuPluginPathBuilder() {
+ }
+
/**
* Gets plugin file.
*
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/configuration/ShenyuThreadPoolConfigurationTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/configuration/ShenyuThreadPoolConfigurationTest.java
index e47b02b96..76e6d2ff4 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/configuration/ShenyuThreadPoolConfigurationTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/configuration/ShenyuThreadPoolConfigurationTest.java
@@ -24,6 +24,7 @@ import org.apache.shenyu.common.config.ShenyuConfig;
import org.apache.shenyu.common.constant.Constants;
import org.apache.shenyu.common.exception.ShenyuException;
import org.apache.shenyu.plugin.api.utils.SpringBeanUtils;
+import org.apache.shenyu.web.controller.TestObjectProvider;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.ObjectProvider;
@@ -35,7 +36,6 @@ import org.springframework.context.event.ContextClosedEvent;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -87,8 +87,9 @@ public class ShenyuThreadPoolConfigurationTest {
when(sharedPool.getMaximumPoolSize()).thenReturn(1);
when(sharedPool.getKeepAliveTime()).thenReturn(60L);
when(sharedPool.getPrefix()).thenReturn("TEST-");
- when(objectProvider.getIfAvailable(any())).thenReturn(new
MemorySafeTaskQueue<>(Constants.THE_256_MB));
-
assertNotNull(shenyuThreadPoolConfiguration.shenyuThreadPoolExecutor(shenyuConfig,
objectProvider));
+ when(objectProvider.getIfAvailable()).thenReturn(null);
+
assertNotNull(shenyuThreadPoolConfiguration.shenyuThreadPoolExecutor(shenyuConfig,
new TestObjectProvider<>(null)));
+
assertNotNull(shenyuThreadPoolConfiguration.shenyuThreadPoolExecutor(shenyuConfig,
new TestObjectProvider<>(new MemorySafeTaskQueue<>(Constants.THE_256_MB))));
}
@Test
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 435c639f8..1c6820a4c 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
@@ -52,6 +52,8 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -60,6 +62,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -126,7 +129,6 @@ public final class LocalPluginControllerTest {
@Test
public void testCleanPlugin() throws Exception {
final String testCleanPluginName = "testCleanPluginName";
- final String testCleanRuleName = "testCleanRuleName";
subscribePluginForTest(testCleanPluginName);
subscribeSelectorForTest(testCleanPluginName);
final MockHttpServletResponse response =
this.mockMvc.perform(MockMvcRequestBuilders.get("/shenyu/cleanPlugin")
@@ -191,6 +193,28 @@ public final class LocalPluginControllerTest {
final List<String> ruleIds =
list.stream().map(RuleData::getId).collect(Collectors.toList());
assertThat(ruleSelectorIds).contains(testSelectorId);
assertThat(ruleIds).contains(testId);
+
+ final Object result2 = this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/rule/findList")
+ .param("selectorId", testSelectorId))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(result).isInstanceOf(String.class);
+ @SuppressWarnings("UnstableApiUsage")
+ final List<RuleData> list2 = GsonUtils.getGson().fromJson((String)
result2, new TypeToken<List<RuleData>>() {
+ }.getType());
+ final List<String> ruleSelectorIds2 =
list2.stream().map(RuleData::getSelectorId).collect(Collectors.toList());
+ assertThat(ruleSelectorIds2).contains(testSelectorId);
+
+ final Object resultError = this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/rule/findList")
+ .param("selectorId", "testSelectorIdError")
+ .param("id", testId))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(resultError).isEqualTo("Error: can not find rule data by
selector id :testSelectorIdError");
}
@Test
@@ -213,8 +237,10 @@ public final class LocalPluginControllerTest {
@Test
public void testFindListSelector() throws Exception {
final String selectorPluginName = "testFindListSelector";
+ final String testFindListSelectorId = "testFindListSelectorId";
final SelectorData selectorData = new SelectorData();
selectorData.setPluginName(selectorPluginName);
+ selectorData.setId(testFindListSelectorId);
subscriber.onSelectorSubscribe(selectorData);
final Object result = this.mockMvc
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/selector/findList")
@@ -228,6 +254,26 @@ public final class LocalPluginControllerTest {
}.getType());
final List<String> idList =
list.stream().map(SelectorData::getPluginName).collect(Collectors.toList());
assertThat(idList).contains(selectorPluginName);
+
+ final Object resultError1 = this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/selector/findList")
+ .param("pluginName", "testFindListSelectorError"))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(resultError1).isEqualTo("Error: can not find selector data
by pluginName :testFindListSelectorError");
+
+ final Object result2 = this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/selector/findList")
+ .param("id", "testFindListSelectorId")
+ .param("pluginName", selectorPluginName))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ final List<SelectorData> list2 = GsonUtils.getGson().fromJson((String)
result2, new TypeToken<List<SelectorData>>() {
+ }.getType());
+ final List<String> selectorDataIds =
list2.stream().map(SelectorData::getId).collect(Collectors.toList());
+ assertThat(selectorDataIds).contains(testFindListSelectorId);
}
@Test
@@ -243,6 +289,14 @@ public final class LocalPluginControllerTest {
assertThat(result).isInstanceOf(String.class);
final PluginData pluginData = GsonUtils.getGson().fromJson((String)
result, PluginData.class);
assertThat(pluginData.getName()).isEqualTo(pluginName);
+
+ final Object resultErr = this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/findByName")
+ .param("name", "testFindByNamePluginError"))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(resultErr).isEqualTo("can not find this plugin :
testFindByNamePluginError");
}
@Test
@@ -258,6 +312,19 @@ public final class LocalPluginControllerTest {
.andExpect(status().isOk())
.andReturn();
assertThat(baseDataCache.obtainSelectorData(selectorPluginName)).isNotNull();
+
+ final String selectorPluginNameError = "testSaveSelectorError";
+ final SelectorData selectorDataError = new SelectorData();
+ selectorData.setPluginName(selectorPluginNameError);
+ final String jsonError = GsonUtils.getGson().toJson(selectorDataError);
+ final Object resultErr = this.mockMvc
+
.perform(MockMvcRequestBuilders.post("/shenyu/plugin/selector/saveOrUpdate")
+ .content(jsonError)
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(resultErr).isEqualTo("Error: please add pluginName!");
}
@Test
@@ -288,6 +355,35 @@ public final class LocalPluginControllerTest {
final List<RuleData> selectorId =
baseDataCache.obtainRuleData(testSelectorId);
assertThat(selectorId.get(0).getSelectorId()).isEqualTo(testSelectorId);
+
+ Object result = this.mockMvc
+
.perform(MockMvcRequestBuilders.post("/shenyu/plugin/rule/saveOrUpdate")
+ .content("{}")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andReturn()
+ .getAsyncResult();
+ assertThat(result).isEqualTo("Error: please add selectorId!");
+ }
+
+ @Test
+ public void testDeleteRule() throws Exception {
+ final String testSelectorId = "testSaveRuleId";
+ final String testRuleId = "ruleId";
+ final String pluginName = "pluginName";
+ final RuleData ruleData = createRuleData(testSelectorId, testRuleId);
+ subscriber.onRuleSubscribe(ruleData);
+ this.mockMvc
+
.perform(MockMvcRequestBuilders.get("/shenyu/plugin/rule/delete")
+ .param("selectorId", ruleData.getSelectorId())
+ .param("id", ruleData.getId())
+ .param("pluginName", pluginName)
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andReturn();
+
+ final List<RuleData> selectorId =
baseDataCache.obtainRuleData(testSelectorId);
+ Assertions.assertTrue(selectorId.isEmpty());
}
@Test
@@ -311,6 +407,7 @@ public final class LocalPluginControllerTest {
.andExpect(status().isOk())
.andReturn();
Assertions.assertNotNull(baseDataCache.obtainSelectorData(selectorRulesData.getPluginName()));
+ Assertions.assertEquals(selectorRulesData.getSelectorName(),
"selectorName");
}
private void subscribeRuleForTest(final String testSelectorId, final
String testId) {
@@ -349,6 +446,7 @@ public final class LocalPluginControllerTest {
SelectorRuleData selectorRuleData = new SelectorRuleData();
selectorRuleData.setPluginName(PluginEnum.DIVIDE.getName());
selectorRuleData.setSelectorHandler(JsonUtils.toJson(collect));
+ selectorRuleData.setSelectorName("selectorName");
List<ConditionData> dataList = Stream.of(1).map(weight -> {
ConditionData data = new ConditionData();
data.setParamType(ParamTypeEnum.URI.getName());
@@ -360,5 +458,27 @@ public final class LocalPluginControllerTest {
DivideRuleHandle divideRuleHandle = new DivideRuleHandle();
divideRuleHandle.setLoadBalance(LoadBalanceEnum.RANDOM.getName());
selectorRuleData.setRuleHandler(JsonUtils.toJson(divideRuleHandle));
+ Assertions.assertEquals(selectorRuleData.getSelectorName(),
"selectorName");
+ }
+
+ @Test
+ public void testBuildDefaultSelectorData() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+ Method buildDefaultSelectorData =
LocalPluginController.class.getDeclaredMethod("buildDefaultSelectorData",
SelectorData.class);
+ buildDefaultSelectorData.setAccessible(true);
+ LocalPluginController localPluginController =
mock(LocalPluginController.class);
+ SelectorData selectorData =
SelectorData.builder().id("id").name("name").sort(1)
+ .enabled(true)
+ .logged(true)
+ .build();
+ buildDefaultSelectorData.invoke(localPluginController, selectorData);
+ }
+
+ @Test
+ public void testBuildDefaultRuleData() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+ Method buildDefaultRuleData =
LocalPluginController.class.getDeclaredMethod("buildDefaultRuleData",
RuleData.class);
+ buildDefaultRuleData.setAccessible(true);
+ LocalPluginController localPluginController =
mock(LocalPluginController.class);
+
+ buildDefaultRuleData.invoke(localPluginController,
RuleData.builder().sort(1).enabled(true).loged(true).build());
}
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
index 960886867..df153019b 100644
--- a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
+++ b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
@@ -20,6 +20,8 @@ package org.apache.shenyu.web.filter;
import org.apache.shenyu.common.config.ShenyuConfig.CrossFilterConfig;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange;
import org.springframework.web.server.ServerWebExchange;
@@ -83,7 +85,7 @@ public final class CrossFilterTest {
public void testCorsWhitelist() {
ServerWebExchange exchange =
MockServerWebExchange.from(MockServerHttpRequest
.get("http://localhost:8080")
- .header("Origin", "a.apache.org")
+ .header("Origin", "http://a.apache.org")
.build());
WebFilterChain chainNormal = mock(WebFilterChain.class);
when(chainNormal.filter(exchange)).thenReturn(Mono.empty());
@@ -108,11 +110,55 @@ public final class CrossFilterTest {
StepVerifier.create(filter.filter(exchange, chainNormal))
.expectSubscription()
.verifyComplete();
+ allowedOriginConfig.setOrigins(new HashSet<String>() {
+ {
+ add("a.apache.org");
+ }
+ });
+ StepVerifier.create(new CrossFilter(filterConfig).filter(exchange,
chainNormal))
+ .expectSubscription()
+ .verifyComplete();
+
+ filterConfig.setAllowedAnyOrigin(true);
+ StepVerifier.create(new CrossFilter(filterConfig).filter(exchange,
chainNormal))
+ .expectSubscription()
+ .verifyComplete();
+ filterConfig.setAllowedOrigin(null);
+ StepVerifier.create(new CrossFilter(filterConfig).filter(exchange,
chainNormal))
+ .expectSubscription()
+ .verifyComplete();
+
+ filterConfig.setAllowedAnyOrigin(false);
+ allowedOriginConfig.setOrigins(new HashSet<String>() {
+ {
+ add("*");
+ }
+ });
+ allowedOriginConfig.setPrefixes(null);
+ filterConfig.setAllowedOrigin(allowedOriginConfig);
+ StepVerifier.create(new CrossFilter(filterConfig).filter(exchange,
chainNormal))
+ .expectSubscription()
+ .verifyComplete();
}
@Test
public void testOriginRegex() {
+ ServerWebExchange exchange =
MockServerWebExchange.from(MockServerHttpRequest
+ .get("http://localhost:8080")
+ .header("Origin", "http://abc.com")
+ .build());
+ ServerHttpResponse exchangeResponse = exchange.getResponse();
+ exchangeResponse.getHeaders().add(HttpHeaders.ACCESS_CONTROL_MAX_AGE,
"0");
+
exchangeResponse.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS,
"*");
+ WebFilterChain chainNoHeader = mock(WebFilterChain.class);
+ when(chainNoHeader.filter(exchange)).thenReturn(Mono.empty());
+ CrossFilterConfig crossFilterConfig = new CrossFilterConfig();
final String regex = "^http(|s)://(.*\\.|)abc.com$";
+ crossFilterConfig.getAllowedOrigin().setOriginRegex(regex);
+ CrossFilter filterNoHeader = new CrossFilter(crossFilterConfig);
+ StepVerifier.create(filterNoHeader.filter(exchange, chainNoHeader))
+ .expectSubscription()
+ .verifyComplete();
Assertions.assertTrue(Pattern.matches(regex,
"http://console.ada.abc.com"));
Assertions.assertTrue(Pattern.matches(regex,
"http://console.abc.com"));
Assertions.assertTrue(Pattern.matches(regex, "http://abc.com"));
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/ExcludeFilterTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/ExcludeFilterTest.java
index 6587d9145..0bbdf6534 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/ExcludeFilterTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/ExcludeFilterTest.java
@@ -72,4 +72,13 @@ public final class ExcludeFilterTest {
StepVerifier.create(filter).expectNext(Boolean.FALSE).verifyComplete();
}
+ @Test
+ public void testDoFilter() {
+ ServerWebExchange webExchange =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8080/"));
+ Mono<Void> filter = excludeFilter.doFilter(webExchange);
+ StepVerifier.create(filter).verifyComplete();
+ }
+
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FallbackFilterTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FallbackFilterTest.java
index f165632dc..af76f2895 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FallbackFilterTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FallbackFilterTest.java
@@ -81,4 +81,13 @@ public final class FallbackFilterTest {
StepVerifier.create(filter).expectNext(Boolean.FALSE).verifyComplete();
}
+ @Test
+ public void testDoFilter() {
+ ServerWebExchange webExchange =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8080/"));
+ Mono<Void> filter = fallbackFilter.doFilter(webExchange);
+ StepVerifier.create(filter).verifyComplete();
+ }
+
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FileSizeFilterTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FileSizeFilterTest.java
index c32320de1..70a6b045f 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FileSizeFilterTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/FileSizeFilterTest.java
@@ -19,11 +19,14 @@ package org.apache.shenyu.web.filter;
import org.apache.shenyu.plugin.api.result.ShenyuResult;
import org.apache.shenyu.plugin.api.utils.SpringBeanUtils;
+import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange;
import org.springframework.web.server.ServerWebExchange;
@@ -31,6 +34,9 @@ import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -70,8 +76,45 @@ public final class FileSizeFilterTest {
Mono<Void> voidMono = fileSizeFilter.filter(webExchange,
webFilterChain);
StepVerifier.create(voidMono).expectSubscription().verifyComplete();
+ final ServerWebExchange webExchangeTextPlain =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8080")
+ .contentType(MediaType.TEXT_PLAIN)
+ .contentLength(4)
+ .body("test"));
+ FileSizeFilter fileSizeFilterTextPlain = new FileSizeFilter(10);
+ Mono<Void> voidMonoTextPlain =
fileSizeFilterTextPlain.filter(webExchangeTextPlain, webFilterChain);
+
StepVerifier.create(voidMonoTextPlain).expectSubscription().verifyComplete();
+
fileSizeFilter = new FileSizeFilter(1);
voidMono = fileSizeFilter.filter(webExchange, webFilterChain);
StepVerifier.create(voidMono).expectSubscription().verifyComplete();
+
+ final ServerWebExchange webExchangeError =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8081")
+ .contentType(MediaType.MULTIPART_FORM_DATA)
+ .body("test"));
+ // hit `size.capacity() > BYTES_PER_MB * fileMaxSize`
+ FileSizeFilter fileSizeFilterError = new FileSizeFilter(-1);
+ Mono<Void> voidMonoError =
fileSizeFilterError.filter(webExchangeError, webFilterChain);
+
StepVerifier.create(voidMonoError).expectSubscription().verifyComplete();
+ }
+
+ @Test
+ public void testDecorate() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+
+ ServerWebExchange webExchangeTextPlain =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8080")
+ .contentType(MediaType.TEXT_PLAIN)
+ .contentLength(4)
+ .body("test"));
+ FileSizeFilter fileSizeFilterError = new FileSizeFilter(1);
+ Method declaredMethod =
FileSizeFilter.class.getDeclaredMethod("decorate", ServerWebExchange.class,
CachedBodyOutputMessage.class);
+ CachedBodyOutputMessage cachedBodyOutputMessage =
mock(CachedBodyOutputMessage.class);
+ declaredMethod.setAccessible(true);
+ ServerHttpRequestDecorator decorator = (ServerHttpRequestDecorator)
declaredMethod.invoke(fileSizeFilterError, webExchangeTextPlain,
cachedBodyOutputMessage);
+ Assertions.assertEquals(decorator.getBody(),
cachedBodyOutputMessage.getBody());
}
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/HealthFilterTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/HealthFilterTest.java
index 5e6b95a14..d5fc156e2 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/HealthFilterTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/HealthFilterTest.java
@@ -66,6 +66,12 @@ public final class HealthFilterTest {
StepVerifier.create(filter).expectNext(Boolean.TRUE).verifyComplete();
}
+ @Test
+ public void testPathNull() {
+ List<String> paths = new ArrayList<>();
+ new HealthFilter(paths);
+ }
+
@Test
public void testDoNotMatcher() {
ServerWebExchange webExchange =
@@ -75,4 +81,13 @@ public final class HealthFilterTest {
StepVerifier.create(filter).expectNext(Boolean.FALSE).verifyComplete();
}
+ @Test
+ public void testDoFilter() {
+ ServerWebExchange webExchange =
+ MockServerWebExchange.from(MockServerHttpRequest
+ .post("http://localhost:8080/"));
+ Mono<Void> filter = healthFilter.doFilter(webExchange);
+ StepVerifier.create(filter).verifyComplete();
+ }
+
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/forward/ForwardedRemoteAddressResolverTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/forward/ForwardedRemoteAddressResolverTest.java
index 27077d82d..d790d6712 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/forward/ForwardedRemoteAddressResolverTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/forward/ForwardedRemoteAddressResolverTest.java
@@ -20,12 +20,19 @@ package org.apache.shenyu.web.forward;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpRequest;
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 java.util.Collections;
+
+import static
org.apache.shenyu.web.forward.ForwardedRemoteAddressResolver.X_FORWARDED_FOR;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
/**
* Test cases for ForwardedRemoteAddressResolver.
@@ -74,6 +81,14 @@ public final class ForwardedRemoteAddressResolverTest {
instance.resolve(forwardExchange);
instance.resolve(multiForwardExchangeError);
instance.resolve(multiForwardExchange);
+
+ ServerWebExchange headerEmptyExchange = mock(ServerWebExchange.class);
+ ServerHttpRequest headerEmptyServerHttpRequest =
mock(ServerHttpRequest.class);
+ HttpHeaders headerEmptyHttpHeaders = mock(HttpHeaders.class);
+
when(headerEmptyExchange.getRequest()).thenReturn(headerEmptyServerHttpRequest);
+
when(headerEmptyServerHttpRequest.getHeaders()).thenReturn(headerEmptyHttpHeaders);
+
when(headerEmptyHttpHeaders.get(X_FORWARDED_FOR)).thenReturn(Collections.emptyList());
+ instance.resolve(headerEmptyExchange);
}
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/handler/GlobalErrorHandlerTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/handler/GlobalErrorHandlerTest.java
index 80f44c225..31d5f9a7b 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/handler/GlobalErrorHandlerTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/handler/GlobalErrorHandlerTest.java
@@ -30,8 +30,10 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.http.HttpStatus;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange;
+import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@@ -85,5 +87,6 @@ public final class GlobalErrorHandlerTest {
NullPointerException nullPointerException = new
NullPointerException("nullPointerException");
Mono<Void> response = globalErrorHandler.handle(webExchange,
nullPointerException);
assertNotNull(response);
+ assertNotNull(globalErrorHandler.handle(webExchange, new
ResponseStatusException(HttpStatus.BAD_REQUEST)));
}
}
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 d57291961..1cfe2ba7d 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
@@ -36,6 +36,7 @@ import
org.springframework.mock.web.server.MockServerWebExchange;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
import java.net.InetSocketAddress;
import java.util.ArrayList;
@@ -78,7 +79,7 @@ public final class ShenyuWebHandlerTest {
exchange.getAttributes().put(Constants.CONTEXT,
mock(ShenyuContext.class));
exchange.getAttributes().put(Constants.PARAM_TRANSFORM, "{key:value}");
Mono<Void> handle = shenyuWebHandler.handle(exchange);
- assertNotNull(handle);
+ StepVerifier.create(handle).expectSubscription().verifyComplete();
}
@Test
@@ -88,6 +89,22 @@ public final class ShenyuWebHandlerTest {
shenyuWebHandler.putExtPlugins(Collections.singletonList(new
TestPlugin3()));
}
+ @Test
+ public void scheduledEnableTest() {
+ final ServerWebExchange exchange =
MockServerWebExchange.from(MockServerHttpRequest.get("localhost")
+ .remoteAddress(new InetSocketAddress(8090))
+ .build());
+ ShenyuConfig shenyuConfig = new ShenyuConfig();
+ shenyuConfig.getScheduler().setEnabled(true);
+ ShenyuWebHandler shenyuWebHandler1 = new ShenyuWebHandler(listPlugins,
shenyuConfig);
+ Mono<Void> handle = shenyuWebHandler1.handle(exchange);
+ assertNotNull(handle);
+ shenyuConfig.getScheduler().setType("elastic");
+ ShenyuWebHandler shenyuWebHandler2 = new ShenyuWebHandler(listPlugins,
shenyuConfig);
+ Mono<Void> handle2 = shenyuWebHandler2.handle(exchange);
+ assertNotNull(handle2);
+ }
+
@Test
public void testOnApplicationEvent() {
PluginData pluginData1 = PluginData.builder().id("1")
@@ -173,7 +190,7 @@ public final class ShenyuWebHandlerTest {
@Override
public boolean skip(final ServerWebExchange exchange) {
- return ShenyuPlugin.super.skip(exchange);
+ return true;
}
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuLoaderServiceTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuLoaderServiceTest.java
index d10057879..7e7fe87a7 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuLoaderServiceTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuLoaderServiceTest.java
@@ -17,12 +17,35 @@
package org.apache.shenyu.web.loader;
+import com.google.common.collect.Lists;
import org.apache.shenyu.common.config.ShenyuConfig;
-import org.junit.Test;
+import org.apache.shenyu.common.exception.ShenyuException;
+import org.apache.shenyu.plugin.api.utils.SpringBeanUtils;
+import org.apache.shenyu.plugin.base.cache.CommonPluginDataSubscriber;
+import org.apache.shenyu.web.handler.ShenyuWebHandler;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import org.springframework.context.ApplicationContext;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.file.Path;
+import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.doThrow;
/**
* Test for ShenyuLoaderServiceTest.
@@ -31,14 +54,58 @@ import org.mockito.quality.Strictness;
@MockitoSettings(strictness = Strictness.LENIENT)
public class ShenyuLoaderServiceTest {
+ @TempDir
+ private static Path folder;
+
+ private Path path;
+
+ @BeforeEach
+ public void setUp() throws IOException, NoSuchFieldException,
IllegalAccessException {
+ Path jar = folder.resolve("plugin.jar");
+ path = jar.getParent();
+ try (FileOutputStream fos = new FileOutputStream(jar.toFile());
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ JarOutputStream jos = new JarOutputStream(bos)) {
+ String pluginClz = "public class DividePlugin {}";
+ jos.putNextEntry(new
ZipEntry("org.apache.shenyu.plugin.DividePlugin.class"));
+ jos.write(pluginClz.getBytes());
+ jos.closeEntry();
+ }
+
+ ApplicationContext mockApplication =
+ mock(ApplicationContext.class);
+ when(mockApplication.getBean("dividePlugin")).thenReturn(new Object());
+ when(mockApplication.containsBean("dividePlugin")).thenReturn(true);
+ SpringBeanUtils instance = SpringBeanUtils.getInstance();
+ instance.setApplicationContext(mockApplication);
+ }
+
@Test
- public void loaderExtPluginsTest() {
+ public void loaderExtPluginsTest() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException, NoSuchFieldException {
+ final ShenyuPluginLoader loader = ShenyuPluginLoader.getInstance();
+ final Field field = ShenyuPluginLoader.class.getDeclaredField("jars");
+ field.setAccessible(true);
+ field.set(loader, Lists.newArrayList());
+ final ShenyuWebHandler shenyuWebHandler = mock(ShenyuWebHandler.class);
+ final CommonPluginDataSubscriber commonPluginDataSubscriber =
mock(CommonPluginDataSubscriber.class);
final ShenyuConfig.ExtPlugin extPlugin = new ShenyuConfig.ExtPlugin();
- extPlugin.setEnabled(true);
- extPlugin.setScheduleDelay(0);
- extPlugin.setScheduleTime(2);
+ extPlugin.setEnabled(false);
final ShenyuConfig shenyuConfig = new ShenyuConfig();
shenyuConfig.setExtPlugin(extPlugin);
- new ShenyuLoaderService(null, null, shenyuConfig);
+ new ShenyuLoaderService(shenyuWebHandler, commonPluginDataSubscriber,
shenyuConfig);
+ extPlugin.setEnabled(true);
+ extPlugin.setPath(path.toString());
+ ShenyuLoaderService shenyuLoaderService = new
ShenyuLoaderService(shenyuWebHandler, commonPluginDataSubscriber, shenyuConfig);
+
+ final Method loaderExtPlugins =
ShenyuLoaderService.class.getDeclaredMethod("loaderExtPlugins");
+ loaderExtPlugins.setAccessible(true);
+ loaderExtPlugins.invoke(shenyuLoaderService);
+
+
doThrow(ShenyuException.class).when(shenyuWebHandler).putExtPlugins(any());
+ loaderExtPlugins.invoke(shenyuLoaderService);
+
+ extPlugin.setPath("test");
+ loaderExtPlugins.invoke(shenyuLoaderService);
+ ShenyuPluginLoader.getInstance().close();
}
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuPluginLoaderTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuPluginLoaderTest.java
index f8c1ed139..62b9ceaf3 100644
---
a/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuPluginLoaderTest.java
+++
b/shenyu-web/src/test/java/org/apache/shenyu/web/loader/ShenyuPluginLoaderTest.java
@@ -17,18 +17,30 @@
package org.apache.shenyu.web.loader;
+import com.google.common.collect.Lists;
import org.apache.shenyu.plugin.api.utils.SpringBeanUtils;
-import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.io.TempDir;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.List;
+import java.util.jar.Attributes;
import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
import static org.hamcrest.CoreMatchers.is;
@@ -36,19 +48,19 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
/**
* Test for ShenyuPluginLoader.
*/
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public final class ShenyuPluginLoaderTest {
-
+
@TempDir
private static Path folder;
private ShenyuPluginLoader shenyuPluginLoader;
-
+
private Path path;
@BeforeEach
@@ -56,17 +68,25 @@ public final class ShenyuPluginLoaderTest {
shenyuPluginLoader = ShenyuPluginLoader.getInstance();
Path jar = folder.resolve("plugin.jar");
path = jar.getParent();
- FileOutputStream fos = new FileOutputStream(jar.toFile());
- BufferedOutputStream bos = new BufferedOutputStream(fos);
- try (JarOutputStream jos = new JarOutputStream(bos)) {
+
+ try (FileOutputStream fos = new FileOutputStream(jar.toFile());
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+ JarOutputStream jos = new JarOutputStream(bos)) {
String pluginClz = "public class DividePlugin {}";
jos.putNextEntry(new
ZipEntry("org.apache.shenyu.plugin.DividePlugin.class"));
jos.write(pluginClz.getBytes());
+ jos.putNextEntry(new
ZipEntry("org.apache.shenyu.plugin.Plugin.class"));
+ jos.write(pluginClz.getBytes());
+ jos.putNextEntry(new
ZipEntry("org.apache.shenyu.plugin.DividePlugin"));
+ jos.write(pluginClz.getBytes());
+ jos.putNextEntry(new
ZipEntry("org/apache/shenyu/plugin/DividePlugin.class"));
+ jos.write(pluginClz.getBytes());
jos.closeEntry();
}
ApplicationContext mockApplication =
mock(ApplicationContext.class);
when(mockApplication.getBean("dividePlugin")).thenReturn(new Object());
+
when(mockApplication.getAutowireCapableBeanFactory()).thenReturn(mock(DefaultListableBeanFactory.class));
when(mockApplication.containsBean("dividePlugin")).thenReturn(true);
SpringBeanUtils instance = SpringBeanUtils.getInstance();
instance.setApplicationContext(mockApplication);
@@ -86,16 +106,49 @@ public final class ShenyuPluginLoaderTest {
}
@Test
- public void testGetPluginPathWithNoJar() throws IOException,
ClassNotFoundException, InstantiationException, IllegalAccessException {
+ public void testGetPluginPathWithNoJar() throws IOException {
List<ShenyuLoaderResult> pluginList =
shenyuPluginLoader.loadExtendPlugins("test");
assertThat(pluginList.size(), is(0));
}
-
+
@Test
- public void testGetPluginPathWithJar() throws IOException,
ClassNotFoundException, InstantiationException, IllegalAccessException {
- ShenyuPluginLoader loader = spy(shenyuPluginLoader);
+ public void testGetPluginPathWithJar() throws IOException,
NoSuchFieldException, IllegalAccessException {
+ ShenyuPluginLoader loader = ShenyuPluginLoader.getInstance();
+ Field field = ShenyuPluginLoader.class.getDeclaredField("jars");
+ field.setAccessible(true);
+ field.set(loader, Lists.newArrayList());
List<ShenyuLoaderResult> pluginList =
loader.loadExtendPlugins(path.toString());
assertThat(pluginList.size(), is(1));
+ Assertions.assertTrue(loader.findResources("").hasMoreElements());
+ loader.findResources("org.apache.shenyu.plugin.DividePlugin");
+
Assertions.assertNotNull(loader.findResource("org.apache.shenyu.plugin.DividePlugin"));
+ Assertions.assertNull(loader.findResource("DividePlugin"));
+
Assertions.assertNull(loader.findResource("org.apache.shenyu.plugin.Plugin"));
loader.close();
}
+
+ @Test
+ public void testGetOrCreateSpringBean() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+ Method getOrCreateSpringBean =
ShenyuPluginLoader.class.getDeclaredMethod("getOrCreateSpringBean",
String.class);
+ getOrCreateSpringBean.setAccessible(true);
+ getOrCreateSpringBean.invoke(ShenyuPluginLoader.getInstance(),
"org.apache.shenyu.web.loader.ShenyuPluginLoaderTest$TestComponent");
+ getOrCreateSpringBean.invoke(ShenyuPluginLoader.getInstance(),
"org.apache.shenyu.web.loader.ShenyuPluginLoaderTest$TestService");
+ }
+
+ @Test
+ public void testDefinePackageInternal() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException, IOException {
+ Method definePackageInternal =
ShenyuPluginLoader.class.getDeclaredMethod("definePackageInternal",
String.class, Manifest.class);
+ definePackageInternal.setAccessible(true);
+ Manifest manifest = mock(Manifest.class);
+ when(manifest.getMainAttributes()).thenReturn(mock(Attributes.class));
+ definePackageInternal.invoke(ShenyuPluginLoader.getInstance(),
"org.apache.shenyu.plugin.DividePlugin", manifest);
+ }
+
+ @Component
+ public static class TestComponent {
+ }
+
+ @Service
+ public static class TestService {
+ }
}
diff --git
a/shenyu-web/src/test/java/org/apache/shenyu/web/logo/ShenyuLogoTest.java
b/shenyu-web/src/test/java/org/apache/shenyu/web/logo/ShenyuLogoTest.java
index 6114d1e05..d72463c96 100644
--- a/shenyu-web/src/test/java/org/apache/shenyu/web/logo/ShenyuLogoTest.java
+++ b/shenyu-web/src/test/java/org/apache/shenyu/web/logo/ShenyuLogoTest.java
@@ -51,6 +51,7 @@ public final class ShenyuLogoTest {
ConfigurableEnvironment environment = new MockEnvironment();
ApplicationEnvironmentPreparedEvent event = new
ApplicationEnvironmentPreparedEvent(null, application, null, environment);
shenyuLogo.onApplicationEvent(event);
+ shenyuLogo.onApplicationEvent(event);
Field field = shenyuLogo.getClass().getDeclaredField("ALREADY_LOG");
field.setAccessible(true);
AtomicBoolean atomicBoolean = (AtomicBoolean) field.get(shenyuLogo);