Home | History | Annotate | Download | only in functional
      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