blob: 0abdfbc4354314501955bfb3bf53405f698064f7 [file] [log] [blame]
Sarah Chind2a41192021-12-21 11:34:00 -08001/*
2 * Copyright (C) 2021 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 <aidl/android/hardware/radio/config/IRadioConfig.h>
18#include <android-base/logging.h>
19#include <android/binder_manager.h>
20
21#include "radio_messaging_utils.h"
22
23#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
24
25void RadioMessagingTest::SetUp() {
26 std::string serviceName = GetParam();
27
28 if (!isServiceValidForDeviceConfiguration(serviceName)) {
29 ALOGI("Skipped the test due to device configuration.");
30 GTEST_SKIP();
31 }
32
33 radio_messaging = IRadioMessaging::fromBinder(
34 ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
35 ASSERT_NE(nullptr, radio_messaging.get());
36
37 radioRsp_messaging = ndk::SharedRefBase::make<RadioMessagingResponse>(*this);
38 ASSERT_NE(nullptr, radioRsp_messaging.get());
39
40 count_ = 0;
41
42 radioInd_messaging = ndk::SharedRefBase::make<RadioMessagingIndication>(*this);
43 ASSERT_NE(nullptr, radioInd_messaging.get());
44
45 radio_messaging->setResponseFunctions(radioRsp_messaging, radioInd_messaging);
46
Sarah Chin91997ac2021-12-29 00:35:12 -080047 // Assert IRadioSim exists and SIM is present before testing
48 radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
49 AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
50 ASSERT_NE(nullptr, radio_sim.get());
51 updateSimCardStatus();
52 EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
53
Sarah Chind2a41192021-12-21 11:34:00 -080054 // Assert IRadioConfig exists before testing
Sarah Chin91997ac2021-12-29 00:35:12 -080055 radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
56 AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
57 ASSERT_NE(nullptr, radio_config.get());
Sarah Chind2a41192021-12-21 11:34:00 -080058}
59
60/*
61 * Test IRadioMessaging.sendSms() for the response returned.
62 */
63TEST_P(RadioMessagingTest, sendSms) {
64 LOG(DEBUG) << "sendSms";
65 serial = GetRandomSerialNumber();
66 GsmSmsMessage msg;
67 msg.smscPdu = "";
68 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
69
70 radio_messaging->sendSms(serial, msg);
71
72 EXPECT_EQ(std::cv_status::no_timeout, wait());
73 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
74 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
75
76 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
77 ASSERT_TRUE(CheckAnyOfErrors(
78 radioRsp_messaging->rspInfo.error,
79 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
80 CHECK_GENERAL_ERROR));
81 EXPECT_EQ(0, radioRsp_messaging->sendSmsResult.errorCode);
82 }
83 LOG(DEBUG) << "sendSms finished";
84}
85
86/*
87 * Test IRadioMessaging.sendSmsExpectMore() for the response returned.
88 */
89TEST_P(RadioMessagingTest, sendSmsExpectMore) {
90 LOG(DEBUG) << "sendSmsExpectMore";
91 serial = GetRandomSerialNumber();
92 GsmSmsMessage msg;
93 msg.smscPdu = "";
94 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
95
96 radio_messaging->sendSmsExpectMore(serial, msg);
97
98 EXPECT_EQ(std::cv_status::no_timeout, wait());
99 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
100 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
101
102 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
103 ASSERT_TRUE(CheckAnyOfErrors(
104 radioRsp_messaging->rspInfo.error,
105 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
106 CHECK_GENERAL_ERROR));
107 }
108 LOG(DEBUG) << "sendSmsExpectMore finished";
109}
110
111/*
112 * Test IRadioMessaging.sendCdmaSms() for the response returned.
113 */
114TEST_P(RadioMessagingTest, sendCdmaSms) {
115 LOG(DEBUG) << "sendCdmaSms";
116 serial = GetRandomSerialNumber();
117
118 // Create a CdmaSmsAddress
119 CdmaSmsAddress cdmaSmsAddress;
120 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
121 cdmaSmsAddress.isNumberModeDataNetwork = false;
122 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
123 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
124 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
125
126 // Create a CdmaSmsSubAddress
127 CdmaSmsSubaddress cdmaSmsSubaddress;
128 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
129 cdmaSmsSubaddress.odd = false;
130 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
131
132 // Create a CdmaSmsMessage
133 CdmaSmsMessage cdmaSmsMessage;
134 cdmaSmsMessage.teleserviceId = 4098;
135 cdmaSmsMessage.isServicePresent = false;
136 cdmaSmsMessage.serviceCategory = 0;
137 cdmaSmsMessage.address = cdmaSmsAddress;
138 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
139 cdmaSmsMessage.bearerData =
140 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
141
142 radio_messaging->sendCdmaSms(serial, cdmaSmsMessage);
143
144 EXPECT_EQ(std::cv_status::no_timeout, wait());
145 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
146 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
147
148 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
149 ASSERT_TRUE(CheckAnyOfErrors(
150 radioRsp_messaging->rspInfo.error,
151 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
152 CHECK_GENERAL_ERROR));
153 }
154 LOG(DEBUG) << "sendCdmaSms finished";
155}
156
157/*
158 * Test IRadioMessaging.sendCdmaSmsExpectMore() for the response returned.
159 */
160TEST_P(RadioMessagingTest, sendCdmaSmsExpectMore) {
161 serial = GetRandomSerialNumber();
162
163 // Create a CdmaSmsAddress
164 CdmaSmsAddress cdmaSmsAddress;
165 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
166 cdmaSmsAddress.isNumberModeDataNetwork = false;
167 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
168 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
169 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
170
171 // Create a CdmaSmsSubAddress
172 CdmaSmsSubaddress cdmaSmsSubaddress;
173 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
174 cdmaSmsSubaddress.odd = false;
175 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
176
177 // Create a CdmaSmsMessage
178 CdmaSmsMessage cdmaSmsMessage;
179 cdmaSmsMessage.teleserviceId = 4098;
180 cdmaSmsMessage.isServicePresent = false;
181 cdmaSmsMessage.serviceCategory = 0;
182 cdmaSmsMessage.address = cdmaSmsAddress;
183 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
184 cdmaSmsMessage.bearerData =
185 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
186
187 radio_messaging->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
188
189 EXPECT_EQ(std::cv_status::no_timeout, wait());
190 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
191 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
192
193 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
194 ASSERT_TRUE(CheckAnyOfErrors(
195 radioRsp_messaging->rspInfo.error,
196 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
197 CHECK_GENERAL_ERROR));
198 }
199}
Sarah Chin52de0ad2022-01-28 01:02:16 -0800200
201/*
202 * Test IRadioMessaging.setGsmBroadcastConfig() for the response returned.
203 */
204TEST_P(RadioMessagingTest, setGsmBroadcastConfig) {
205 LOG(DEBUG) << "setGsmBroadcastConfig";
206 serial = GetRandomSerialNumber();
207
208 // Create GsmBroadcastSmsConfigInfo #1
209 GsmBroadcastSmsConfigInfo gbSmsConfig1;
210 gbSmsConfig1.fromServiceId = 4352;
211 gbSmsConfig1.toServiceId = 4354;
212 gbSmsConfig1.fromCodeScheme = 0;
213 gbSmsConfig1.toCodeScheme = 255;
214 gbSmsConfig1.selected = true;
215
216 // Create GsmBroadcastSmsConfigInfo #2
217 GsmBroadcastSmsConfigInfo gbSmsConfig2;
218 gbSmsConfig2.fromServiceId = 4356;
219 gbSmsConfig2.toServiceId = 4356;
220 gbSmsConfig2.fromCodeScheme = 0;
221 gbSmsConfig2.toCodeScheme = 255;
222 gbSmsConfig2.selected = true;
223
224 // Create GsmBroadcastSmsConfigInfo #3
225 GsmBroadcastSmsConfigInfo gbSmsConfig3;
226 gbSmsConfig3.fromServiceId = 4370;
227 gbSmsConfig3.toServiceId = 4379;
228 gbSmsConfig3.fromCodeScheme = 0;
229 gbSmsConfig3.toCodeScheme = 255;
230 gbSmsConfig3.selected = true;
231
232 // Create GsmBroadcastSmsConfigInfo #4
233 GsmBroadcastSmsConfigInfo gbSmsConfig4;
234 gbSmsConfig4.fromServiceId = 4383;
235 gbSmsConfig4.toServiceId = 4391;
236 gbSmsConfig4.fromCodeScheme = 0;
237 gbSmsConfig4.toCodeScheme = 255;
238 gbSmsConfig4.selected = true;
239
240 // Create GsmBroadcastSmsConfigInfo #5
241 GsmBroadcastSmsConfigInfo gbSmsConfig5;
242 gbSmsConfig5.fromServiceId = 4392;
243 gbSmsConfig5.toServiceId = 4392;
244 gbSmsConfig5.fromCodeScheme = 0;
245 gbSmsConfig5.toCodeScheme = 255;
246 gbSmsConfig5.selected = true;
247
248 std::vector<GsmBroadcastSmsConfigInfo> gsmBroadcastSmsConfigsInfoList = {
249 gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
250
251 radio_messaging->setGsmBroadcastConfig(serial, gsmBroadcastSmsConfigsInfoList);
252
253 EXPECT_EQ(std::cv_status::no_timeout, wait());
254 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
255 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
256
257 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
258 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
259 {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
260 RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE},
261 CHECK_GENERAL_ERROR));
262 }
263 LOG(DEBUG) << "setGsmBroadcastConfig finished";
264}
265
266/*
267 * Test IRadioMessaging.getGsmBroadcastConfig() for the response returned.
268 */
269TEST_P(RadioMessagingTest, getGsmBroadcastConfig) {
270 LOG(DEBUG) << "getGsmBroadcastConfig";
271 serial = GetRandomSerialNumber();
272
273 radio_messaging->getGsmBroadcastConfig(serial);
274
275 EXPECT_EQ(std::cv_status::no_timeout, wait());
276 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
277 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
278
279 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
280 ASSERT_TRUE(CheckAnyOfErrors(
281 radioRsp_messaging->rspInfo.error,
282 {RadioError::NONE, RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE},
283 CHECK_GENERAL_ERROR));
284 }
285 LOG(DEBUG) << "getGsmBroadcastConfig finished";
286}
287
288/*
289 * Test IRadioMessaging.setCdmaBroadcastConfig() for the response returned.
290 */
291TEST_P(RadioMessagingTest, setCdmaBroadcastConfig) {
292 LOG(DEBUG) << "setCdmaBroadcastConfig";
293 serial = GetRandomSerialNumber();
294
295 CdmaBroadcastSmsConfigInfo cbSmsConfig;
296 cbSmsConfig.serviceCategory = 4096;
297 cbSmsConfig.language = 1;
298 cbSmsConfig.selected = true;
299
300 std::vector<CdmaBroadcastSmsConfigInfo> cdmaBroadcastSmsConfigInfoList = {cbSmsConfig};
301
302 radio_messaging->setCdmaBroadcastConfig(serial, cdmaBroadcastSmsConfigInfoList);
303
304 EXPECT_EQ(std::cv_status::no_timeout, wait());
305 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
306 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
307
308 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
309 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
310 {RadioError::NONE, RadioError::INVALID_MODEM_STATE},
311 CHECK_GENERAL_ERROR));
312 }
313 LOG(DEBUG) << "setCdmaBroadcastConfig finished";
314}
315
316/*
317 * Test IRadioMessaging.getCdmaBroadcastConfig() for the response returned.
318 */
319TEST_P(RadioMessagingTest, getCdmaBroadcastConfig) {
320 LOG(DEBUG) << "getCdmaBroadcastConfig";
321 serial = GetRandomSerialNumber();
322
323 radio_messaging->getCdmaBroadcastConfig(serial);
324
325 EXPECT_EQ(std::cv_status::no_timeout, wait());
326 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
327 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
328
329 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
330 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error, {RadioError::NONE},
331 CHECK_GENERAL_ERROR));
332 }
333 LOG(DEBUG) << "getCdmaBroadcastConfig finished";
334}
335
336/*
337 * Test IRadioMessaging.setCdmaBroadcastActivation() for the response returned.
338 */
339TEST_P(RadioMessagingTest, setCdmaBroadcastActivation) {
340 LOG(DEBUG) << "setCdmaBroadcastActivation";
341 serial = GetRandomSerialNumber();
342 bool activate = false;
343
344 radio_messaging->setCdmaBroadcastActivation(serial, activate);
345
346 EXPECT_EQ(std::cv_status::no_timeout, wait());
347 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
348 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
349
350 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
351 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
352 {RadioError::NONE, RadioError::INVALID_ARGUMENTS},
353 CHECK_GENERAL_ERROR));
354 }
355 LOG(DEBUG) << "setCdmaBroadcastActivation finished";
356}
357
358/*
359 * Test IRadioMessaging.setGsmBroadcastActivation() for the response returned.
360 */
361TEST_P(RadioMessagingTest, setGsmBroadcastActivation) {
362 LOG(DEBUG) << "setGsmBroadcastActivation";
363 serial = GetRandomSerialNumber();
364 bool activate = false;
365
366 radio_messaging->setGsmBroadcastActivation(serial, activate);
367
368 EXPECT_EQ(std::cv_status::no_timeout, wait());
369 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
370 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
371
372 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
373 ASSERT_TRUE(CheckAnyOfErrors(
374 radioRsp_messaging->rspInfo.error,
375 {RadioError::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_MODEM_STATE,
376 RadioError::INVALID_STATE, RadioError::OPERATION_NOT_ALLOWED},
377 CHECK_GENERAL_ERROR));
378 }
379 LOG(DEBUG) << "setGsmBroadcastActivation finished";
380}
381
382/*
383 * Test IRadioMessaging.acknowledgeLastIncomingGsmSms() for the response returned.
384 */
385TEST_P(RadioMessagingTest, acknowledgeLastIncomingGsmSms) {
386 LOG(DEBUG) << "acknowledgeLastIncomingGsmSms";
387 serial = GetRandomSerialNumber();
388 bool success = true;
389
390 radio_messaging->acknowledgeLastIncomingGsmSms(
391 serial, success, SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
392
393 EXPECT_EQ(std::cv_status::no_timeout, wait());
394 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
395 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
396
397 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
398 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
399 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
400 CHECK_GENERAL_ERROR));
401 }
402 LOG(DEBUG) << "acknowledgeLastIncomingGsmSms finished";
403}
404
405/*
406 * Test IRadioMessaging.acknowledgeIncomingGsmSmsWithPdu() for the response returned.
407 */
408TEST_P(RadioMessagingTest, acknowledgeIncomingGsmSmsWithPdu) {
409 LOG(DEBUG) << "acknowledgeIncomingGsmSmsWithPdu";
410 serial = GetRandomSerialNumber();
411 bool success = true;
412 std::string ackPdu = "";
413
414 radio_messaging->acknowledgeIncomingGsmSmsWithPdu(serial, success, ackPdu);
415
416 EXPECT_EQ(std::cv_status::no_timeout, wait());
417 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
418 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
419
420 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
421 // TODO(shuoq): Will add error check when we know the expected error from QC
422 }
423 LOG(DEBUG) << "acknowledgeIncomingGsmSmsWithPdu finished";
424}
425
426/*
427 * Test IRadioMessaging.acknowledgeLastIncomingCdmaSms() for the response returned.
428 */
429TEST_P(RadioMessagingTest, acknowledgeLastIncomingCdmaSms) {
430 LOG(DEBUG) << "acknowledgeLastIncomingCdmaSms";
431 serial = GetRandomSerialNumber();
432
433 // Create a CdmaSmsAck
434 CdmaSmsAck cdmaSmsAck;
435 cdmaSmsAck.errorClass = false;
436 cdmaSmsAck.smsCauseCode = 1;
437
438 radio_messaging->acknowledgeLastIncomingCdmaSms(serial, cdmaSmsAck);
439
440 EXPECT_EQ(std::cv_status::no_timeout, wait());
441 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
442 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
443
444 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
445 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
446 {RadioError::INVALID_ARGUMENTS, RadioError::NO_SMS_TO_ACK},
447 CHECK_GENERAL_ERROR));
448 }
449 LOG(DEBUG) << "acknowledgeLastIncomingCdmaSms finished";
450}
451
452/*
453 * Test IRadioMessaging.sendImsSms() for the response returned.
454 */
455TEST_P(RadioMessagingTest, sendImsSms) {
456 LOG(DEBUG) << "sendImsSms";
457 serial = GetRandomSerialNumber();
458
459 // Create a CdmaSmsAddress
460 CdmaSmsAddress cdmaSmsAddress;
461 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
462 cdmaSmsAddress.isNumberModeDataNetwork = false;
463 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
464 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
465 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
466
467 // Create a CdmaSmsSubAddress
468 CdmaSmsSubaddress cdmaSmsSubaddress;
469 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
470 cdmaSmsSubaddress.odd = false;
471 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
472
473 // Create a CdmaSmsMessage
474 CdmaSmsMessage cdmaSmsMessage;
475 cdmaSmsMessage.teleserviceId = 4098;
476 cdmaSmsMessage.isServicePresent = false;
477 cdmaSmsMessage.serviceCategory = 0;
478 cdmaSmsMessage.address = cdmaSmsAddress;
479 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
480 cdmaSmsMessage.bearerData =
481 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
482
483 // Creata an ImsSmsMessage
484 ImsSmsMessage msg;
485 msg.tech = RadioTechnologyFamily::THREE_GPP2;
486 msg.retry = false;
487 msg.messageRef = 0;
488 msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
489 msg.gsmMessage = (std::vector<GsmSmsMessage>){};
490
491 radio_messaging->sendImsSms(serial, msg);
492
493 EXPECT_EQ(std::cv_status::no_timeout, wait());
494 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
495 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
496
497 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
498 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
499 {RadioError::INVALID_ARGUMENTS}, CHECK_GENERAL_ERROR));
500 }
501 LOG(DEBUG) << "sendImsSms finished";
502}
503
504/*
505 * Test IRadioMessaging.getSmscAddress() for the response returned.
506 */
507TEST_P(RadioMessagingTest, getSmscAddress) {
508 LOG(DEBUG) << "getSmscAddress";
509 serial = GetRandomSerialNumber();
510
511 radio_messaging->getSmscAddress(serial);
512
513 EXPECT_EQ(std::cv_status::no_timeout, wait());
514 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
515 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
516
517 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
518 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
519 {RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE,
520 RadioError::SIM_ABSENT},
521 CHECK_GENERAL_ERROR));
522 }
523 LOG(DEBUG) << "getSmscAddress finished";
524}
525
526/*
527 * Test IRadioMessaging.setSmscAddress() for the response returned.
528 */
529TEST_P(RadioMessagingTest, setSmscAddress) {
530 LOG(DEBUG) << "setSmscAddress";
531 serial = GetRandomSerialNumber();
532 std::string address = std::string("smscAddress");
533
534 radio_messaging->setSmscAddress(serial, address);
535
536 EXPECT_EQ(std::cv_status::no_timeout, wait());
537 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
538 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
539
540 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
541 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
542 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_SMS_FORMAT,
543 RadioError::SIM_ABSENT},
544 CHECK_GENERAL_ERROR));
545 }
546 LOG(DEBUG) << "setSmscAddress finished";
547}
548
549/*
550 * Test IRadioMessaging.writeSmsToSim() for the response returned.
551 */
552TEST_P(RadioMessagingTest, writeSmsToSim) {
553 LOG(DEBUG) << "writeSmsToSim";
554 serial = GetRandomSerialNumber();
555 SmsWriteArgs smsWriteArgs;
556 smsWriteArgs.status = SmsWriteArgs::STATUS_REC_UNREAD;
557 smsWriteArgs.smsc = "";
558 smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
559
560 radio_messaging->writeSmsToSim(serial, smsWriteArgs);
561
562 EXPECT_EQ(std::cv_status::no_timeout, wait());
563 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
564 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
565
566 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
567 ASSERT_TRUE(CheckAnyOfErrors(
568 radioRsp_messaging->rspInfo.error,
569 {RadioError::NONE, RadioError::ENCODING_ERR, RadioError::INVALID_ARGUMENTS,
570 RadioError::INVALID_SMSC_ADDRESS, RadioError::MODEM_ERR,
571 RadioError::NETWORK_NOT_READY, RadioError::NO_RESOURCES, RadioError::SIM_ABSENT},
572 CHECK_GENERAL_ERROR));
573 }
574 LOG(DEBUG) << "writeSmsToSim finished";
575}
576
577/*
578 * Test IRadioMessaging.deleteSmsOnSim() for the response returned.
579 */
580TEST_P(RadioMessagingTest, deleteSmsOnSim) {
581 LOG(DEBUG) << "deleteSmsOnSim";
582 serial = GetRandomSerialNumber();
583 int index = 1;
584
585 radio_messaging->deleteSmsOnSim(serial, index);
586
587 EXPECT_EQ(std::cv_status::no_timeout, wait());
588 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
589 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
590
591 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
592 ASSERT_TRUE(CheckAnyOfErrors(
593 radioRsp_messaging->rspInfo.error,
594 {RadioError::NONE, RadioError::ENCODING_ERR, RadioError::INVALID_ARGUMENTS,
595 RadioError::INVALID_MODEM_STATE, RadioError::NO_SUCH_ENTRY, RadioError::MODEM_ERR,
596 RadioError::SIM_ABSENT},
597 CHECK_GENERAL_ERROR));
598 }
599 LOG(DEBUG) << "deleteSmsOnSim finished";
600}
601
602/*
603 * Test IRadioMessaging.writeSmsToRuim() for the response returned.
604 */
605TEST_P(RadioMessagingTest, writeSmsToRuim) {
606 LOG(DEBUG) << "writeSmsToRuim";
607 serial = GetRandomSerialNumber();
608
609 // Create a CdmaSmsAddress
610 CdmaSmsAddress cdmaSmsAddress;
611 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
612 cdmaSmsAddress.isNumberModeDataNetwork = false;
613 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
614 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
615 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
616
617 // Create a CdmaSmsSubAddress
618 CdmaSmsSubaddress cdmaSmsSubaddress;
619 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
620 cdmaSmsSubaddress.odd = false;
621 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
622
623 // Create a CdmaSmsMessage
624 CdmaSmsMessage cdmaSmsMessage;
625 cdmaSmsMessage.teleserviceId = 4098;
626 cdmaSmsMessage.isServicePresent = false;
627 cdmaSmsMessage.serviceCategory = 0;
628 cdmaSmsMessage.address = cdmaSmsAddress;
629 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
630 cdmaSmsMessage.bearerData =
631 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
632
633 // Create a CdmaSmsWriteArgs
634 CdmaSmsWriteArgs cdmaSmsWriteArgs;
635 cdmaSmsWriteArgs.status = CdmaSmsWriteArgs::STATUS_REC_UNREAD;
636 cdmaSmsWriteArgs.message = cdmaSmsMessage;
637
638 radio_messaging->writeSmsToRuim(serial, cdmaSmsWriteArgs);
639
640 EXPECT_EQ(std::cv_status::no_timeout, wait());
641 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
642 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
643
644 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
645 ASSERT_TRUE(CheckAnyOfErrors(
646 radioRsp_messaging->rspInfo.error,
647 {RadioError::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_SMS_FORMAT,
648 RadioError::INVALID_SMSC_ADDRESS, RadioError::INVALID_STATE, RadioError::MODEM_ERR,
649 RadioError::NO_SUCH_ENTRY, RadioError::SIM_ABSENT},
650 CHECK_GENERAL_ERROR));
651 }
652 LOG(DEBUG) << "writeSmsToRuim finished";
653}
654
655/*
656 * Test IRadioMessaging.deleteSmsOnRuim() for the response returned.
657 */
658TEST_P(RadioMessagingTest, deleteSmsOnRuim) {
659 LOG(DEBUG) << "deleteSmsOnRuim";
660 serial = GetRandomSerialNumber();
661 int index = 1;
662
663 // Create a CdmaSmsAddress
664 CdmaSmsAddress cdmaSmsAddress;
665 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
666 cdmaSmsAddress.isNumberModeDataNetwork = false;
667 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
668 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
669 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
670
671 // Create a CdmaSmsSubAddress
672 CdmaSmsSubaddress cdmaSmsSubaddress;
673 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
674 cdmaSmsSubaddress.odd = false;
675 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
676
677 // Create a CdmaSmsMessage
678 CdmaSmsMessage cdmaSmsMessage;
679 cdmaSmsMessage.teleserviceId = 4098;
680 cdmaSmsMessage.isServicePresent = false;
681 cdmaSmsMessage.serviceCategory = 0;
682 cdmaSmsMessage.address = cdmaSmsAddress;
683 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
684 cdmaSmsMessage.bearerData =
685 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
686
687 // Create a CdmaSmsWriteArgs
688 CdmaSmsWriteArgs cdmaSmsWriteArgs;
689 cdmaSmsWriteArgs.status = CdmaSmsWriteArgs::STATUS_REC_UNREAD;
690 cdmaSmsWriteArgs.message = cdmaSmsMessage;
691
692 radio_messaging->deleteSmsOnRuim(serial, index);
693
694 EXPECT_EQ(std::cv_status::no_timeout, wait());
695 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
696 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
697
698 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
699 ASSERT_TRUE(CheckAnyOfErrors(
700 radioRsp_messaging->rspInfo.error,
701 {RadioError::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_MODEM_STATE,
702 RadioError::MODEM_ERR, RadioError::NO_SUCH_ENTRY, RadioError::SIM_ABSENT},
703 CHECK_GENERAL_ERROR));
704 }
705 LOG(DEBUG) << "deleteSmsOnRuim finished";
706}
707
708/*
709 * Test IRadioMessaging.reportSmsMemoryStatus() for the response returned.
710 */
711TEST_P(RadioMessagingTest, reportSmsMemoryStatus) {
712 LOG(DEBUG) << "reportSmsMemoryStatus";
713 serial = GetRandomSerialNumber();
714 bool available = true;
715
716 radio_messaging->reportSmsMemoryStatus(serial, available);
717
718 EXPECT_EQ(std::cv_status::no_timeout, wait());
719 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
720 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
721
722 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
723 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
724 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE,
725 RadioError::MODEM_ERR, RadioError::SIM_ABSENT},
726 CHECK_GENERAL_ERROR));
727 }
728 LOG(DEBUG) << "reportSmsMemoryStatus finished";
729}
730
731/*
732 * Test IRadioMessaging.sendUssd() for the response returned.
733 */
734TEST_P(RadioMessagingTest, sendUssd) {
735 LOG(DEBUG) << "sendUssd";
736 serial = GetRandomSerialNumber();
737 radio_messaging->sendUssd(serial, std::string("test"));
738 EXPECT_EQ(std::cv_status::no_timeout, wait());
739 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
740 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
741
742 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
743 ASSERT_TRUE(CheckAnyOfErrors(
744 radioRsp_messaging->rspInfo.error,
745 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::MODEM_ERR},
746 CHECK_GENERAL_ERROR));
747 }
748 LOG(DEBUG) << "sendUssd finished";
749}
750
751/*
752 * Test IRadioMessaging.cancelPendingUssd() for the response returned.
753 */
754TEST_P(RadioMessagingTest, cancelPendingUssd) {
755 LOG(DEBUG) << "cancelPendingUssd";
756 serial = GetRandomSerialNumber();
757
758 radio_messaging->cancelPendingUssd(serial);
759 EXPECT_EQ(std::cv_status::no_timeout, wait());
760 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
761 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
762
763 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
764 ASSERT_TRUE(CheckAnyOfErrors(
765 radioRsp_messaging->rspInfo.error,
766 {RadioError::NONE, RadioError::INVALID_STATE, RadioError::MODEM_ERR},
767 CHECK_GENERAL_ERROR));
768 }
769 LOG(DEBUG) << "cancelPendingUssd finished";
770}