radio_hidl_hal_sms.cpp revision 064ee51e0793ab7c8ad8cc440843c995f145e0a4
1/* 2 * Copyright (C) 2017 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<radio_hidl_hal_utils.h> 18 19using namespace ::android::hardware::radio::V1_0; 20 21/* 22 * Test IRadio.sendSms() for the response returned. 23 */ 24TEST_F(RadioHidlTest, sendSms) { 25 int serial = 0; 26 GsmSmsMessage msg; 27 msg.smscPdu = ""; 28 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01"; 29 30 radio->sendSms(++serial, msg); 31 32 EXPECT_EQ(std::cv_status::no_timeout, wait()); 33 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 34 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 35 36 if (cardStatus.cardState == CardState::ABSENT) { 37 EXPECT_EQ(RadioError::INVALID_STATE, radioRsp->rspInfo.error); 38 EXPECT_EQ(0, radioRsp->sendSmsResult.errorCode); 39 } else { 40 EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error); 41 EXPECT_EQ("", radioRsp->sendSmsResult.ackPDU); 42 EXPECT_EQ(-1, radioRsp->sendSmsResult.errorCode); 43 } 44} 45 46/* 47 * Test IRadio.sendSMSExpectMore() for the response returned. 48 */ 49TEST_F(RadioHidlTest, sendSMSExpectMore) { 50 int serial = 0; 51 GsmSmsMessage msg; 52 msg.smscPdu = ""; 53 msg.pdu = "01000b916105770203f3000006d4f29c3e9b01"; 54 55 radio->sendSMSExpectMore(++serial, msg); 56 57 // TODO(shuoq): add more test for this API when inserted sim card is considered 58 59 EXPECT_EQ(std::cv_status::no_timeout, wait()); 60 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 61 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 62 63 if (cardStatus.cardState == CardState::ABSENT) { 64 EXPECT_EQ(RadioError::INVALID_STATE, radioRsp->rspInfo.error); 65 } else { 66 EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error); 67 EXPECT_EQ("", radioRsp->sendSmsResult.ackPDU); 68 EXPECT_EQ(-1, radioRsp->sendSmsResult.errorCode); 69 } 70} 71 72/* 73 * Test IRadio.acknowledgeLastIncomingGsmSms() for the response returned. 74 */ 75TEST_F(RadioHidlTest, acknowledgeLastIncomingGsmSms) { 76 int serial = 0; 77 bool success = true; 78 79 radio->acknowledgeLastIncomingGsmSms(++serial, success, 80 SmsAcknowledgeFailCause::MEMORY_CAPACITY_EXCEEDED); 81 82 EXPECT_EQ(std::cv_status::no_timeout, wait()); 83 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 84 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 85 86 if (cardStatus.cardState == CardState::ABSENT) { 87 EXPECT_EQ(RadioError::INVALID_STATE, radioRsp->rspInfo.error); 88 } else { 89 // TODO(shuoq): Will test right behavior when inserted sim card is considered 90 } 91} 92 93/* 94 * Test IRadio.acknowledgeIncomingGsmSmsWithPdu() for the response returned. 95 */ 96TEST_F(RadioHidlTest, acknowledgeIncomingGsmSmsWithPdu) { 97 int serial = 0; 98 bool success = true; 99 std::string ackPdu = ""; 100 101 radio->acknowledgeIncomingGsmSmsWithPdu(++serial, success, ackPdu); 102 103 EXPECT_EQ(std::cv_status::no_timeout, wait()); 104 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 105 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 106 107 if (cardStatus.cardState == CardState::ABSENT) { 108 // TODO(shuoq): Will add error check when we know the expected error from QC 109 } else { 110 // TODO(shuoq): Will test right behavior when inserted sim card is considered 111 } 112} 113 114/* 115 * Test IRadio.sendCdmaSms() for the response returned. 116 */ 117TEST_F(RadioHidlTest, sendCdmaSms) { 118 int serial = 0; 119 120 // Create a CdmaSmsAddress 121 CdmaSmsAddress cdmaSmsAddress; 122 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT; 123 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK; 124 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN; 125 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN; 126 cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3}; 127 128 // Create a CdmaSmsSubAddress 129 CdmaSmsSubaddress cdmaSmsSubaddress; 130 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP; 131 cdmaSmsSubaddress.odd = false; 132 cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {}; 133 134 // Create a CdmaSmsMessage 135 android::hardware::radio::V1_0::CdmaSmsMessage cdmaSmsMessage; 136 cdmaSmsMessage.teleserviceId = 4098; 137 cdmaSmsMessage.isServicePresent = false; 138 cdmaSmsMessage.serviceCategory = 0; 139 cdmaSmsMessage.address = cdmaSmsAddress; 140 cdmaSmsMessage.subAddress = cdmaSmsSubaddress; 141 cdmaSmsMessage.bearerData = (std::vector<uint8_t>) 142 {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0}; 143 144 radio->sendCdmaSms(++serial, cdmaSmsMessage); 145 146 EXPECT_EQ(std::cv_status::no_timeout, wait()); 147 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 148 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 149 150 if (cardStatus.cardState == CardState::ABSENT) { 151 // TODO(shuoq): Will add error check when we know the expected error from QC 152 } else { 153 // TODO(shuoq): radioRsp->sendSmsResult needs to be investigated when Sim card is in 154 } 155} 156 157/* 158 * Test IRadio.acknowledgeLastIncomingCdmaSms() for the response returned. 159 */ 160TEST_F(RadioHidlTest, acknowledgeLastIncomingCdmaSms) { 161 int serial = 0; 162 163 // Create a CdmaSmsAck 164 CdmaSmsAck cdmaSmsAck; 165 cdmaSmsAck.errorClass = CdmaSmsErrorClass::NO_ERROR; 166 cdmaSmsAck.smsCauseCode = 1; 167 168 radio->acknowledgeLastIncomingCdmaSms(++serial, cdmaSmsAck); 169 170 EXPECT_EQ(std::cv_status::no_timeout, wait()); 171 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 172 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 173 174 if (cardStatus.cardState == CardState::ABSENT) { 175 EXPECT_EQ(RadioError::NO_SMS_TO_ACK, radioRsp->rspInfo.error); 176 } else { 177 EXPECT_EQ(RadioError::NO_SMS_TO_ACK, radioRsp->rspInfo.error); 178 } 179} 180 181/* 182 * Test IRadio.sendImsSms() for the response returned. 183 */ 184TEST_F(RadioHidlTest, sendImsSms) { 185 int serial = 1; 186 187 // Create a CdmaSmsAddress 188 CdmaSmsAddress cdmaSmsAddress; 189 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT; 190 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK; 191 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN; 192 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN; 193 cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3}; 194 195 // Create a CdmaSmsSubAddress 196 CdmaSmsSubaddress cdmaSmsSubaddress; 197 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP; 198 cdmaSmsSubaddress.odd = false; 199 cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {}; 200 201 // Create a CdmaSmsMessage 202 CdmaSmsMessage cdmaSmsMessage; 203 cdmaSmsMessage.teleserviceId = 4098; 204 cdmaSmsMessage.isServicePresent = false; 205 cdmaSmsMessage.serviceCategory = 0; 206 cdmaSmsMessage.address = cdmaSmsAddress; 207 cdmaSmsMessage.subAddress = cdmaSmsSubaddress; 208 cdmaSmsMessage.bearerData = (std::vector<uint8_t>) 209 {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0}; 210 211 // Creata an ImsSmsMessage 212 ImsSmsMessage msg; 213 msg.tech = RadioTechnologyFamily::THREE_GPP2; 214 msg.retry = false; 215 msg.messageRef = 0; 216 msg.cdmaMessage = (std::vector<CdmaSmsMessage>) {cdmaSmsMessage}; 217 msg.gsmMessage = (std::vector<GsmSmsMessage>) {}; 218 219 radio->sendImsSms(serial, msg); 220 221 EXPECT_EQ(std::cv_status::no_timeout, wait()); 222 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 223 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 224 225 if (cardStatus.cardState == CardState::ABSENT) { 226 EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error); 227 } else { 228 EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error); 229 // TODO(shuoq): radioRsp->sendSmsResult needs to be investigated when sim card is in 230 } 231} 232 233/* 234 * Test IRadio.getSmscAddress() for the response returned. 235 */ 236TEST_F(RadioHidlTest, getSmscAddress) { 237 int serial = 0; 238 239 radio->getSmscAddress(++serial); 240 241 EXPECT_EQ(std::cv_status::no_timeout, wait()); 242 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 243 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 244 245 if (cardStatus.cardState == CardState::ABSENT) { 246 // TODO(shuoq): Will add error check when we know the expected error from QC 247 } else { 248 EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error); 249 // TODO(shuoq): radioRsp->smscAddress needs to be investigated when Sim card is in 250 } 251} 252 253/* 254 * Test IRadio.setSmscAddress() for the response returned. 255 */ 256TEST_F(RadioHidlTest, setSmscAddress) { 257 int serial = 0; 258 hidl_string address = hidl_string("smscAddress"); 259 260 radio->setSmscAddress(++serial, address); 261 262 EXPECT_EQ(std::cv_status::no_timeout, wait()); 263 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 264 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 265 266 if (cardStatus.cardState == CardState::ABSENT) { 267 EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error); 268 } else { 269 EXPECT_EQ(RadioError::INVALID_SMS_FORMAT, radioRsp->rspInfo.error); 270 } 271} 272 273/* 274 * Test IRadio.writeSmsToSim() for the response returned. 275 */ 276TEST_F(RadioHidlTest, writeSmsToSim) { 277 int serial = 0; 278 SmsWriteArgs smsWriteArgs; 279 smsWriteArgs.status = SmsWriteArgsStatus::REC_UNREAD; 280 smsWriteArgs.smsc = ""; 281 smsWriteArgs.pdu = "01000b916105770203f3000006d4f29c3e9b01"; 282 283 radio->writeSmsToSim(++serial, smsWriteArgs); 284 285 EXPECT_EQ(std::cv_status::no_timeout, wait()); 286 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 287 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 288 289 if (cardStatus.cardState == CardState::ABSENT) { 290 // TODO(shuoq): Will add error check when we know the expected error from QC 291 } else { 292 // TODO(shuoq): radioRsp->writeSmsToSimIndex needs to be investigated when Sim card is in 293 } 294} 295 296/* 297 * Test IRadio.deleteSmsOnSim() for the response returned. 298 */ 299TEST_F(RadioHidlTest, deleteSmsOnSim) { 300 int serial = 0; 301 int index = 1; 302 303 radio->deleteSmsOnSim(++serial, index); 304 305 EXPECT_EQ(std::cv_status::no_timeout, wait()); 306 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 307 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 308 309 if (cardStatus.cardState == CardState::ABSENT) { 310 // TODO(shuoq): Will add error check when we know the expected error from QC 311 } else { 312 EXPECT_EQ(RadioError::NO_SUCH_ENTRY, radioRsp->rspInfo.error); 313 } 314} 315 316/* 317 * Test IRadio.writeSmsToRuim() for the response returned. 318 */ 319TEST_F(RadioHidlTest, writeSmsToRuim) { 320 int serial = 0; 321 322 // Create a CdmaSmsAddress 323 CdmaSmsAddress cdmaSmsAddress; 324 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT; 325 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK; 326 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN; 327 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN; 328 cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3}; 329 330 // Create a CdmaSmsSubAddress 331 CdmaSmsSubaddress cdmaSmsSubaddress; 332 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP; 333 cdmaSmsSubaddress.odd = false; 334 cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {}; 335 336 // Create a CdmaSmsMessage 337 CdmaSmsMessage cdmaSmsMessage; 338 cdmaSmsMessage.teleserviceId = 4098; 339 cdmaSmsMessage.isServicePresent = false; 340 cdmaSmsMessage.serviceCategory = 0; 341 cdmaSmsMessage.address = cdmaSmsAddress; 342 cdmaSmsMessage.subAddress = cdmaSmsSubaddress; 343 cdmaSmsMessage.bearerData = (std::vector<uint8_t>) 344 {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0}; 345 346 // Create a CdmaSmsWriteArgs 347 CdmaSmsWriteArgs cdmaSmsWriteArgs; 348 cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD; 349 cdmaSmsWriteArgs.message = cdmaSmsMessage; 350 351 radio->writeSmsToRuim(++serial, cdmaSmsWriteArgs); 352 353 EXPECT_EQ(std::cv_status::no_timeout, wait()); 354 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 355 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 356 357 if (cardStatus.cardState == CardState::ABSENT) { 358 // TODO(shuoq): Will add error check when we know the expected error from QC 359 } else { 360 // TODO(shuoq): radioRsp->writeSmsToRuimIndex needs to be investigated when sim card is in 361 } 362} 363 364/* 365 * Test IRadio.deleteSmsOnRuim() for the response returned. 366 */ 367TEST_F(RadioHidlTest, deleteSmsOnRuim) { 368 int serial = 0; 369 int index = 1; 370 371 // Create a CdmaSmsAddress 372 CdmaSmsAddress cdmaSmsAddress; 373 cdmaSmsAddress.digitMode = CdmaSmsDigitMode::FOUR_BIT; 374 cdmaSmsAddress.numberMode = CdmaSmsNumberMode::NOT_DATA_NETWORK; 375 cdmaSmsAddress.numberType = CdmaSmsNumberType::UNKNOWN; 376 cdmaSmsAddress.numberPlan = CdmaSmsNumberPlan::UNKNOWN; 377 cdmaSmsAddress.digits = (std::vector<uint8_t>) {11, 1, 6, 5, 10, 7, 7, 2, 10, 3, 10, 3}; 378 379 // Create a CdmaSmsSubAddress 380 CdmaSmsSubaddress cdmaSmsSubaddress; 381 cdmaSmsSubaddress.subaddressType = CdmaSmsSubaddressType::NSAP; 382 cdmaSmsSubaddress.odd = false; 383 cdmaSmsSubaddress.digits = (std::vector<uint8_t>) {}; 384 385 // Create a CdmaSmsMessage 386 CdmaSmsMessage cdmaSmsMessage; 387 cdmaSmsMessage.teleserviceId = 4098; 388 cdmaSmsMessage.isServicePresent = false; 389 cdmaSmsMessage.serviceCategory = 0; 390 cdmaSmsMessage.address = cdmaSmsAddress; 391 cdmaSmsMessage.subAddress = cdmaSmsSubaddress; 392 cdmaSmsMessage.bearerData = (std::vector<uint8_t>) 393 {15, 0, 3, 32, 3, 16, 1, 8, 16, 53, 76, 68, 6, 51, 106, 0}; 394 395 // Create a CdmaSmsWriteArgs 396 CdmaSmsWriteArgs cdmaSmsWriteArgs; 397 cdmaSmsWriteArgs.status = CdmaSmsWriteArgsStatus::REC_UNREAD; 398 cdmaSmsWriteArgs.message = cdmaSmsMessage; 399 400 radio->deleteSmsOnRuim(++serial, index); 401 402 EXPECT_EQ(std::cv_status::no_timeout, wait()); 403 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 404 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 405 406 if (cardStatus.cardState == CardState::ABSENT) { 407 // TODO(shuoq): Will add error check when we know the expected error from QC 408 } else { 409 // TODO(shuoq): Will test right behavior when inserted sim card is considered 410 } 411} 412 413/* 414 * Test IRadio.reportSmsMemoryStatus() for the response returned. 415 */ 416TEST_F(RadioHidlTest, reportSmsMemoryStatus) { 417 int serial = 0; 418 bool available = true; 419 420 radio->reportSmsMemoryStatus(++serial, available); 421 422 EXPECT_EQ(std::cv_status::no_timeout, wait()); 423 EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type); 424 EXPECT_EQ(serial, radioRsp->rspInfo.serial); 425 426 if (cardStatus.cardState == CardState::ABSENT) { 427 // TODO(shuoq): Will add error check when we know the expected error from QC 428 } else { 429 EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error); 430 } 431} 432