Skip to content

Commit 33ae7cb

Browse files
Adriano Ferreirakimchy
authored andcommitted
Adding test for edge cases of RestUtils.decodeQueryString()
When writing tests for the fix of decodeQueryString() to handle gracefully edge cases like: &a &a&b it arises the question of what behavior is desirable for these pathological cases (vs the regular p=v pairs). This change just skips them which is consonant to the preexisting code. To be thorough, we add tests for a bunch of edge cases, like: QUERY PARSED PARAMS ? {} ?& {} ?= { "": "" } ?a {} ?p=v&a { "p": "v" } ?p=v&a&p1=v1 { "p": "v", "p1": "v1" } ?a&b {}
1 parent a4dd37f commit 33ae7cb

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

modules/elasticsearch/src/test/java/org/elasticsearch/rest/util/RestUtilsTests.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,63 @@ public void testDecodeQueryString() {
6060
RestUtils.decodeQueryString(uri, -1, params);
6161
assertThat(params.size(), equalTo(0));
6262
}
63+
64+
@Test
65+
public void testDecodeQueryStringEdgeCases() {
66+
Map<String, String> params = newHashMap();
67+
68+
String uri = "something?";
69+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
70+
assertThat(params.size(), equalTo(0));
71+
72+
params.clear();
73+
uri = "something?&";
74+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
75+
assertThat(params.size(), equalTo(0));
76+
77+
params.clear();
78+
uri = "something?p=v&&p1=v1";
79+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
80+
assertThat(params.size(), equalTo(2));
81+
assertThat(params.get("p"), equalTo("v"));
82+
assertThat(params.get("p1"), equalTo("v1"));
83+
84+
params.clear();
85+
uri = "something?=";
86+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
87+
assertThat(params.size(), equalTo(1));
88+
assertThat(params.get(""), equalTo(""));
89+
90+
params.clear();
91+
uri = "something?&=";
92+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
93+
assertThat(params.size(), equalTo(1));
94+
assertThat(params.get(""), equalTo(""));
95+
96+
params.clear();
97+
uri = "something?a";
98+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
99+
assertThat(params.size(), equalTo(0));
100+
101+
params.clear();
102+
uri = "something?p=v&a";
103+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
104+
assertThat(params.size(), equalTo(1));
105+
assertThat(params.get("p"), equalTo("v"));
106+
107+
params.clear();
108+
uri = "something?p=v&a&p1=v1";
109+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
110+
assertThat(params.size(), equalTo(2));
111+
assertThat(params.get("p"), equalTo("v"));
112+
assertThat(params.get("p1"), equalTo("v1"));
113+
114+
params.clear();
115+
uri = "something?p=v&a&b&p1=v1";
116+
RestUtils.decodeQueryString(uri, uri.indexOf('?') + 1, params);
117+
assertThat(params.size(), equalTo(2));
118+
assertThat(params.get("p"), equalTo("v"));
119+
assertThat(params.get("p1"), equalTo("v1"));
120+
}
121+
63122
}

0 commit comments

Comments
 (0)