blob: 95e261790bd16fb1612730e1f6f19f66e5c928da [file] [log] [blame]
Sarah Chinfc5603b2021-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>
Sarah Chinfc5603b2021-12-21 11:34:00 -080018#include <android/binder_manager.h>
19
20#include "radio_messaging_utils.h"
21
22#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
23
24void RadioMessagingTest::SetUp() {
Sarah China1efe7a2023-05-02 21:11:41 -070025 RadioServiceTest::SetUp();
Sarah Chinfc5603b2021-12-21 11:34:00 -080026 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
Sarah Chinfc5603b2021-12-21 11:34:00 -080040 radioInd_messaging = ndk::SharedRefBase::make<RadioMessagingIndication>(*this);
41 ASSERT_NE(nullptr, radioInd_messaging.get());
42
43 radio_messaging->setResponseFunctions(radioRsp_messaging, radioInd_messaging);
44
Sarah Chinc83bce42021-12-29 00:35:12 -080045 // Assert IRadioSim exists and SIM is present before testing
46 radio_sim = sim::IRadioSim::fromBinder(ndk::SpAIBinder(
47 AServiceManager_waitForService("android.hardware.radio.sim.IRadioSim/slot1")));
48 ASSERT_NE(nullptr, radio_sim.get());
49 updateSimCardStatus();
50 EXPECT_EQ(CardStatus::STATE_PRESENT, cardStatus.cardState);
51
Sarah Chinfc5603b2021-12-21 11:34:00 -080052 // Assert IRadioConfig exists before testing
Sarah Chinc83bce42021-12-29 00:35:12 -080053 radio_config = config::IRadioConfig::fromBinder(ndk::SpAIBinder(
54 AServiceManager_waitForService("android.hardware.radio.config.IRadioConfig/default")));
55 ASSERT_NE(nullptr, radio_config.get());
Sarah Chinfc5603b2021-12-21 11:34:00 -080056}
57
58/*
59 * Test IRadioMessaging.sendSms() for the response returned.
60 */
61TEST_P(RadioMessagingTest, sendSms) {
joonhunshind519aea2023-10-31 03:06:54 +000062 if (telephony_flags::enforce_telephony_feature_mapping()) {
63 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
64 GTEST_SKIP() << "Skipping sendSms "
65 "due to undefined FEATURE_TELEPHONY_MESSAGING";
66 }
67 }
68
Sarah Chinfc5603b2021-12-21 11:34:00 -080069 serial = GetRandomSerialNumber();
70 GsmSmsMessage msg;
71 msg.smscPdu = "";
72 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
73
74 radio_messaging->sendSms(serial, msg);
75
76 EXPECT_EQ(std::cv_status::no_timeout, wait());
77 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
78 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
79
80 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
81 ASSERT_TRUE(CheckAnyOfErrors(
82 radioRsp_messaging->rspInfo.error,
83 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
84 CHECK_GENERAL_ERROR));
85 EXPECT_EQ(0, radioRsp_messaging->sendSmsResult.errorCode);
86 }
Sarah Chinfc5603b2021-12-21 11:34:00 -080087}
88
89/*
90 * Test IRadioMessaging.sendSmsExpectMore() for the response returned.
91 */
92TEST_P(RadioMessagingTest, sendSmsExpectMore) {
joonhunshind519aea2023-10-31 03:06:54 +000093 if (telephony_flags::enforce_telephony_feature_mapping()) {
94 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
95 GTEST_SKIP() << "Skipping sendSmsExpectMore "
96 "due to undefined FEATURE_TELEPHONY_MESSAGING";
97 }
98 }
99
Sarah Chinfc5603b2021-12-21 11:34:00 -0800100 serial = GetRandomSerialNumber();
101 GsmSmsMessage msg;
102 msg.smscPdu = "";
103 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
104
105 radio_messaging->sendSmsExpectMore(serial, msg);
106
107 EXPECT_EQ(std::cv_status::no_timeout, wait());
108 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
109 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
110
111 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
112 ASSERT_TRUE(CheckAnyOfErrors(
113 radioRsp_messaging->rspInfo.error,
114 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
115 CHECK_GENERAL_ERROR));
116 }
Sarah Chinfc5603b2021-12-21 11:34:00 -0800117}
118
119/*
120 * Test IRadioMessaging.sendCdmaSms() for the response returned.
121 */
122TEST_P(RadioMessagingTest, sendCdmaSms) {
joonhunshind519aea2023-10-31 03:06:54 +0000123 if (telephony_flags::enforce_telephony_feature_mapping()) {
124 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
125 GTEST_SKIP() << "Skipping sendCdmaSms "
126 "due to undefined FEATURE_TELEPHONY_CDMA";
127 }
128 }
129
Sarah Chinfc5603b2021-12-21 11:34:00 -0800130 serial = GetRandomSerialNumber();
131
132 // Create a CdmaSmsAddress
133 CdmaSmsAddress cdmaSmsAddress;
134 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
135 cdmaSmsAddress.isNumberModeDataNetwork = false;
136 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
137 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
138 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
139
140 // Create a CdmaSmsSubAddress
141 CdmaSmsSubaddress cdmaSmsSubaddress;
142 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
143 cdmaSmsSubaddress.odd = false;
144 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
145
146 // Create a CdmaSmsMessage
147 CdmaSmsMessage cdmaSmsMessage;
148 cdmaSmsMessage.teleserviceId = 4098;
149 cdmaSmsMessage.isServicePresent = false;
150 cdmaSmsMessage.serviceCategory = 0;
151 cdmaSmsMessage.address = cdmaSmsAddress;
152 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
153 cdmaSmsMessage.bearerData =
154 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
155
156 radio_messaging->sendCdmaSms(serial, cdmaSmsMessage);
157
158 EXPECT_EQ(std::cv_status::no_timeout, wait());
159 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
160 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
161
162 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
163 ASSERT_TRUE(CheckAnyOfErrors(
164 radioRsp_messaging->rspInfo.error,
165 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
166 CHECK_GENERAL_ERROR));
167 }
Sarah Chinfc5603b2021-12-21 11:34:00 -0800168}
169
170/*
171 * Test IRadioMessaging.sendCdmaSmsExpectMore() for the response returned.
172 */
173TEST_P(RadioMessagingTest, sendCdmaSmsExpectMore) {
joonhunshind519aea2023-10-31 03:06:54 +0000174 if (telephony_flags::enforce_telephony_feature_mapping()) {
175 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
176 GTEST_SKIP() << "Skipping sendCdmaSmsExpectMore "
177 "due to undefined FEATURE_TELEPHONY_CDMA";
178 }
179 }
180
Sarah Chinfc5603b2021-12-21 11:34:00 -0800181 serial = GetRandomSerialNumber();
182
183 // Create a CdmaSmsAddress
184 CdmaSmsAddress cdmaSmsAddress;
185 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
186 cdmaSmsAddress.isNumberModeDataNetwork = false;
187 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
188 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
189 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
190
191 // Create a CdmaSmsSubAddress
192 CdmaSmsSubaddress cdmaSmsSubaddress;
193 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
194 cdmaSmsSubaddress.odd = false;
195 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
196
197 // Create a CdmaSmsMessage
198 CdmaSmsMessage cdmaSmsMessage;
199 cdmaSmsMessage.teleserviceId = 4098;
200 cdmaSmsMessage.isServicePresent = false;
201 cdmaSmsMessage.serviceCategory = 0;
202 cdmaSmsMessage.address = cdmaSmsAddress;
203 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
204 cdmaSmsMessage.bearerData =
205 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
206
207 radio_messaging->sendCdmaSmsExpectMore(serial, cdmaSmsMessage);
208
209 EXPECT_EQ(std::cv_status::no_timeout, wait());
210 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
211 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
212
213 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
214 ASSERT_TRUE(CheckAnyOfErrors(
215 radioRsp_messaging->rspInfo.error,
216 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE, RadioError::SIM_ABSENT},
217 CHECK_GENERAL_ERROR));
218 }
219}
Sarah Chin912bdf32022-01-28 01:02:16 -0800220
221/*
222 * Test IRadioMessaging.setGsmBroadcastConfig() for the response returned.
223 */
224TEST_P(RadioMessagingTest, setGsmBroadcastConfig) {
joonhunshind519aea2023-10-31 03:06:54 +0000225 if (telephony_flags::enforce_telephony_feature_mapping()) {
226 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
227 GTEST_SKIP() << "Skipping setGsmBroadcastConfig "
228 "due to undefined FEATURE_TELEPHONY_MESSAGING";
229 }
230 }
231
Sarah Chin912bdf32022-01-28 01:02:16 -0800232 serial = GetRandomSerialNumber();
233
234 // Create GsmBroadcastSmsConfigInfo #1
235 GsmBroadcastSmsConfigInfo gbSmsConfig1;
236 gbSmsConfig1.fromServiceId = 4352;
237 gbSmsConfig1.toServiceId = 4354;
238 gbSmsConfig1.fromCodeScheme = 0;
239 gbSmsConfig1.toCodeScheme = 255;
240 gbSmsConfig1.selected = true;
241
242 // Create GsmBroadcastSmsConfigInfo #2
243 GsmBroadcastSmsConfigInfo gbSmsConfig2;
244 gbSmsConfig2.fromServiceId = 4356;
245 gbSmsConfig2.toServiceId = 4356;
246 gbSmsConfig2.fromCodeScheme = 0;
247 gbSmsConfig2.toCodeScheme = 255;
248 gbSmsConfig2.selected = true;
249
250 // Create GsmBroadcastSmsConfigInfo #3
251 GsmBroadcastSmsConfigInfo gbSmsConfig3;
252 gbSmsConfig3.fromServiceId = 4370;
253 gbSmsConfig3.toServiceId = 4379;
254 gbSmsConfig3.fromCodeScheme = 0;
255 gbSmsConfig3.toCodeScheme = 255;
256 gbSmsConfig3.selected = true;
257
258 // Create GsmBroadcastSmsConfigInfo #4
259 GsmBroadcastSmsConfigInfo gbSmsConfig4;
260 gbSmsConfig4.fromServiceId = 4383;
261 gbSmsConfig4.toServiceId = 4391;
262 gbSmsConfig4.fromCodeScheme = 0;
263 gbSmsConfig4.toCodeScheme = 255;
264 gbSmsConfig4.selected = true;
265
266 // Create GsmBroadcastSmsConfigInfo #5
267 GsmBroadcastSmsConfigInfo gbSmsConfig5;
268 gbSmsConfig5.fromServiceId = 4392;
269 gbSmsConfig5.toServiceId = 4392;
270 gbSmsConfig5.fromCodeScheme = 0;
271 gbSmsConfig5.toCodeScheme = 255;
272 gbSmsConfig5.selected = true;
273
274 std::vector<GsmBroadcastSmsConfigInfo> gsmBroadcastSmsConfigsInfoList = {
275 gbSmsConfig1, gbSmsConfig2, gbSmsConfig3, gbSmsConfig4, gbSmsConfig5};
276
277 radio_messaging->setGsmBroadcastConfig(serial, gsmBroadcastSmsConfigsInfoList);
278
279 EXPECT_EQ(std::cv_status::no_timeout, wait());
280 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
281 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
282
283 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
284 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
285 {RadioError::NONE, RadioError::INVALID_ARGUMENTS,
286 RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE},
287 CHECK_GENERAL_ERROR));
288 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800289}
290
291/*
292 * Test IRadioMessaging.getGsmBroadcastConfig() for the response returned.
293 */
294TEST_P(RadioMessagingTest, getGsmBroadcastConfig) {
joonhunshind519aea2023-10-31 03:06:54 +0000295 if (telephony_flags::enforce_telephony_feature_mapping()) {
296 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
297 GTEST_SKIP() << "Skipping getGsmBroadcastConfig "
298 "due to undefined FEATURE_TELEPHONY_MESSAGING";
299 }
300 }
301
Sarah Chin912bdf32022-01-28 01:02:16 -0800302 serial = GetRandomSerialNumber();
303
304 radio_messaging->getGsmBroadcastConfig(serial);
305
306 EXPECT_EQ(std::cv_status::no_timeout, wait());
307 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
308 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
309
310 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
311 ASSERT_TRUE(CheckAnyOfErrors(
312 radioRsp_messaging->rspInfo.error,
313 {RadioError::NONE, RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE},
314 CHECK_GENERAL_ERROR));
315 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800316}
317
318/*
319 * Test IRadioMessaging.setCdmaBroadcastConfig() for the response returned.
320 */
321TEST_P(RadioMessagingTest, setCdmaBroadcastConfig) {
joonhunshind519aea2023-10-31 03:06:54 +0000322 if (telephony_flags::enforce_telephony_feature_mapping()) {
323 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
324 GTEST_SKIP() << "Skipping setCdmaBroadcastConfig "
325 "due to undefined FEATURE_TELEPHONY_CDMA";
326 }
327 }
328
Sarah Chin912bdf32022-01-28 01:02:16 -0800329 serial = GetRandomSerialNumber();
330
331 CdmaBroadcastSmsConfigInfo cbSmsConfig;
332 cbSmsConfig.serviceCategory = 4096;
333 cbSmsConfig.language = 1;
334 cbSmsConfig.selected = true;
335
336 std::vector<CdmaBroadcastSmsConfigInfo> cdmaBroadcastSmsConfigInfoList = {cbSmsConfig};
337
338 radio_messaging->setCdmaBroadcastConfig(serial, cdmaBroadcastSmsConfigInfoList);
339
340 EXPECT_EQ(std::cv_status::no_timeout, wait());
341 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
342 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
343
344 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
345 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
346 {RadioError::NONE, RadioError::INVALID_MODEM_STATE},
347 CHECK_GENERAL_ERROR));
348 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800349}
350
351/*
352 * Test IRadioMessaging.getCdmaBroadcastConfig() for the response returned.
353 */
354TEST_P(RadioMessagingTest, getCdmaBroadcastConfig) {
joonhunshind519aea2023-10-31 03:06:54 +0000355 if (telephony_flags::enforce_telephony_feature_mapping()) {
356 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
357 GTEST_SKIP() << "Skipping getCdmaBroadcastConfig "
358 "due to undefined FEATURE_TELEPHONY_CDMA";
359 }
360 }
361
Sarah Chin912bdf32022-01-28 01:02:16 -0800362 serial = GetRandomSerialNumber();
363
364 radio_messaging->getCdmaBroadcastConfig(serial);
365
366 EXPECT_EQ(std::cv_status::no_timeout, wait());
367 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
368 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
369
370 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
371 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error, {RadioError::NONE},
372 CHECK_GENERAL_ERROR));
373 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800374}
375
376/*
377 * Test IRadioMessaging.setCdmaBroadcastActivation() for the response returned.
378 */
379TEST_P(RadioMessagingTest, setCdmaBroadcastActivation) {
joonhunshind519aea2023-10-31 03:06:54 +0000380 if (telephony_flags::enforce_telephony_feature_mapping()) {
381 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
382 GTEST_SKIP() << "Skipping setCdmaBroadcastActivation "
383 "due to undefined FEATURE_TELEPHONY_CDMA";
384 }
385 }
386
Sarah Chin912bdf32022-01-28 01:02:16 -0800387 serial = GetRandomSerialNumber();
388 bool activate = false;
389
390 radio_messaging->setCdmaBroadcastActivation(serial, activate);
391
392 EXPECT_EQ(std::cv_status::no_timeout, wait());
393 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
394 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
395
396 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
397 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
398 {RadioError::NONE, RadioError::INVALID_ARGUMENTS},
399 CHECK_GENERAL_ERROR));
400 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800401}
402
403/*
404 * Test IRadioMessaging.setGsmBroadcastActivation() for the response returned.
405 */
406TEST_P(RadioMessagingTest, setGsmBroadcastActivation) {
joonhunshind519aea2023-10-31 03:06:54 +0000407 if (telephony_flags::enforce_telephony_feature_mapping()) {
408 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
409 GTEST_SKIP() << "Skipping setGsmBroadcastActivation "
410 "due to undefined FEATURE_TELEPHONY_MESSAGING";
411 }
412 }
413
Sarah Chin912bdf32022-01-28 01:02:16 -0800414 serial = GetRandomSerialNumber();
415 bool activate = false;
416
417 radio_messaging->setGsmBroadcastActivation(serial, activate);
418
419 EXPECT_EQ(std::cv_status::no_timeout, wait());
420 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
421 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
422
423 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
424 ASSERT_TRUE(CheckAnyOfErrors(
425 radioRsp_messaging->rspInfo.error,
426 {RadioError::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_MODEM_STATE,
427 RadioError::INVALID_STATE, RadioError::OPERATION_NOT_ALLOWED},
428 CHECK_GENERAL_ERROR));
429 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800430}
431
432/*
433 * Test IRadioMessaging.acknowledgeLastIncomingGsmSms() for the response returned.
434 */
435TEST_P(RadioMessagingTest, acknowledgeLastIncomingGsmSms) {
joonhunshind519aea2023-10-31 03:06:54 +0000436 if (telephony_flags::enforce_telephony_feature_mapping()) {
437 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
438 GTEST_SKIP() << "Skipping acknowledgeLastIncomingGsmSms "
439 "due to undefined FEATURE_TELEPHONY_MESSAGING";
440 }
441 }
442
Sarah Chin912bdf32022-01-28 01:02:16 -0800443 serial = GetRandomSerialNumber();
444 bool success = true;
445
446 radio_messaging->acknowledgeLastIncomingGsmSms(
447 serial, success, SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
448
449 EXPECT_EQ(std::cv_status::no_timeout, wait());
450 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
451 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
452
453 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
454 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
455 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE},
456 CHECK_GENERAL_ERROR));
457 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800458}
459
460/*
461 * Test IRadioMessaging.acknowledgeIncomingGsmSmsWithPdu() for the response returned.
462 */
463TEST_P(RadioMessagingTest, acknowledgeIncomingGsmSmsWithPdu) {
joonhunshind519aea2023-10-31 03:06:54 +0000464 if (telephony_flags::enforce_telephony_feature_mapping()) {
465 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
466 GTEST_SKIP() << "Skipping acknowledgeIncomingGsmSmsWithPdu "
467 "due to undefined FEATURE_TELEPHONY_MESSAGING";
468 }
469 }
470
Sarah Chin912bdf32022-01-28 01:02:16 -0800471 serial = GetRandomSerialNumber();
472 bool success = true;
473 std::string ackPdu = "";
474
475 radio_messaging->acknowledgeIncomingGsmSmsWithPdu(serial, success, ackPdu);
476
477 EXPECT_EQ(std::cv_status::no_timeout, wait());
478 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
479 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
480
481 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
Sarah Chinca421a62022-01-28 15:54:36 -0800482 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
483 {RadioError::INVALID_ARGUMENTS, RadioError::NO_SMS_TO_ACK},
484 CHECK_GENERAL_ERROR));
Sarah Chin912bdf32022-01-28 01:02:16 -0800485 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800486}
487
488/*
489 * Test IRadioMessaging.acknowledgeLastIncomingCdmaSms() for the response returned.
490 */
491TEST_P(RadioMessagingTest, acknowledgeLastIncomingCdmaSms) {
joonhunshind519aea2023-10-31 03:06:54 +0000492 if (telephony_flags::enforce_telephony_feature_mapping()) {
493 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
494 GTEST_SKIP() << "Skipping acknowledgeIncomingGsmSmsWithPdu "
495 "due to undefined FEATURE_TELEPHONY_CDMA";
496 }
497 }
498
Sarah Chin912bdf32022-01-28 01:02:16 -0800499 serial = GetRandomSerialNumber();
500
501 // Create a CdmaSmsAck
502 CdmaSmsAck cdmaSmsAck;
503 cdmaSmsAck.errorClass = false;
504 cdmaSmsAck.smsCauseCode = 1;
505
506 radio_messaging->acknowledgeLastIncomingCdmaSms(serial, cdmaSmsAck);
507
508 EXPECT_EQ(std::cv_status::no_timeout, wait());
509 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
510 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
511
512 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
513 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
514 {RadioError::INVALID_ARGUMENTS, RadioError::NO_SMS_TO_ACK},
515 CHECK_GENERAL_ERROR));
516 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800517}
518
519/*
520 * Test IRadioMessaging.sendImsSms() for the response returned.
521 */
522TEST_P(RadioMessagingTest, sendImsSms) {
joonhunshind519aea2023-10-31 03:06:54 +0000523 if (telephony_flags::enforce_telephony_feature_mapping()) {
524 if (!deviceSupportsFeature(FEATURE_TELEPHONY_IMS)) {
525 GTEST_SKIP() << "Skipping acknowledgeIncomingGsmSmsWithPdu "
526 "due to undefined FEATURE_TELEPHONY_IMS";
527 }
528 }
529
Sarah Chin912bdf32022-01-28 01:02:16 -0800530 serial = GetRandomSerialNumber();
531
532 // Create a CdmaSmsAddress
533 CdmaSmsAddress cdmaSmsAddress;
534 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
535 cdmaSmsAddress.isNumberModeDataNetwork = false;
536 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
537 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
538 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
539
540 // Create a CdmaSmsSubAddress
541 CdmaSmsSubaddress cdmaSmsSubaddress;
542 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
543 cdmaSmsSubaddress.odd = false;
544 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
545
546 // Create a CdmaSmsMessage
547 CdmaSmsMessage cdmaSmsMessage;
548 cdmaSmsMessage.teleserviceId = 4098;
549 cdmaSmsMessage.isServicePresent = false;
550 cdmaSmsMessage.serviceCategory = 0;
551 cdmaSmsMessage.address = cdmaSmsAddress;
552 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
553 cdmaSmsMessage.bearerData =
554 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
555
Sarah China1efe7a2023-05-02 21:11:41 -0700556 // Create an ImsSmsMessage
Sarah Chin912bdf32022-01-28 01:02:16 -0800557 ImsSmsMessage msg;
558 msg.tech = RadioTechnologyFamily::THREE_GPP2;
559 msg.retry = false;
560 msg.messageRef = 0;
561 msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
562 msg.gsmMessage = (std::vector<GsmSmsMessage>){};
563
564 radio_messaging->sendImsSms(serial, msg);
565
566 EXPECT_EQ(std::cv_status::no_timeout, wait());
567 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
568 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
569
570 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
571 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
572 {RadioError::INVALID_ARGUMENTS}, CHECK_GENERAL_ERROR));
573 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800574}
575
576/*
577 * Test IRadioMessaging.getSmscAddress() for the response returned.
578 */
579TEST_P(RadioMessagingTest, getSmscAddress) {
joonhunshind519aea2023-10-31 03:06:54 +0000580 if (telephony_flags::enforce_telephony_feature_mapping()) {
581 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
582 GTEST_SKIP() << "Skipping getSmscAddress "
583 "due to undefined FEATURE_TELEPHONY_MESSAGING";
584 }
585 }
586
Sarah Chin912bdf32022-01-28 01:02:16 -0800587 serial = GetRandomSerialNumber();
588
589 radio_messaging->getSmscAddress(serial);
590
591 EXPECT_EQ(std::cv_status::no_timeout, wait());
592 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
593 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
594
595 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
596 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
597 {RadioError::INVALID_MODEM_STATE, RadioError::INVALID_STATE,
598 RadioError::SIM_ABSENT},
599 CHECK_GENERAL_ERROR));
600 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800601}
602
603/*
604 * Test IRadioMessaging.setSmscAddress() for the response returned.
605 */
606TEST_P(RadioMessagingTest, setSmscAddress) {
joonhunshind519aea2023-10-31 03:06:54 +0000607 if (telephony_flags::enforce_telephony_feature_mapping()) {
608 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
609 GTEST_SKIP() << "Skipping setSmscAddress "
610 "due to undefined FEATURE_TELEPHONY_MESSAGING";
611 }
612 }
613
Sarah Chin912bdf32022-01-28 01:02:16 -0800614 serial = GetRandomSerialNumber();
615 std::string address = std::string("smscAddress");
616
617 radio_messaging->setSmscAddress(serial, address);
618
619 EXPECT_EQ(std::cv_status::no_timeout, wait());
620 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
621 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
622
623 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
624 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
625 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_SMS_FORMAT,
626 RadioError::SIM_ABSENT},
627 CHECK_GENERAL_ERROR));
628 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800629}
630
631/*
632 * Test IRadioMessaging.writeSmsToSim() for the response returned.
633 */
634TEST_P(RadioMessagingTest, writeSmsToSim) {
joonhunshind519aea2023-10-31 03:06:54 +0000635 if (telephony_flags::enforce_telephony_feature_mapping()) {
636 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
637 GTEST_SKIP() << "Skipping writeSmsToSim "
638 "due to undefined FEATURE_TELEPHONY_MESSAGING";
639 }
640 }
641
Sarah Chin912bdf32022-01-28 01:02:16 -0800642 serial = GetRandomSerialNumber();
643 SmsWriteArgs smsWriteArgs;
644 smsWriteArgs.status = SmsWriteArgs::STATUS_REC_UNREAD;
645 smsWriteArgs.smsc = "";
646 smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
647
648 radio_messaging->writeSmsToSim(serial, smsWriteArgs);
649
650 EXPECT_EQ(std::cv_status::no_timeout, wait());
651 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
652 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
653
654 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
655 ASSERT_TRUE(CheckAnyOfErrors(
656 radioRsp_messaging->rspInfo.error,
657 {RadioError::NONE, RadioError::ENCODING_ERR, RadioError::INVALID_ARGUMENTS,
658 RadioError::INVALID_SMSC_ADDRESS, RadioError::MODEM_ERR,
659 RadioError::NETWORK_NOT_READY, RadioError::NO_RESOURCES, RadioError::SIM_ABSENT},
660 CHECK_GENERAL_ERROR));
661 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800662}
663
664/*
665 * Test IRadioMessaging.deleteSmsOnSim() for the response returned.
666 */
667TEST_P(RadioMessagingTest, deleteSmsOnSim) {
joonhunshind519aea2023-10-31 03:06:54 +0000668 if (telephony_flags::enforce_telephony_feature_mapping()) {
669 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
670 GTEST_SKIP() << "Skipping deleteSmsOnSim "
671 "due to undefined FEATURE_TELEPHONY_MESSAGING";
672 }
673 }
674
Sarah Chin912bdf32022-01-28 01:02:16 -0800675 serial = GetRandomSerialNumber();
676 int index = 1;
677
678 radio_messaging->deleteSmsOnSim(serial, index);
679
680 EXPECT_EQ(std::cv_status::no_timeout, wait());
681 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
682 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
683
684 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
685 ASSERT_TRUE(CheckAnyOfErrors(
686 radioRsp_messaging->rspInfo.error,
687 {RadioError::NONE, RadioError::ENCODING_ERR, RadioError::INVALID_ARGUMENTS,
688 RadioError::INVALID_MODEM_STATE, RadioError::NO_SUCH_ENTRY, RadioError::MODEM_ERR,
689 RadioError::SIM_ABSENT},
690 CHECK_GENERAL_ERROR));
691 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800692}
693
694/*
695 * Test IRadioMessaging.writeSmsToRuim() for the response returned.
696 */
697TEST_P(RadioMessagingTest, writeSmsToRuim) {
joonhunshind519aea2023-10-31 03:06:54 +0000698 if (telephony_flags::enforce_telephony_feature_mapping()) {
699 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
700 GTEST_SKIP() << "Skipping writeSmsToRuim "
701 "due to undefined FEATURE_TELEPHONY_CDMA";
702 }
703 }
704
Sarah Chin912bdf32022-01-28 01:02:16 -0800705 serial = GetRandomSerialNumber();
706
707 // Create a CdmaSmsAddress
708 CdmaSmsAddress cdmaSmsAddress;
709 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
710 cdmaSmsAddress.isNumberModeDataNetwork = false;
711 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
712 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
713 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
714
715 // Create a CdmaSmsSubAddress
716 CdmaSmsSubaddress cdmaSmsSubaddress;
717 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
718 cdmaSmsSubaddress.odd = false;
719 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
720
721 // Create a CdmaSmsMessage
722 CdmaSmsMessage cdmaSmsMessage;
723 cdmaSmsMessage.teleserviceId = 4098;
724 cdmaSmsMessage.isServicePresent = false;
725 cdmaSmsMessage.serviceCategory = 0;
726 cdmaSmsMessage.address = cdmaSmsAddress;
727 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
728 cdmaSmsMessage.bearerData =
729 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
730
731 // Create a CdmaSmsWriteArgs
732 CdmaSmsWriteArgs cdmaSmsWriteArgs;
733 cdmaSmsWriteArgs.status = CdmaSmsWriteArgs::STATUS_REC_UNREAD;
734 cdmaSmsWriteArgs.message = cdmaSmsMessage;
735
736 radio_messaging->writeSmsToRuim(serial, cdmaSmsWriteArgs);
737
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::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_SMS_FORMAT,
746 RadioError::INVALID_SMSC_ADDRESS, RadioError::INVALID_STATE, RadioError::MODEM_ERR,
747 RadioError::NO_SUCH_ENTRY, RadioError::SIM_ABSENT},
748 CHECK_GENERAL_ERROR));
749 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800750}
751
752/*
753 * Test IRadioMessaging.deleteSmsOnRuim() for the response returned.
754 */
755TEST_P(RadioMessagingTest, deleteSmsOnRuim) {
joonhunshind519aea2023-10-31 03:06:54 +0000756 if (telephony_flags::enforce_telephony_feature_mapping()) {
757 if (!deviceSupportsFeature(FEATURE_TELEPHONY_CDMA)) {
758 GTEST_SKIP() << "Skipping deleteSmsOnRuim "
759 "due to undefined FEATURE_TELEPHONY_CDMA";
760 }
761 }
762
Sarah Chin912bdf32022-01-28 01:02:16 -0800763 serial = GetRandomSerialNumber();
764 int index = 1;
765
766 // Create a CdmaSmsAddress
767 CdmaSmsAddress cdmaSmsAddress;
768 cdmaSmsAddress.digitMode = CdmaSmsAddress::DIGIT_MODE_FOUR_BIT;
769 cdmaSmsAddress.isNumberModeDataNetwork = false;
770 cdmaSmsAddress.numberType = CdmaSmsAddress::NUMBER_TYPE_UNKNOWN;
771 cdmaSmsAddress.numberPlan = CdmaSmsAddress::NUMBER_PLAN_UNKNOWN;
772 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
773
774 // Create a CdmaSmsSubAddress
775 CdmaSmsSubaddress cdmaSmsSubaddress;
776 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddress::SUBADDRESS_TYPE_NSAP;
777 cdmaSmsSubaddress.odd = false;
778 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
779
780 // Create a CdmaSmsMessage
781 CdmaSmsMessage cdmaSmsMessage;
782 cdmaSmsMessage.teleserviceId = 4098;
783 cdmaSmsMessage.isServicePresent = false;
784 cdmaSmsMessage.serviceCategory = 0;
785 cdmaSmsMessage.address = cdmaSmsAddress;
786 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
787 cdmaSmsMessage.bearerData =
788 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
789
790 // Create a CdmaSmsWriteArgs
791 CdmaSmsWriteArgs cdmaSmsWriteArgs;
792 cdmaSmsWriteArgs.status = CdmaSmsWriteArgs::STATUS_REC_UNREAD;
793 cdmaSmsWriteArgs.message = cdmaSmsMessage;
794
795 radio_messaging->deleteSmsOnRuim(serial, index);
796
797 EXPECT_EQ(std::cv_status::no_timeout, wait());
798 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
799 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
800
801 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
802 ASSERT_TRUE(CheckAnyOfErrors(
803 radioRsp_messaging->rspInfo.error,
804 {RadioError::NONE, RadioError::INVALID_ARGUMENTS, RadioError::INVALID_MODEM_STATE,
805 RadioError::MODEM_ERR, RadioError::NO_SUCH_ENTRY, RadioError::SIM_ABSENT},
806 CHECK_GENERAL_ERROR));
807 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800808}
809
810/*
811 * Test IRadioMessaging.reportSmsMemoryStatus() for the response returned.
812 */
813TEST_P(RadioMessagingTest, reportSmsMemoryStatus) {
joonhunshind519aea2023-10-31 03:06:54 +0000814 if (telephony_flags::enforce_telephony_feature_mapping()) {
815 if (!deviceSupportsFeature(FEATURE_TELEPHONY_MESSAGING)) {
816 GTEST_SKIP() << "Skipping reportSmsMemoryStatus "
817 "due to undefined FEATURE_TELEPHONY_MESSAGING";
818 }
819 }
820
Sarah Chin912bdf32022-01-28 01:02:16 -0800821 serial = GetRandomSerialNumber();
822 bool available = true;
823
824 radio_messaging->reportSmsMemoryStatus(serial, available);
825
826 EXPECT_EQ(std::cv_status::no_timeout, wait());
827 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_messaging->rspInfo.type);
828 EXPECT_EQ(serial, radioRsp_messaging->rspInfo.serial);
829
830 if (cardStatus.cardState == CardStatus::STATE_ABSENT) {
831 ASSERT_TRUE(CheckAnyOfErrors(radioRsp_messaging->rspInfo.error,
832 {RadioError::INVALID_ARGUMENTS, RadioError::INVALID_STATE,
833 RadioError::MODEM_ERR, RadioError::SIM_ABSENT},
834 CHECK_GENERAL_ERROR));
835 }
Sarah Chin912bdf32022-01-28 01:02:16 -0800836}