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,