diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-29 01:07:29 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-29 01:07:29 +0000 |
commit | 1e866db2dbb928b792935f966d2f71543c746b96 (patch) | |
tree | 52f4cc8588931e1590e9b60f2f04e30035b9db37 | |
parent | 7273189e45a8e8a87c6807d5109e64073acf230d (diff) | |
parent | 1c2e272efcf8c9db34fa832ff1a955250d0e41e3 (diff) | |
download | service_entitlement-1e866db2dbb928b792935f966d2f71543c746b96.tar.gz |
Snap for 7592383 from 1c2e272efcf8c9db34fa832ff1a955250d0e41e3 to sc-releaseandroid-vts-12.0_r9android-vts-12.0_r8android-vts-12.0_r7android-vts-12.0_r6android-vts-12.0_r5android-vts-12.0_r4android-vts-12.0_r3android-vts-12.0_r2android-vts-12.0_r12android-vts-12.0_r11android-vts-12.0_r10android-vts-12.0_r1android-security-12.0.0_r60android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-security-11.0.0_r71android-platform-12.0.0_r9android-platform-12.0.0_r8android-platform-12.0.0_r7android-platform-12.0.0_r6android-platform-12.0.0_r5android-platform-12.0.0_r4android-platform-12.0.0_r31android-platform-12.0.0_r30android-platform-12.0.0_r3android-platform-12.0.0_r29android-platform-12.0.0_r28android-platform-12.0.0_r27android-platform-12.0.0_r26android-platform-12.0.0_r25android-platform-12.0.0_r24android-platform-12.0.0_r23android-platform-12.0.0_r22android-platform-12.0.0_r21android-platform-12.0.0_r20android-platform-12.0.0_r2android-platform-12.0.0_r19android-platform-12.0.0_r18android-platform-12.0.0_r17android-platform-12.0.0_r16android-platform-12.0.0_r15android-platform-12.0.0_r14android-platform-12.0.0_r13android-platform-12.0.0_r12android-platform-12.0.0_r11android-platform-12.0.0_r10android-platform-12.0.0_r1android-cts-12.0_r9android-cts-12.0_r8android-cts-12.0_r7android-cts-12.0_r6android-cts-12.0_r5android-cts-12.0_r4android-cts-12.0_r3android-cts-12.0_r2android-cts-12.0_r12android-cts-12.0_r11android-cts-12.0_r10android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-tests-releaseandroid12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-releaseandroid12-platform-release
Change-Id: Idba3ba5cb6d818cfb063a963f5fc6c89f45d58b8
5 files changed, 46 insertions, 45 deletions
diff --git a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java index 2e337e4..4482bf7 100644 --- a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java +++ b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java @@ -175,7 +175,7 @@ public class EapAkaApi { return challengeResponse( eapAkaResponse.response(), carrierConfig, - response.cookie(), + response.cookies(), contentType); } else if (eapAkaResponse.synchronizationFailureResponse() != null) { Log.d(TAG, "synchronization failure"); @@ -183,7 +183,7 @@ public class EapAkaApi { challengeResponse( eapAkaResponse.synchronizationFailureResponse(), carrierConfig, - response.cookie(), + response.cookies(), ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_JSON); if (followSyncFailureCount > 0) { return respondToEapAkaChallenge( @@ -201,7 +201,7 @@ public class EapAkaApi { private HttpResponse challengeResponse( String eapAkaChallengeResponse, CarrierConfig carrierConfig, - String cookie, + ImmutableList<String> cookies, String contentType) throws ServiceEntitlementException { Log.d(TAG, "challengeResponse"); @@ -221,7 +221,7 @@ public class EapAkaApi { .addRequestProperty( HttpHeaders.CONTENT_TYPE, ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_JSON) - .addRequestProperty(HttpHeaders.COOKIE, cookie) + .addRequestProperty(HttpHeaders.COOKIE, cookies) .setTimeoutInSec(carrierConfig.timeoutInSec()) .setNetwork(carrierConfig.network()) .build(); diff --git a/java/com/android/libraries/entitlement/http/HttpClient.java b/java/com/android/libraries/entitlement/http/HttpClient.java index 76eeaec..9ccb5ee 100644 --- a/java/com/android/libraries/entitlement/http/HttpClient.java +++ b/java/com/android/libraries/entitlement/http/HttpClient.java @@ -37,6 +37,7 @@ import com.android.libraries.entitlement.ServiceEntitlementException; import com.android.libraries.entitlement.http.HttpConstants.ContentType; import com.android.libraries.entitlement.utils.StreamUtils; +import com.google.common.collect.ImmutableList; import com.google.common.net.HttpHeaders; import java.io.DataOutputStream; @@ -46,6 +47,7 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; +import java.util.List; import java.util.Map; /** Implement the HTTP request method according to TS.43 specification. */ @@ -94,7 +96,7 @@ public class HttpClient { } // add HTTP headers - for (Map.Entry<String, String> entry : request.requestProperties().entrySet()) { + for (Map.Entry<String, String> entry : request.requestProperties().entries()) { mConnection.addRequestProperty(entry.getKey(), entry.getValue()); } @@ -136,7 +138,7 @@ public class HttpClient { throw new ServiceEntitlementException( ERROR_HTTP_STATUS_NOT_SUCCESS, "Read response code failed!", e); } - responseBuilder.setCookie(nullToEmpty(getCookie(connection))); + responseBuilder.setCookies(getCookies(connection)); try { String responseBody = readResponse(connection); logPii("HttpClient.response body: " + responseBody); @@ -171,7 +173,8 @@ public class HttpClient { return ContentType.UNKNOWN; } - private static String getCookie(URLConnection connection) { - return connection.getHeaderField(HttpHeaders.SET_COOKIE); + private static List<String> getCookies(URLConnection connection) { + List<String> cookies = connection.getHeaderFields().get(HttpHeaders.SET_COOKIE); + return cookies == null ? ImmutableList.of() : cookies; } } diff --git a/java/com/android/libraries/entitlement/http/HttpRequest.java b/java/com/android/libraries/entitlement/http/HttpRequest.java index af567db..b6cd771 100644 --- a/java/com/android/libraries/entitlement/http/HttpRequest.java +++ b/java/com/android/libraries/entitlement/http/HttpRequest.java @@ -17,18 +17,17 @@ package com.android.libraries.entitlement.http; import android.net.Network; -import android.util.ArrayMap; import androidx.annotation.Nullable; import com.android.libraries.entitlement.CarrierConfig; import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableListMultimap; import org.json.JSONObject; -import java.util.Map; +import java.util.List; /** The parameters of an http request. */ @AutoValue @@ -42,11 +41,8 @@ public abstract class HttpRequest { /** For "POST" request method, the body of the request in JSON format. */ public abstract JSONObject postData(); - /** For "GET" request method, the parameters to be encoded into the URL. */ - public abstract ImmutableMap<String, String> requestValues(); - /** HTTP header fields. */ - public abstract ImmutableMap<String, String> requestProperties(); + public abstract ImmutableListMultimap<String, String> requestProperties(); /** The client side timeout, in seconds. See {@link Builder#setTimeoutInSec}. */ public abstract int timeoutInSec(); @@ -58,9 +54,6 @@ public abstract class HttpRequest { /** Builder of {@link HttpRequest}. */ @AutoValue.Builder public abstract static class Builder { - private final Map<String, String> values = new ArrayMap<>(); - private final Map<String, String> properties = new ArrayMap<>(); - public abstract HttpRequest build(); /** Sets the URL. */ @@ -76,20 +69,22 @@ public abstract class HttpRequest { /** For "POST" request method, sets the body of the request in JSON format. */ public abstract Builder setPostData(JSONObject postData); - abstract Builder setRequestValues(ImmutableMap<String, String> value); - - abstract Builder setRequestProperties(ImmutableMap<String, String> properties); - - /** For "GET" request method, adds a parameter to be encoded into the URL. */ - public Builder addRequestValues(String key, String value) { - values.put(key, value); - return this.setRequestValues(ImmutableMap.copyOf(values)); - } + abstract ImmutableListMultimap.Builder<String, String> requestPropertiesBuilder(); /** Adds an HTTP header field. */ public Builder addRequestProperty(String key, String value) { - properties.put(key, value); - return this.setRequestProperties(ImmutableMap.copyOf(properties)); + requestPropertiesBuilder().put(key, value); + return this; + } + + /** + * Adds an HTTP header field with multiple values. Equivalent to calling + * {@link #addRequestProperty(String, String)} multiple times with the same key and + * one value at a time. + */ + public Builder addRequestProperty(String key, List<String> value) { + requestPropertiesBuilder().putAll(key, value); + return this; } /** @@ -113,8 +108,6 @@ public abstract class HttpRequest { .setUrl("") .setRequestMethod("") .setPostData(new JSONObject()) - .setRequestValues(ImmutableMap.of()) - .setRequestProperties(ImmutableMap.of()) .setTimeoutInSec(CarrierConfig.DEFAULT_TIMEOUT_IN_SEC); } } diff --git a/java/com/android/libraries/entitlement/http/HttpResponse.java b/java/com/android/libraries/entitlement/http/HttpResponse.java index e331b99..f495578 100644 --- a/java/com/android/libraries/entitlement/http/HttpResponse.java +++ b/java/com/android/libraries/entitlement/http/HttpResponse.java @@ -19,6 +19,9 @@ package com.android.libraries.entitlement.http; import com.android.libraries.entitlement.http.HttpConstants.ContentType; import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + +import java.util.List; /** * The response of the http request. @@ -39,7 +42,7 @@ public abstract class HttpResponse { /** * Content of the "Set-Cookie" response header. */ - public abstract String cookie(); + public abstract ImmutableList<String> cookies(); /** * Builder of {@link HttpResponse}. @@ -57,9 +60,9 @@ public abstract class HttpResponse { public abstract Builder setResponseMessage(String responseMessage); /** - * Content of the "Set-Cookie" response header. + * Sets the content of the "Set-Cookie" response headers. */ - public abstract Builder setCookie(String cookie); + public abstract Builder setCookies(List<String> cookies); } public static Builder builder() { @@ -68,7 +71,7 @@ public abstract class HttpResponse { .setBody("") .setResponseCode(0) .setResponseMessage("") - .setCookie(""); + .setCookies(ImmutableList.of()); } @Override @@ -83,9 +86,9 @@ public abstract class HttpResponse { .append(responseCode()) .append(" responseMessage=") .append(responseMessage()) - .append(" cookie=(") - .append(cookie().length()) - .append(" characters)}") + .append(" cookies=[") + .append(cookies().size()) + .append(" cookies]}") .toString(); } } diff --git a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java index f289c04..f655258 100644 --- a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java +++ b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java @@ -69,6 +69,7 @@ public class EapAkaApiTest { // com.google.common.net.HttpHeaders.COOKIE private static final String HTTP_HEADER_COOKIE = "Cookie"; private static final String COOKIE_VALUE = "COOKIE=abcdefg"; + private static final String COOKIE_VALUE_1 = "COOKIE=hijklmn"; private static final String RESPONSE_XML = "<wap-provisioningdoc version=\"1.1\">\n" + " <characteristic type=\"TOKEN\">\n" @@ -149,7 +150,7 @@ public class EapAkaApiTest { HttpResponse eapChallengeResponse = HttpResponse .builder().setContentType(ContentType.JSON).setBody(EAP_AKA_CHALLENGE) - .setCookie(COOKIE_VALUE).build(); + .setCookies(ImmutableList.of(COOKIE_VALUE, COOKIE_VALUE_1)).build(); HttpResponse xmlResponse = HttpResponse.builder().setContentType(ContentType.XML).setBody(RESPONSE_XML) .build(); @@ -163,10 +164,11 @@ public class EapAkaApiTest { ImmutableList.of(ServiceEntitlement.APP_VOWIFI), carrierConfig, request); assertThat(respopnse).isEqualTo(RESPONSE_XML); - // Verify that the 2nd request has cookie set by the 1st response + // Verify that the 2nd request has cookies set by the 1st response verify(mMockHttpClient, times(2)).request(mHttpRequestCaptor.capture()); assertThat(mHttpRequestCaptor.getAllValues().get(1).requestProperties()) - .containsEntry(HTTP_HEADER_COOKIE, COOKIE_VALUE); + .containsAtLeast(HTTP_HEADER_COOKIE, COOKIE_VALUE, + HTTP_HEADER_COOKIE, COOKIE_VALUE_1); assertThat(mHttpRequestCaptor.getAllValues().get(0).timeoutInSec()) .isEqualTo(CarrierConfig.DEFAULT_TIMEOUT_IN_SEC); assertThat(mHttpRequestCaptor.getAllValues().get(0).network()).isNull(); @@ -232,7 +234,7 @@ public class EapAkaApiTest { HttpResponse eapChallengeResponse = HttpResponse .builder().setContentType(ContentType.JSON).setBody(EAP_AKA_CHALLENGE) - .setCookie(COOKIE_VALUE).build(); + .setCookies(ImmutableList.of(COOKIE_VALUE)).build(); HttpResponse xmlResponse = HttpResponse.builder().setContentType(ContentType.XML).setBody(RESPONSE_XML) .build(); @@ -274,7 +276,7 @@ public class EapAkaApiTest { verify(mMockHttpClient).request(mHttpRequestCaptor.capture()); assertThat(mHttpRequestCaptor.getValue().requestProperties().get(HttpHeaders.ACCEPT)) - .isEqualTo(ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_XML); + .containsExactly(ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_XML); } @Test @@ -294,7 +296,7 @@ public class EapAkaApiTest { verify(mMockHttpClient).request(mHttpRequestCaptor.capture()); assertThat(mHttpRequestCaptor.getValue().requestProperties().get(HttpHeaders.ACCEPT)) - .isEqualTo(ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_JSON_AND_XML); + .containsExactly(ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_JSON_AND_XML); } @Test @@ -307,7 +309,7 @@ public class EapAkaApiTest { HttpResponse eapChallengeResponse = HttpResponse .builder().setContentType(ContentType.JSON).setBody(EAP_AKA_CHALLENGE) - .setCookie(COOKIE_VALUE).build(); + .setCookies(ImmutableList.of(COOKIE_VALUE)).build(); HttpResponse xmlResponse = HttpResponse.builder().setContentType(ContentType.XML).setBody(RESPONSE_XML) .build(); |