Skip to content

Commit 7f73856

Browse files
committed
fix #1928 bad auth response misses status code
1 parent 6f07a55 commit 7f73856

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

src/Elasticsearch.Net/Transport/Pipeline/RequestPipeline.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,17 @@ public void BadResponse<TReturn>(ref ElasticsearchResponse<TReturn> response, Re
467467

468468
if (response == null)
469469
{
470-
response = new ResponseBuilder<TReturn>(data) { Exception = clientException }.ToResponse();
470+
response = new ResponseBuilder<TReturn>(data)
471+
{
472+
StatusCode = callDetails?.HttpStatusCode,
473+
Exception = clientException
474+
}.ToResponse();
471475
}
476+
if (callDetails?.ResponseBodyInBytes != null && response.ResponseBodyInBytes == null)
477+
response.ResponseBodyInBytes = callDetails.ResponseBodyInBytes;
478+
479+
if (callDetails?.ServerError != null && response.ServerError == null)
480+
response.ServerError = callDetails.ServerError;
472481

473482
response.AuditTrail = this.AuditTrail;
474483
}

src/Tests/ClientConcepts/ConnectionPooling/Exceptions/UnrecoverableExceptions.doc.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ [U] public async Task BadAuthenticationHtmlResponseIsIgnored()
8989
(e) =>
9090
{
9191
e.FailureReason.Should().Be(PipelineFailure.BadAuthentication);
92+
e.Response.HttpStatusCode.Should().Be(401);
9293
e.Response.ResponseBodyInBytes.Should().BeNull();
9394
}
9495
);
@@ -112,6 +113,7 @@ [U] public async Task BadAuthenticationHtmlResponseStillExposedWhenUsingDisableD
112113
(e) =>
113114
{
114115
e.FailureReason.Should().Be(PipelineFailure.BadAuthentication);
116+
e.Response.HttpStatusCode.Should().Be(401);
115117
e.Response.ResponseBodyInBytes.Should().NotBeNull();
116118
var responseString = Encoding.UTF8.GetString(e.Response.ResponseBodyInBytes);
117119
responseString.Should().Contain("nginx/");
@@ -142,6 +144,7 @@ [U] public async Task BadAuthOnGetClientCallDoesNotThrowSerializationException()
142144
(e) =>
143145
{
144146
e.FailureReason.Should().Be(PipelineFailure.BadAuthentication);
147+
e.Response.HttpStatusCode.Should().Be(401);
145148
e.Response.ResponseBodyInBytes.Should().NotBeNull();
146149
var responseString = Encoding.UTF8.GetString(e.Response.ResponseBodyInBytes);
147150
responseString.Should().Contain("nginx/");

src/Tests/Reproduce/GithubIssue1901.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,21 @@ private class Example
3030
<!-- a padding to disable MSIE and Chrome friendly error page -->
3131
<!-- a padding to disable MSIE and Chrome friendly error page -->";
3232

33-
[U]
34-
public async Task BadAuthResponseDoesNotThrowExceptionWhenAttemptingToDeserializeResponse()
33+
[U] public async Task BadAuthResponseDoesNotThrowExceptionWhenAttemptingToDeserializeResponse()
3534
{
3635
var client = TestClient.GetFixedReturnClient(ProxyAuthResponse, 401, contentType: "text/html", exception: new Exception("problem with the request as a result of 401"));
3736
var source = await client.LowLevel.GetSourceAsync<Example>("examples", "example", "1");
3837
source.Success.Should().BeFalse();
3938
}
39+
40+
[U] public async Task BadAuthCarriesStatusCodeAndResponseBodyOverToResponse()
41+
{
42+
var client = TestClient.GetFixedReturnClient(ProxyAuthResponse, 401, contentType: "text/html", exception: new Exception("problem with the request as a result of 401"),
43+
modifySettings: (s) => s.DisableDirectStreaming());
44+
var response = await client.LowLevel.GetAsync<Example>("examples", "example", "1");
45+
response.Success.Should().BeFalse();
46+
response.ResponseBodyInBytes.Should().NotBeNullOrEmpty();
47+
response.HttpStatusCode.Should().Be(401);
48+
}
4049
}
4150
}

0 commit comments

Comments
 (0)