• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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