You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/11/07 08:35:44 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2719]route configuration caseInsensitve meaning is wrong (#3455)

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new c59a4a8bf [SCB-2719]route configuration caseInsensitve meaning is wrong (#3455)
c59a4a8bf is described below

commit c59a4a8bf38a74e011458a45317fe4d7591b9a55
Author: liubao68 <bi...@qq.com>
AuthorDate: Mon Nov 7 16:35:38 2022 +0800

    [SCB-2719]route configuration caseInsensitve meaning is wrong (#3455)
---
 .../servicecomb/router/model/HeaderRule.java       |  12 +-
 .../RouterDistributorDynamicConfig2Test.java       | 134 ++++++++++++++++++++-
 2 files changed, 134 insertions(+), 12 deletions(-)

diff --git a/governance/src/main/java/org/apache/servicecomb/router/model/HeaderRule.java b/governance/src/main/java/org/apache/servicecomb/router/model/HeaderRule.java
index 077baf730..931fcee22 100644
--- a/governance/src/main/java/org/apache/servicecomb/router/model/HeaderRule.java
+++ b/governance/src/main/java/org/apache/servicecomb/router/model/HeaderRule.java
@@ -30,11 +30,7 @@ public class HeaderRule {
 
   private String regex;
 
-  /**
-   * false distinct
-   * true Ignore
-   */
-  private Boolean caseInsensitive = false;
+  private boolean caseInsensitive = true;
 
   private String exact;
 
@@ -49,7 +45,7 @@ public class HeaderRule {
       throw new RouterIllegalParamException(
           "route management regex and exact can not br null at same time.");
     }
-    if (!caseInsensitive) {
+    if (caseInsensitive) {
       str = str.toLowerCase();
       exact = exact == null ? null : exact.toLowerCase();
       regex = regex == null ? null : regex.toLowerCase();
@@ -76,11 +72,11 @@ public class HeaderRule {
     this.regex = regex;
   }
 
-  public Boolean getCaseInsensitive() {
+  public boolean isCaseInsensitive() {
     return caseInsensitive;
   }
 
-  public void setCaseInsensitive(Boolean caseInsensitive) {
+  public void setCaseInsensitive(boolean caseInsensitive) {
     this.caseInsensitive = caseInsensitive;
   }
 
diff --git a/governance/src/test/java/org/apache/servicecomb/router/RouterDistributorDynamicConfig2Test.java b/governance/src/test/java/org/apache/servicecomb/router/RouterDistributorDynamicConfig2Test.java
index beb5bf4f3..f3f36e453 100644
--- a/governance/src/test/java/org/apache/servicecomb/router/RouterDistributorDynamicConfig2Test.java
+++ b/governance/src/test/java/org/apache/servicecomb/router/RouterDistributorDynamicConfig2Test.java
@@ -45,6 +45,8 @@ import org.springframework.test.context.junit4.SpringRunner;
 public class RouterDistributorDynamicConfig2Test {
   private static final String TARGET_SERVICE_NAME = "test_server";
 
+  public static final String CONFIG_KEY = RouterRuleCache.ROUTE_RULE_PREFIX + TARGET_SERVICE_NAME;
+
   private static final String RULE_STRING = ""
       + "      - precedence: 2\n"
       + "        route:\n"
@@ -53,10 +55,10 @@ public class RouterDistributorDynamicConfig2Test {
       + "              version: 2.0\n"
       + "      - precedence: 1\n"
       + "        match:\n"
-      + "          headers:          #header匹配\n"
+      + "          headers:\n"
       + "            appId:\n"
       + "              regex: 01\n"
-      + "              caseInsensitive: false # 是否区分大小写,默认为false,区分大小写\n"
+      + "              caseInsensitive: false\n"
       + "            userId:\n"
       + "              exact: 01\n"
       + "        route:\n"
@@ -108,10 +110,14 @@ public class RouterDistributorDynamicConfig2Test {
           }
         });
 
-    dynamicValues.put(RouterRuleCache.ROUTE_RULE_PREFIX + TARGET_SERVICE_NAME, RULE_STRING);
+    dynamicValues.put(CONFIG_KEY, RULE_STRING);
+
+    postConfigurationChangedEvent();
+  }
 
+  private void postConfigurationChangedEvent() {
     Set<String> changedKeys = new HashSet<>();
-    changedKeys.add(RouterRuleCache.ROUTE_RULE_PREFIX + TARGET_SERVICE_NAME);
+    changedKeys.add(CONFIG_KEY);
     GovernanceConfigurationChangedEvent newEvent = new GovernanceConfigurationChangedEvent(changedKeys);
     GovernanceEventManager.post(newEvent);
   }
@@ -135,6 +141,126 @@ public class RouterDistributorDynamicConfig2Test {
     Assertions.assertEquals("01", resultServerList.get(0).getId());
   }
 
+  @Test
+  public void testCaseSensitiveNotMatch() {
+    String rule = ""
+        + "      - precedence: 1\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 2.0\n"
+        + "      - precedence: 2\n"
+        + "        match:\n"
+        + "          headers:\n"
+        + "            userId:\n"
+        + "              exact: user01\n"
+        + "              caseInsensitive: false\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 1.0\n";
+    dynamicValues.put(CONFIG_KEY, rule);
+    postConfigurationChangedEvent();
+
+    Map<String, String> headers = new HashMap<>();
+    headers.put("userId", "User01");
+
+    List<ServiceIns> serverList = new ArrayList<>();
+    ServiceIns ins1 = new ServiceIns("01", TARGET_SERVICE_NAME);
+    ins1.setVersion("2.0");
+    ServiceIns ins2 = new ServiceIns("02", TARGET_SERVICE_NAME);
+    ins2.setVersion("1.0");
+    serverList.add(ins1);
+    serverList.add(ins2);
+
+    List<ServiceIns> resultServerList = mainFilter(serverList, headers);
+    Assertions.assertEquals(1, resultServerList.size());
+    Assertions.assertEquals("01", resultServerList.get(0).getId());
+    Assertions.assertEquals("2.0", resultServerList.get(0).getVersion());
+  }
+
+  @Test
+  public void testNoneMatch() {
+    String rule = ""
+        + "      - precedence: 1\n"
+        + "        match:\n"
+        + "          headers:\n"
+        + "            userId:\n"
+        + "              regex: user02\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 2.0\n"
+        + "      - precedence: 2\n"
+        + "        match:\n"
+        + "          headers:\n"
+        + "            userId:\n"
+        + "              exact: user01\n"
+        + "              caseInsensitive: false\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 1.0\n";
+    dynamicValues.put(CONFIG_KEY, rule);
+    postConfigurationChangedEvent();
+
+    Map<String, String> headers = new HashMap<>();
+    headers.put("userId", "User01");
+    headers.put("appId", "App01");
+
+    List<ServiceIns> serverList = new ArrayList<>();
+    ServiceIns ins1 = new ServiceIns("01", TARGET_SERVICE_NAME);
+    ins1.setVersion("2.0");
+    ServiceIns ins2 = new ServiceIns("02", TARGET_SERVICE_NAME);
+    ins2.setVersion("1.0");
+    serverList.add(ins1);
+    serverList.add(ins2);
+
+    List<ServiceIns> resultServerList = mainFilter(serverList, headers);
+    Assertions.assertEquals(2, resultServerList.size());
+  }
+
+  @Test
+  public void testOneMatchButNoInstance() {
+    String rule = ""
+        + "      - precedence: 1\n"
+        + "        match:\n"
+        + "          headers:\n"
+        + "            appId:\n"
+        + "              regex: app02\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 2.0\n"
+        + "      - precedence: 2\n"
+        + "        match:\n"
+        + "          headers:\n"
+        + "            userId:\n"
+        + "              exact: user01\n"
+        + "              caseInsensitive: false\n"
+        + "        route:\n"
+        + "          - weight: 100\n"
+        + "            tags:\n"
+        + "              version: 1.0\n";
+    dynamicValues.put(CONFIG_KEY, rule);
+    postConfigurationChangedEvent();
+
+    Map<String, String> headers = new HashMap<>();
+    headers.put("userId", "user01");
+    headers.put("appId", "app02");
+
+    List<ServiceIns> serverList = new ArrayList<>();
+    ServiceIns ins1 = new ServiceIns("01", TARGET_SERVICE_NAME);
+    ins1.setVersion("1.0");
+    ServiceIns ins2 = new ServiceIns("02", TARGET_SERVICE_NAME);
+    ins2.setVersion("1.0");
+    serverList.add(ins1);
+    serverList.add(ins2);
+
+    List<ServiceIns> resultServerList = mainFilter(serverList, headers);
+    Assertions.assertEquals(2, resultServerList.size());
+  }
+
   private List<ServiceIns> mainFilter(List<ServiceIns> serverList, Map<String, String> headers) {
     return routerFilter
         .getFilteredListOfServers(serverList, TARGET_SERVICE_NAME, headers,