• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.phone.satellite.entitlement;
18 
19 import static com.android.phone.satellite.entitlement.SatelliteEntitlementResult.SATELLITE_ENTITLEMENT_STATUS_DISABLED;
20 import static com.android.phone.satellite.entitlement.SatelliteEntitlementResult.SATELLITE_ENTITLEMENT_STATUS_ENABLED;
21 import static com.android.phone.satellite.entitlement.SatelliteEntitlementResult.SATELLITE_ENTITLEMENT_STATUS_INCOMPATIBLE;
22 import static com.android.phone.satellite.entitlement.SatelliteEntitlementResult.SATELLITE_ENTITLEMENT_STATUS_PROVISIONING;
23 
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26 
27 import androidx.test.ext.junit.runners.AndroidJUnit4;
28 
29 import com.android.internal.telephony.satellite.SatelliteNetworkInfo;
30 import com.android.libraries.entitlement.ServiceEntitlement;
31 
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 
35 import java.util.Arrays;
36 import java.util.List;
37 
38 @RunWith(AndroidJUnit4.class)
39 public class SatelliteEntitlementResponseTest {
40     private static final String TEST_OTHER_APP_ID = "ap201x";
41     private static final List<SatelliteNetworkInfo> TEST_PLMN_DATA_PLAN_TYPE_LIST = Arrays.asList(
42             new SatelliteNetworkInfo("31026", "unmetered"),
43             new SatelliteNetworkInfo("302820", "metered"));
44     private static final List<String> TEST_PLMN_BARRED_LIST = Arrays.asList("31017", "302020");
45     private static final String RESPONSE_WITHOUT_SATELLITE_APP_ID =
46             "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
47                     + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
48                     + TEST_OTHER_APP_ID + "\":{"
49                     + "\"EntitlementStatus\":\"" + SATELLITE_ENTITLEMENT_STATUS_ENABLED + "\"}}";
50     private static final String RESPONSE_WITHOUT_ENTITLEMENT_STATUS =
51             "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
52                     + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
53                     + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{}}";
54 
55     private static final String RESPONSE_WITHOUT_PLMN =
56             "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
57                     + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
58                     + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{"
59                     + "\"EntitlementStatus\":\"" + SATELLITE_ENTITLEMENT_STATUS_ENABLED + "\"}}";
60 
61     private static final String RESPONSE_WITHOUT_PLMN_ALLOWED =
62             "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
63                     + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
64                     + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{"
65                     + "\"EntitlementStatus\":\"" + SATELLITE_ENTITLEMENT_STATUS_ENABLED + "\"" + ","
66                     + "\"PLMNBarred\":[{\"PLMN\":\"31017\"},"
67                     + "{\"PLMN\":\"302020\"}]}}";
68 
69     @Test
testGetSatelliteEntitlementResponse()70     public void testGetSatelliteEntitlementResponse() throws Exception {
71         // Received the body with satellite service enabled.
72         SatelliteEntitlementResponse response = new SatelliteEntitlementResponse(
73                 getResponse(SATELLITE_ENTITLEMENT_STATUS_ENABLED));
74         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
75         assertTrue(response.getPlmnAllowed().size() == 2);
76         assertEquals(TEST_PLMN_DATA_PLAN_TYPE_LIST.get(0).mPlmn,
77                 response.getPlmnAllowed().get(0).mPlmn);
78         assertEquals(TEST_PLMN_DATA_PLAN_TYPE_LIST.get(0).mDataPlanType,
79                 response.getPlmnAllowed().get(0).mDataPlanType);
80         assertEquals(TEST_PLMN_DATA_PLAN_TYPE_LIST.get(1).mPlmn,
81                 response.getPlmnAllowed().get(1).mPlmn);
82         assertEquals(TEST_PLMN_DATA_PLAN_TYPE_LIST.get(1).mDataPlanType,
83                 response.getPlmnAllowed().get(1).mDataPlanType);
84         assertTrue(response.getPlmnBarredList().size() == 2);
85         assertEquals(TEST_PLMN_BARRED_LIST, response.getPlmnBarredList());
86 
87         // Received the empty body.
88         response = new SatelliteEntitlementResponse("");
89         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
90         assertTrue(response.getPlmnAllowed().size() == 0);
91         assertTrue(response.getPlmnBarredList().size() == 0);
92 
93         // Received the body without satellite app id.
94         response = new SatelliteEntitlementResponse(RESPONSE_WITHOUT_SATELLITE_APP_ID);
95         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
96         assertTrue(response.getPlmnAllowed().size() == 0);
97         assertTrue(response.getPlmnBarredList().size() == 0);
98 
99         // Received the body without EntitlementStatus.
100         response = new SatelliteEntitlementResponse(RESPONSE_WITHOUT_ENTITLEMENT_STATUS);
101         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
102         assertTrue(response.getPlmnAllowed().size() == 0);
103         assertTrue(response.getPlmnBarredList().size() == 0);
104 
105         // Received the body with an entitlementStatus value of DISABLED.
106         response = new SatelliteEntitlementResponse(
107                 getResponse(SATELLITE_ENTITLEMENT_STATUS_DISABLED));
108         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
109         assertTrue(response.getPlmnAllowed().size() == 0);
110         assertTrue(response.getPlmnBarredList().size() == 0);
111 
112         // Received the body with an entitlementStatus value of INCOMPATIBLE.
113         response = new SatelliteEntitlementResponse(
114                 getResponse(SATELLITE_ENTITLEMENT_STATUS_INCOMPATIBLE));
115         assertEquals(SATELLITE_ENTITLEMENT_STATUS_INCOMPATIBLE, response.getEntitlementStatus());
116         assertTrue(response.getPlmnAllowed().size() == 0);
117         assertTrue(response.getPlmnBarredList().size() == 0);
118 
119         // Received the body with an entitlementStatus value of PROVISIONING.
120         response = new SatelliteEntitlementResponse(
121                 getResponse(SATELLITE_ENTITLEMENT_STATUS_PROVISIONING));
122         assertEquals(SATELLITE_ENTITLEMENT_STATUS_PROVISIONING, response.getEntitlementStatus());
123         assertTrue(response.getPlmnAllowed().size() == 0);
124         assertTrue(response.getPlmnBarredList().size() == 0);
125 
126         // Received the body without plmn.
127         response = new SatelliteEntitlementResponse(RESPONSE_WITHOUT_PLMN);
128         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
129         assertTrue(response.getPlmnAllowed().size() == 0);
130         assertTrue(response.getPlmnBarredList().size() == 0);
131 
132         // Received the body without plmn allowed key.
133         response = new SatelliteEntitlementResponse(RESPONSE_WITHOUT_PLMN_ALLOWED);
134         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
135         assertTrue(response.getPlmnAllowed().size() == 0);
136         assertTrue(response.getPlmnBarredList().size() == 2);
137         assertEquals(TEST_PLMN_BARRED_LIST, response.getPlmnBarredList());
138 
139         // Received the body without plmn barred key.
140         response = new SatelliteEntitlementResponse(
141                 getChangedAllowedPLMNListResponse(TEST_PLMN_DATA_PLAN_TYPE_LIST.get(0).mPlmn,
142                         TEST_PLMN_DATA_PLAN_TYPE_LIST.get(1).mPlmn));
143         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
144         assertTrue(response.getPlmnAllowed().size() == 2);
145         assertTrue(response.getPlmnBarredList().size() == 0);
146 
147         String plmn = "123456";
148         // Received the allowed plmn list set as 123456, empty string
149         response = new SatelliteEntitlementResponse(
150                 getChangedAllowedPLMNListResponse(plmn, ""));
151         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
152         assertTrue(response.getPlmnAllowed().size() == 1);
153         assertEquals(plmn, response.getPlmnAllowed().get(0).mPlmn);
154 
155         // Received the allowed plmn list set as 123456, empty string
156         response = new SatelliteEntitlementResponse(
157                 getChangedAllowedPLMNListResponse("", plmn));
158         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
159         assertTrue(response.getPlmnAllowed().size() == 1);
160         assertEquals(plmn, response.getPlmnAllowed().get(0).mPlmn);
161 
162         // RReceived the allowed plmn list set as empty strings
163         response = new SatelliteEntitlementResponse(
164                 getChangedAllowedPLMNListResponse("", ""));
165         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
166         assertTrue(response.getPlmnAllowed().size() == 0);
167 
168         // Received the barred plmn list set as 123456, empty string
169         response = new SatelliteEntitlementResponse(
170                 getChangedBarredPLMNListResponse(plmn, ""));
171         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
172         assertTrue(response.getPlmnBarredList().size() == 1);
173         assertEquals(plmn, response.getPlmnBarredList().get(0));
174 
175         // Received the barred plmn list set as empty string, 123456
176         response = new SatelliteEntitlementResponse(
177                 getChangedBarredPLMNListResponse("", plmn));
178         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
179         assertTrue(response.getPlmnBarredList().size() == 1);
180         assertEquals(plmn, response.getPlmnBarredList().get(0));
181 
182         // Received the barred plmn list set as empty strings
183         response = new SatelliteEntitlementResponse(
184                 getChangedBarredPLMNListResponse("", ""));
185         assertEquals(SATELLITE_ENTITLEMENT_STATUS_ENABLED, response.getEntitlementStatus());
186         assertTrue(response.getPlmnBarredList().size() == 0);
187 
188         // Received null
189         response = new SatelliteEntitlementResponse(null);
190         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
191         assertTrue(response.getPlmnAllowed().size() == 0);
192 
193         // Received empty string
194         response = new SatelliteEntitlementResponse("");
195         assertEquals(SATELLITE_ENTITLEMENT_STATUS_DISABLED, response.getEntitlementStatus());
196         assertTrue(response.getPlmnAllowed().size() == 0);
197     }
198 
getResponse(int entitlementStatus)199     private String getResponse(int entitlementStatus) {
200         return "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
201                 + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
202                 + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{"
203                 + "\"EntitlementStatus\":\"" + entitlementStatus + "\""
204                 + getPLMNListOrEmpty(entitlementStatus)
205                 + "}}";
206     }
207 
getPLMNListOrEmpty(int entitlementStatus)208     private String getPLMNListOrEmpty(int entitlementStatus) {
209         return entitlementStatus == SATELLITE_ENTITLEMENT_STATUS_ENABLED ? ","
210                 + "\"PLMNAllowed\":[{\"PLMN\":\"31026\",\"DataPlanType\":\"unmetered\"},"
211                 + "{\"PLMN\":\"302820\",\"DataPlanType\":\"metered\"}],"
212                 + "\"PLMNBarred\":[{\"PLMN\":\"31017\"},"
213                 + "{\"PLMN\":\"302020\"}]" : "";
214     }
215 
getAllowedPlmns(String firstPlmn, String secondPlmn)216     private String getAllowedPlmns(String firstPlmn, String secondPlmn) {
217         return ",\"PLMNAllowed\":[{\"PLMN\":\"" + firstPlmn + "\",\"DataPlanType\":\"unmetered\"},"
218                 + "{\"PLMN\":\"" + secondPlmn + "\",\"DataPlanType\":\"metered\"}]";
219     }
220 
getBarredPlmns(String firstPlmn, String secondPlmn)221     private String getBarredPlmns(String firstPlmn, String secondPlmn) {
222         return ",\"PLMNBarred\":[{\"PLMN\":\"" + firstPlmn + "\"}," + "{\"PLMN\":\"" + secondPlmn
223                 + "\"}]";
224     }
225 
getChangedAllowedPLMNListResponse(String firstPlmn, String secondPlmn)226     private String getChangedAllowedPLMNListResponse(String firstPlmn, String secondPlmn) {
227         return "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
228                 + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
229                 + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{"
230                 + "\"EntitlementStatus\":\"" + SATELLITE_ENTITLEMENT_STATUS_ENABLED + "\""
231                 + getAllowedPlmns(firstPlmn, secondPlmn)
232                 + "}}";
233     }
234 
getChangedBarredPLMNListResponse(String firstPlmn, String secondPlmn)235     private String getChangedBarredPLMNListResponse(String firstPlmn, String secondPlmn) {
236         return "{\"VERS\":{\"version\":\"1\",\"validity\":\"172800\"},"
237                 + "\"TOKEN\":{\"token\":\"ASH127AHHA88SF\"},\""
238                 + ServiceEntitlement.APP_SATELLITE_ENTITLEMENT + "\":{"
239                 + "\"EntitlementStatus\":\"" + SATELLITE_ENTITLEMENT_STATUS_ENABLED + "\""
240                 + ",\"PLMNAllowed\":[{\"PLMN\":\"31026\",\"DataPlanType\":\"unmetered\"},"
241                 + "{\"PLMN\":\"302820\",\"DataPlanType\":\"metered\"}]"
242                 + getBarredPlmns(firstPlmn, secondPlmn)
243                 + "}}";
244     }
245 }
246