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 bandP900;
568 bandP900.geranBands() = {GeranBands::BAND_P900};
569 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
570 band850.geranBands() = {GeranBands::BAND_850};
571 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
572 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
573 .bands = bandP900,
574 .channels = {1, 2}};
575 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
576 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
577 .bands = band850,
578 .channels = {128, 129}};
579
580 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
581 .type = ScanType::ONE_SHOT,
582 .interval = 60,
583 .specifiers = {specifierP900, specifier850},
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 // OPERATION_NOT_ALLOWED should not be allowed; however, some vendors do
599 // not support the required manual GSM search functionality. This is
600 // tracked in b/112206766. Modems have "GSM" rat scan need to
601 // support scanning requests combined with some parameters.
602 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
603 {RadioError::NONE, RadioError::OPERATION_NOT_ALLOWED}));
604 }
605
606 if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
607 ALOGI("Stop Network Scan");
608 stopNetworkScan();
609 }
610 }
611
612 /*
613 * Test IRadio.startNetworkScan_1_5() with invalid specifier.
614 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidArgument)615 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidArgument) {
616 serial = GetRandomSerialNumber();
617
618 ::android::hardware::radio::V1_5::NetworkScanRequest request = {.type = ScanType::ONE_SHOT,
619 .interval = 60};
620
621 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
622 ASSERT_OK(res);
623 EXPECT_EQ(std::cv_status::no_timeout, wait());
624 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
625 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
626 ALOGI("startNetworkScan_InvalidArgument, rspInfo.error = %s\n",
627 toString(radioRsp_v1_5->rspInfo.error).c_str());
628
629 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
630 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
631 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
632 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
633 ASSERT_TRUE(CheckAnyOfErrors(
634 radioRsp_v1_5->rspInfo.error,
635 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
636 }
637 }
638
639 /*
640 * Test IRadio.startNetworkScan_1_5() with invalid interval (lower boundary).
641 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidInterval1)642 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidInterval1) {
643 serial = GetRandomSerialNumber();
644
645 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
646 bandP900.geranBands() = {GeranBands::BAND_P900};
647 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
648 band850.geranBands() = {GeranBands::BAND_850};
649 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
650 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
651 .bands = bandP900,
652 .channels = {1, 2}};
653 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
654 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
655 .bands = band850,
656 .channels = {128, 129}};
657
658 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
659 .type = ScanType::ONE_SHOT,
660 .interval = 4,
661 .specifiers = {specifierP900, specifier850},
662 .maxSearchTime = 60,
663 .incrementalResults = false,
664 .incrementalResultsPeriodicity = 1};
665
666 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
667 ASSERT_OK(res);
668 EXPECT_EQ(std::cv_status::no_timeout, wait());
669 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
670 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
671 ALOGI("startNetworkScan_InvalidInterval1, rspInfo.error = %s\n",
672 toString(radioRsp_v1_5->rspInfo.error).c_str());
673 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
674 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
675 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
676 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
677 ASSERT_TRUE(CheckAnyOfErrors(
678 radioRsp_v1_5->rspInfo.error,
679 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
680 }
681 }
682
683 /*
684 * Test IRadio.startNetworkScan_1_5() with invalid interval (upper boundary).
685 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidInterval2)686 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidInterval2) {
687 serial = GetRandomSerialNumber();
688
689 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
690 bandP900.geranBands() = {GeranBands::BAND_P900};
691 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
692 band850.geranBands() = {GeranBands::BAND_850};
693 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
694 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
695 .bands = bandP900,
696 .channels = {1, 2}};
697 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
698 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
699 .bands = band850,
700 .channels = {128, 129}};
701
702 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
703 .type = ScanType::ONE_SHOT,
704 .interval = 301,
705 .specifiers = {specifierP900, specifier850},
706 .maxSearchTime = 60,
707 .incrementalResults = false,
708 .incrementalResultsPeriodicity = 1};
709
710 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
711 ASSERT_OK(res);
712 EXPECT_EQ(std::cv_status::no_timeout, wait());
713 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
714 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
715 ALOGI("startNetworkScan_InvalidInterval2, rspInfo.error = %s\n",
716 toString(radioRsp_v1_5->rspInfo.error).c_str());
717 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
718 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
719 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
720 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
721 ASSERT_TRUE(CheckAnyOfErrors(
722 radioRsp_v1_5->rspInfo.error,
723 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
724 }
725 }
726
727 /*
728 * Test IRadio.startNetworkScan_1_5() with invalid max search time (lower boundary).
729 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidMaxSearchTime1)730 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidMaxSearchTime1) {
731 serial = GetRandomSerialNumber();
732
733 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
734 bandP900.geranBands() = {GeranBands::BAND_P900};
735 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
736 band850.geranBands() = {GeranBands::BAND_850};
737 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
738 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
739 .bands = bandP900,
740 .channels = {1, 2}};
741 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
742 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
743 .bands = band850,
744 .channels = {128, 129}};
745
746 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
747 .type = ScanType::ONE_SHOT,
748 .interval = 60,
749 .specifiers = {specifierP900, specifier850},
750 .maxSearchTime = 59,
751 .incrementalResults = false,
752 .incrementalResultsPeriodicity = 1};
753
754 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
755 ASSERT_OK(res);
756 EXPECT_EQ(std::cv_status::no_timeout, wait());
757 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
758 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
759 ALOGI("startNetworkScan_InvalidMaxSearchTime1, rspInfo.error = %s\n",
760 toString(radioRsp_v1_5->rspInfo.error).c_str());
761 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
762 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
763 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
764 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
765 ASSERT_TRUE(CheckAnyOfErrors(
766 radioRsp_v1_5->rspInfo.error,
767 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
768 }
769 }
770
771 /*
772 * Test IRadio.startNetworkScan_1_5() with invalid max search time (upper boundary).
773 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidMaxSearchTime2)774 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidMaxSearchTime2) {
775 serial = GetRandomSerialNumber();
776
777 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
778 bandP900.geranBands() = {GeranBands::BAND_P900};
779 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
780 band850.geranBands() = {GeranBands::BAND_850};
781 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
782 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
783 .bands = bandP900,
784 .channels = {1, 2}};
785 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
786 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
787 .bands = band850,
788 .channels = {128, 129}};
789
790 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
791 .type = ScanType::ONE_SHOT,
792 .interval = 60,
793 .specifiers = {specifierP900, specifier850},
794 .maxSearchTime = 3601,
795 .incrementalResults = false,
796 .incrementalResultsPeriodicity = 1};
797
798 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
799 ASSERT_OK(res);
800 EXPECT_EQ(std::cv_status::no_timeout, wait());
801 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
802 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
803 ALOGI("startNetworkScan_InvalidMaxSearchTime2, rspInfo.error = %s\n",
804 toString(radioRsp_v1_5->rspInfo.error).c_str());
805 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
806 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
807 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
808 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
809 ASSERT_TRUE(CheckAnyOfErrors(
810 radioRsp_v1_5->rspInfo.error,
811 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
812 }
813 }
814
815 /*
816 * Test IRadio.startNetworkScan_1_5() with invalid periodicity (lower boundary).
817 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidPeriodicity1)818 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidPeriodicity1) {
819 serial = GetRandomSerialNumber();
820
821 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
822 bandP900.geranBands() = {GeranBands::BAND_P900};
823 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
824 band850.geranBands() = {GeranBands::BAND_850};
825 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
826 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
827 .bands = bandP900,
828 .channels = {1, 2}};
829 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
830 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
831 .bands = band850,
832 .channels = {128, 129}};
833
834 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
835 .type = ScanType::ONE_SHOT,
836 .interval = 60,
837 .specifiers = {specifierP900, specifier850},
838 .maxSearchTime = 600,
839 .incrementalResults = true,
840 .incrementalResultsPeriodicity = 0};
841
842 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
843 ASSERT_OK(res);
844 EXPECT_EQ(std::cv_status::no_timeout, wait());
845 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
846 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
847 ALOGI("startNetworkScan_InvalidPeriodicity1, rspInfo.error = %s\n",
848 toString(radioRsp_v1_5->rspInfo.error).c_str());
849 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
850 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
851 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
852 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
853 ASSERT_TRUE(CheckAnyOfErrors(
854 radioRsp_v1_5->rspInfo.error,
855 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
856 }
857 }
858
859 /*
860 * Test IRadio.startNetworkScan_1_5() with invalid periodicity (upper boundary).
861 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_InvalidPeriodicity2)862 TEST_P(RadioHidlTest_v1_5, startNetworkScan_InvalidPeriodicity2) {
863 serial = GetRandomSerialNumber();
864
865 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
866 bandP900.geranBands() = {GeranBands::BAND_P900};
867 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
868 band850.geranBands() = {GeranBands::BAND_850};
869 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
870 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
871 .bands = bandP900,
872 .channels = {1, 2}};
873 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
874 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
875 .bands = band850,
876 .channels = {128, 129}};
877
878 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
879 .type = ScanType::ONE_SHOT,
880 .interval = 60,
881 .specifiers = {specifierP900, specifier850},
882 .maxSearchTime = 600,
883 .incrementalResults = true,
884 .incrementalResultsPeriodicity = 11};
885
886 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
887 ASSERT_OK(res);
888 EXPECT_EQ(std::cv_status::no_timeout, wait());
889 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
890 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
891 ALOGI("startNetworkScan_InvalidPeriodicity2, rspInfo.error = %s\n",
892 toString(radioRsp_v1_5->rspInfo.error).c_str());
893 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
894 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
895 {RadioError::SIM_ABSENT, RadioError::INVALID_ARGUMENTS}));
896 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
897 ASSERT_TRUE(CheckAnyOfErrors(
898 radioRsp_v1_5->rspInfo.error,
899 {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED}));
900 }
901 }
902
903 /*
904 * Test IRadio.startNetworkScan_1_5() with valid periodicity
905 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_GoodRequest1)906 TEST_P(RadioHidlTest_v1_5, startNetworkScan_GoodRequest1) {
907 serial = GetRandomSerialNumber();
908
909 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
910 bandP900.geranBands() = {GeranBands::BAND_P900};
911 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
912 band850.geranBands() = {GeranBands::BAND_850};
913 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
914 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
915 .bands = bandP900,
916 .channels = {1, 2}};
917 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
918 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
919 .bands = band850,
920 .channels = {128, 129}};
921
922 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
923 .type = ScanType::ONE_SHOT,
924 .interval = 60,
925 .specifiers = {specifierP900, specifier850},
926 .maxSearchTime = 360,
927 .incrementalResults = false,
928 .incrementalResultsPeriodicity = 10};
929
930 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
931 ASSERT_OK(res);
932 EXPECT_EQ(std::cv_status::no_timeout, wait());
933 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
934 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
935 ALOGI("startNetworkScan_GoodRequest1, rspInfo.error = %s\n",
936 toString(radioRsp_v1_5->rspInfo.error).c_str());
937 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
938 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
939 {RadioError::NONE, RadioError::SIM_ABSENT}));
940 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
941 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
942 {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
943 RadioError::REQUEST_NOT_SUPPORTED}));
944 }
945
946 if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
947 ALOGI("Stop Network Scan");
948 stopNetworkScan();
949 }
950 }
951
952 /*
953 * Test IRadio.startNetworkScan_1_5() with valid periodicity and plmns
954 */
TEST_P(RadioHidlTest_v1_5,startNetworkScan_GoodRequest2)955 TEST_P(RadioHidlTest_v1_5, startNetworkScan_GoodRequest2) {
956 serial = GetRandomSerialNumber();
957
958 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands bandP900;
959 bandP900.geranBands() = {GeranBands::BAND_P900};
960 ::android::hardware::radio::V1_5::RadioAccessSpecifier::Bands band850;
961 band850.geranBands() = {GeranBands::BAND_850};
962 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifierP900 = {
963 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
964 .bands = bandP900,
965 .channels = {1, 2}};
966 ::android::hardware::radio::V1_5::RadioAccessSpecifier specifier850 = {
967 .radioAccessNetwork = ::android::hardware::radio::V1_5::RadioAccessNetworks::GERAN,
968 .bands = band850,
969 .channels = {128, 129}};
970
971 ::android::hardware::radio::V1_5::NetworkScanRequest request = {
972 .type = ScanType::ONE_SHOT,
973 .interval = 60,
974 .specifiers = {specifierP900, specifier850},
975 .maxSearchTime = 360,
976 .incrementalResults = false,
977 .incrementalResultsPeriodicity = 10,
978 .mccMncs = {"310410"}};
979
980 Return<void> res = radio_v1_5->startNetworkScan_1_5(serial, request);
981 ASSERT_OK(res);
982 EXPECT_EQ(std::cv_status::no_timeout, wait());
983 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
984 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
985 ALOGI("startNetworkScan_GoodRequest2, rspInfo.error = %s\n",
986 toString(radioRsp_v1_5->rspInfo.error).c_str());
987 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
988 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
989 {RadioError::NONE, RadioError::SIM_ABSENT}));
990 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
991 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
992 {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
993 RadioError::REQUEST_NOT_SUPPORTED}));
994 }
995
996 if (radioRsp_v1_5->rspInfo.error == RadioError::NONE) {
997 ALOGI("Stop Network Scan");
998 stopNetworkScan();
999 }
1000 }
1001
1002 /*
1003 * Test IRadio.setupDataCall_1_5() for the response returned.
1004 */
TEST_P(RadioHidlTest_v1_5,setupDataCall_1_5)1005 TEST_P(RadioHidlTest_v1_5, setupDataCall_1_5) {
1006 serial = GetRandomSerialNumber();
1007
1008 ::android::hardware::radio::V1_5::AccessNetwork accessNetwork =
1009 ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN;
1010
1011 android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1012 memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1013 dataProfileInfo.profileId = DataProfileId::DEFAULT;
1014 dataProfileInfo.apn = hidl_string("internet");
1015 dataProfileInfo.protocol = PdpProtocolType::IP;
1016 dataProfileInfo.roamingProtocol = PdpProtocolType::IP;
1017 dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1018 dataProfileInfo.user = hidl_string("username");
1019 dataProfileInfo.password = hidl_string("password");
1020 dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1021 dataProfileInfo.maxConnsTime = 300;
1022 dataProfileInfo.maxConns = 20;
1023 dataProfileInfo.waitTime = 0;
1024 dataProfileInfo.enabled = true;
1025 dataProfileInfo.supportedApnTypesBitmap = 320;
1026 dataProfileInfo.bearerBitmap = 161543;
1027 dataProfileInfo.mtuV4 = 0;
1028 dataProfileInfo.mtuV6 = 0;
1029 dataProfileInfo.preferred = true;
1030 dataProfileInfo.persistent = false;
1031
1032 bool roamingAllowed = false;
1033
1034 std::vector<::android::hardware::radio::V1_5::LinkAddress> addresses = {};
1035 std::vector<hidl_string> dnses = {};
1036
1037 ::android::hardware::radio::V1_2::DataRequestReason reason =
1038 ::android::hardware::radio::V1_2::DataRequestReason::NORMAL;
1039
1040 Return<void> res = radio_v1_5->setupDataCall_1_5(serial, accessNetwork, dataProfileInfo,
1041 roamingAllowed, reason, addresses, dnses);
1042 ASSERT_OK(res);
1043
1044 EXPECT_EQ(std::cv_status::no_timeout, wait());
1045 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1046 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1047
1048 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1049 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1050 {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE,
1051 RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
1052 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1053 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1054 {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE,
1055 RadioError::OP_NOT_ALLOWED_BEFORE_REG_TO_NW}));
1056 }
1057 }
1058
1059 /*
1060 * Test IRadio.setInitialAttachApn_1_5() for the response returned.
1061 */
TEST_P(RadioHidlTest_v1_5,setInitialAttachApn_1_5)1062 TEST_P(RadioHidlTest_v1_5, setInitialAttachApn_1_5) {
1063 serial = GetRandomSerialNumber();
1064
1065 // Create a dataProfileInfo
1066 android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1067 memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1068 dataProfileInfo.profileId = DataProfileId::DEFAULT;
1069 dataProfileInfo.apn = hidl_string("internet");
1070 dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
1071 dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
1072 dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1073 dataProfileInfo.user = hidl_string("username");
1074 dataProfileInfo.password = hidl_string("password");
1075 dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1076 dataProfileInfo.maxConnsTime = 300;
1077 dataProfileInfo.maxConns = 20;
1078 dataProfileInfo.waitTime = 0;
1079 dataProfileInfo.enabled = true;
1080 dataProfileInfo.supportedApnTypesBitmap = 320;
1081 dataProfileInfo.bearerBitmap = 161543;
1082 dataProfileInfo.mtuV4 = 0;
1083 dataProfileInfo.mtuV6 = 0;
1084 dataProfileInfo.preferred = true;
1085 dataProfileInfo.persistent = false;
1086
1087 radio_v1_5->setInitialAttachApn_1_5(serial, dataProfileInfo);
1088
1089 EXPECT_EQ(std::cv_status::no_timeout, wait());
1090 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1091 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1092
1093 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1094 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1095 {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE}));
1096 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1097 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1098 {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE}));
1099 }
1100 }
1101
1102 /*
1103 * Test IRadio.setDataProfile_1_5() for the response returned.
1104 */
TEST_P(RadioHidlTest_v1_5,setDataProfile_1_5)1105 TEST_P(RadioHidlTest_v1_5, setDataProfile_1_5) {
1106 serial = GetRandomSerialNumber();
1107
1108 // Create a dataProfileInfo
1109 android::hardware::radio::V1_5::DataProfileInfo dataProfileInfo;
1110 memset(&dataProfileInfo, 0, sizeof(dataProfileInfo));
1111 dataProfileInfo.profileId = DataProfileId::DEFAULT;
1112 dataProfileInfo.apn = hidl_string("internet");
1113 dataProfileInfo.protocol = PdpProtocolType::IPV4V6;
1114 dataProfileInfo.roamingProtocol = PdpProtocolType::IPV4V6;
1115 dataProfileInfo.authType = ApnAuthType::NO_PAP_NO_CHAP;
1116 dataProfileInfo.user = hidl_string("username");
1117 dataProfileInfo.password = hidl_string("password");
1118 dataProfileInfo.type = DataProfileInfoType::THREE_GPP;
1119 dataProfileInfo.maxConnsTime = 300;
1120 dataProfileInfo.maxConns = 20;
1121 dataProfileInfo.waitTime = 0;
1122 dataProfileInfo.enabled = true;
1123 dataProfileInfo.supportedApnTypesBitmap = 320;
1124 dataProfileInfo.bearerBitmap = 161543;
1125 dataProfileInfo.mtuV4 = 0;
1126 dataProfileInfo.mtuV6 = 0;
1127 dataProfileInfo.preferred = true;
1128 dataProfileInfo.persistent = true;
1129
1130 // Create a dataProfileInfoList
1131 android::hardware::hidl_vec<android::hardware::radio::V1_5::DataProfileInfo>
1132 dataProfileInfoList = {dataProfileInfo};
1133
1134 radio_v1_5->setDataProfile_1_5(serial, dataProfileInfoList);
1135
1136 EXPECT_EQ(std::cv_status::no_timeout, wait());
1137 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1138 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1139
1140 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1141 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1142 {RadioError::SIM_ABSENT, RadioError::RADIO_NOT_AVAILABLE}));
1143 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1144 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1145 {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE}));
1146 }
1147 }
1148
1149 /*
1150 * Test IRadio.setRadioPower_1_5() for the response returned.
1151 */
TEST_P(RadioHidlTest_v1_5,setRadioPower_1_5_emergencyCall_cancelled)1152 TEST_P(RadioHidlTest_v1_5, setRadioPower_1_5_emergencyCall_cancelled) {
1153 // Set radio power to off.
1154 serial = GetRandomSerialNumber();
1155 radio_v1_5->setRadioPower_1_5(serial, false, false, false);
1156 EXPECT_EQ(std::cv_status::no_timeout, wait());
1157 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1158 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1159 EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1160
1161 // Set radio power to on with forEmergencyCall being true. This should put modem to only scan
1162 // emergency call bands.
1163 serial = GetRandomSerialNumber();
1164 radio_v1_5->setRadioPower_1_5(serial, true, true, true);
1165 EXPECT_EQ(std::cv_status::no_timeout, wait());
1166 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1167 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1168 EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1169
1170 // Set radio power to on with forEmergencyCall being false. This should put modem in regular
1171 // operation modem.
1172 serial = GetRandomSerialNumber();
1173 radio_v1_5->setRadioPower_1_5(serial, true, false, false);
1174 EXPECT_EQ(std::cv_status::no_timeout, wait());
1175 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1176 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1177 EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error);
1178 }
1179
1180 /*
1181 * Test IRadio.setNetworkSelectionModeManual_1_5() for the response returned.
1182 */
TEST_P(RadioHidlTest_v1_5,setNetworkSelectionModeManual_1_5)1183 TEST_P(RadioHidlTest_v1_5, setNetworkSelectionModeManual_1_5) {
1184 serial = GetRandomSerialNumber();
1185
1186 // can't camp on nonexistent MCCMNC, so we expect this to fail.
1187 Return<void> res = radio_v1_5->setNetworkSelectionModeManual_1_5(
1188 serial, "123456", android::hardware::radio::V1_5::RadioAccessNetworks::GERAN);
1189 EXPECT_EQ(std::cv_status::no_timeout, wait());
1190 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1191 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1192
1193 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1194 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1195 {RadioError::NONE, RadioError::ILLEGAL_SIM_OR_ME,
1196 RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
1197 CHECK_GENERAL_ERROR));
1198 } else if (cardStatus.base.base.base.cardState == CardState::PRESENT) {
1199 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1200 {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE,
1201 RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
1202 CHECK_GENERAL_ERROR));
1203 }
1204 }
1205
1206 /*
1207 * Test IRadio.sendCdmaSmsExpectMore() for the response returned.
1208 */
TEST_P(RadioHidlTest_v1_5,sendCdmaSmsExpectMore)1209 TEST_P(RadioHidlTest_v1_5, sendCdmaSmsExpectMore) {
1210 serial = GetRandomSerialNumber();
1211
1212 // Create a CdmaSmsAddress
1213 CdmaSmsAddress cdmaSmsAddress;
1214 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
1215 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
1216 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
1217 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
1218 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
1219
1220 // Create a CdmaSmsSubAddress
1221 CdmaSmsSubaddress cdmaSmsSubaddress;
1222 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
1223 cdmaSmsSubaddress.odd = false;
1224 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
1225
1226 // Create a CdmaSmsMessage
1227 android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
1228 cdmaSmsMessage.teleserviceId = 4098;
1229 cdmaSmsMessage.isServicePresent = false;
1230 cdmaSmsMessage.serviceCategory = 0;
1231 cdmaSmsMessage.address = cdmaSmsAddress;
1232 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
1233 cdmaSmsMessage.bearerData =
1234 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
1235
1236 radio_v1_5->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
1237
1238 EXPECT_EQ(std::cv_status::no_timeout, wait());
1239 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1240 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1241
1242 if (cardStatus.base.base.base.cardState == CardState::ABSENT) {
1243 ASSERT_TRUE(CheckAnyOfErrors(
1244 radioRsp_v1_5->rspInfo.error,
1245 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
1246 CHECK_GENERAL_ERROR));
1247 }
1248 }
1249
1250 /*
1251 * Test IRadio.getBarringInfo() for the response returned.
1252 */
TEST_P(RadioHidlTest_v1_5,getBarringInfo)1253 TEST_P(RadioHidlTest_v1_5, getBarringInfo) {
1254 // If the previous setRadioPower_1_5_emergencyCall_cancelled test has just finished.
1255 // Due to radio restarting, modem may need a little more time to acquire network service
1256 // and barring infos. If voice status is in-service, waiting 3s to get barring infos ready.
1257 // Or waiting 10s if voice status is not in-service.
1258 serial = GetRandomSerialNumber();
1259 radio_v1_5->getVoiceRegistrationState_1_5(serial);
1260 EXPECT_EQ(std::cv_status::no_timeout, wait());
1261 if (isVoiceInService(radioRsp_v1_5->voiceRegResp.regState)) {
1262 sleep(BARRING_INFO_MAX_WAIT_TIME_SECONDS);
1263 } else {
1264 sleep(VOICE_SERVICE_MAX_WAIT_TIME_SECONDS);
1265 }
1266
1267 serial = GetRandomSerialNumber();
1268 Return<void> res = radio_v1_5->getBarringInfo(serial);
1269 EXPECT_EQ(std::cv_status::no_timeout, wait());
1270 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type);
1271 EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial);
1272
1273 int32_t firstApiLevel = android::base::GetIntProperty<int32_t>("ro.product.first_api_level", 0);
1274 // Allow devices shipping with Radio::1_5 and Android 11 to not support barring info.
1275 if (firstApiLevel > 0 && firstApiLevel <= 30) {
1276 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error,
1277 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED}));
1278 // Early exit for devices that don't support barring info.
1279 if (radioRsp_v1_5->rspInfo.error != RadioError::NONE) {
1280 return;
1281 }
1282 }
1283
1284 ASSERT_TRUE(radioRsp_v1_5->barringInfos.size() > 0);
1285
1286 std::set<BarringInfo::ServiceType> reportedServices;
1287
1288 // validate that the service types are in range
1289 for (const auto& info : radioRsp_v1_5->barringInfos) {
1290 ASSERT_TRUE((info.serviceType >= BarringInfo::ServiceType::CS_SERVICE &&
1291 info.serviceType <= BarringInfo::ServiceType::SMS) ||
1292 (info.serviceType >= BarringInfo::ServiceType::OPERATOR_1 &&
1293 info.serviceType <= BarringInfo::ServiceType::OPERATOR_32));
1294 reportedServices.insert(info.serviceType);
1295
1296 // Any type that is "conditional" must have valid values for conditional barring
1297 // factor and time.
1298 switch (info.barringType) {
1299 case BarringInfo::BarringType::NONE: // fall through
1300 case BarringInfo::BarringType::UNCONDITIONAL:
1301 break;
1302 case BarringInfo::BarringType::CONDITIONAL: {
1303 const int32_t barringFactor = info.barringTypeSpecificInfo.conditional().factor;
1304 ASSERT_TRUE(barringFactor >= 0 && barringFactor <= 100);
1305 ASSERT_TRUE(info.barringTypeSpecificInfo.conditional().timeSeconds > 0);
1306 break;
1307 }
1308 default:
1309 FAIL();
1310 }
1311 }
1312
1313 // Certain types of barring are relevant for certain RANs. Ensure that only the right
1314 // types are reported. Note that no types are required, simply that for a given technology
1315 // only certain types are valid. This is one way to check that implementations are
1316 // not providing information that they don't have.
1317 static const std::set<BarringInfo::ServiceType> UTRA_SERVICES{
1318 BarringInfo::ServiceType::CS_SERVICE, BarringInfo::ServiceType::PS_SERVICE,
1319 BarringInfo::ServiceType::CS_VOICE, BarringInfo::ServiceType::EMERGENCY,
1320 BarringInfo::ServiceType::SMS,
1321 };
1322
1323 static const std::set<BarringInfo::ServiceType> EUTRA_SERVICES{
1324 BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
1325 BarringInfo::ServiceType::CS_FALLBACK, BarringInfo::ServiceType::MMTEL_VOICE,
1326 BarringInfo::ServiceType::MMTEL_VIDEO, BarringInfo::ServiceType::EMERGENCY,
1327 BarringInfo::ServiceType::SMS,
1328 };
1329
1330 static const std::set<BarringInfo::ServiceType> NGRA_SERVICES = {
1331 BarringInfo::ServiceType::MO_SIGNALLING, BarringInfo::ServiceType::MO_DATA,
1332 BarringInfo::ServiceType::CS_FALLBACK, BarringInfo::ServiceType::MMTEL_VOICE,
1333 BarringInfo::ServiceType::MMTEL_VIDEO, BarringInfo::ServiceType::EMERGENCY,
1334 BarringInfo::ServiceType::SMS, BarringInfo::ServiceType::OPERATOR_1,
1335 BarringInfo::ServiceType::OPERATOR_2, BarringInfo::ServiceType::OPERATOR_3,
1336 BarringInfo::ServiceType::OPERATOR_4, BarringInfo::ServiceType::OPERATOR_5,
1337 BarringInfo::ServiceType::OPERATOR_6, BarringInfo::ServiceType::OPERATOR_7,
1338 BarringInfo::ServiceType::OPERATOR_8, BarringInfo::ServiceType::OPERATOR_9,
1339 BarringInfo::ServiceType::OPERATOR_10, BarringInfo::ServiceType::OPERATOR_11,
1340 BarringInfo::ServiceType::OPERATOR_12, BarringInfo::ServiceType::OPERATOR_13,
1341 BarringInfo::ServiceType::OPERATOR_14, BarringInfo::ServiceType::OPERATOR_15,
1342 BarringInfo::ServiceType::OPERATOR_16, BarringInfo::ServiceType::OPERATOR_17,
1343 BarringInfo::ServiceType::OPERATOR_18, BarringInfo::ServiceType::OPERATOR_19,
1344 BarringInfo::ServiceType::OPERATOR_20, BarringInfo::ServiceType::OPERATOR_21,
1345 BarringInfo::ServiceType::OPERATOR_22, BarringInfo::ServiceType::OPERATOR_23,
1346 BarringInfo::ServiceType::OPERATOR_24, BarringInfo::ServiceType::OPERATOR_25,
1347 BarringInfo::ServiceType::OPERATOR_26, BarringInfo::ServiceType::OPERATOR_27,
1348 BarringInfo::ServiceType::OPERATOR_28, BarringInfo::ServiceType::OPERATOR_29,
1349 BarringInfo::ServiceType::OPERATOR_30, BarringInfo::ServiceType::OPERATOR_31,
1350 };
1351
1352 const std::set<BarringInfo::ServiceType>* compareTo = nullptr;
1353
1354 switch (radioRsp_v1_5->barringCellIdentity.getDiscriminator()) {
1355 case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::wcdma:
1356 // fall through
1357 case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::tdscdma:
1358 compareTo = &UTRA_SERVICES;
1359 break;
1360 case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::lte:
1361 compareTo = &EUTRA_SERVICES;
1362 break;
1363 case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::nr:
1364 compareTo = &NGRA_SERVICES;
1365 break;
1366
1367 case android::hardware::radio::V1_5::CellIdentity::hidl_discriminator::cdma:
1368 // fall through
1369 default:
1370 FAIL();
1371 break;
1372 }
1373
1374 std::set<BarringInfo::ServiceType> diff;
1375
1376 std::set_difference(reportedServices.begin(), reportedServices.end(), compareTo->begin(),
1377 compareTo->end(), std::inserter(diff, diff.begin()));
1378 }
1379