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