• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 <android-base/properties.h>
18 #include <radio_hidl_hal_utils_v1_5.h>
19 
20 #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
21 
22 /*
23  * Test IRadio.setSignalStrengthReportingCriteria_1_5() with invalid hysteresisDb
24  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb)25 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb) {
26     serial = GetRandomSerialNumber();
27 
28     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
29     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI;
30     signalThresholdInfo.hysteresisMs = 5000;
31     signalThresholdInfo.hysteresisDb = 10;  // hysteresisDb too large given threshold list deltas
32     signalThresholdInfo.thresholds = {-109, -103, -97, -89};
33     signalThresholdInfo.isEnabled = true;
34 
35     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
36             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
37     ASSERT_OK(res);
38     EXPECT_EQ(std::cv_status::no_timeout, wait());
39     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
40     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
41 
42     ALOGI("setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb, rspInfo.error = %s\n",
43           toString(radioRsp_v1_5->rspInfo.error).c_str());
44     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::INVALID_ARGUMENTS}));
45 }
46 
47 /*
48  * Test IRadio.setSignalStrengthReportingCriteria_1_5() with empty thresholds
49  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_EmptyThresholds)50 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_EmptyThresholds) {
51     serial = GetRandomSerialNumber();
52 
53     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
54     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI;
55     signalThresholdInfo.hysteresisMs = 0;
56     signalThresholdInfo.hysteresisDb = 0;
57     signalThresholdInfo.isEnabled = true;
58 
59     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
60             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
61     ASSERT_OK(res);
62     EXPECT_EQ(std::cv_status::no_timeout, wait());
63     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
64     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
65 
66     ALOGI("setSignalStrengthReportingCriteria_1_5_EmptyParams, rspInfo.error = %s\n",
67           toString(radioRsp_v1_5->rspInfo.error).c_str());
68     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
69 }
70 
71 /*
72  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for GERAN
73  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Geran)74 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Geran) {
75     serial = GetRandomSerialNumber();
76 
77     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
78     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI;
79     signalThresholdInfo.hysteresisMs = 5000;
80     signalThresholdInfo.hysteresisDb = 2;
81     signalThresholdInfo.thresholds = {-109, -103, -97, -89};
82     signalThresholdInfo.isEnabled = true;
83 
84     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
85             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
86     ASSERT_OK(res);
87     EXPECT_EQ(std::cv_status::no_timeout, wait());
88     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
89     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
90 
91     ALOGI("setSignalStrengthReportingCriteria_1_5_Geran, rspInfo.error = %s\n",
92           toString(radioRsp_v1_5->rspInfo.error).c_str());
93     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
94 }
95 
96 /*
97  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for UTRAN
98  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Utran)99 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Utran) {
100     serial = GetRandomSerialNumber();
101 
102     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
103     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSCP;
104     signalThresholdInfo.hysteresisMs = 5000;
105     signalThresholdInfo.hysteresisDb = 2;
106     signalThresholdInfo.thresholds = {-110, -97, -73, -49, -25};
107     signalThresholdInfo.isEnabled = true;
108 
109     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
110             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::UTRAN);
111     ASSERT_OK(res);
112     EXPECT_EQ(std::cv_status::no_timeout, wait());
113     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
114     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
115 
116     ALOGI("setSignalStrengthReportingCriteria_1_5_Utran, rspInfo.error = %s\n",
117           toString(radioRsp_v1_5->rspInfo.error).c_str());
118     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
119 }
120 
121 /*
122  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN
123  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Eutran_RSRP)124 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRP) {
125     serial = GetRandomSerialNumber();
126 
127     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
128     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRP;
129     signalThresholdInfo.hysteresisMs = 5000;
130     signalThresholdInfo.hysteresisDb = 2;
131     signalThresholdInfo.thresholds = {-128, -108, -88, -68};
132     signalThresholdInfo.isEnabled = true;
133 
134     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
135             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN);
136     ASSERT_OK(res);
137     EXPECT_EQ(std::cv_status::no_timeout, wait());
138     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
139     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
140 
141     ALOGI("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n",
142           toString(radioRsp_v1_5->rspInfo.error).c_str());
143     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
144 }
145 
146 /*
147  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN
148  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Eutran_RSRQ)149 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRQ) {
150     serial = GetRandomSerialNumber();
151 
152     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
153     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRQ;
154     signalThresholdInfo.hysteresisMs = 5000;
155     signalThresholdInfo.hysteresisDb = 2;
156     signalThresholdInfo.thresholds = {-27, -20, -13, -6};
157     signalThresholdInfo.isEnabled = true;
158 
159     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
160             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN);
161     ASSERT_OK(res);
162     EXPECT_EQ(std::cv_status::no_timeout, wait());
163     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
164     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
165 
166     ALOGI("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n",
167           toString(radioRsp_v1_5->rspInfo.error).c_str());
168     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
169 }
170 
171 /*
172  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN
173  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Eutran_RSSNR)174 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSSNR) {
175     serial = GetRandomSerialNumber();
176 
177     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
178     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSNR;
179     signalThresholdInfo.hysteresisMs = 5000;
180     signalThresholdInfo.hysteresisDb = 2;
181     signalThresholdInfo.thresholds = {-10, 0, 10, 20};
182     signalThresholdInfo.isEnabled = true;
183 
184     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
185             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN);
186     ASSERT_OK(res);
187     EXPECT_EQ(std::cv_status::no_timeout, wait());
188     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
189     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
190 }
191 
192 /*
193  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for CDMA2000
194  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Cdma2000)195 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Cdma2000) {
196     serial = GetRandomSerialNumber();
197 
198     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
199     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI;
200     signalThresholdInfo.hysteresisMs = 5000;
201     signalThresholdInfo.hysteresisDb = 2;
202     signalThresholdInfo.thresholds = {-105, -90, -75, -65};
203     signalThresholdInfo.isEnabled = true;
204 
205     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
206             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::CDMA2000);
207     ASSERT_OK(res);
208     EXPECT_EQ(std::cv_status::no_timeout, wait());
209     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
210     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
211 
212     ALOGI("setSignalStrengthReportingCriteria_1_5_Cdma2000, rspInfo.error = %s\n",
213           toString(radioRsp_v1_5->rspInfo.error).c_str());
214     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE}));
215 }
216 
217 /*
218  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRP
219  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP)220 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP) {
221     serial = GetRandomSerialNumber();
222 
223     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
224     signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRP;
225     signalThresholdInfo.hysteresisMs = 5000;
226     signalThresholdInfo.hysteresisDb = 0;
227     signalThresholdInfo.thresholds = {-105, -90, -75, -65};
228     signalThresholdInfo.isEnabled = true;
229 
230     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
231             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN);
232     ASSERT_OK(res);
233     EXPECT_EQ(std::cv_status::no_timeout, wait());
234     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
235     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
236 
237     ALOGI("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP, rspInfo.error = %s\n",
238           toString(radioRsp_v1_5->rspInfo.error).c_str());
239 
240     // Allow REQUEST_NOT_SUPPORTED because some non-5G device may not support NGRAN for
241     // setSignalStrengthReportingCriteria_1_5()
242     ASSERT_TRUE(
243             CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
244                              {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
245 }
246 
247 /*
248  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRQ
249  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ)250 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ) {
251     serial = GetRandomSerialNumber();
252 
253     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
254     signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRQ;
255     signalThresholdInfo.hysteresisMs = 5000;
256     signalThresholdInfo.hysteresisDb = 0;
257     signalThresholdInfo.thresholds = {-43, -20, 0, 20};
258     signalThresholdInfo.isEnabled = true;
259 
260     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
261             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN);
262     ASSERT_OK(res);
263     EXPECT_EQ(std::cv_status::no_timeout, wait());
264     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
265     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
266 
267     ALOGI("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ, rspInfo.error = %s\n",
268           toString(radioRsp_v1_5->rspInfo.error).c_str());
269 
270     // Allow REQUEST_NOT_SUPPORTED because some non-5G device may not support NGRAN for
271     // setSignalStrengthReportingCriteria_1_5()
272     ASSERT_TRUE(
273             CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
274                              {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
275 }
276 
277 /*
278  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN
279  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_Disable_RSSNR)280 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Disable_RSSNR) {
281     serial = GetRandomSerialNumber();
282 
283     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
284     signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSNR;
285     signalThresholdInfo.hysteresisMs = 5000;
286     signalThresholdInfo.hysteresisDb = 2;
287     signalThresholdInfo.thresholds = {-10, 0, 10, 20};
288     signalThresholdInfo.isEnabled = false;
289 
290     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
291             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN);
292     ASSERT_OK(res);
293     EXPECT_EQ(std::cv_status::no_timeout, wait());
294     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
295     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
296 }
297 
298 /*
299  * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSSINR
300  */
TEST_P(RadioHidlTest_v1_5,setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR)301 TEST_P(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR) {
302     serial = GetRandomSerialNumber();
303 
304     ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo;
305     signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSSINR;
306     signalThresholdInfo.hysteresisMs = 5000;
307     signalThresholdInfo.hysteresisDb = 0;
308     signalThresholdInfo.thresholds = {-10, 3, 16, 18};
309     signalThresholdInfo.isEnabled = true;
310 
311     Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5(
312             serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN);
313     ASSERT_OK(res);
314     EXPECT_EQ(std::cv_status::no_timeout, wait());
315     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
316     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
317 
318     ALOGI("setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR, rspInfo.error = %s\n",
319           toString(radioRsp_v1_5->rspInfo.error).c_str());
320 
321     // Allow REQUEST_NOT_SUPPORTED because some non-5G device may not support NGRAN for
322     // setSignalStrengthReportingCriteria_1_5()
323     ASSERT_TRUE(
324             CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
325                              {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
326 }
327 
328 /*
329  * Test IRadio.setLinkCapacityReportingCriteria_1_5() invalid hysteresisDlKbps
330  */
TEST_P(RadioHidlTest_v1_5,setLinkCapacityReportingCriteria_1_5_invalidHysteresisDlKbps)331 TEST_P(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_invalidHysteresisDlKbps) {
332     serial = GetRandomSerialNumber();
333 
334     Return<void> res = radio_v1_5->setLinkCapacityReportingCriteria_1_5(
335             serial, 5000,
336             5000,  // hysteresisDlKbps too big for thresholds delta
337             100, {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000},
338             ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
339     ASSERT_OK(res);
340     EXPECT_EQ(std::cv_status::no_timeout, wait());
341     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
342     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
343 
344     ALOGI("setLinkCapacityReportingCriteria_1_5_invalidHysteresisDlKbps, rspInfo.error = %s\n",
345           toString(radioRsp_v1_5->rspInfo.error).c_str());
346     // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported
347     // for GERAN
348     ASSERT_TRUE(
349             CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
350                              {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
351 }
352 
353 /*
354  * Test IRadio.setLinkCapacityReportingCriteria_1_5() invalid hysteresisUlKbps
355  */
TEST_P(RadioHidlTest_v1_5,setLinkCapacityReportingCriteria_1_5_invalidHysteresisUlKbps)356 TEST_P(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_invalidHysteresisUlKbps) {
357     serial = GetRandomSerialNumber();
358 
359     Return<void> res = radio_v1_5->setLinkCapacityReportingCriteria_1_5(
360             serial, 5000, 500,
361             1000,  // hysteresisUlKbps too big for thresholds delta
362             {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000},
363             ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
364     ASSERT_OK(res);
365     EXPECT_EQ(std::cv_status::no_timeout, wait());
366     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
367     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
368 
369     ALOGI("setLinkCapacityReportingCriteria_1_5_invalidHysteresisUlKbps, rspInfo.error = %s\n",
370           toString(radioRsp_v1_5->rspInfo.error).c_str());
371     // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported
372     // for GERAN
373     ASSERT_TRUE(
374             CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
375                              {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
376 }
377 
378 /*
379  * Test IRadio.setLinkCapacityReportingCriteria_1_5() empty params
380  */
TEST_P(RadioHidlTest_v1_5,setLinkCapacityReportingCriteria_1_5_emptyParams)381 TEST_P(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_emptyParams) {
382     serial = GetRandomSerialNumber();
383 
384     Return<void> res = radio_v1_5->setLinkCapacityReportingCriteria_1_5(
385             serial, 0, 0, 0, {}, {}, ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
386     ASSERT_OK(res);
387     EXPECT_EQ(std::cv_status::no_timeout, wait());
388     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
389     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
390 
391     ALOGI("setLinkCapacityReportingCriteria_1_5_emptyParams, rspInfo.error = %s\n",
392           toString(radioRsp_v1_5->rspInfo.error).c_str());
393     // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported
394     // for GERAN
395     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
396                                  {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
397 }
398 
399 /*
400  * Test IRadio.setLinkCapacityReportingCriteria_1_5() for GERAN
401  */
TEST_P(RadioHidlTest_v1_5,setLinkCapacityReportingCriteria_1_5_Geran)402 TEST_P(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_Geran) {
403     serial = GetRandomSerialNumber();
404 
405     Return<void> res = radio_v1_5->setLinkCapacityReportingCriteria_1_5(
406             serial, 5000, 500, 100, {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000},
407             ::android::hardware::radio::V1_5::AccessNetwork::GERAN);
408     ASSERT_OK(res);
409     EXPECT_EQ(std::cv_status::no_timeout, wait());
410     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
411     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
412 
413     ALOGI("setLinkCapacityReportingCriteria_1_5_Geran, rspInfo.error = %s\n",
414           toString(radioRsp_v1_5->rspInfo.error).c_str());
415     // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported
416     // for GERAN
417     ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
418                                  {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
419 }
420 
421 /*
422  * Test IRadio.enableUiccApplications() for the response returned.
423  * For SIM ABSENT case.
424  */
TEST_P(RadioHidlTest_v1_5,togglingUiccApplicationsSimAbsent)425 TEST_P(RadioHidlTest_v1_5, togglingUiccApplicationsSimAbsent) {
426     // This test case only test SIM ABSENT case.
427     if (cardStatus.base.base.base.cardState != CardState::ABSENT) return;
428 
429     // Disable Uicc applications.
430     serial = GetRandomSerialNumber();
431     radio_v1_5->enableUiccApplications(serial, false);
432     EXPECT_EQ(std::cv_status::no_timeout, wait());
433     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
434     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
435     // As SIM is absent, RadioError::SIM_ABSENT should be thrown.
436     EXPECT_EQ(RadioError::SIM_ABSENT, radioRsp_v1_5->rspInfo.error);
437 
438     // Query Uicc application enablement.
439     serial = GetRandomSerialNumber();
440     radio_v1_5->areUiccApplicationsEnabled(serial);
441     EXPECT_EQ(std::cv_status::no_timeout, wait());
442     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
443     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
444     // As SIM is absent, RadioError::SIM_ABSENT should be thrown.
445     EXPECT_EQ(RadioError::SIM_ABSENT, radioRsp_v1_5->rspInfo.error);
446 }
447 
448 /*
449  * Test IRadio.enableUiccApplications() for the response returned.
450  * For SIM PRESENT case.
451  */
TEST_P(RadioHidlTest_v1_5,togglingUiccApplicationsSimPresent)452 TEST_P(RadioHidlTest_v1_5, togglingUiccApplicationsSimPresent) {
453     // This test case only test SIM ABSENT case.
454     if (cardStatus.base.base.base.cardState != CardState::PRESENT) return;
455     if (cardStatus.applications.size() == 0) return;
456 
457     // Disable Uicc applications.
458     serial = GetRandomSerialNumber();
459     radio_v1_5->enableUiccApplications(serial, false);
460     EXPECT_EQ(std::cv_status::no_timeout, wait());
461     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
462     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
463     // As SIM is present, there shouldn't be error.
464     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
465 
466     // Query Uicc application enablement.
467     serial = GetRandomSerialNumber();
468     radio_v1_5->areUiccApplicationsEnabled(serial);
469     EXPECT_EQ(std::cv_status::no_timeout, wait());
470     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
471     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
472     // As SIM is present, there shouldn't be error.
473     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
474     ASSERT_FALSE(radioRsp_v1_5->areUiccApplicationsEnabled);
475 
476     // Enable Uicc applications.
477     serial = GetRandomSerialNumber();
478     radio_v1_5->enableUiccApplications(serial, true);
479     EXPECT_EQ(std::cv_status::no_timeout, wait());
480     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
481     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
482     // As SIM is present, there shouldn't be error.
483     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
484 
485     // Query Uicc application enablement.
486     serial = GetRandomSerialNumber();
487     radio_v1_5->areUiccApplicationsEnabled(serial);
488     EXPECT_EQ(std::cv_status::no_timeout, wait());
489     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
490     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
491     // As SIM is present, there shouldn't be error.
492     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
493     ASSERT_TRUE(radioRsp_v1_5->areUiccApplicationsEnabled);
494 }
495 
496 /*
497  * Test IRadio.areUiccApplicationsEnabled() for the response returned.
498  */
TEST_P(RadioHidlTest_v1_5,areUiccApplicationsEnabled)499 TEST_P(RadioHidlTest_v1_5, areUiccApplicationsEnabled) {
500     // Disable Uicc applications.
501     serial = GetRandomSerialNumber();
502     radio_v1_5->areUiccApplicationsEnabled(serial);
503     EXPECT_EQ(std::cv_status::no_timeout, wait());
504     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
505     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
506 
507     // If SIM is absent, RadioError::SIM_ABSENT should be thrown. Otherwise there shouldn't be any
508     // error.
509     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
510         EXPECT_EQ(RadioError::SIM_ABSENT, radioRsp_v1_5->rspInfo.error);
511     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
512         EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
513     }
514 }
515 
516 /*
517  * Test IRadio.setSystemSelectionChannels_1_5() for the response returned.
518  */
TEST_P(RadioHidlTest_v1_5,setSystemSelectionChannels_1_5)519 TEST_P(RadioHidlTest_v1_5, setSystemSelectionChannels_1_5) {
520     serial = GetRandomSerialNumber();
521 
522     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
523     bandP900.geranBands() = {GeranBands::BAND_P900};
524     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
525     band850.geranBands() = {GeranBands::BAND_850};
526     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
527             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
528             .bands = bandP900,
529             .channels = {1, 2}};
530     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
531             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
532             .bands = band850,
533             .channels = {128, 129}};
534 
535     Return<void> res =
536             radio_v1_5->setSystemSelectionChannels_1_5(serial, true, {specifierP900, specifier850});
537     ASSERT_OK(res);
538     EXPECT_EQ(std::cv_status::no_timeout, wait());
539     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
540     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
541     ALOGI("setSystemSelectionChannels, rspInfo.error = %s\n",
542           toString(radioRsp_v1_5->rspInfo.error).c_str());
543     ASSERT_TRUE(CheckAnyOfErrors(
544             radioRsp_v1_5->rspInfo.error,
545             {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::INTERNAL_ERR}));
546 
547     if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
548         serial = GetRandomSerialNumber();
549         Return<void> res = radio_v1_5->setSystemSelectionChannels_1_5(
550                 serial, false, {specifierP900, specifier850});
551         ASSERT_OK(res);
552         EXPECT_EQ(std::cv_status::no_timeout, wait());
553         EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
554         EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
555         ALOGI("setSystemSelectionChannels, rspInfo.error = %s\n",
556               toString(radioRsp_v1_5->rspInfo.error).c_str());
557         EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
558     }
559 }
560 
561 /*
562  * Test IRadio.startNetworkScan_1_5() for the response returned.
563  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan)564 TEST_P(RadioHidlTest_v1_5, startNetworkScan) {
565     serial = GetRandomSerialNumber();
566 
567     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band17;
568     band17.eutranBands({::android::hardware::radio::V1_5::EutranBands::BAND_17});
569     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band20;
570     band20.eutranBands({::android::hardware::radio::V1_5::EutranBands::BAND_20});
571     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier17 = {
572             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::EUTRAN,
573             .bands = band17,
574             .channels = {1, 2}};
575     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier20 = {
576             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::EUTRAN,
577             .bands = band20,
578             .channels = {128, 129}};
579 
580     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
581             .type = ScanType::ONE_SHOT,
582             .interval = 60,
583             .specifiers = {specifier17, specifier20},
584             .maxSearchTime = 60,
585             .incrementalResults = false,
586             .incrementalResultsPeriodicity = 1};
587 
588     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
589     ASSERT_OK(res);
590     EXPECT_EQ(std::cv_status::no_timeout, wait());
591     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
592     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
593     ALOGI("startNetworkScan, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str());
594 
595     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
596         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::SIM_ABSENT}));
597     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
598         // Modems support 3GPP RAT family need to
599         // support scanning requests combined with some parameters.
600         if (deviceSupportsFeature(FEATURE_TELEPHONY_GSM) && isLteConnected()) {
601             ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
602                                          {RadioError::NONE, RadioError::OPERATION_NOT_ALLOWED}));
603         } else {
604             ASSERT_TRUE(CheckAnyOfErrors(
605                     radioRsp_v1_5->rspInfo.error,
606                     {RadioError::NONE, RadioError::OPERATION_NOT_ALLOWED,
607                      RadioError::REQUEST_NOT_SUPPORTED, RadioError::INVALID_ARGUMENTS}));
608         }
609     }
610 
611     if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
612         ALOGI("Stop Network Scan");
613         stopNetworkScan();
614     }
615 }
616 
617 /*
618  * Test IRadio.startNetworkScan_1_5() with invalid specifier.
619  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidArgument)620 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidArgument) {
621     serial = GetRandomSerialNumber();
622 
623     ::android::hardware::radio::V1_5::NetworkScanRequest request = {.type = ScanType::ONE_SHOT,
624                                                                     .interval = 60};
625 
626     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
627     ASSERT_OK(res);
628     EXPECT_EQ(std::cv_status::no_timeout, wait());
629     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
630     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
631     ALOGI("startNetworkScan_InvalidArgument, rspInfo.error = %s\n",
632           toString(radioRsp_v1_5->rspInfo.error).c_str());
633 
634     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
635         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
636                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
637     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
638         ASSERT_TRUE(CheckAnyOfErrors(
639                 radioRsp_v1_5->rspInfo.error,
640                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
641     }
642 }
643 
644 /*
645  * Test IRadio.startNetworkScan_1_5() with invalid interval (lower boundary).
646  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidInterval1)647 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidInterval1) {
648     serial = GetRandomSerialNumber();
649 
650     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
651     bandP900.geranBands() = {GeranBands::BAND_P900};
652     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
653     band850.geranBands() = {GeranBands::BAND_850};
654     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
655             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
656             .bands = bandP900,
657             .channels = {1, 2}};
658     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
659             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
660             .bands = band850,
661             .channels = {128, 129}};
662 
663     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
664             .type = ScanType::PERIODIC,
665             .interval = 4,
666             .specifiers = {specifierP900, specifier850},
667             .maxSearchTime = 60,
668             .incrementalResults = false,
669             .incrementalResultsPeriodicity = 1};
670 
671     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
672     ASSERT_OK(res);
673     EXPECT_EQ(std::cv_status::no_timeout, wait());
674     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
675     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
676     ALOGI("startNetworkScan_InvalidInterval1, rspInfo.error = %s\n",
677           toString(radioRsp_v1_5->rspInfo.error).c_str());
678     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
679         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
680                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
681     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
682         ASSERT_TRUE(CheckAnyOfErrors(
683                 radioRsp_v1_5->rspInfo.error,
684                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
685     }
686 }
687 
688 /*
689  * Test IRadio.startNetworkScan_1_5() with invalid interval (upper boundary).
690  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidInterval2)691 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidInterval2) {
692     serial = GetRandomSerialNumber();
693 
694     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
695     bandP900.geranBands() = {GeranBands::BAND_P900};
696     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
697     band850.geranBands() = {GeranBands::BAND_850};
698     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
699             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
700             .bands = bandP900,
701             .channels = {1, 2}};
702     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
703             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
704             .bands = band850,
705             .channels = {128, 129}};
706 
707     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
708             .type = ScanType::PERIODIC,
709             .interval = 301,
710             .specifiers = {specifierP900, specifier850},
711             .maxSearchTime = 60,
712             .incrementalResults = false,
713             .incrementalResultsPeriodicity = 1};
714 
715     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
716     ASSERT_OK(res);
717     EXPECT_EQ(std::cv_status::no_timeout, wait());
718     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
719     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
720     ALOGI("startNetworkScan_InvalidInterval2, rspInfo.error = %s\n",
721           toString(radioRsp_v1_5->rspInfo.error).c_str());
722     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
723         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
724                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
725     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
726         ASSERT_TRUE(CheckAnyOfErrors(
727                 radioRsp_v1_5->rspInfo.error,
728                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
729     }
730 }
731 
732 /*
733  * Test IRadio.startNetworkScan_1_5() with invalid max search time (lower boundary).
734  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidMaxSearchTime1)735 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidMaxSearchTime1) {
736     serial = GetRandomSerialNumber();
737 
738     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
739     bandP900.geranBands() = {GeranBands::BAND_P900};
740     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
741     band850.geranBands() = {GeranBands::BAND_850};
742     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
743             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
744             .bands = bandP900,
745             .channels = {1, 2}};
746     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
747             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
748             .bands = band850,
749             .channels = {128, 129}};
750 
751     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
752             .type = ScanType::ONE_SHOT,
753             .interval = 60,
754             .specifiers = {specifierP900, specifier850},
755             .maxSearchTime = 59,
756             .incrementalResults = false,
757             .incrementalResultsPeriodicity = 1};
758 
759     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
760     ASSERT_OK(res);
761     EXPECT_EQ(std::cv_status::no_timeout, wait());
762     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
763     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
764     ALOGI("startNetworkScan_InvalidMaxSearchTime1, rspInfo.error = %s\n",
765           toString(radioRsp_v1_5->rspInfo.error).c_str());
766     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
767         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
768                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
769     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
770         ASSERT_TRUE(CheckAnyOfErrors(
771                 radioRsp_v1_5->rspInfo.error,
772                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
773     }
774 }
775 
776 /*
777  * Test IRadio.startNetworkScan_1_5() with invalid max search time (upper boundary).
778  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidMaxSearchTime2)779 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidMaxSearchTime2) {
780     serial = GetRandomSerialNumber();
781 
782     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
783     bandP900.geranBands() = {GeranBands::BAND_P900};
784     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
785     band850.geranBands() = {GeranBands::BAND_850};
786     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
787             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
788             .bands = bandP900,
789             .channels = {1, 2}};
790     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
791             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
792             .bands = band850,
793             .channels = {128, 129}};
794 
795     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
796             .type = ScanType::ONE_SHOT,
797             .interval = 60,
798             .specifiers = {specifierP900, specifier850},
799             .maxSearchTime = 3601,
800             .incrementalResults = false,
801             .incrementalResultsPeriodicity = 1};
802 
803     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
804     ASSERT_OK(res);
805     EXPECT_EQ(std::cv_status::no_timeout, wait());
806     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
807     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
808     ALOGI("startNetworkScan_InvalidMaxSearchTime2, rspInfo.error = %s\n",
809           toString(radioRsp_v1_5->rspInfo.error).c_str());
810     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
811         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
812                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
813     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
814         ASSERT_TRUE(CheckAnyOfErrors(
815                 radioRsp_v1_5->rspInfo.error,
816                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
817     }
818 }
819 
820 /*
821  * Test IRadio.startNetworkScan_1_5() with invalid periodicity (lower boundary).
822  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidPeriodicity1)823 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidPeriodicity1) {
824     serial = GetRandomSerialNumber();
825 
826     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
827     bandP900.geranBands() = {GeranBands::BAND_P900};
828     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
829     band850.geranBands() = {GeranBands::BAND_850};
830     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
831             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
832             .bands = bandP900,
833             .channels = {1, 2}};
834     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
835             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
836             .bands = band850,
837             .channels = {128, 129}};
838 
839     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
840             .type = ScanType::ONE_SHOT,
841             .interval = 60,
842             .specifiers = {specifierP900, specifier850},
843             .maxSearchTime = 600,
844             .incrementalResults = true,
845             .incrementalResultsPeriodicity = 0};
846 
847     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
848     ASSERT_OK(res);
849     EXPECT_EQ(std::cv_status::no_timeout, wait());
850     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
851     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
852     ALOGI("startNetworkScan_InvalidPeriodicity1, rspInfo.error = %s\n",
853           toString(radioRsp_v1_5->rspInfo.error).c_str());
854     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
855         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
856                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
857     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
858         ASSERT_TRUE(CheckAnyOfErrors(
859                 radioRsp_v1_5->rspInfo.error,
860                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
861     }
862 }
863 
864 /*
865  * Test IRadio.startNetworkScan_1_5() with invalid periodicity (upper boundary).
866  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidPeriodicity2)867 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidPeriodicity2) {
868     serial = GetRandomSerialNumber();
869 
870     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
871     bandP900.geranBands() = {GeranBands::BAND_P900};
872     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
873     band850.geranBands() = {GeranBands::BAND_850};
874     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
875             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
876             .bands = bandP900,
877             .channels = {1, 2}};
878     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
879             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
880             .bands = band850,
881             .channels = {128, 129}};
882 
883     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
884             .type = ScanType::ONE_SHOT,
885             .interval = 60,
886             .specifiers = {specifierP900, specifier850},
887             .maxSearchTime = 600,
888             .incrementalResults = true,
889             .incrementalResultsPeriodicity = 11};
890 
891     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
892     ASSERT_OK(res);
893     EXPECT_EQ(std::cv_status::no_timeout, wait());
894     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
895     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
896     ALOGI("startNetworkScan_InvalidPeriodicity2, rspInfo.error = %s\n",
897           toString(radioRsp_v1_5->rspInfo.error).c_str());
898     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
899         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
900                                      {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
901     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
902         ASSERT_TRUE(CheckAnyOfErrors(
903                 radioRsp_v1_5->rspInfo.error,
904                 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
905     }
906 }
907 
908 /*
909  * Test IRadio.startNetworkScan_1_5() with valid periodicity
910  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_GoodRequest1)911 TEST_P(RadioHidlTest_v1_5, startNetworkScan_GoodRequest1) {
912     serial = GetRandomSerialNumber();
913 
914     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
915     bandP900.geranBands() = {GeranBands::BAND_P900};
916     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
917     band850.geranBands() = {GeranBands::BAND_850};
918     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
919             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
920             .bands = bandP900,
921             .channels = {1, 2}};
922     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
923             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
924             .bands = band850,
925             .channels = {128, 129}};
926 
927     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
928             .type = ScanType::ONE_SHOT,
929             .interval = 60,
930             .specifiers = {specifierP900, specifier850},
931             .maxSearchTime = 360,
932             .incrementalResults = false,
933             .incrementalResultsPeriodicity = 10};
934 
935     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
936     ASSERT_OK(res);
937     EXPECT_EQ(std::cv_status::no_timeout, wait());
938     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
939     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
940     ALOGI("startNetworkScan_GoodRequest1, rspInfo.error = %s\n",
941           toString(radioRsp_v1_5->rspInfo.error).c_str());
942     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
943         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
944                                      {RadioError::NONE, RadioError::SIM_ABSENT}));
945     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
946         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
947                                      {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
948                                       RadioError::REQUEST_NOT_SUPPORTED}));
949     }
950 
951     if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
952         ALOGI("Stop Network Scan");
953         stopNetworkScan();
954     }
955 }
956 
957 /*
958  * Test IRadio.startNetworkScan_1_5() with valid periodicity and plmns
959  */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_GoodRequest2)960 TEST_P(RadioHidlTest_v1_5, startNetworkScan_GoodRequest2) {
961     serial = GetRandomSerialNumber();
962 
963     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
964     bandP900.geranBands() = {GeranBands::BAND_P900};
965     ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
966     band850.geranBands() = {GeranBands::BAND_850};
967     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
968             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
969             .bands = bandP900,
970             .channels = {1, 2}};
971     ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
972             .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
973             .bands = band850,
974             .channels = {128, 129}};
975 
976     ::android::hardware::radio::V1_5::NetworkScanRequest request = {
977             .type = ScanType::ONE_SHOT,
978             .interval = 60,
979             .specifiers = {specifierP900, specifier850},
980             .maxSearchTime = 360,
981             .incrementalResults = false,
982             .incrementalResultsPeriodicity = 10,
983             .mccMncs = {"310410"}};
984 
985     Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
986     ASSERT_OK(res);
987     EXPECT_EQ(std::cv_status::no_timeout, wait());
988     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
989     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
990     ALOGI("startNetworkScan_GoodRequest2, rspInfo.error = %s\n",
991           toString(radioRsp_v1_5->rspInfo.error).c_str());
992     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
993         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
994                                      {RadioError::NONE, RadioError::SIM_ABSENT}));
995     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
996         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
997                                      {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
998                                       RadioError::REQUEST_NOT_SUPPORTED}));
999     }
1000 
1001     if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
1002         ALOGI("Stop Network Scan");
1003         stopNetworkScan();
1004     }
1005 }
1006 
1007 /*
1008  * Test IRadio.setupDataCall_1_5() for the response returned.
1009  */
TEST_P(RadioHidlTest_v1_5,setupDataCall_1_5)1010 TEST_P(RadioHidlTest_v1_5, setupDataCall_1_5) {
1011     serial = GetRandomSerialNumber();
1012 
1013     ::android::hardware::radio::V1_5::AccessNetwork accessNetwork =
1014             ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN;
1015 
1016     android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1017     memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1018     dataProfileInfo.profileId = DataProfileId::DEFAULT;
1019     dataProfileInfo.apn = hidl_string("internet");
1020     dataProfileInfo.protocol = PdpProtocolType::IP;
1021     dataProfileInfo.roamingProtocol = PdpProtocolType::IP;
1022     dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1023     dataProfileInfo.user = hidl_string("username");
1024     dataProfileInfo.password = hidl_string("password");
1025     dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1026     dataProfileInfo.maxConnsTime = 300;
1027     dataProfileInfo.maxConns = 20;
1028     dataProfileInfo.waitTime = 0;
1029     dataProfileInfo.enabled = true;
1030     dataProfileInfo.supportedApnTypesBitmap = 320;
1031     dataProfileInfo.bearerBitmap = 161543;
1032     dataProfileInfo.mtuV4 = 0;
1033     dataProfileInfo.mtuV6 = 0;
1034     dataProfileInfo.preferred = true;
1035     dataProfileInfo.persistent = false;
1036 
1037     bool roamingAllowed = false;
1038 
1039     std::vector<::android::hardware::radio::V1_5::LinkAddress> addresses = {};
1040     std::vector<hidl_string> dnses = {};
1041 
1042     ::android::hardware::radio::V1_2::DataRequestReason reason =
1043             ::android::hardware::radio::V1_2::DataRequestReason::NORMAL;
1044 
1045     Return<void> res = radio_v1_5->setupDataCall_1_5(serial, accessNetwork, dataProfileInfo,
1046                                                      roamingAllowed, reason, addresses, dnses);
1047     ASSERT_OK(res);
1048 
1049     EXPECT_EQ(std::cv_status::no_timeout, wait());
1050     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1051     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1052 
1053     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1054         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1055                                      {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE,
1056                                       RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
1057     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1058         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1059                                      {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE,
1060                                       RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
1061     }
1062 }
1063 
1064 /*
1065  * Test IRadio.setInitialAttachApn_1_5() for the response returned.
1066  */
TEST_P(RadioHidlTest_v1_5,setInitialAttachApn_1_5)1067 TEST_P(RadioHidlTest_v1_5, setInitialAttachApn_1_5) {
1068     serial = GetRandomSerialNumber();
1069 
1070     // Create a dataProfileInfo
1071     android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1072     memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1073     dataProfileInfo.profileId = DataProfileId::DEFAULT;
1074     dataProfileInfo.apn = hidl_string("internet");
1075     dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
1076     dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
1077     dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1078     dataProfileInfo.user = hidl_string("username");
1079     dataProfileInfo.password = hidl_string("password");
1080     dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1081     dataProfileInfo.maxConnsTime = 300;
1082     dataProfileInfo.maxConns = 20;
1083     dataProfileInfo.waitTime = 0;
1084     dataProfileInfo.enabled = true;
1085     dataProfileInfo.supportedApnTypesBitmap = 320;
1086     dataProfileInfo.bearerBitmap = 161543;
1087     dataProfileInfo.mtuV4 = 0;
1088     dataProfileInfo.mtuV6 = 0;
1089     dataProfileInfo.preferred = true;
1090     dataProfileInfo.persistent = false;
1091 
1092     radio_v1_5->setInitialAttachApn_1_5(serial, dataProfileInfo);
1093 
1094     EXPECT_EQ(std::cv_status::no_timeout, wait());
1095     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1096     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1097 
1098     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1099         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1100                                      {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE}));
1101     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1102         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1103                                      {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE}));
1104     }
1105 }
1106 
1107 /*
1108  * Test IRadio.setDataProfile_1_5() for the response returned.
1109  */
TEST_P(RadioHidlTest_v1_5,setDataProfile_1_5)1110 TEST_P(RadioHidlTest_v1_5, setDataProfile_1_5) {
1111     serial = GetRandomSerialNumber();
1112 
1113     // Create a dataProfileInfo
1114     android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1115     memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1116     dataProfileInfo.profileId = DataProfileId::DEFAULT;
1117     dataProfileInfo.apn = hidl_string("internet");
1118     dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
1119     dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
1120     dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1121     dataProfileInfo.user = hidl_string("username");
1122     dataProfileInfo.password = hidl_string("password");
1123     dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1124     dataProfileInfo.maxConnsTime = 300;
1125     dataProfileInfo.maxConns = 20;
1126     dataProfileInfo.waitTime = 0;
1127     dataProfileInfo.enabled = true;
1128     dataProfileInfo.supportedApnTypesBitmap = 320;
1129     dataProfileInfo.bearerBitmap = 161543;
1130     dataProfileInfo.mtuV4 = 0;
1131     dataProfileInfo.mtuV6 = 0;
1132     dataProfileInfo.preferred = true;
1133     dataProfileInfo.persistent = true;
1134 
1135     // Create a dataProfileInfoList
1136     android::hardware::hidl_vec<android::hardware::radio::V1_5::DataProfileInfo>
1137             dataProfileInfoList = {dataProfileInfo};
1138 
1139     radio_v1_5->setDataProfile_1_5(serial, dataProfileInfoList);
1140 
1141     EXPECT_EQ(std::cv_status::no_timeout, wait());
1142     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1143     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1144 
1145     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1146         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1147                                      {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE}));
1148     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1149         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1150                                      {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE}));
1151     }
1152 }
1153 
1154 /*
1155  * Test IRadio.setRadioPower_1_5() for the response returned.
1156  */
TEST_P(RadioHidlTest_v1_5,setRadioPower_1_5_emergencyCall_cancelled)1157 TEST_P(RadioHidlTest_v1_5, setRadioPower_1_5_emergencyCall_cancelled) {
1158     // Set radio power to off.
1159     serial = GetRandomSerialNumber();
1160     radio_v1_5->setRadioPower_1_5(serial, false, false, false);
1161     EXPECT_EQ(std::cv_status::no_timeout, wait());
1162     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1163     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1164     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1165 
1166     // Set radio power to on with forEmergencyCall being true. This should put modem to only scan
1167     // emergency call bands.
1168     serial = GetRandomSerialNumber();
1169     radio_v1_5->setRadioPower_1_5(serial, true, true, true);
1170     EXPECT_EQ(std::cv_status::no_timeout, wait());
1171     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1172     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1173     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1174 
1175     // Set radio power to on with forEmergencyCall being false. This should put modem in regular
1176     // operation modem.
1177     serial = GetRandomSerialNumber();
1178     radio_v1_5->setRadioPower_1_5(serial, true, false, false);
1179     EXPECT_EQ(std::cv_status::no_timeout, wait());
1180     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1181     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1182     EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1183 }
1184 
1185 /*
1186  * Test IRadio.setNetworkSelectionModeManual_1_5() for the response returned.
1187  */
TEST_P(RadioHidlTest_v1_5,setNetworkSelectionModeManual_1_5)1188 TEST_P(RadioHidlTest_v1_5, setNetworkSelectionModeManual_1_5) {
1189     serial = GetRandomSerialNumber();
1190 
1191     // can't camp on nonexistent MCCMNC, so we expect this to fail.
1192     Return<void> res = radio_v1_5->setNetworkSelectionModeManual_1_5(
1193             serial, "123456", android::hardware::radio::V1_5::RadioAccessNetworks::GERAN);
1194     EXPECT_EQ(std::cv_status::no_timeout, wait());
1195     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1196     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1197 
1198     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1199         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1200                                      {RadioError::NONE, RadioError::ILLEGAL_SIM_OR_ME,
1201                                       RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
1202                                      CHECK_GENERAL_ERROR));
1203     } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1204         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1205                                      {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE,
1206                                       RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
1207                                      CHECK_GENERAL_ERROR));
1208     }
1209 }
1210 
1211 /*
1212  * Test IRadio.sendCdmaSmsExpectMore() for the response returned.
1213  */
TEST_P(RadioHidlTest_v1_5,sendCdmaSmsExpectMore)1214 TEST_P(RadioHidlTest_v1_5, sendCdmaSmsExpectMore) {
1215     serial = GetRandomSerialNumber();
1216 
1217     // Create a CdmaSmsAddress
1218     CdmaSmsAddress cdmaSmsAddress;
1219     cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
1220     cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
1221     cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
1222     cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
1223     cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
1224 
1225     // Create a CdmaSmsSubAddress
1226     CdmaSmsSubaddress cdmaSmsSubaddress;
1227     cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
1228     cdmaSmsSubaddress.odd = false;
1229     cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
1230 
1231     // Create a CdmaSmsMessage
1232     android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
1233     cdmaSmsMessage.teleserviceId = 4098;
1234     cdmaSmsMessage.isServicePresent = false;
1235     cdmaSmsMessage.serviceCategory = 0;
1236     cdmaSmsMessage.address = cdmaSmsAddress;
1237     cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
1238     cdmaSmsMessage.bearerData =
1239             (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
1240 
1241     radio_v1_5->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
1242 
1243     EXPECT_EQ(std::cv_status::no_timeout, wait());
1244     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1245     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1246 
1247     if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1248         ASSERT_TRUE(CheckAnyOfErrors(
1249                 radioRsp_v1_5->rspInfo.error,
1250                 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
1251                 CHECK_GENERAL_ERROR));
1252     }
1253 }
1254 
1255 /*
1256  * Test IRadio.getBarringInfo() for the response returned.
1257  */
TEST_P(RadioHidlTest_v1_5,getBarringInfo)1258 TEST_P(RadioHidlTest_v1_5, getBarringInfo) {
1259     // If the previous setRadioPower_1_5_emergencyCall_cancelled test has just finished.
1260     // Due to radio restarting, modem may need a little more time to acquire network service
1261     // and barring infos. If voice status is in-service, waiting 3s to get barring infos ready.
1262     // Or waiting 10s if voice status is not in-service.
1263     serial = GetRandomSerialNumber();
1264     radio_v1_5->getVoiceRegistrationState_1_5(serial);
1265     EXPECT_EQ(std::cv_status::no_timeout, wait());
1266     if (isVoiceInService(radioRsp_v1_5->voiceRegResp.regState)) {
1267         sleep(BARRING_INFO_MAX_WAIT_TIME_SECONDS);
1268     } else {
1269         sleep(VOICE_SERVICE_MAX_WAIT_TIME_SECONDS);
1270     }
1271 
1272     serial = GetRandomSerialNumber();
1273     Return<void> res = radio_v1_5->getBarringInfo(serial);
1274     EXPECT_EQ(std::cv_status::no_timeout, wait());
1275     EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1276     EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1277 
1278     int32_t firstApiLevel = android::base::GetIntProperty<int32_t>("ro.product.first_api_level", 0);
1279     int32_t boardApiLevel = android::base::GetIntProperty<int32_t>("ro.board.first_api_level", 0);
1280     // Allow devices shipping with Radio::1_5 and Android 11 to not support barring info.
1281     // b/212384410 Some GRF targets lauched with S release but with vendor R release
1282     // do not support getBarringInfo API. Allow these devices to not support barring info.
1283     if ((firstApiLevel > 0 && firstApiLevel <= 30) ||
1284         (boardApiLevel > 0 && boardApiLevel <= 30)) {
1285         ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1286                                      {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
1287         // Early exit for devices that don't support barring info.
1288         if (radioRsp_v1_5->rspInfo.error != RadioError::NONE) {
1289             return;
1290         }
1291     }
1292 
1293     ASSERT_TRUE(radioRsp_v1_5->barringInfos.size() > 0);
1294 
1295     std::set<BarringInfo::ServiceType> reportedServices;
1296 
1297     // validate that the service types are in range
1298     for (const auto& info : radioRsp_v1_5->barringInfos) {
1299         ASSERT_TRUE((info.serviceType >= BarringInfo::ServiceType::CS_SERVICE &&
1300                      info.serviceType <= BarringInfo::ServiceType::SMS) ||
1301                     (info.serviceType >= BarringInfo::ServiceType::OPERATOR_1 &&
1302                      info.serviceType <= BarringInfo::ServiceType::OPERATOR_32));
1303         reportedServices.insert(info.serviceType);
1304 
1305         // Any type that is "conditional" must have valid values for conditional barring
1306         // factor and time.
1307         switch (info.barringType) {
1308             case BarringInfo::BarringType::NONE:  // fall through
1309             case BarringInfo::BarringType::UNCONDITIONAL:
1310                 break;
1311             case BarringInfo::BarringType::CONDITIONAL: {
1312                 const int32_t barringFactor = info.barringTypeSpecificInfo.conditional().factor;
1313                 ASSERT_TRUE(barringFactor >= 0 && barringFactor <= 100);
1314                 ASSERT_TRUE(info.barringTypeSpecificInfo.conditional().timeSeconds > 0);
1315                 break;
1316             }
1317             default:
1318                 FAIL();
1319         }
1320     }
1321 
1322     // Certain types of barring are relevant for certain RANs. Ensure that only the right
1323     // types are reported. Note that no types are required, simply that for a given technology
1324     // only certain types are valid. This is one way to check that implementations are
1325     // not providing information that they don't have.
1326     static const std::set<BarringInfo::ServiceType> UTRA_SERVICES{
1327             BarringInfo::ServiceType::CS_SERVICE, BarringInfo::ServiceType::PS_SERVICE,
1328             BarringInfo::ServiceType::CS_VOICE,   BarringInfo::ServiceType::EMERGENCY,
1329             BarringInfo::ServiceType::SMS,
1330     };
1331 
1332     static const std::set<BarringInfo::ServiceType> EUTRA_SERVICES{
1333             BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
1334             BarringInfo::ServiceType::CS_FALLBACK,   BarringInfo::ServiceType::MMTEL_VOICE,
1335             BarringInfo::ServiceType::MMTEL_VIDEO,   BarringInfo::ServiceType::EMERGENCY,
1336             BarringInfo::ServiceType::SMS,
1337     };
1338 
1339     static const std::set<BarringInfo::ServiceType> NGRA_SERVICES = {
1340             BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
1341             BarringInfo::ServiceType::CS_FALLBACK,   BarringInfo::ServiceType::MMTEL_VOICE,
1342             BarringInfo::ServiceType::MMTEL_VIDEO,   BarringInfo::ServiceType::EMERGENCY,
1343             BarringInfo::ServiceType::SMS,           BarringInfo::ServiceType::OPERATOR_1,
1344             BarringInfo::ServiceType::OPERATOR_2,    BarringInfo::ServiceType::OPERATOR_3,
1345             BarringInfo::ServiceType::OPERATOR_4,    BarringInfo::ServiceType::OPERATOR_5,
1346             BarringInfo::ServiceType::OPERATOR_6,    BarringInfo::ServiceType::OPERATOR_7,
1347             BarringInfo::ServiceType::OPERATOR_8,    BarringInfo::ServiceType::OPERATOR_9,
1348             BarringInfo::ServiceType::OPERATOR_10,   BarringInfo::ServiceType::OPERATOR_11,
1349             BarringInfo::ServiceType::OPERATOR_12,   BarringInfo::ServiceType::OPERATOR_13,
1350             BarringInfo::ServiceType::OPERATOR_14,   BarringInfo::ServiceType::OPERATOR_15,
1351             BarringInfo::ServiceType::OPERATOR_16,   BarringInfo::ServiceType::OPERATOR_17,
1352             BarringInfo::ServiceType::OPERATOR_18,   BarringInfo::ServiceType::OPERATOR_19,
1353             BarringInfo::ServiceType::OPERATOR_20,   BarringInfo::ServiceType::OPERATOR_21,
1354             BarringInfo::ServiceType::OPERATOR_22,   BarringInfo::ServiceType::OPERATOR_23,
1355             BarringInfo::ServiceType::OPERATOR_24,   BarringInfo::ServiceType::OPERATOR_25,
1356             BarringInfo::ServiceType::OPERATOR_26,   BarringInfo::ServiceType::OPERATOR_27,
1357             BarringInfo::ServiceType::OPERATOR_28,   BarringInfo::ServiceType::OPERATOR_29,
1358             BarringInfo::ServiceType::OPERATOR_30,   BarringInfo::ServiceType::OPERATOR_31,
1359     };
1360 
1361     const std::set<BarringInfo::ServiceType>* compareTo = nullptr;
1362 
1363     switch (radioRsp_v1_5->barringCellIdentity.getDiscriminator()) {
1364         case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::wcdma:
1365             // fall through
1366         case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::tdscdma:
1367             compareTo = &UTRA_SERVICES;
1368             break;
1369         case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::lte:
1370             compareTo = &EUTRA_SERVICES;
1371             break;
1372         case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::nr:
1373             compareTo = &NGRA_SERVICES;
1374             break;
1375 
1376         case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::cdma:
1377             // fall through
1378         default:
1379             FAIL();
1380             break;
1381     }
1382 
1383     std::set<BarringInfo::ServiceType> diff;
1384 
1385     std::set_difference(reportedServices.begin(), reportedServices.end(), compareTo->begin(),
1386                         compareTo->end(), std::inserter(diff, diff.begin()));
1387 }
1388