diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentServiceResponse.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentServiceResponse.java index 9b2c3fec392fb..69169607371ae 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentServiceResponse.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentServiceResponse.java @@ -33,19 +33,10 @@ public class RxDocumentServiceResponse { private final StoreResponse storeResponse; public RxDocumentServiceResponse(StoreResponse response) { - String[] headerNames = response.getResponseHeaderNames(); - String[] headerValues = response.getResponseHeaderValues(); - - this.headersMap = new HashMap<>(headerNames.length); + this.headersMap = response.getResponseHeaders(); // Gets status code. this.statusCode = response.getStatus(); - - // Extracts headers. - for (int i = 0; i < headerNames.length; i++) { - this.headersMap.put(headerNames[i], headerValues[i]); - } - this.storeResponse = response; } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxGatewayStoreModel.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxGatewayStoreModel.java index ce161cf4ffad3..03534fffa6948 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxGatewayStoreModel.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxGatewayStoreModel.java @@ -276,7 +276,7 @@ private Mono toDocumentServiceResponse(Mono StoreResponse rsp = new StoreResponse(httpResponseStatus, - HttpUtils.unescape(httpResponseHeaders.toMap().entrySet()), + HttpUtils.unescape(httpResponseHeaders.toMap()), content); DirectBridgeInternal.setRequestTimeline(rsp, reactorNettyRequestRecord.takeTimelineSnapshot()); if (request.requestContext.cosmosResponseDiagnostics != null) { diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/HttpUtils.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/HttpUtils.java index 27c4a22bc1c3a..a9db5368e0434 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/HttpUtils.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/HttpUtils.java @@ -74,14 +74,15 @@ public static String getDateHeader(Map headerValues) { return date != null ? date : StringUtils.EMPTY; } - public static List> unescape(Set> headers) { - List> result = new ArrayList<>(headers.size()); - for (Entry entry : headers) { - if (entry.getKey().equals(HttpConstants.HttpHeaders.OWNER_FULL_NAME)) { - String unescapedUrl = HttpUtils.urlDecode(entry.getValue()); - entry = new AbstractMap.SimpleEntry<>(entry.getKey(), unescapedUrl); + public static Map unescape(Map headers) { + Map result = new HashMap<>(headers.size()); + for (Entry entry : headers.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (key.equals(HttpConstants.HttpHeaders.OWNER_FULL_NAME)) { + value = HttpUtils.urlDecode(value); } - result.add(entry); + result.put(key, value); } return result; } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/ResponseUtils.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/ResponseUtils.java index 91b98158838fd..67376664abade 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/ResponseUtils.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/ResponseUtils.java @@ -27,7 +27,7 @@ static Mono toStoreResponse(HttpResponse httpClientResponse, Http return contentObservable.map(byteArrayContent -> { // transforms to Mono - return new StoreResponse(httpClientResponse.statusCode(), HttpUtils.unescape(httpResponseHeaders.toMap().entrySet()), byteArrayContent); + return new StoreResponse(httpClientResponse.statusCode(), HttpUtils.unescape(httpResponseHeaders.toMap()), byteArrayContent); }); } } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClient.java index f2cced7ad666c..ca1ad974c8f68 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClient.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClient.java @@ -128,17 +128,8 @@ private void handleUnsuccessfulStoreResponse(RxDocumentServiceRequest request, C private RxDocumentServiceResponse completeResponse( StoreResponse storeResponse, RxDocumentServiceRequest request) throws InternalServerErrorException { - if (storeResponse.getResponseHeaderNames().length != storeResponse.getResponseHeaderValues().length) { - throw new InternalServerErrorException(RMResources.InvalidBackendResponse); - } - - Map headers = new HashMap<>(storeResponse.getResponseHeaderNames().length); - for (int idx = 0; idx < storeResponse.getResponseHeaderNames().length; idx++) { - String name = storeResponse.getResponseHeaderNames()[idx]; - String value = storeResponse.getResponseHeaderValues()[idx]; - headers.put(name, value); - } + Map headers = new HashMap<>(storeResponse.getResponseHeaders()); this.updateResponseHeader(request, headers); this.captureSessionToken(request, headers); diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResponse.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResponse.java index a4448c21ca690..dd23139aac4d9 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResponse.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResponse.java @@ -10,10 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Map.Entry; +import java.util.Map; /** * Used internally to represents a response from the store. @@ -21,8 +18,7 @@ public class StoreResponse { final static Logger LOGGER = LoggerFactory.getLogger(StoreResponse.class); final private int status; - final private String[] responseHeaderNames; - final private String[] responseHeaderValues; + final private Map responseHeaders; final private byte[] content; private CosmosResponseDiagnostics cosmosResponseDiagnostics; @@ -30,20 +26,11 @@ public class StoreResponse { public StoreResponse( int status, - List> headerEntries, + Map headerEntries, byte[] content) { requestTimeline = RequestTimeline.empty(); - responseHeaderNames = new String[headerEntries.size()]; - responseHeaderValues = new String[headerEntries.size()]; - - int i = 0; - - for(Entry headerEntry: headerEntries) { - responseHeaderNames[i] = headerEntry.getKey(); - responseHeaderValues[i] = headerEntry.getValue(); - i++; - } + responseHeaders = headerEntries; this.status = status; this.content = content; @@ -53,12 +40,8 @@ public int getStatus() { return status; } - public String[] getResponseHeaderNames() { - return responseHeaderNames; - } - - public String[] getResponseHeaderValues() { - return responseHeaderValues; + public Map getResponseHeaders() { + return this.responseHeaders; } public byte[] getResponseBody() { @@ -82,18 +65,16 @@ public String getContinuation() { return this.getHeaderValue(HttpConstants.HttpHeaders.CONTINUATION); } - public String getHeaderValue(String attribute) { - if (this.responseHeaderValues == null || this.responseHeaderNames.length != this.responseHeaderValues.length) { - return null; - } + public boolean containsHeader(String key) { + return this.responseHeaders != null && this.responseHeaders.containsKey(key); + } - for (int i = 0; i < responseHeaderNames.length; i++) { - if (responseHeaderNames[i].equalsIgnoreCase(attribute)) { - return responseHeaderValues[i]; - } - } + public String setHeaderValue(String key, String value) { + return this.responseHeaders.put(key, value); + } - return null; + public String getHeaderValue(String attribute) { + return this.responseHeaders.get(attribute); } public CosmosResponseDiagnostics getCosmosResponseDiagnostics() { diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResult.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResult.java index 0499e4bb843a9..7ecce38339473 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResult.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreResult.java @@ -120,14 +120,9 @@ private static void setRequestCharge(StoreResponse response, CosmosClientExcepti Double.toString(totalRequestCharge)); } // Set total charge as final charge for the response. - else if (response.getResponseHeaderNames() != null) { - for (int i = 0; i < response.getResponseHeaderNames().length; ++i) { - if (Strings.areEqualIgnoreCase( - response.getResponseHeaderNames()[i], - HttpConstants.HttpHeaders.REQUEST_CHARGE)) { - response.getResponseHeaderValues()[i] = Double.toString(totalRequestCharge); - break; - } + else { + if (response.containsHeader(HttpConstants.HttpHeaders.REQUEST_CHARGE)) { + response.setHeaderValue(HttpConstants.HttpHeaders.REQUEST_CHARGE, Double.toString(totalRequestCharge)); } } } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponse.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponse.java index fc517e7b73fcb..14422b20873ba 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponse.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponse.java @@ -291,14 +291,11 @@ static RntbdResponse decode(final ByteBuf in) { } StoreResponse toStoreResponse(final RntbdContext context) { - - - checkNotNull(context, "context"); return new StoreResponse( this.getStatus().code(), - this.headers.asList(context, this.getActivityId()), + this.headers.asMap(context, this.getActivityId()), toByteArray(this.content) ); } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponseHeaders.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponseHeaders.java index 70dc762ca7c04..7ef5037d674d0 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponseHeaders.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdResponseHeaders.java @@ -8,13 +8,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectWriter; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.handler.codec.CorruptedFrameException; import java.math.BigDecimal; import java.util.AbstractMap; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @@ -209,17 +209,18 @@ List> asList(final RntbdContext context, final UUID ac public Map asMap(final RntbdContext context, final UUID activityId) { - final ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(this.computeCount() + 2); - builder.put(new Entry(HttpHeaders.SERVER_VERSION, context.serverVersion())); - builder.put(new Entry(HttpHeaders.ACTIVITY_ID, activityId.toString())); + final HashMap headersMap = new HashMap<>(this.computeCount() + 2); + headersMap.put(HttpHeaders.SERVER_VERSION, context.serverVersion()); + headersMap.put(HttpHeaders.ACTIVITY_ID, activityId.toString()); this.collectEntries((token, toEntry) -> { if (token.isPresent()) { - builder.put(toEntry.apply(token)); + Map.Entry entry = toEntry.apply(token); + headersMap.put(entry.getKey(), entry.getValue()); } }); - return builder.build(); + return headersMap; } static RntbdResponseHeaders decode(final ByteBuf in) { diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/RetryContextOnDiagnosticTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/RetryContextOnDiagnosticTest.java index e24aa50423f87..08fe0e6207a31 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/RetryContextOnDiagnosticTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/RetryContextOnDiagnosticTest.java @@ -29,6 +29,7 @@ import java.lang.reflect.Field; import java.time.Duration; import java.util.ArrayList; +import java.util.HashMap; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -52,7 +53,7 @@ public void backoffRetryUtilityExecuteRetry() throws Exception { retryPolicy = new TestRetryPolicy(); CosmosClientException exception = new CosmosClientException(410, exceptionText); Mockito.when(callbackMethod.call()).thenThrow(exception, exception, exception, exception, exception) - .thenReturn(Mono.just(new StoreResponse(200, new ArrayList<>(), getUTF8BytesOrNull(responseText)))); + .thenReturn(Mono.just(new StoreResponse(200, new HashMap<>(), getUTF8BytesOrNull(responseText)))); Mono monoResponse = BackoffRetryUtility.executeRetry(callbackMethod, retryPolicy); StoreResponse response = validateSuccess(monoResponse); @@ -88,7 +89,7 @@ public void backoffRetryUtilityExecuteAsync() { CosmosClientException exception = new CosmosClientException(410, exceptionText); Mono exceptionMono = Mono.error(exception); Mockito.when(parameterizedCallbackMethod.apply(Matchers.any(Quadruple.class))).thenReturn(exceptionMono, exceptionMono, exceptionMono, exceptionMono, exceptionMono) - .thenReturn(Mono.just(new StoreResponse(200, new ArrayList<>(), getUTF8BytesOrNull(responseText)))); + .thenReturn(Mono.just(new StoreResponse(200, new HashMap<>(), getUTF8BytesOrNull(responseText)))); Mono monoResponse = BackoffRetryUtility.executeAsync(parameterizedCallbackMethod, retryPolicy, inBackoffAlternateCallbackMethod, Duration.ofSeconds(5), serviceRequest); StoreResponse response = validateSuccess(monoResponse); diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/StoreResponseBuilder.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/StoreResponseBuilder.java index 1c1442cf7c2b4..152ee9b5352bf 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/StoreResponseBuilder.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/StoreResponseBuilder.java @@ -9,6 +9,7 @@ import java.math.BigDecimal; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,7 +17,7 @@ public class StoreResponseBuilder { private int status; - private List> headerEntries; + private Map headerEntries; private String content; public static StoreResponseBuilder create() { @@ -24,16 +25,16 @@ public static StoreResponseBuilder create() { } public StoreResponseBuilder() { - headerEntries = new ArrayList<>(); + headerEntries = new HashMap<>(); } public StoreResponseBuilder withHeader(String key, String value) { - headerEntries.add(new AbstractMap.SimpleEntry(key, value)); + headerEntries.put(key, value); return this; } public StoreResponseBuilder withLSN(long lsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.LSN, Long.toString(lsn))); + headerEntries.put(WFConstants.BackendHeaders.LSN, Long.toString(lsn)); return this; } @@ -43,42 +44,42 @@ public StoreResponseBuilder withRequestCharge(BigDecimal requestCharge) { } public StoreResponseBuilder withRequestCharge(double requestCharge) { - headerEntries.add(new AbstractMap.SimpleEntry(HttpConstants.HttpHeaders.REQUEST_CHARGE, Double.toString(requestCharge))); + headerEntries.put(HttpConstants.HttpHeaders.REQUEST_CHARGE, Double.toString(requestCharge)); return this; } public StoreResponseBuilder withLocalLSN(long localLsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.LOCAL_LSN, Long.toString(localLsn))); + headerEntries.put(WFConstants.BackendHeaders.LOCAL_LSN, Long.toString(localLsn)); return this; } public StoreResponseBuilder withPartitionKeyRangeId(String partitionKeyRangeId) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.PARTITION_KEY_RANGE_ID, partitionKeyRangeId)); + headerEntries.put(WFConstants.BackendHeaders.PARTITION_KEY_RANGE_ID, partitionKeyRangeId); return this; } public StoreResponseBuilder withItemLocalLSN(long itemLocalLsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.ITEM_LOCAL_LSN, Long.toString(itemLocalLsn))); + headerEntries.put(WFConstants.BackendHeaders.ITEM_LOCAL_LSN, Long.toString(itemLocalLsn)); return this; } public StoreResponseBuilder withQuorumAckecdLsn(long quorumAckecdLsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.QUORUM_ACKED_LSN, Long.toString(quorumAckecdLsn))); + headerEntries.put(WFConstants.BackendHeaders.QUORUM_ACKED_LSN, Long.toString(quorumAckecdLsn)); return this; } public StoreResponseBuilder withQuorumAckecdLocalLsn(long quorumAckecdLocalLsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.QUORUM_ACKED_LOCAL_LSN, Long.toString(quorumAckecdLocalLsn))); + headerEntries.put(WFConstants.BackendHeaders.QUORUM_ACKED_LOCAL_LSN, Long.toString(quorumAckecdLocalLsn)); return this; } public StoreResponseBuilder withGlobalCommittedLsn(long globalCommittedLsn) { - headerEntries.add(new AbstractMap.SimpleEntry(WFConstants.BackendHeaders.GLOBAL_COMMITTED_LSN, Long.toString(globalCommittedLsn))); + headerEntries.put(WFConstants.BackendHeaders.GLOBAL_COMMITTED_LSN, Long.toString(globalCommittedLsn)); return this; } public StoreResponseBuilder withSessionToken(String sessionToken) { - headerEntries.add(new AbstractMap.SimpleEntry(HttpConstants.HttpHeaders.SESSION_TOKEN, sessionToken)); + headerEntries.put(HttpConstants.HttpHeaders.SESSION_TOKEN, sessionToken); return this; } diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConsistencyWriterTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConsistencyWriterTest.java index 8d363c4f1947b..1b84edd1dcbd3 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConsistencyWriterTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConsistencyWriterTest.java @@ -16,6 +16,7 @@ import com.azure.cosmos.implementation.StoreResponseBuilder; import com.azure.cosmos.implementation.Utils; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import io.reactivex.subscribers.TestSubscriber; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -145,10 +146,12 @@ public void run() { @Test(groups = "unit") public void getLsnAndGlobalCommittedLsn() { - ImmutableList.Builder> builder = new ImmutableList.Builder<>(); - builder.add(new AbstractMap.SimpleEntry<>(WFConstants.BackendHeaders.LSN, "3")); - builder.add(new AbstractMap.SimpleEntry<>(WFConstants.BackendHeaders.GLOBAL_COMMITTED_LSN, "2")); - ImmutableList> headers = builder.build(); + + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + + builder.put(WFConstants.BackendHeaders.LSN, "3"); + builder.put(WFConstants.BackendHeaders.GLOBAL_COMMITTED_LSN, "2"); + ImmutableMap headers = builder.build(); StoreResponse sr = new StoreResponse(0, headers, null); Utils.ValueHolder lsn = Utils.ValueHolder.initialize(-2l); diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/HttpUtilsTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/HttpUtilsTest.java index d79a2bff8f784..66c18d678c369 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/HttpUtilsTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/HttpUtilsTest.java @@ -9,6 +9,7 @@ import org.testng.annotations.Test; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -17,7 +18,7 @@ public class HttpUtilsTest { private static final String OWNER_FULL_NAME_VALUE = "dbs/RxJava.SDKTest.SharedDatabase_20190304T121302_iZc/colls/+%20-_,:.%7C~b2d67001-9000-454e-a140-abceb1756c48%20+-_,:.%7C~"; - + @Test(groups = { "unit" }) public void verifyConversionOfHttpResponseHeadersToMap() { HttpHeaders headersMap = new HttpHeaders(1); @@ -27,13 +28,13 @@ public void verifyConversionOfHttpResponseHeadersToMap() { Mockito.when(httpResponse.headers()).thenReturn(headersMap); HttpHeaders httpResponseHeaders = httpResponse.headers(); Set> resultHeadersSet = HttpUtils.asMap(httpResponseHeaders).entrySet(); - + assertThat(resultHeadersSet.size()).isEqualTo(1); Entry entry = resultHeadersSet.iterator().next(); assertThat(entry.getKey()).isEqualTo(HttpConstants.HttpHeaders.OWNER_FULL_NAME); assertThat(entry.getValue()).isEqualTo(HttpUtils.urlDecode(OWNER_FULL_NAME_VALUE)); - - List> resultHeadersList = HttpUtils.unescape(httpResponseHeaders.toMap().entrySet()); + + Map resultHeadersList = HttpUtils.unescape(httpResponseHeaders.toMap()); assertThat(resultHeadersList.size()).isEqualTo(1); entry = resultHeadersSet.iterator().next(); assertThat(entry.getKey()).isEqualTo(HttpConstants.HttpHeaders.OWNER_FULL_NAME); diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseTest.java index 569abe5d51fc7..219b673dfbc85 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseTest.java @@ -19,7 +19,7 @@ public void stringContent() { headerMap.put("key1", "value1"); headerMap.put("key2", "value2"); - StoreResponse sp = new StoreResponse(200, new ArrayList<>(headerMap.entrySet()), getUTF8BytesOrNull(content)); + StoreResponse sp = new StoreResponse(200, headerMap, getUTF8BytesOrNull(content)); assertThat(sp.getStatus()).isEqualTo(200); assertThat(sp.getResponseBody()).isEqualTo(getUTF8BytesOrNull(content)); diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseValidator.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseValidator.java index 6b1fc7ceaf206..024159116ad46 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseValidator.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/StoreResponseValidator.java @@ -40,7 +40,7 @@ public Builder hasHeader(String headerKey) { validators.add(new StoreResponseValidator() { @Override public void validate(StoreResponse resp) { - assertThat(Arrays.asList(resp.getResponseHeaderNames())).asList().contains(headerKey); + assertThat(resp.getResponseHeaders().keySet()).contains(headerKey); } }); return this; @@ -50,9 +50,8 @@ public Builder withHeader(String headerKey, String headerValue) { validators.add(new StoreResponseValidator() { @Override public void validate(StoreResponse resp) { - assertThat(Arrays.asList(resp.getResponseHeaderNames())).asList().contains(headerKey); - int index = Arrays.asList(resp.getResponseHeaderNames()).indexOf(headerKey); - assertThat(resp.getResponseHeaderValues()[index]).isEqualTo(headerValue); + assertThat(resp.getResponseHeaders().keySet()).contains(headerKey); + assertThat(resp.getResponseHeaders().get(headerKey)).isEqualTo(headerValue); } }); return this; @@ -63,10 +62,9 @@ public Builder withHeaderValueCondition(String headerKey, Condition cond validators.add(new StoreResponseValidator() { @Override public void validate(StoreResponse resp) { - assertThat(Arrays.asList(resp.getResponseHeaderNames())).asList().contains(headerKey); - int index = Arrays.asList(resp.getResponseHeaderNames()).indexOf(headerKey); - String value = resp.getResponseHeaderValues()[index]; - condition.matches(value); + assertThat(resp.getResponseHeaders().keySet()).contains(headerKey); + String headerValue = resp.getResponseHeaders().get(headerKey); + condition.matches(headerValue); } }); return this;