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