2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include <radio_hidl_hal_utils.h>
19 using namespace ::android::hardware::radio::V1_0;
22 * Test IRadio.sendSms() for the response returned.
24 TEST_F(RadioHidlTest, sendSms) {
25 int serial = GetRandomSerialNumber();
28 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
30 radio->sendSms(serial, msg);
32 EXPECT_EQ(std::cv_status::no_timeout, wait());
33 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
34 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
36 if (cardStatus.cardState == CardState::ABSENT) {
37 ASSERT_TRUE(CheckGeneralError() ||
38 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
39 radioRsp->rspInfo.error == RadioError::INVALID_STATE);
40 EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode);
45 * Test IRadio.sendSMSExpectMore() for the response returned.
47 TEST_F(RadioHidlTest, sendSMSExpectMore) {
48 int serial = GetRandomSerialNumber();
51 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01";
53 radio->sendSMSExpectMore(serial, msg);
55 // TODO(shuoq): add more test for this API when inserted sim card is
58 EXPECT_EQ(std::cv_status::no_timeout, wait());
59 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
60 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
62 if (cardStatus.cardState == CardState::ABSENT) {
63 ASSERT_TRUE(CheckGeneralError() ||
64 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
65 radioRsp->rspInfo.error == RadioError::INVALID_STATE);
70 * Test IRadio.acknowledgeLastIncomingGsmSms() for the response returned.
72 TEST_F(RadioHidlTest, acknowledgeLastIncomingGsmSms) {
73 int serial = GetRandomSerialNumber();
76 radio->acknowledgeLastIncomingGsmSms(serial, success,
77 SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED);
79 EXPECT_EQ(std::cv_status::no_timeout, wait());
80 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
81 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
83 if (cardStatus.cardState == CardState::ABSENT) {
84 ASSERT_TRUE(CheckGeneralError() ||
85 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
86 radioRsp->rspInfo.error == RadioError::INVALID_STATE);
91 * Test IRadio.acknowledgeIncomingGsmSmsWithPdu() for the response returned.
93 TEST_F(RadioHidlTest, acknowledgeIncomingGsmSmsWithPdu) {
94 int serial = GetRandomSerialNumber();
96 std::string ackPdu = "";
98 radio->acknowledgeIncomingGsmSmsWithPdu(serial, success, ackPdu);
100 EXPECT_EQ(std::cv_status::no_timeout, wait());
101 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
102 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
104 if (cardStatus.cardState == CardState::ABSENT) {
105 // TODO(shuoq): Will add error check when we know the expected error from QC
110 * Test IRadio.sendCdmaSms() for the response returned.
112 TEST_F(RadioHidlTest, sendCdmaSms) {
113 int serial = GetRandomSerialNumber();
115 // Create a CdmaSmsAddress
116 CdmaSmsAddress cdmaSmsAddress;
117 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
118 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
119 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
120 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
121 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
123 // Create a CdmaSmsSubAddress
124 CdmaSmsSubaddress cdmaSmsSubaddress;
125 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
126 cdmaSmsSubaddress.odd = false;
127 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
129 // Create a CdmaSmsMessage
130 android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage;
131 cdmaSmsMessage.teleserviceId = 4098;
132 cdmaSmsMessage.isServicePresent = false;
133 cdmaSmsMessage.serviceCategory = 0;
134 cdmaSmsMessage.address = cdmaSmsAddress;
135 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
136 cdmaSmsMessage.bearerData =
137 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
139 radio->sendCdmaSms(serial, cdmaSmsMessage);
141 EXPECT_EQ(std::cv_status::no_timeout, wait());
142 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
143 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
145 if (cardStatus.cardState == CardState::ABSENT) {
146 ASSERT_TRUE(CheckGeneralError() ||
147 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
148 radioRsp->rspInfo.error == RadioError::INVALID_STATE);
153 * Test IRadio.acknowledgeLastIncomingCdmaSms() for the response returned.
155 TEST_F(RadioHidlTest, acknowledgeLastIncomingCdmaSms) {
156 int serial = GetRandomSerialNumber();
158 // Create a CdmaSmsAck
159 CdmaSmsAck cdmaSmsAck;
160 cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR;
161 cdmaSmsAck.smsCauseCode = 1;
163 radio->acknowledgeLastIncomingCdmaSms(serial, cdmaSmsAck);
165 EXPECT_EQ(std::cv_status::no_timeout, wait());
166 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
167 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
169 if (cardStatus.cardState == CardState::ABSENT) {
170 ASSERT_TRUE(CheckGeneralError() ||
171 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
172 radioRsp->rspInfo.error == RadioError::NO_SMS_TO_ACK);
177 * Test IRadio.sendImsSms() for the response returned.
179 TEST_F(RadioHidlTest, sendImsSms) {
180 int serial = GetRandomSerialNumber();
182 // Create a CdmaSmsAddress
183 CdmaSmsAddress cdmaSmsAddress;
184 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
185 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
186 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
187 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
188 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
190 // Create a CdmaSmsSubAddress
191 CdmaSmsSubaddress cdmaSmsSubaddress;
192 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
193 cdmaSmsSubaddress.odd = false;
194 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
196 // Create a CdmaSmsMessage
197 CdmaSmsMessage cdmaSmsMessage;
198 cdmaSmsMessage.teleserviceId = 4098;
199 cdmaSmsMessage.isServicePresent = false;
200 cdmaSmsMessage.serviceCategory = 0;
201 cdmaSmsMessage.address = cdmaSmsAddress;
202 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
203 cdmaSmsMessage.bearerData =
204 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
206 // Creata an ImsSmsMessage
208 msg.tech = RadioTechnologyFamily::THREE_GPP2;
211 msg.cdmaMessage = (std::vector<CdmaSmsMessage>){cdmaSmsMessage};
212 msg.gsmMessage = (std::vector<GsmSmsMessage>){};
214 radio->sendImsSms(serial, msg);
216 EXPECT_EQ(std::cv_status::no_timeout, wait());
217 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
218 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
220 if (cardStatus.cardState == CardState::ABSENT) {
221 ASSERT_TRUE(CheckGeneralError() ||
222 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS);
227 * Test IRadio.getSmscAddress() for the response returned.
229 TEST_F(RadioHidlTest, getSmscAddress) {
230 int serial = GetRandomSerialNumber();
232 radio->getSmscAddress(serial);
234 EXPECT_EQ(std::cv_status::no_timeout, wait());
235 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
236 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
238 if (cardStatus.cardState == CardState::ABSENT) {
239 ASSERT_TRUE(CheckGeneralError() || radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
240 radioRsp->rspInfo.error == RadioError::INVALID_MODEM_STATE);
245 * Test IRadio.setSmscAddress() for the response returned.
247 TEST_F(RadioHidlTest, setSmscAddress) {
248 int serial = GetRandomSerialNumber();
249 hidl_string address = hidl_string("smscAddress");
251 radio->setSmscAddress(serial, address);
253 EXPECT_EQ(std::cv_status::no_timeout, wait());
254 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
255 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
257 if (cardStatus.cardState == CardState::ABSENT) {
258 ASSERT_TRUE(CheckGeneralError() ||
259 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
260 radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT);
265 * Test IRadio.writeSmsToSim() for the response returned.
267 TEST_F(RadioHidlTest, writeSmsToSim) {
268 int serial = GetRandomSerialNumber();
269 SmsWriteArgs smsWriteArgs;
270 smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD;
271 smsWriteArgs.smsc = "";
272 smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01";
274 radio->writeSmsToSim(serial, smsWriteArgs);
276 EXPECT_EQ(std::cv_status::no_timeout, wait());
277 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
278 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
280 if (cardStatus.cardState == CardState::ABSENT) {
281 ASSERT_TRUE(CheckGeneralError() ||
282 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
283 radioRsp->rspInfo.error == RadioError::NONE ||
284 radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
285 radioRsp->rspInfo.error == RadioError::ENCODING_ERR ||
286 radioRsp->rspInfo.error == RadioError::NO_RESOURCES ||
287 radioRsp->rspInfo.error == RadioError::NETWORK_NOT_READY ||
288 radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
293 * Test IRadio.deleteSmsOnSim() for the response returned.
295 TEST_F(RadioHidlTest, deleteSmsOnSim) {
296 int serial = GetRandomSerialNumber();
299 radio->deleteSmsOnSim(serial, index);
301 EXPECT_EQ(std::cv_status::no_timeout, wait());
302 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
303 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
305 if (cardStatus.cardState == CardState::ABSENT) {
306 ASSERT_TRUE(CheckGeneralError() ||
307 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
308 radioRsp->rspInfo.error == RadioError::NONE ||
309 radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
310 radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY);
315 * Test IRadio.writeSmsToRuim() for the response returned.
317 TEST_F(RadioHidlTest, writeSmsToRuim) {
318 int serial = GetRandomSerialNumber();
320 // Create a CdmaSmsAddress
321 CdmaSmsAddress cdmaSmsAddress;
322 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
323 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
324 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
325 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
326 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
328 // Create a CdmaSmsSubAddress
329 CdmaSmsSubaddress cdmaSmsSubaddress;
330 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
331 cdmaSmsSubaddress.odd = false;
332 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
334 // Create a CdmaSmsMessage
335 CdmaSmsMessage cdmaSmsMessage;
336 cdmaSmsMessage.teleserviceId = 4098;
337 cdmaSmsMessage.isServicePresent = false;
338 cdmaSmsMessage.serviceCategory = 0;
339 cdmaSmsMessage.address = cdmaSmsAddress;
340 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
341 cdmaSmsMessage.bearerData =
342 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
344 // Create a CdmaSmsWriteArgs
345 CdmaSmsWriteArgs cdmaSmsWriteArgs;
346 cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
347 cdmaSmsWriteArgs.message = cdmaSmsMessage;
349 radio->writeSmsToRuim(serial, cdmaSmsWriteArgs);
351 EXPECT_EQ(std::cv_status::no_timeout, wait());
352 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
353 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
355 if (cardStatus.cardState == CardState::ABSENT) {
356 ASSERT_TRUE(CheckGeneralError() ||
357 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
358 radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
359 radioRsp->rspInfo.error == RadioError::INVALID_SMS_FORMAT ||
360 radioRsp->rspInfo.error == RadioError::NONE ||
361 radioRsp->rspInfo.error == RadioError::MODEM_ERR ||
362 radioRsp->rspInfo.error == RadioError::NO_SUCH_ENTRY ||
363 radioRsp->rspInfo.error == RadioError::INVALID_SMSC_ADDRESS);
368 * Test IRadio.deleteSmsOnRuim() for the response returned.
370 TEST_F(RadioHidlTest, deleteSmsOnRuim) {
371 int serial = GetRandomSerialNumber();
374 // Create a CdmaSmsAddress
375 CdmaSmsAddress cdmaSmsAddress;
376 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT;
377 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK;
378 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN;
379 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN;
380 cdmaSmsAddress.digits = (std::vector<uint8_t>){11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3};
382 // Create a CdmaSmsSubAddress
383 CdmaSmsSubaddress cdmaSmsSubaddress;
384 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP;
385 cdmaSmsSubaddress.odd = false;
386 cdmaSmsSubaddress.digits = (std::vector<uint8_t>){};
388 // Create a CdmaSmsMessage
389 CdmaSmsMessage cdmaSmsMessage;
390 cdmaSmsMessage.teleserviceId = 4098;
391 cdmaSmsMessage.isServicePresent = false;
392 cdmaSmsMessage.serviceCategory = 0;
393 cdmaSmsMessage.address = cdmaSmsAddress;
394 cdmaSmsMessage.subAddress = cdmaSmsSubaddress;
395 cdmaSmsMessage.bearerData =
396 (std::vector<uint8_t>){15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0};
398 // Create a CdmaSmsWriteArgs
399 CdmaSmsWriteArgs cdmaSmsWriteArgs;
400 cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD;
401 cdmaSmsWriteArgs.message = cdmaSmsMessage;
403 radio->deleteSmsOnRuim(serial, index);
405 EXPECT_EQ(std::cv_status::no_timeout, wait());
406 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
407 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
409 if (cardStatus.cardState == CardState::ABSENT) {
410 ASSERT_TRUE(CheckGeneralError());
415 * Test IRadio.reportSmsMemoryStatus() for the response returned.
417 TEST_F(RadioHidlTest, reportSmsMemoryStatus) {
418 int serial = GetRandomSerialNumber();
419 bool available = true;
421 radio->reportSmsMemoryStatus(serial, available);
423 EXPECT_EQ(std::cv_status::no_timeout, wait());
424 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
425 EXPECT_EQ(serial, radioRsp->rspInfo.serial);
427 if (cardStatus.cardState == CardState::ABSENT) {
428 ASSERT_TRUE(CheckGeneralError() ||
429 radioRsp->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
430 radioRsp->rspInfo.error == RadioError::INVALID_STATE ||
431 radioRsp->rspInfo.error == RadioError::MODEM_ERR);