diff options
author | samalin <samalin@google.com> | 2021-01-29 20:21:14 +0800 |
---|---|---|
committer | Sama Lin <samalin@google.com> | 2021-02-05 08:44:42 +0000 |
commit | 1cfefabcbe1c33a37832f384572ea77f5373f010 (patch) | |
tree | 68785aa78980b20218be483ba17d82dd95e0839e | |
parent | 8e241b3c8b1973d4e462f578c861a662d148dd63 (diff) | |
download | service_entitlement-1cfefabcbe1c33a37832f384572ea77f5373f010.tar.gz |
Support entitlement status query for multiple app Ids
Bug: 177544547
Test: EapAkaApiTest
Change-Id: I588fdb68c9de4f549849cdaaabbb1458cf8ea663
4 files changed, 73 insertions, 25 deletions
diff --git a/java/com/android/libraries/entitlement/ServiceEntitlement.java b/java/com/android/libraries/entitlement/ServiceEntitlement.java index f788603..77cc5ae 100644 --- a/java/com/android/libraries/entitlement/ServiceEntitlement.java +++ b/java/com/android/libraries/entitlement/ServiceEntitlement.java @@ -23,7 +23,7 @@ import androidx.annotation.VisibleForTesting; import com.android.libraries.entitlement.eapaka.EapAkaApi; -import java.util.List; +import com.google.common.collect.ImmutableList; /** * Implemnets protocol for carrier service entitlement configuration query and operation, based on @@ -121,7 +121,8 @@ public class ServiceEntitlement { @Nullable public String queryEntitlementStatus(String appId, ServiceEntitlementRequest request) throws ServiceEntitlementException { - return eapAkaApi.queryEntitlementStatus(appId, carrierConfig.serverUrl(), request); + return eapAkaApi.queryEntitlementStatus(ImmutableList.of(appId), carrierConfig.serverUrl(), + request); } /** @@ -133,10 +134,10 @@ public class ServiceEntitlement { * multiple "app" parameters will be set in the HTTP request, in the order as they appear in * parameter {@code appIds}. */ - public String queryEntitlementStatus(List<String> appIds, ServiceEntitlementRequest request) + public String queryEntitlementStatus(ImmutableList<String> appIds, + ServiceEntitlementRequest request) throws ServiceEntitlementException { - // TODO(b/177544547): Add implementation - return null; + return eapAkaApi.queryEntitlementStatus(appIds, carrierConfig.serverUrl(), request); } /** diff --git a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java index 9b450b6..049ae11 100644 --- a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java +++ b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java @@ -35,6 +35,7 @@ import com.android.libraries.entitlement.http.HttpConstants.RequestMethod; import com.android.libraries.entitlement.http.HttpRequest; import com.android.libraries.entitlement.http.HttpResponse; +import com.google.common.collect.ImmutableList; import com.google.common.net.HttpHeaders; import org.json.JSONException; @@ -135,14 +136,14 @@ public class EapAkaApi { */ @Nullable public String queryEntitlementStatus( - String appId, String serverUrl, ServiceEntitlementRequest request) + ImmutableList<String> appIds, String serverUrl, ServiceEntitlementRequest request) throws ServiceEntitlementException { // TODO(b/177562073): localize cookie management instead of VM global CookieHandler CookieHandler.setDefault(new CookieManager()); HttpRequest httpRequest = HttpRequest.builder() - .setUrl(entitlementStatusUrl(appId, serverUrl, request)) + .setUrl(entitlementStatusUrl(appIds, serverUrl, request)) .setRequestMethod(RequestMethod.GET) .addRequestProperty(HttpHeaders.ACCEPT, ACCEPT_CONTENT_TYPE_JSON_AND_XML) .build(); @@ -194,8 +195,8 @@ public class EapAkaApi { return mHttpClient.request(request).body(); } - private String entitlementStatusUrl( - String appId, String serverUrl, ServiceEntitlementRequest request) { + String entitlementStatusUrl( + ImmutableList<String> appIds, String serverUrl, ServiceEntitlementRequest request) { TelephonyManager telephonyManager = mContext.getSystemService( TelephonyManager.class).createForSubscriptionId(mSimSubscriptionId); Uri.Builder urlBuilder = Uri.parse(serverUrl).buildUpon(); @@ -235,13 +236,16 @@ public class EapAkaApi { urlBuilder.appendQueryParameter(APP_NAME, request.appName()); } + for (String appId : appIds) { + urlBuilder.appendQueryParameter(APP, appId); + } + return urlBuilder // Identity and Authentication parameters .appendQueryParameter(TERMINAL_VENDOR, request.terminalVendor()) .appendQueryParameter(TERMINAL_MODEL, request.terminalModel()) .appendQueryParameter(TERMIAL_SW_VERSION, request.terminalSoftwareVersion()) // General Service parameters - .appendQueryParameter(APP, appId) .appendQueryParameter(VERS, Integer.toString(request.configurationVersion())) .appendQueryParameter(ENTITLEMENT_VERSION, request.entitlementVersion()) .toString(); diff --git a/tests/src/com/android/libraries/entitlement/ServiceEntitlementTest.java b/tests/src/com/android/libraries/entitlement/ServiceEntitlementTest.java index 1d4a2f1..410375d 100644 --- a/tests/src/com/android/libraries/entitlement/ServiceEntitlementTest.java +++ b/tests/src/com/android/libraries/entitlement/ServiceEntitlementTest.java @@ -26,6 +26,8 @@ import androidx.test.runner.AndroidJUnit4; import com.android.libraries.entitlement.eapaka.EapAkaApi; +import com.google.common.collect.ImmutableList; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -59,7 +61,9 @@ public class ServiceEntitlementTest { @Test public void queryEntitlementStatus_appVolte_returnResult() throws Exception { ServiceEntitlementRequest request = ServiceEntitlementRequest.builder().build(); - when(mMockEapAkaApi.queryEntitlementStatus(ServiceEntitlement.APP_VOLTE, TEST_URL, request)) + when(mMockEapAkaApi.queryEntitlementStatus(ImmutableList.of(ServiceEntitlement.APP_VOLTE), + TEST_URL, + request)) .thenReturn(QUERY_APP_VOLTE_RESULT); assertThat( @@ -70,12 +74,15 @@ public class ServiceEntitlementTest { @Test public void queryEntitlementStatus_appVowifi_returnResult() throws Exception { ServiceEntitlementRequest request = ServiceEntitlementRequest.builder().build(); - when(mMockEapAkaApi.queryEntitlementStatus(ServiceEntitlement.APP_VOWIFI, TEST_URL, + when(mMockEapAkaApi.queryEntitlementStatus(ImmutableList.of(ServiceEntitlement.APP_VOWIFI), + TEST_URL, request)) .thenReturn(QUERY_APP_VOWIFI_RESULT); assertThat( - mServiceEntitlement.queryEntitlementStatus(ServiceEntitlement.APP_VOWIFI, request)) + mServiceEntitlement.queryEntitlementStatus( + ImmutableList.of(ServiceEntitlement.APP_VOWIFI), + request)) .isEqualTo(QUERY_APP_VOWIFI_RESULT); } } diff --git a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java index 7a79526..2609c69 100644 --- a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java +++ b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.fail; @@ -33,14 +34,21 @@ import com.android.libraries.entitlement.ServiceEntitlement; import com.android.libraries.entitlement.ServiceEntitlementException; import com.android.libraries.entitlement.ServiceEntitlementRequest; import com.android.libraries.entitlement.http.HttpClient; +import com.android.libraries.entitlement.http.HttpConstants; import com.android.libraries.entitlement.http.HttpConstants.ContentType; +import com.android.libraries.entitlement.http.HttpRequest; import com.android.libraries.entitlement.http.HttpResponse; +import com.google.common.collect.ImmutableList; +import com.google.common.net.HttpHeaders; + import org.json.JSONException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -77,17 +85,17 @@ public class EapAkaApiTest { private static final String TOKEN = "kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX"; private static final String IMSI = "234107813240779"; private static final String MCCMNC = "23410"; + private static final String IMEI = "355494343566743"; private static final int SUB_ID = 1; + private static final String ACCEPT_CONTENT_TYPE_JSON_AND_XML = + "application/vnd.gsma.eap-relay.v1.0+json, text/vnd.wap.connectivity-xml"; - @Rule - public final MockitoRule rule = MockitoJUnit.rule(); + @Rule public final MockitoRule rule = MockitoJUnit.rule(); - @Mock - private HttpClient mMockHttpClient; - @Mock - private TelephonyManager mMockTelephonyManager; - @Mock - private TelephonyManager mMockTelephonyManagerForSubId; + @Mock private HttpClient mMockHttpClient; + @Mock private TelephonyManager mMockTelephonyManager; + @Mock private TelephonyManager mMockTelephonyManagerForSubId; + @Captor private ArgumentCaptor<HttpRequest> mHttpRequestCaptor; private Context mContext; private EapAkaApi mEapAkaApi; @@ -113,7 +121,7 @@ public class EapAkaApiTest { ServiceEntitlementRequest.builder().setAuthenticationToken(TOKEN).build(); assertThat(mEapAkaApi.queryEntitlementStatus( - ServiceEntitlement.APP_VOWIFI, TEST_URL, request)) + ImmutableList.of(ServiceEntitlement.APP_VOWIFI), TEST_URL, request)) .isEqualTo(RESPONSE_XML); } @@ -140,11 +148,35 @@ public class EapAkaApiTest { ServiceEntitlementRequest request = ServiceEntitlementRequest.builder().build(); assertThat( - mEapAkaApi.queryEntitlementStatus(ServiceEntitlement.APP_VOWIFI, TEST_URL, request)) + mEapAkaApi.queryEntitlementStatus(ImmutableList.of(ServiceEntitlement.APP_VOWIFI), + TEST_URL, + request)) .isEqualTo(RESPONSE_XML); } @Test + public void queryEntitlementStatus_multipleAppIds_verifyEntitlementUrl() throws Exception { + when(mMockTelephonyManagerForSubId.getSubscriberId()).thenReturn(IMSI); + when(mMockTelephonyManagerForSubId.getImei()).thenReturn(IMEI); + HttpResponse response = + HttpResponse.builder().setContentType(ContentType.XML).setBody(RESPONSE_XML) + .build(); + when(mMockHttpClient.request(any())).thenReturn(response); + + ImmutableList<String> appIds = ImmutableList.of(ServiceEntitlement.APP_VOWIFI, + ServiceEntitlement.APP_VOLTE); + ServiceEntitlementRequest request = + ServiceEntitlementRequest.builder().setAuthenticationToken(TOKEN).build(); + mEapAkaApi.queryEntitlementStatus(appIds, TEST_URL, request); + + verify(mMockHttpClient).request(mHttpRequestCaptor.capture()); + assertThat(mHttpRequestCaptor.getAllValues().get(0).url()) + .contains(ServiceEntitlement.APP_VOWIFI); + assertThat(mHttpRequestCaptor.getAllValues().get(0).url()) + .contains(ServiceEntitlement.APP_VOLTE); + } + + @Test public void queryEntitlementStatus_noAuthenticationTokenContentTypeNotJson_throwException() throws Exception { HttpResponse xmlResponse = @@ -155,7 +187,9 @@ public class EapAkaApiTest { ServiceEntitlementRequest request = ServiceEntitlementRequest.builder().build(); try { - mEapAkaApi.queryEntitlementStatus(ServiceEntitlement.APP_VOWIFI, TEST_URL, request); + mEapAkaApi.queryEntitlementStatus(ImmutableList.of(ServiceEntitlement.APP_VOWIFI), + TEST_URL, + request); fail(); } catch (ServiceEntitlementException exception) { assertThat(exception.getErrorCode()).isEqualTo( @@ -174,7 +208,9 @@ public class EapAkaApiTest { ServiceEntitlementRequest request = ServiceEntitlementRequest.builder().build(); try { - mEapAkaApi.queryEntitlementStatus(ServiceEntitlement.APP_VOWIFI, TEST_URL, request); + mEapAkaApi.queryEntitlementStatus(ImmutableList.of(ServiceEntitlement.APP_VOWIFI), + TEST_URL, + request); fail(); } catch (ServiceEntitlementException exception) { assertThat(exception.getErrorCode()).isEqualTo( |