This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 4b2a2af  Fix ut in MeshRuleRouterTest (#9473)
4b2a2af is described below

commit 4b2a2afb8901469eaeb4448c04b98b311432fffa
Author: Albumen Kevin <[email protected]>
AuthorDate: Thu Dec 23 13:25:05 2021 +0800

    Fix ut in MeshRuleRouterTest (#9473)
---
 .../cluster/router/mesh/route/MeshRuleRouter.java  |  5 ++-
 .../router/mesh/route/MeshRuleRouterTest.java      | 52 +++++++++++-----------
 2 files changed, 30 insertions(+), 27 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
index 59168b5..a2c337a 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
@@ -218,7 +218,7 @@ public abstract class MeshRuleRouter<T> extends 
AbstractStateRouter<T> implement
         do {
             BitList<Invoker<T>> result = 
meshRuleCache.getSubsetInvokers(appName, subset);
 
-            if (CollectionUtils.isNotEmpty(result) && 
!availableInvokers.and(result).isEmpty()) {
+            if (CollectionUtils.isNotEmpty(result) && 
!availableInvokers.clone().and(result).isEmpty()) {
                 return subset;
             }
 
@@ -229,6 +229,9 @@ public abstract class MeshRuleRouter<T> extends 
AbstractStateRouter<T> implement
             }
             dubboDestination = dubboRouteDestination.getDestination();
 
+            if (dubboDestination == null) {
+                break;
+            }
             subset = dubboDestination.getSubset();
         } while (true);
 
diff --git 
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
 
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
index 5fde444..feaff0b 100644
--- 
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
+++ 
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouterTest.java
@@ -264,8 +264,8 @@ public class MeshRuleRouterTest {
     public void testRoute1() {
         StandardMeshRuleRouter<Object> meshRuleRouter = new 
StandardMeshRuleRouter<>(url);
         BitList<Invoker<Object>> invokers = new 
BitList<>(Arrays.asList(createInvoker(""), createInvoker("unknown"), 
createInvoker("app1")));
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, null, 
false).getResult());
-        assertEquals("MeshRuleCache has not been built. Skip route.", 
meshRuleRouter.route(invokers, null, null, true).getMessage());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, 
null, false).getResult());
+        assertEquals("MeshRuleCache has not been built. Skip route.", 
meshRuleRouter.route(invokers.clone(), null, null, true).getMessage());
     }
 
     @Test
@@ -292,21 +292,21 @@ public class MeshRuleRouterTest {
 
         rpcInvocation.setServiceName("ccc");
         rpcInvocation.setAttachment("trafficLabel", "xxx");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(isolation, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
-        assertEquals("Match App: app1 Subset: isolation ", 
meshRuleRouter.route(invokers, null, rpcInvocation, true).getMessage());
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(isolation, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals("Match App: app1 Subset: isolation ", 
meshRuleRouter.route(invokers.clone(), null, rpcInvocation, true).getMessage());
 
         rpcInvocation.setAttachment("trafficLabel", "testing-trunk");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(testingTrunk, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(testingTrunk, meshRuleRouter.route(invokers.clone(), 
null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", null);
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setServiceName("aaa");
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult());
-        assertEquals("Empty protection after routed.", 
meshRuleRouter.route(invokers, null, rpcInvocation, true).getMessage());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult());
+        assertEquals("Empty protection after routed.", 
meshRuleRouter.route(invokers.clone(), null, rpcInvocation, true).getMessage());
 
         rules = new LinkedList<>();
         rules.add(yaml.load(rule1));
@@ -315,23 +315,23 @@ public class MeshRuleRouterTest {
 
         rpcInvocation.setServiceName("ccc");
         rpcInvocation.setAttachment("trafficLabel", "xxx");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(isolation, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(isolation, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", "testing-trunk");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(testingTrunk, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(testingTrunk, meshRuleRouter.route(invokers.clone(), 
null, rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel", "testing");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setServiceName("aaa");
-        assertEquals(1, meshRuleRouter.route(invokers, null, rpcInvocation, 
false).getResult().size());
-        assertEquals(testing, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+        assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+        assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
 
         rpcInvocation.setAttachment("trafficLabel",null);
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult());
 
         rules = new LinkedList<>();
         rules.add(yaml.load(rule1));
@@ -343,7 +343,7 @@ public class MeshRuleRouterTest {
         int testingCount = 0;
         int isolationCount = 0;
         for (int i = 0; i < 1000; i++) {
-            BitList<Invoker<Object>> result = meshRuleRouter.route(invokers, 
null, rpcInvocation, false).getResult();
+            BitList<Invoker<Object>> result = 
meshRuleRouter.route(invokers.clone(), null, rpcInvocation, false).getResult();
             assertEquals(1, result.size());
             if (result.contains(testing)) {
                 testingCount++;
@@ -355,15 +355,15 @@ public class MeshRuleRouterTest {
 
         invokers.removeAll(Arrays.asList(isolation, testingTrunk));
         for (int i = 0; i < 1000; i++) {
-            assertEquals(1, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().size());
-            assertEquals(testing, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+            assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+            assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
         }
 
         meshRuleRouter.notify(invokers);
 
         for (int i = 0; i < 1000; i++) {
-            assertEquals(1, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().size());
-            assertEquals(testing, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult().get(0));
+            assertEquals(1, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().size());
+            assertEquals(testing, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult().get(0));
         }
 
         Invoker<Object> mock = 
createInvoker(Collections.singletonMap("env-sign", "mock"));
@@ -371,7 +371,7 @@ public class MeshRuleRouterTest {
 
         meshRuleRouter.notify(invokers);
         invokers.removeAll(Arrays.asList(isolation, testingTrunk, testing));
-        assertEquals(invokers, meshRuleRouter.route(invokers, null, 
rpcInvocation, false).getResult());
+        assertEquals(invokers, meshRuleRouter.route(invokers.clone(), null, 
rpcInvocation, false).getResult());
 
     }
 }

Reply via email to