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