aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsamalin <samalin@google.com>2021-01-29 20:21:14 +0800
committerSama Lin <samalin@google.com>2021-02-05 08:44:42 +0000
commit1cfefabcbe1c33a37832f384572ea77f5373f010 (patch)
tree68785aa78980b20218be483ba17d82dd95e0839e
parent8e241b3c8b1973d4e462f578c861a662d148dd63 (diff)
downloadservice_entitlement-1cfefabcbe1c33a37832f384572ea77f5373f010.tar.gz
Support entitlement status query for multiple app Ids
Bug: 177544547 Test: EapAkaApiTest Change-Id: I588fdb68c9de4f549849cdaaabbb1458cf8ea663
-rw-r--r--java/com/android/libraries/entitlement/ServiceEntitlement.java11
-rw-r--r--java/com/android/libraries/entitlement/eapaka/EapAkaApi.java14
-rw-r--r--tests/src/com/android/libraries/entitlement/ServiceEntitlementTest.java13
-rw-r--r--tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java60
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(