diff --git a/core/azure-core-test/src/main/java/com/azure/core/test/http/PlaybackClient.java b/core/azure-core-test/src/main/java/com/azure/core/test/http/PlaybackClient.java index 82dfc3c0a8bea..3d962938cd8ef 100644 --- a/core/azure-core-test/src/main/java/com/azure/core/test/http/PlaybackClient.java +++ b/core/azure-core-test/src/main/java/com/azure/core/test/http/PlaybackClient.java @@ -26,6 +26,7 @@ */ public final class PlaybackClient implements HttpClient { private final Logger logger = LoggerFactory.getLogger(PlaybackClient.class); + private static final String STRING_ZERO = "0"; private final AtomicInteger count = new AtomicInteger(0); private final Map textReplacementRules; private final RecordedData recordedData; @@ -99,8 +100,9 @@ private Mono playbackHttpResponse(final HttpRequest request) { int recordStatusCode = Integer.parseInt(networkCallRecord.response().get("StatusCode")); HttpHeaders headers = new HttpHeaders(); + for (Map.Entry pair : networkCallRecord.response().entrySet()) { - if (!pair.getKey().equals("StatusCode") && !pair.getKey().equals("Body") && !pair.getKey().equals("Content-Length")) { + if (!pair.getKey().equals("StatusCode") && !pair.getKey().equals("Body")) { String rawHeader = pair.getValue(); for (Map.Entry rule : textReplacementRules.entrySet()) { if (rule.getValue() != null) { @@ -122,7 +124,10 @@ private Mono playbackHttpResponse(final HttpRequest request) { } bytes = rawBody.getBytes(StandardCharsets.UTF_8); - headers.put("Content-Length", String.valueOf(bytes.length)); + String contentLength = headers.get("Content-Length").value(); + if (contentLength == null || STRING_ZERO.equals(contentLength)) { + headers.put("Content-Length", String.valueOf(bytes.length)); + } } HttpResponse response = new MockHttpResponse(request, recordStatusCode, headers, bytes); diff --git a/core/azure-core-test/src/main/java/com/azure/core/test/policy/RecordNetworkCallPolicy.java b/core/azure-core-test/src/main/java/com/azure/core/test/policy/RecordNetworkCallPolicy.java index b32e86a4956e5..df9d27cabe259 100644 --- a/core/azure-core-test/src/main/java/com/azure/core/test/policy/RecordNetworkCallPolicy.java +++ b/core/azure-core-test/src/main/java/com/azure/core/test/policy/RecordNetworkCallPolicy.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; -import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.zip.GZIPInputStream; @@ -98,7 +97,7 @@ private Mono> extractResponseData(final HttpResponse respons headerValueToStore = "0"; addedRetryAfter = true; } - responseData.put(header.name().toLowerCase(Locale.US), headerValueToStore); + responseData.put(header.name(), headerValueToStore); } if (!addedRetryAfter) { @@ -109,7 +108,7 @@ private Mono> extractResponseData(final HttpResponse respons if (contentType == null) { return Mono.just(responseData); } else if (contentType.contains("json") || response.headerValue("content-encoding") == null) { - return response.bodyAsString().map(content -> { + return response.bodyAsString().switchIfEmpty(Mono.just("")).map(content -> { responseData.put("Body", content); return responseData; });