Fix URLParam decode default value (#11983)
* Fix URLParam decode default value * Add test cases
This commit is contained in:
parent
77cbbcee3f
commit
f32da50a3b
|
|
@ -994,7 +994,13 @@ public class URLParam {
|
|||
Map<String, Map<String, String>> methodParameters = new HashMap<>(capacity);
|
||||
|
||||
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||
addParameter(keyBit, valueMap, extraParam, methodParameters, entry.getKey(), entry.getValue(), false);
|
||||
String key = entry.getKey();
|
||||
String value = entry.getValue();
|
||||
addParameter(keyBit, valueMap, extraParam, methodParameters, key, value, false);
|
||||
// compatible with lower versions registering "default." keys
|
||||
if (key.startsWith(DEFAULT_KEY_PREFIX)) {
|
||||
addParameter(keyBit, valueMap, extraParam, methodParameters, key.substring(DEFAULT_KEY_PREFIX.length()), value, true);
|
||||
}
|
||||
}
|
||||
return new URLParam(keyBit, valueMap, extraParam, methodParameters, rawParam);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
package org.apache.dubbo.common;
|
||||
|
||||
import org.apache.dubbo.common.url.component.ServiceConfigURL;
|
||||
import org.apache.dubbo.common.utils.NetUtils;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -47,6 +48,24 @@ class URLBuilderTest {
|
|||
assertThat(url2.getVersion(), equalTo("1"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefault() {
|
||||
ServiceConfigURL url1 = URLBuilder.from(URL.valueOf(""))
|
||||
.addParameter("timeout", "1234")
|
||||
.addParameter("default.timeout", "5678")
|
||||
.build();
|
||||
|
||||
assertThat(url1.getParameter("timeout"), equalTo("1234"));
|
||||
assertThat(url1.getParameter("default.timeout"), equalTo("5678"));
|
||||
|
||||
ServiceConfigURL url2 = URLBuilder.from(URL.valueOf(""))
|
||||
.addParameter("default.timeout", "5678")
|
||||
.build();
|
||||
|
||||
assertThat(url2.getParameter("timeout"), equalTo("5678"));
|
||||
assertThat(url2.getParameter("default.timeout"), equalTo("5678"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldSet() {
|
||||
URL url1 = URL.valueOf("dubbo://admin:hello1234@10.20.130.230:20880/context/path?version=1.0.0&application=morgan");
|
||||
|
|
@ -145,4 +164,4 @@ class URLBuilderTest {
|
|||
assertThat(url2.getParameter("version"), equalTo("1.0.0"));
|
||||
assertThat(url2.getParameter("absentKey"), equalTo("absentValue"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ class URLStrParserTest {
|
|||
testCases.add("dubbo://fe80:0:0:0:894:aeec:f37d:23e1%en0/path?abc=abc");
|
||||
testCases.add("dubbo://[fe80:0:0:0:894:aeec:f37d:23e1]:20880/path?abc=abc");
|
||||
testCases.add("nacos://192.168.1.1:8848?username=&password=");
|
||||
testCases.add("dubbo://127.0.0.1?timeout=1234&default.timeout=5678");
|
||||
testCases.add("dubbo://127.0.0.1?default.timeout=5678");
|
||||
|
||||
errorDecodedCases.add("dubbo:192.168.1.1");
|
||||
errorDecodedCases.add("://192.168.1.1");
|
||||
|
|
@ -81,4 +83,15 @@ class URLStrParserTest {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefault() {
|
||||
URL url1 = URLStrParser.parseEncodedStr(URL.encode("dubbo://127.0.0.1?timeout=1234&default.timeout=5678"));
|
||||
assertThat(url1.getParameter("timeout"), equalTo("1234"));
|
||||
assertThat(url1.getParameter("default.timeout"), equalTo("5678"));
|
||||
|
||||
URL url2 = URLStrParser.parseEncodedStr(URL.encode("dubbo://127.0.0.1?default.timeout=5678"));
|
||||
assertThat(url2.getParameter("timeout"), equalTo("5678"));
|
||||
assertThat(url2.getParameter("default.timeout"), equalTo("5678"));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,17 @@ class URLTest {
|
|||
assertEquals("org.apache.dubbo.config.RegistryConfig#0", url.getParameter("id"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefault() {
|
||||
URL url1 = URL.valueOf("dubbo://127.0.0.1:12345?timeout=1234&default.timeout=5678");
|
||||
assertEquals(1234, url1.getParameter("timeout", 0));
|
||||
assertEquals(5678, url1.getParameter("default.timeout", 0));
|
||||
|
||||
URL url2 = URL.valueOf("dubbo://127.0.0.1:12345?default.timeout=5678");
|
||||
assertEquals(5678, url2.getParameter("timeout", 0));
|
||||
assertEquals(5678, url2.getParameter("default.timeout", 0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_valueOf_noProtocolAndHost() throws Exception {
|
||||
URL url = URL.valueOf("/context/path?version=1.0.0&application=morgan");
|
||||
|
|
|
|||
|
|
@ -81,6 +81,33 @@ class URLParamTest {
|
|||
Assertions.assertEquals(urlParam3, URLParam.parse(urlParam3.getRawParam()));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDefault() {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("aaa", "aaa");
|
||||
map.put("bbb", "bbb");
|
||||
map.put("version", "2.0");
|
||||
map.put("timeout", "1234");
|
||||
map.put("default.timeout", "5678");
|
||||
|
||||
URLParam urlParam1 = URLParam.parse(map);
|
||||
Assertions.assertEquals("1234", urlParam1.getParameter("timeout"));
|
||||
Assertions.assertEquals("5678", urlParam1.getParameter("default.timeout"));
|
||||
|
||||
map.remove("timeout");
|
||||
URLParam urlParam2 = URLParam.parse(map);
|
||||
Assertions.assertEquals("5678", urlParam2.getParameter("timeout"));
|
||||
Assertions.assertEquals("5678", urlParam2.getParameter("default.timeout"));
|
||||
|
||||
URLParam urlParam3 = URLParam.parse("timeout=1234&default.timeout=5678");
|
||||
Assertions.assertEquals("1234", urlParam3.getParameter("timeout"));
|
||||
Assertions.assertEquals("5678", urlParam3.getParameter("default.timeout"));
|
||||
|
||||
URLParam urlParam4 = URLParam.parse("default.timeout=5678");
|
||||
Assertions.assertEquals("5678", urlParam4.getParameter("timeout"));
|
||||
Assertions.assertEquals("5678", urlParam4.getParameter("default.timeout"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetParameter() {
|
||||
URLParam urlParam1 = URLParam.parse("aaa=aaa&bbb&version=1.0&default.ccc=123");
|
||||
|
|
@ -270,4 +297,4 @@ class URLParamTest {
|
|||
Assertions.assertEquals("aaa",urlParam2.getAnyMethodParameter("method1"));
|
||||
Assertions.assertNull(urlParam2.getAnyMethodParameter("method2"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue