Skip to content

Commit f8df946

Browse files
committed
Strengthen testIncorrectHeaderHandling (#86886)
Enhances this test to cover more combinations of present/absent headers, and makes the fake REST request immutable to align it with the production implementation.
1 parent 63abdf8 commit f8df946

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

server/src/main/java/org/elasticsearch/http/AbstractHttpServerTransport.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -470,18 +470,18 @@ private RestRequest requestWithoutFailedHeader(
470470
Set<String> failedHeaderNames
471471
) {
472472
assert failedHeaderNames.size() > 0;
473-
HttpRequest httpRequestWithoutContentType = httpRequest;
473+
HttpRequest httpRequestWithoutHeader = httpRequest;
474474
for (String failedHeaderName : failedHeaderNames) {
475-
httpRequestWithoutContentType = httpRequestWithoutContentType.removeHeader(failedHeaderName);
475+
httpRequestWithoutHeader = httpRequestWithoutHeader.removeHeader(failedHeaderName);
476476
}
477477
try {
478-
return RestRequest.request(parserConfig, httpRequestWithoutContentType, httpChannel);
478+
return RestRequest.request(parserConfig, httpRequestWithoutHeader, httpChannel);
479479
} catch (final RestRequest.MediaTypeHeaderException e) {
480480
badRequestCause = ExceptionsHelper.useOrSuppress(badRequestCause, e);
481-
return requestWithoutFailedHeader(httpRequest, httpChannel, badRequestCause, e.getFailedHeaderNames());
481+
return requestWithoutFailedHeader(httpRequestWithoutHeader, httpChannel, badRequestCause, e.getFailedHeaderNames());
482482
} catch (final RestRequest.BadParameterException e) {
483483
badRequestCause.addSuppressed(e);
484-
return RestRequest.requestWithoutParameters(parserConfig, httpRequestWithoutContentType, httpChannel);
484+
return RestRequest.requestWithoutParameters(parserConfig, httpRequestWithoutHeader, httpChannel);
485485
}
486486
}
487487

server/src/test/java/org/elasticsearch/http/AbstractHttpServerTransportTests.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,10 @@ public void testIncorrectHeaderHandling() {
224224
try (AbstractHttpServerTransport transport = failureAssertingtHttpServerTransport(clusterSettings, Set.of("Accept"))) {
225225

226226
Map<String, List<String>> headers = new HashMap<>();
227-
headers.put("Accept", Collections.singletonList("incorrectheader"));
227+
headers.put("Accept", List.of("incorrectHeader"));
228+
if (randomBoolean()) {
229+
headers.put("Content-Type", List.of("alsoIncorrectHeader"));
230+
}
228231

229232
FakeRestRequest.FakeHttpRequest fakeHttpRequest = new FakeRestRequest.FakeHttpRequest(
230233
RestRequest.Method.GET,
@@ -237,8 +240,10 @@ public void testIncorrectHeaderHandling() {
237240
}
238241
try (AbstractHttpServerTransport transport = failureAssertingtHttpServerTransport(clusterSettings, Set.of("Content-Type"))) {
239242
Map<String, List<String>> headers = new HashMap<>();
240-
headers.put("Accept", Collections.singletonList("application/json"));
241-
headers.put("Content-Type", Collections.singletonList("incorrectheader"));
243+
if (randomBoolean()) {
244+
headers.put("Accept", List.of("application/json"));
245+
}
246+
headers.put("Content-Type", List.of("incorrectHeader"));
242247

243248
FakeRestRequest.FakeHttpRequest fakeHttpRequest = new FakeRestRequest.FakeHttpRequest(
244249
RestRequest.Method.GET,

test/framework/src/main/java/org/elasticsearch/test/rest/FakeRestRequest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,9 @@ public HttpVersion protocolVersion() {
106106

107107
@Override
108108
public HttpRequest removeHeader(String header) {
109-
headers.remove(header);
110-
return this;
109+
final var filteredHeaders = new HashMap<>(headers);
110+
filteredHeaders.remove(header);
111+
return new FakeHttpRequest(method, uri, content, filteredHeaders, inboundException);
111112
}
112113

113114
@Override

0 commit comments

Comments
 (0)