1 /*
2 * Copyright (C) 2020 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 #include <radio_hidl_hal_utils_v1_6.h>
18
19 #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
20
21 /*
22 * Test IRadio.setAllowedNetworkTypesBitmap for the response returned.
23 */
TEST_P(RadioHidlTest_v1_6,setAllowedNetworkTypesBitmap)24 TEST_P(RadioHidlTest_v1_6, setAllowedNetworkTypesBitmap) {
25 serial = GetRandomSerialNumber();
26 ::android::hardware::hidl_bitfield<::android::hardware::radio::V1_4::RadioAccessFamily>
27 allowedNetworkTypesBitmap{};
28 allowedNetworkTypesBitmap |= ::android::hardware::radio::V1_4::RadioAccessFamily::LTE;
29
30 radio_v1_6->setAllowedNetworkTypesBitmap(serial, allowedNetworkTypesBitmap);
31
32 EXPECT_EQ(std::cv_status::no_timeout, wait());
33 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
34 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
35 ASSERT_TRUE(
36 CheckAnyOfErrors(radioRsp_v1_6->rspInfo.error,
37 {::android::hardware::radio::V1_6::RadioError::NONE,
38 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
39 ::android::hardware::radio::V1_6::RadioError::OPERATION_NOT_ALLOWED,
40 ::android::hardware::radio::V1_6::RadioError::MODE_NOT_SUPPORTED,
41 ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR,
42 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
43 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
44 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
45 ::android::hardware::radio::V1_6::RadioError::NO_RESOURCES}));
46 }
47
48 /*
49 * Test IRadio.getAllowedNetworkTypesBitmap for the response returned.
50 */
TEST_P(RadioHidlTest_v1_6,getAllowedNetworkTypesBitmap)51 TEST_P(RadioHidlTest_v1_6, getAllowedNetworkTypesBitmap) {
52 serial = GetRandomSerialNumber();
53 ::android::hardware::hidl_bitfield<::android::hardware::radio::V1_4::RadioAccessFamily>
54 allowedNetworkTypesBitmap{};
55 allowedNetworkTypesBitmap |= ::android::hardware::radio::V1_4::RadioAccessFamily::LTE;
56
57 radio_v1_6->setAllowedNetworkTypesBitmap(serial, allowedNetworkTypesBitmap);
58
59 EXPECT_EQ(std::cv_status::no_timeout, wait());
60 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
61 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
62
63 if (radioRsp_v1_6->rspInfo.error == ::android::hardware::radio::V1_6::RadioError::NONE) {
64 sleep(3); // wait for modem
65 serial = GetRandomSerialNumber();
66 radio_v1_6->getAllowedNetworkTypesBitmap(serial);
67
68 EXPECT_EQ(std::cv_status::no_timeout, wait());
69 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
70 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
71 ASSERT_TRUE(CheckAnyOfErrors(
72 radioRsp_v1_6->rspInfo.error,
73 {::android::hardware::radio::V1_6::RadioError::NONE,
74 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
75 ::android::hardware::radio::V1_6::RadioError::OPERATION_NOT_ALLOWED,
76 ::android::hardware::radio::V1_6::RadioError::MODE_NOT_SUPPORTED,
77 ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR,
78 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
79 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
80 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
81 ::android::hardware::radio::V1_6::RadioError::NO_RESOURCES}));
82 }
83 }
84
85 /*
86 * Test IRadio.setupDataCall_1_6() for the response returned.
87 */
TEST_P(RadioHidlTest_v1_6,setupDataCall_1_6)88 TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6) {
89 serial = GetRandomSerialNumber();
90
91 ::android::hardware::radio::V1_5::AccessNetwork accessNetwork =
92 ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN;
93
94 android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
95 memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
96 dataProfileInfo.profileId = DataProfileId::DEFAULT;
97 dataProfileInfo.apn = hidl_string("internet");
98 dataProfileInfo.protocol = PdpProtocolType::IP;
99 dataProfileInfo.roamingProtocol = PdpProtocolType::IP;
100 dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
101 dataProfileInfo.user = hidl_string("username");
102 dataProfileInfo.password = hidl_string("password");
103 dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
104 dataProfileInfo.maxConnsTime = 300;
105 dataProfileInfo.maxConns = 20;
106 dataProfileInfo.waitTime = 0;
107 dataProfileInfo.enabled = true;
108 dataProfileInfo.supportedApnTypesBitmap = 320;
109 dataProfileInfo.bearerBitmap = 161543;
110 dataProfileInfo.mtuV4 = 0;
111 dataProfileInfo.mtuV6 = 0;
112 dataProfileInfo.preferred = true;
113 dataProfileInfo.persistent = false;
114
115 bool roamingAllowed = false;
116
117 std::vector<::android::hardware::radio::V1_5::LinkAddress> addresses = {};
118 std::vector<hidl_string> dnses = {};
119
120 ::android::hardware::radio::V1_2::DataRequestReason reason =
121 ::android::hardware::radio::V1_2::DataRequestReason::NORMAL;
122
123 ::android::hardware::radio::V1_6::OptionalSliceInfo optionalSliceInfo;
124 memset(&optionalSliceInfo, 0, sizeof(optionalSliceInfo));
125
126 ::android::hardware::radio::V1_6::OptionalTrafficDescriptor optionalTrafficDescriptor;
127 memset(&optionalTrafficDescriptor, 0, sizeof(optionalTrafficDescriptor));
128
129 bool matchAllRuleAllowed = true;
130
131 Return<void> res =
132 radio_v1_6->setupDataCall_1_6(serial, accessNetwork, dataProfileInfo, roamingAllowed,
133 reason, addresses, dnses, -1, optionalSliceInfo,
134 optionalTrafficDescriptor, matchAllRuleAllowed);
135 ASSERT_OK(res);
136
137 EXPECT_EQ(std::cv_status::no_timeout, wait());
138 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
139 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
140 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
141 ASSERT_TRUE(CheckAnyOfErrors(
142 radioRsp_v1_6->rspInfo.error,
143 {::android::hardware::radio::V1_6::RadioError::SIM_ABSENT,
144 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
145 ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
146 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
147 ASSERT_TRUE(CheckAnyOfErrors(
148 radioRsp_v1_6->rspInfo.error,
149 {::android::hardware::radio::V1_6::RadioError::NONE,
150 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
151 ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
152 }
153 }
154
TEST_P(RadioHidlTest_v1_6,setupDataCall_1_6_osAppId)155 TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6_osAppId) {
156 serial = GetRandomSerialNumber();
157
158 ::android::hardware::radio::V1_5::AccessNetwork accessNetwork =
159 ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN;
160
161 android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
162 memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
163 dataProfileInfo.profileId = DataProfileId::DEFAULT;
164 dataProfileInfo.apn = hidl_string("internet");
165 dataProfileInfo.protocol = PdpProtocolType::IP;
166 dataProfileInfo.roamingProtocol = PdpProtocolType::IP;
167 dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
168 dataProfileInfo.user = hidl_string("username");
169 dataProfileInfo.password = hidl_string("password");
170 dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
171 dataProfileInfo.maxConnsTime = 300;
172 dataProfileInfo.maxConns = 20;
173 dataProfileInfo.waitTime = 0;
174 dataProfileInfo.enabled = true;
175 dataProfileInfo.supportedApnTypesBitmap = 320;
176 dataProfileInfo.bearerBitmap = 161543;
177 dataProfileInfo.mtuV4 = 0;
178 dataProfileInfo.mtuV6 = 0;
179 dataProfileInfo.preferred = true;
180 dataProfileInfo.persistent = false;
181
182 bool roamingAllowed = false;
183
184 std::vector<::android::hardware::radio::V1_5::LinkAddress> addresses = {};
185 std::vector<hidl_string> dnses = {};
186
187 ::android::hardware::radio::V1_2::DataRequestReason reason =
188 ::android::hardware::radio::V1_2::DataRequestReason::NORMAL;
189
190 ::android::hardware::radio::V1_6::OptionalSliceInfo optionalSliceInfo;
191 memset(&optionalSliceInfo, 0, sizeof(optionalSliceInfo));
192
193 ::android::hardware::radio::V1_6::OptionalTrafficDescriptor optionalTrafficDescriptor;
194 memset(&optionalTrafficDescriptor, 0, sizeof(optionalTrafficDescriptor));
195
196 ::android::hardware::radio::V1_6::TrafficDescriptor trafficDescriptor;
197 ::android::hardware::radio::V1_6::OsAppId osAppId;
198 osAppId.osAppId = 1;
199 trafficDescriptor.osAppId.value(osAppId);
200 optionalTrafficDescriptor.value(trafficDescriptor);
201
202 bool matchAllRuleAllowed = true;
203
204 Return<void> res =
205 radio_v1_6->setupDataCall_1_6(serial, accessNetwork, dataProfileInfo, roamingAllowed,
206 reason, addresses, dnses, -1, optionalSliceInfo,
207 optionalTrafficDescriptor, matchAllRuleAllowed);
208 ASSERT_OK(res);
209
210 EXPECT_EQ(std::cv_status::no_timeout, wait());
211 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
212 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
213 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
214 ASSERT_TRUE(CheckAnyOfErrors(
215 radioRsp_v1_6->rspInfo.error,
216 {::android::hardware::radio::V1_6::RadioError::SIM_ABSENT,
217 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
218 ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
219 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
220 ASSERT_TRUE(CheckAnyOfErrors(
221 radioRsp_v1_6->rspInfo.error,
222 {::android::hardware::radio::V1_6::RadioError::NONE,
223 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
224 ::android::hardware::radio::V1_6::RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
225 if (radioRsp_v1_6->setupDataCallResult.trafficDescriptors.size() <= 0) {
226 return;
227 }
228 EXPECT_EQ(optionalTrafficDescriptor.value().osAppId.value().osAppId,
229 radioRsp_v1_6->setupDataCallResult.trafficDescriptors[0].osAppId.value().osAppId);
230 }
231 }
232
233 /*
234 * Test IRadio.getSlicingConfig() for the response returned.
235 */
TEST_P(RadioHidlTest_v1_6,getSlicingConfig)236 TEST_P(RadioHidlTest_v1_6, getSlicingConfig) {
237 serial = GetRandomSerialNumber();
238 radio_v1_6->getSlicingConfig(serial);
239 EXPECT_EQ(std::cv_status::no_timeout, wait());
240 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
241 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
242 ASSERT_TRUE(CheckAnyOfErrors(
243 radioRsp_v1_6->rspInfo.error,
244 {::android::hardware::radio::V1_6::RadioError::NONE,
245 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
246 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
247 ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR,
248 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR}));
249 }
250
251 /*
252 * Test IRadio_1_6.sendSms() for the response returned.
253 */
TEST_P(RadioHidlTest_v1_6,sendSms_1_6)254 TEST_P(RadioHidlTest_v1_6, sendSms_1_6) {
255 LOG(DEBUG) << "sendSms";
256 serial = GetRandomSerialNumber();
257 GsmSmsMessage msg;
258 msg.smscPdu = "";
259 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
260
261 radio_v1_6->sendSms_1_6(serial, msg);
262
263 EXPECT_EQ(std::cv_status::no_timeout, wait());
264 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
265 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
266
267 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
268 ASSERT_TRUE(CheckAnyOfErrors(
269 radioRsp_v1_6->rspInfo.error,
270 {::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
271 ::android::hardware::radio::V1_6::RadioError::INVALID_STATE,
272 ::android::hardware::radio::V1_6::RadioError::SIM_ABSENT},
273 CHECK_GENERAL_ERROR));
274 EXPECT_EQ(0, radioRsp_v1_6->sendSmsResult.errorCode);
275 }
276 LOG(DEBUG) << "sendSms finished";
277 }
278
279 /*
280 * Test IRadio_1_6.sendSmsExpectMore() for the response returned.
281 */
TEST_P(RadioHidlTest_v1_6,sendSmsExpectMore_1_6)282 TEST_P(RadioHidlTest_v1_6, sendSmsExpectMore_1_6) {
283 LOG(DEBUG) << "sendSmsExpectMore";
284 serial = GetRandomSerialNumber();
285 GsmSmsMessage msg;
286 msg.smscPdu = "";
287 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
288
289 radio_v1_6->sendSmsExpectMore_1_6(serial, msg);
290
291 EXPECT_EQ(std::cv_status::no_timeout, wait());
292 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
293 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
294
295 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
296 ASSERT_TRUE(CheckAnyOfErrors(
297 radioRsp_v1_6->rspInfo.error,
298 {::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
299 ::android::hardware::radio::V1_6::RadioError::INVALID_STATE,
300 ::android::hardware::radio::V1_6::RadioError::SIM_ABSENT},
301 CHECK_GENERAL_ERROR));
302 }
303 LOG(DEBUG) << "sendSmsExpectMore finished";
304 }
305
306 /*
307 * Test IRadio_1_6.sendCdmaSms() for the response returned.
308 */
TEST_P(RadioHidlTest_v1_6,sendCdmaSms_1_6)309 TEST_P(RadioHidlTest_v1_6, sendCdmaSms_1_6) {
310 LOG(DEBUG) << "sendCdmaSms";
311 serial = GetRandomSerialNumber();
312
313 // Create a CdmaSmsAddress
314 CdmaSmsAddress cdmaSmsAddress;
315 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
316 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
317 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
318 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
319 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
320
321 // Create a CdmaSmsSubAddress
322 CdmaSmsSubaddress cdmaSmsSubaddress;
323 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
324 cdmaSmsSubaddress.odd = false;
325 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
326
327 // Create a CdmaSmsMessage
328 android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
329 cdmaSmsMessage.teleserviceId = 4098;
330 cdmaSmsMessage.isServicePresent = false;
331 cdmaSmsMessage.serviceCategory = 0;
332 cdmaSmsMessage.address = cdmaSmsAddress;
333 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
334 cdmaSmsMessage.bearerData =
335 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
336
337 radio_v1_6->sendCdmaSms_1_6(serial, cdmaSmsMessage);
338
339 EXPECT_EQ(std::cv_status::no_timeout, wait());
340 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
341 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
342
343 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
344 ASSERT_TRUE(CheckAnyOfErrors(
345 radioRsp_v1_6->rspInfo.error,
346 {::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
347 ::android::hardware::radio::V1_6::RadioError::INVALID_STATE,
348 ::android::hardware::radio::V1_6::RadioError::SIM_ABSENT},
349 CHECK_GENERAL_ERROR));
350 }
351 LOG(DEBUG) << "sendCdmaSms finished";
352 }
353
354 /*
355 * Test IRadio_1_6.sendCdmaSmsExpectMore() for the response returned.
356 */
TEST_P(RadioHidlTest_v1_6,sendCdmaSmsExpectMore_1_6)357 TEST_P(RadioHidlTest_v1_6, sendCdmaSmsExpectMore_1_6) {
358 serial = GetRandomSerialNumber();
359
360 // Create a CdmaSmsAddress
361 CdmaSmsAddress cdmaSmsAddress;
362 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
363 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
364 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
365 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
366 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
367
368 // Create a CdmaSmsSubAddress
369 CdmaSmsSubaddress cdmaSmsSubaddress;
370 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
371 cdmaSmsSubaddress.odd = false;
372 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
373
374 // Create a CdmaSmsMessage
375 android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
376 cdmaSmsMessage.teleserviceId = 4098;
377 cdmaSmsMessage.isServicePresent = false;
378 cdmaSmsMessage.serviceCategory = 0;
379 cdmaSmsMessage.address = cdmaSmsAddress;
380 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
381 cdmaSmsMessage.bearerData =
382 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
383
384 radio_v1_6->sendCdmaSmsExpectMore_1_6(serial, cdmaSmsMessage);
385
386 EXPECT_EQ(std::cv_status::no_timeout, wait());
387 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
388 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
389
390 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
391 ASSERT_TRUE(CheckAnyOfErrors(
392 radioRsp_v1_6->rspInfo.error,
393 {::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
394 ::android::hardware::radio::V1_6::RadioError::INVALID_STATE,
395 ::android::hardware::radio::V1_6::RadioError::SIM_ABSENT},
396 CHECK_GENERAL_ERROR));
397 }
398 }
399
400 /*
401 * Test IRadio.setRadioPower_1_6() for the response returned by
402 * IRadio.setRadioPowerResponse_1_6().
403 */
TEST_P(RadioHidlTest_v1_6,setRadioPower_1_6_emergencyCall_cancelled)404 TEST_P(RadioHidlTest_v1_6, setRadioPower_1_6_emergencyCall_cancelled) {
405 // Set radio power to off.
406 serial = GetRandomSerialNumber();
407 radio_v1_6->setRadioPower_1_6(serial, false, false, false);
408 EXPECT_EQ(std::cv_status::no_timeout, wait());
409 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
410 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
411 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
412
413 // Set radio power to on with forEmergencyCall being true. This should put modem to only scan
414 // emergency call bands.
415 serial = GetRandomSerialNumber();
416 radio_v1_6->setRadioPower_1_6(serial, true, true, true);
417 EXPECT_EQ(std::cv_status::no_timeout, wait());
418 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
419 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
420 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
421
422 // Set radio power to on with forEmergencyCall being false. This should put modem in regular
423 // operation modem.
424 serial = GetRandomSerialNumber();
425 radio_v1_6->setRadioPower_1_6(serial, true, false, false);
426 EXPECT_EQ(std::cv_status::no_timeout, wait());
427 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
428 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
429 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
430 }
431
432 /*
433 * Test IRadio.setNrDualConnectivityState() for the response returned.
434 */
TEST_P(RadioHidlTest_v1_6,setNrDualConnectivityState)435 TEST_P(RadioHidlTest_v1_6, setNrDualConnectivityState) {
436 serial = GetRandomSerialNumber();
437
438 Return<void> res =
439 radio_v1_6->setNrDualConnectivityState(serial, NrDualConnectivityState::DISABLE);
440 ASSERT_OK(res);
441
442 EXPECT_EQ(std::cv_status::no_timeout, wait());
443 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
444 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
445 if (getRadioHalCapabilities()) {
446 ASSERT_TRUE(CheckAnyOfErrors(
447 radioRsp_v1_6->rspInfo.error,
448 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED}));
449 } else {
450 ASSERT_TRUE(CheckAnyOfErrors(
451 radioRsp_v1_6->rspInfo.error,
452 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
453 ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR,
454 ::android::hardware::radio::V1_6::RadioError::INVALID_STATE,
455 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
456 ::android::hardware::radio::V1_6::RadioError::NONE}));
457 }
458 }
459
460 /*
461 * Test IRadio.isNrDualConnectivityEnabled() for the response returned.
462 */
TEST_P(RadioHidlTest_v1_6,isNrDualConnectivityEnabled)463 TEST_P(RadioHidlTest_v1_6, isNrDualConnectivityEnabled) {
464 serial = GetRandomSerialNumber();
465
466 Return<void> res = radio_v1_6->isNrDualConnectivityEnabled(serial);
467 ASSERT_OK(res);
468
469 EXPECT_EQ(std::cv_status::no_timeout, wait());
470 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
471 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
472 if (getRadioHalCapabilities()) {
473 ASSERT_TRUE(CheckAnyOfErrors(
474 radioRsp_v1_6->rspInfo.error,
475 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED}));
476 } else {
477 ASSERT_TRUE(
478 CheckAnyOfErrors(radioRsp_v1_6->rspInfo.error,
479 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
480 ::android::hardware::radio::V1_6::RadioError::INTERNAL_ERR,
481 ::android::hardware::radio::V1_6::RadioError::NONE}));
482 }
483 }
484
485 /*
486 * Test IRadio.setDataThrottling() for the response returned.
487 */
TEST_P(RadioHidlTest_v1_6,setDataThrottling)488 TEST_P(RadioHidlTest_v1_6, setDataThrottling) {
489 serial = GetRandomSerialNumber();
490
491 Return<void> res = radio_v1_6->setDataThrottling(
492 serial, DataThrottlingAction::THROTTLE_SECONDARY_CARRIER, 60000);
493 ASSERT_OK(res);
494
495 EXPECT_EQ(std::cv_status::no_timeout, wait());
496 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
497 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
498 if (getRadioHalCapabilities()) {
499 ASSERT_TRUE(CheckAnyOfErrors(
500 radioRsp_v1_6->rspInfo.error,
501 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
502 ::android::hardware::radio::V1_6::RadioError::NONE}));
503 } else {
504 ASSERT_TRUE(CheckAnyOfErrors(
505 radioRsp_v1_6->rspInfo.error,
506 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
507 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
508 ::android::hardware::radio::V1_6::RadioError::NONE,
509 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS}));
510 }
511
512 sleep(1);
513 serial = GetRandomSerialNumber();
514
515 res = radio_v1_6->setDataThrottling(serial, DataThrottlingAction::THROTTLE_ANCHOR_CARRIER,
516 60000);
517 ASSERT_OK(res);
518 EXPECT_EQ(std::cv_status::no_timeout, wait());
519 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
520 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
521 if (getRadioHalCapabilities()) {
522 ASSERT_TRUE(CheckAnyOfErrors(
523 radioRsp_v1_6->rspInfo.error,
524 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
525 ::android::hardware::radio::V1_6::RadioError::NONE}));
526 } else {
527 ASSERT_TRUE(CheckAnyOfErrors(
528 radioRsp_v1_6->rspInfo.error,
529 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
530 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
531 ::android::hardware::radio::V1_6::RadioError::NONE,
532 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS}));
533 }
534
535 sleep(1);
536 serial = GetRandomSerialNumber();
537
538 res = radio_v1_6->setDataThrottling(serial, DataThrottlingAction::HOLD, 60000);
539 ASSERT_OK(res);
540
541 EXPECT_EQ(std::cv_status::no_timeout, wait());
542 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
543 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
544 if (getRadioHalCapabilities()) {
545 ASSERT_TRUE(CheckAnyOfErrors(
546 radioRsp_v1_6->rspInfo.error,
547 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
548 ::android::hardware::radio::V1_6::RadioError::NONE}));
549 } else {
550 ASSERT_TRUE(CheckAnyOfErrors(
551 radioRsp_v1_6->rspInfo.error,
552 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
553 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
554 ::android::hardware::radio::V1_6::RadioError::NONE,
555 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS}));
556 }
557
558 sleep(1);
559 serial = GetRandomSerialNumber();
560
561 res = radio_v1_6->setDataThrottling(serial, DataThrottlingAction::NO_DATA_THROTTLING, 60000);
562 ASSERT_OK(res);
563 EXPECT_EQ(std::cv_status::no_timeout, wait());
564 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
565 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
566 if (getRadioHalCapabilities()) {
567 ASSERT_TRUE(CheckAnyOfErrors(
568 radioRsp_v1_6->rspInfo.error,
569 {::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED,
570 ::android::hardware::radio::V1_6::RadioError::NONE}));
571 } else {
572 ASSERT_TRUE(CheckAnyOfErrors(
573 radioRsp_v1_6->rspInfo.error,
574 {::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
575 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
576 ::android::hardware::radio::V1_6::RadioError::NONE,
577 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS}));
578 }
579
580 sleep(1);
581 }
582
583 /*
584 * Test IRadio.setSimCardPower_1_6() for the response returned.
585 */
TEST_P(RadioHidlTest_v1_6,setSimCardPower_1_6)586 TEST_P(RadioHidlTest_v1_6, setSimCardPower_1_6) {
587 /* Test setSimCardPower power down */
588 serial = GetRandomSerialNumber();
589 radio_v1_6->setSimCardPower_1_6(serial, CardPowerState::POWER_DOWN);
590 EXPECT_EQ(std::cv_status::no_timeout, wait());
591 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
592 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
593 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_6->rspInfo.error,
594 {::android::hardware::radio::V1_6::RadioError::NONE,
595 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
596 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
597 ::android::hardware::radio::V1_6::RadioError::SIM_ERR}));
598
599 // setSimCardPower_1_6 does not return until the request is handled, and should not trigger
600 // CardState::ABSENT when turning off power
601 if (radioRsp_v1_6->rspInfo.error == ::android::hardware::radio::V1_6::RadioError::NONE) {
602 /* Wait some time for setting sim power down and then verify it */
603 updateSimCardStatus();
604 // We cannot assert the consistency of CardState here due to b/203031664
605 // EXPECT_EQ(CardState::PRESENT, cardStatus.base.base.base.cardState);
606 // applications should be an empty vector of AppStatus
607 EXPECT_EQ(0, cardStatus.applications.size());
608 }
609
610 // Give some time for modem to fully power down the SIM card
611 sleep(MODEM_SET_SIM_POWER_DELAY_IN_SECONDS);
612
613 /* Test setSimCardPower power up */
614 serial = GetRandomSerialNumber();
615 radio_v1_6->setSimCardPower_1_6(serial, CardPowerState::POWER_UP);
616 EXPECT_EQ(std::cv_status::no_timeout, wait());
617 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
618 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
619 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_6->rspInfo.error,
620 {::android::hardware::radio::V1_6::RadioError::NONE,
621 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
622 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
623 ::android::hardware::radio::V1_6::RadioError::SIM_ERR}));
624
625 // Give some time for modem to fully power up the SIM card
626 sleep(MODEM_SET_SIM_POWER_DELAY_IN_SECONDS);
627
628 // setSimCardPower_1_6 does not return until the request is handled. Just verify that we still
629 // have CardState::PRESENT after turning the power back on
630 if (radioRsp_v1_6->rspInfo.error == ::android::hardware::radio::V1_6::RadioError::NONE) {
631 updateSimCardStatus();
632 EXPECT_EQ(CardState::PRESENT, cardStatus.base.base.base.cardState);
633 }
634 }
635
636 /*
637 * Test IRadio.emergencyDial() for the response returned.
638 */
TEST_P(RadioHidlTest_v1_6,emergencyDial_1_6)639 TEST_P(RadioHidlTest_v1_6, emergencyDial_1_6) {
640 if (!deviceSupportsFeature(FEATURE_VOICE_CALL)) {
641 ALOGI("Skipping emergencyDial because voice call is not supported in device");
642 return;
643 } else if (!deviceSupportsFeature(FEATURE_TELEPHONY_GSM) &&
644 !deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
645 ALOGI("Skipping emergencyDial because gsm/cdma radio is not supported in device");
646 return;
647 } else {
648 ALOGI("Running emergencyDial because voice call is supported in device");
649 }
650
651 serial = GetRandomSerialNumber();
652
653 ::android::hardware::radio::V1_0::Dial dialInfo;
654 dialInfo.address = hidl_string("911");
655 int categories = static_cast<int>(
656 ::android::hardware::radio::V1_4::EmergencyServiceCategory::UNSPECIFIED);
657 std::vector<hidl_string> urns = {""};
658 ::android::hardware::radio::V1_4::EmergencyCallRouting routing =
659 ::android::hardware::radio::V1_4::EmergencyCallRouting::UNKNOWN;
660
661 Return<void> res =
662 radio_v1_6->emergencyDial_1_6(serial, dialInfo, categories, urns, routing, true, true);
663 ASSERT_OK(res);
664 EXPECT_EQ(std::cv_status::no_timeout, wait());
665 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo_v1_0.type);
666 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo_v1_0.serial);
667
668 ALOGI("emergencyDial, rspInfo_v1_0.error = %s\n",
669 toString(radioRsp_v1_6->rspInfo_v1_0.error).c_str());
670
671 ::android::hardware::radio::V1_0::RadioError rspEmergencyDial =
672 radioRsp_v1_6->rspInfo_v1_0.error;
673 // In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
674 // or Emergency_Only.
675 if (isDsDsEnabled() || isTsTsEnabled()) {
676 serial = GetRandomSerialNumber();
677 radio_v1_6->getVoiceRegistrationState_1_6(serial);
678 EXPECT_EQ(std::cv_status::no_timeout, wait());
679 if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
680 isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
681 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
682 }
683 } else {
684 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
685 }
686
687 // Give some time for modem to establish the emergency call channel.
688 sleep(MODEM_EMERGENCY_CALL_ESTABLISH_TIME);
689
690 // Disconnect all the potential established calls to prevent them affecting other tests.
691 clearPotentialEstablishedCalls();
692 }
693
694 /*
695 * Test IRadio.emergencyDial() with specified service and its response returned.
696 */
TEST_P(RadioHidlTest_v1_6,emergencyDial_1_6_withServices)697 TEST_P(RadioHidlTest_v1_6, emergencyDial_1_6_withServices) {
698 if (!deviceSupportsFeature(FEATURE_VOICE_CALL)) {
699 ALOGI("Skipping emergencyDial because voice call is not supported in device");
700 return;
701 } else if (!deviceSupportsFeature(FEATURE_TELEPHONY_GSM) &&
702 !deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
703 ALOGI("Skipping emergencyDial because gsm/cdma radio is not supported in device");
704 return;
705 } else {
706 ALOGI("Running emergencyDial because voice call is supported in device");
707 }
708
709 serial = GetRandomSerialNumber();
710
711 ::android::hardware::radio::V1_0::Dial dialInfo;
712 dialInfo.address = hidl_string("911");
713 int categories =
714 static_cast<int>(::android::hardware::radio::V1_4::EmergencyServiceCategory::AMBULANCE);
715 std::vector<hidl_string> urns = {"urn:service:sos.ambulance"};
716 ::android::hardware::radio::V1_4::EmergencyCallRouting routing =
717 ::android::hardware::radio::V1_4::EmergencyCallRouting::UNKNOWN;
718
719 Return<void> res =
720 radio_v1_6->emergencyDial_1_6(serial, dialInfo, categories, urns, routing, true, true);
721 ASSERT_OK(res);
722 EXPECT_EQ(std::cv_status::no_timeout, wait());
723 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo_v1_0.type);
724 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo_v1_0.serial);
725
726 ALOGI("emergencyDial_withServices, rspInfo_v1_0.error = %s\n",
727 toString(radioRsp_v1_6->rspInfo_v1_0.error).c_str());
728 ::android::hardware::radio::V1_0::RadioError rspEmergencyDial =
729 radioRsp_v1_6->rspInfo_v1_0.error;
730
731 // In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
732 // or Emergency_Only.
733 if (isDsDsEnabled() || isTsTsEnabled()) {
734 serial = GetRandomSerialNumber();
735 radio_v1_6->getVoiceRegistrationState_1_6(serial);
736 EXPECT_EQ(std::cv_status::no_timeout, wait());
737 if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
738 isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
739 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
740 }
741 } else {
742 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
743 }
744 // Give some time for modem to establish the emergency call channel.
745 sleep(MODEM_EMERGENCY_CALL_ESTABLISH_TIME);
746
747 // Disconnect all the potential established calls to prevent them affecting other tests.
748 clearPotentialEstablishedCalls();
749 }
750
751 /*
752 * Test IRadio.emergencyDial() with known emergency call routing and its response returned.
753 */
TEST_P(RadioHidlTest_v1_6,emergencyDial_1_6_withEmergencyRouting)754 TEST_P(RadioHidlTest_v1_6, emergencyDial_1_6_withEmergencyRouting) {
755 if (!deviceSupportsFeature(FEATURE_VOICE_CALL)) {
756 ALOGI("Skipping emergencyDial because voice call is not supported in device");
757 return;
758 } else if (!deviceSupportsFeature(FEATURE_TELEPHONY_GSM) &&
759 !deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
760 ALOGI("Skipping emergencyDial because gsm/cdma radio is not supported in device");
761 return;
762 } else {
763 ALOGI("Running emergencyDial because voice call is supported in device");
764 }
765
766 serial = GetRandomSerialNumber();
767
768 ::android::hardware::radio::V1_0::Dial dialInfo;
769 dialInfo.address = hidl_string("911");
770 int categories = static_cast<int>(
771 ::android::hardware::radio::V1_4::EmergencyServiceCategory::UNSPECIFIED);
772 std::vector<hidl_string> urns = {""};
773 ::android::hardware::radio::V1_4::EmergencyCallRouting routing =
774 ::android::hardware::radio::V1_4::EmergencyCallRouting::EMERGENCY;
775
776 Return<void> res =
777 radio_v1_6->emergencyDial_1_6(serial, dialInfo, categories, urns, routing, true, true);
778 ASSERT_OK(res);
779 EXPECT_EQ(std::cv_status::no_timeout, wait());
780 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo_v1_0.type);
781 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo_v1_0.serial);
782
783 ALOGI("emergencyDial_withEmergencyRouting, rspInfo_v1_0.error = %s\n",
784 toString(radioRsp_v1_6->rspInfo_v1_0.error).c_str());
785 ::android::hardware::radio::V1_0::RadioError rspEmergencyDial =
786 radioRsp_v1_6->rspInfo_v1_0.error;
787
788 // In DSDS or TSTS, we only check the result if the current slot is IN_SERVICE
789 // or Emergency_Only.
790 if (isDsDsEnabled() || isTsTsEnabled()) {
791 serial = GetRandomSerialNumber();
792 radio_v1_6->getVoiceRegistrationState_1_6(serial);
793 EXPECT_EQ(std::cv_status::no_timeout, wait());
794 if (isVoiceEmergencyOnly(radioRsp_v1_6->voiceRegResp.regState) ||
795 isVoiceInService(radioRsp_v1_6->voiceRegResp.regState)) {
796 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
797 }
798 } else {
799 EXPECT_EQ(::android::hardware::radio::V1_0::RadioError::NONE, rspEmergencyDial);
800 }
801
802 // Give some time for modem to establish the emergency call channel.
803 sleep(MODEM_EMERGENCY_CALL_ESTABLISH_TIME);
804
805 // Disconnect all the potential established calls to prevent them affecting other tests.
806 clearPotentialEstablishedCalls();
807 }
808
809 /*
810 * Test IRadio.getCurrentCalls_1_6() for the response returned.
811 */
TEST_P(RadioHidlTest_v1_6,getCurrentCalls_1_6)812 TEST_P(RadioHidlTest_v1_6, getCurrentCalls_1_6) {
813 serial = GetRandomSerialNumber();
814 radio_v1_6->getCurrentCalls_1_6(serial);
815 EXPECT_EQ(std::cv_status::no_timeout, wait());
816 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
817 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
818 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
819 }
820
821 /*
822 * Test IRadio.setCarrierInfoForImsiEncryption_1_6() for the response returned.
823 */
TEST_P(RadioHidlTest_v1_6,setCarrierInfoForImsiEncryption_1_6)824 TEST_P(RadioHidlTest_v1_6, setCarrierInfoForImsiEncryption_1_6) {
825 serial = GetRandomSerialNumber();
826 ::android::hardware::radio::V1_6::ImsiEncryptionInfo imsiInfo;
827 imsiInfo.base.mcc = "310";
828 imsiInfo.base.mnc = "004";
829 imsiInfo.base.carrierKey = (std::vector<uint8_t>){1, 2, 3, 4, 5, 6};
830 imsiInfo.base.keyIdentifier = "Test";
831 imsiInfo.base.expirationTime = 20180101;
832 imsiInfo.keyType = PublicKeyType::EPDG;
833
834 radio_v1_6->setCarrierInfoForImsiEncryption_1_6(serial, imsiInfo);
835 EXPECT_EQ(std::cv_status::no_timeout, wait());
836 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo_v1_0.type);
837 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo_v1_0.serial);
838
839 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
840 ASSERT_TRUE(CheckAnyOfErrors(
841 radioRsp_v1_6->rspInfo.error,
842 {::android::hardware::radio::V1_6::RadioError::NONE,
843 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED}));
844 }
845 }
846
847 /*
848 * Test IRadio.getSimPhonebookRecords() for the response returned.
849 */
TEST_P(RadioHidlTest_v1_6,getSimPhonebookRecords)850 TEST_P(RadioHidlTest_v1_6, getSimPhonebookRecords) {
851 serial = GetRandomSerialNumber();
852 radio_v1_6->getSimPhonebookRecords(serial);
853 EXPECT_EQ(std::cv_status::no_timeout, wait());
854 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
855 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
856 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
857 ASSERT_TRUE(CheckAnyOfErrors(
858 radioRsp_v1_6->rspInfo.error,
859 {::android::hardware::radio::V1_6::RadioError::INVALID_SIM_STATE,
860 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
861 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
862 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
863 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
864 CHECK_GENERAL_ERROR));
865 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
866 ASSERT_TRUE(CheckAnyOfErrors(
867 radioRsp_v1_6->rspInfo.error,
868 {::android::hardware::radio::V1_6::RadioError::NONE,
869 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
870 CHECK_GENERAL_ERROR));
871 }
872 }
873
874 /*
875 * Test IRadio.getSimPhonebookCapacity for the response returned.
876 */
TEST_P(RadioHidlTest_v1_6,getSimPhonebookCapacity)877 TEST_P(RadioHidlTest_v1_6, getSimPhonebookCapacity) {
878 serial = GetRandomSerialNumber();
879 radio_v1_6->getSimPhonebookCapacity(serial);
880 EXPECT_EQ(std::cv_status::no_timeout, wait());
881 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
882 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
883 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
884 ASSERT_TRUE(CheckAnyOfErrors(
885 radioRsp_v1_6->rspInfo.error,
886 {::android::hardware::radio::V1_6::RadioError::INVALID_SIM_STATE,
887 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
888 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
889 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
890 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
891 CHECK_GENERAL_ERROR));
892 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
893 ASSERT_TRUE(CheckAnyOfErrors(
894 radioRsp_v1_6->rspInfo.error,
895 {::android::hardware::radio::V1_6::RadioError::NONE,
896 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
897 CHECK_GENERAL_ERROR));
898
899 ::android::hardware::radio::V1_6::PhonebookCapacity pbCapacity =
900 radioRsp_v1_6->capacity;
901 if(pbCapacity.maxAdnRecords > 0) {
902 EXPECT_TRUE(pbCapacity.maxNameLen > 0 && pbCapacity.maxNumberLen > 0);
903 EXPECT_TRUE(pbCapacity.usedAdnRecords <= pbCapacity.maxAdnRecords);
904 }
905
906 if(pbCapacity.maxEmailRecords > 0) {
907 EXPECT_TRUE(pbCapacity.maxEmailLen > 0);
908 EXPECT_TRUE(pbCapacity.usedEmailRecords <= pbCapacity.maxEmailRecords);
909 }
910
911 if(pbCapacity.maxAdditionalNumberRecords > 0) {
912 EXPECT_TRUE(pbCapacity.maxAdditionalNumberLen > 0);
913 EXPECT_TRUE(pbCapacity.usedAdditionalNumberRecords <= pbCapacity.maxAdditionalNumberRecords);
914 }
915 }
916 }
917
918 /*
919 * Test IRadio.updateSimPhonebookRecords() for the response returned.
920 */
TEST_P(RadioHidlTest_v1_6,updateSimPhonebookRecords)921 TEST_P(RadioHidlTest_v1_6, updateSimPhonebookRecords) {
922 serial = GetRandomSerialNumber();
923 radio_v1_6->getSimPhonebookCapacity(serial);
924 EXPECT_EQ(std::cv_status::no_timeout, wait());
925 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
926 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
927 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
928 ASSERT_TRUE(CheckAnyOfErrors(
929 radioRsp_v1_6->rspInfo.error,
930 {::android::hardware::radio::V1_6::RadioError::INVALID_SIM_STATE,
931 ::android::hardware::radio::V1_6::RadioError::RADIO_NOT_AVAILABLE,
932 ::android::hardware::radio::V1_6::RadioError::MODEM_ERR,
933 ::android::hardware::radio::V1_6::RadioError::INVALID_ARGUMENTS,
934 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
935 CHECK_GENERAL_ERROR));
936 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
937 ASSERT_TRUE(CheckAnyOfErrors(
938 radioRsp_v1_6->rspInfo.error,
939 {::android::hardware::radio::V1_6::RadioError::NONE,
940 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
941 CHECK_GENERAL_ERROR));
942 ::android::hardware::radio::V1_6::PhonebookCapacity pbCapacity =
943 radioRsp_v1_6->capacity;
944
945 serial = GetRandomSerialNumber();
946 radio_v1_6->getSimPhonebookRecords(serial);
947
948 EXPECT_EQ(std::cv_status::no_timeout, wait());
949 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
950 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
951 ASSERT_TRUE(CheckAnyOfErrors(
952 radioRsp_v1_6->rspInfo.error,
953 {::android::hardware::radio::V1_6::RadioError::NONE,
954 ::android::hardware::radio::V1_6::RadioError::REQUEST_NOT_SUPPORTED},
955 CHECK_GENERAL_ERROR));
956
957 if(pbCapacity.maxAdnRecords > 0
958 && pbCapacity.usedAdnRecords < pbCapacity.maxAdnRecords) {
959 // Add a phonebook record
960 PhonebookRecordInfo recordInfo;
961 recordInfo.recordId = 0;
962 recordInfo.name = "ABC";
963 recordInfo.number = "1234567890";
964 serial = GetRandomSerialNumber();
965 radio_v1_6->updateSimPhonebookRecords(serial, recordInfo);
966
967 EXPECT_EQ(std::cv_status::no_timeout, wait());
968 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
969 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
970 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
971 int index = radioRsp_v1_6->updatedRecordIndex;
972 EXPECT_TRUE(index > 0);
973
974 // Deleted a phonebook record
975 recordInfo.recordId = index;
976 recordInfo.name = "";
977 recordInfo.number = "";
978 serial = GetRandomSerialNumber();
979 radio_v1_6->updateSimPhonebookRecords(serial, recordInfo);
980
981 EXPECT_EQ(std::cv_status::no_timeout, wait());
982 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
983 EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
984 EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
985 }
986 }
987 }
988