Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1512edb3 authored by Sanket Padawe's avatar Sanket Padawe
Browse files

VTS for icc radio hal Apis (patch 2).

Test: vts
Change-Id: I24a08f82bcca5bd48c268d72c75059e614931ea0
parent b541affa
Loading
Loading
Loading
Loading
+224 −39
Original line number Diff line number Diff line
@@ -20,86 +20,271 @@
 * Test IRadio.getIccCardStatus() for the response returned.
 */
TEST_F(RadioHidlTest, getIccCardStatus) {
    radio->getIccCardStatus(1);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(1, radioRsp->rspInfo.serial);
    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::NONE);

    EXPECT_LE(radioRsp->cardStatus.applications.size(), (unsigned int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(radioRsp->cardStatus.gsmUmtsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(radioRsp->cardStatus.cdmaSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(radioRsp->cardStatus.imsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
    EXPECT_LE(cardStatus.applications.size(), (unsigned int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(cardStatus.gsmUmtsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(cardStatus.cdmaSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
    EXPECT_LT(cardStatus.imsSubscriptionAppIndex, (int) RadioConst::CARD_MAX_APPS);
}

/*
 * Test IRadio.supplyIccPinForApp() for the response returned.
 * Test IRadio.supplyIccPinForApp() for the response returned
 */
TEST_F(RadioHidlTest, supplyIccPinForApp) {
    radio->supplyIccPinForApp(2, hidl_string("test1"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->supplyIccPinForApp(++serial, hidl_string("test1"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(2, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.supplyIccPukForApp() for the response returned.
 */
TEST_F(RadioHidlTest, supplyIccPukForApp) {
    radio->supplyIccPukForApp(3, hidl_string("test1"), hidl_string("test2"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->supplyIccPukForApp(++serial, hidl_string("test1"), hidl_string("test2"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(3, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.supplyIccPin2ForApp() for the response returned.
 */
TEST_F(RadioHidlTest, supplyIccPin2ForApp) {
    radio->supplyIccPin2ForApp(4, hidl_string("test1"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->supplyIccPin2ForApp(++serial, hidl_string("test1"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(4, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.supplyIccPuk2ForApp() for the response returned.
 */
TEST_F(RadioHidlTest, supplyIccPuk2ForApp) {
    radio->supplyIccPuk2ForApp(5, hidl_string("test1"), hidl_string("test2"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->supplyIccPuk2ForApp(++serial, hidl_string("test1"), hidl_string("test2"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(5, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.changeIccPinForApp() for the response returned.
 */
TEST_F(RadioHidlTest, changeIccPinForApp) {
    radio->changeIccPinForApp(6, hidl_string("test1"), hidl_string("test2"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->changeIccPinForApp(++serial, hidl_string("test1"), hidl_string("test2"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(6, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.changeIccPin2ForApp() for the response returned.
 */
TEST_F(RadioHidlTest, changeIccPin2ForApp) {
    radio->changeIccPin2ForApp(7, hidl_string("test1"), hidl_string("test2"), hidl_string());
    int serial = 1;

    // Pass wrong password and check PASSWORD_INCORRECT returned for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->changeIccPin2ForApp(++serial, hidl_string("test1"), hidl_string("test2"),
                    cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
            EXPECT_EQ(RadioError::PASSWORD_INCORRECT, radioRsp->rspInfo.error);
        }
    }
}

/*
 * Test IRadio.getImsiForApp() for the response returned.
 */
TEST_F(RadioHidlTest, getImsiForApp) {
    int serial = 1;

    // Check success returned while getting imsi for 3GPP and 3GPP2 apps only
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        if (cardStatus.applications[i].appType == AppType::SIM
                || cardStatus.applications[i].appType == AppType::USIM
                || cardStatus.applications[i].appType == AppType::RUIM
                || cardStatus.applications[i].appType == AppType::CSIM) {
            radio->getImsiForApp(++serial, cardStatus.applications[i].aidPtr);
            EXPECT_EQ(std::cv_status::no_timeout, wait());
            EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
            EXPECT_EQ(serial, radioRsp->rspInfo.serial);
            EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);

            // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more than 15
            if (radioRsp->rspInfo.error == RadioError::NONE) {
                EXPECT_NE(radioRsp->imsi, hidl_string());
                EXPECT_GE((int) (radioRsp->imsi).size(), 6);
                EXPECT_LE((int) (radioRsp->imsi).size(), 15);
            }
        }
    }
}

/*
 * Test IRadio.iccIOForApp() for the response returned.
 */
TEST_F(RadioHidlTest, iccIOForApp) {
    int serial = 1;

    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        IccIo iccIo;
        iccIo.command = 0xc0;
        iccIo.fileId = 0x6f11;
        iccIo.path = hidl_string("3F007FFF");
        iccIo.p1 = 0;
        iccIo.p2 = 0;
        iccIo.p3 = 0;
        iccIo.data = hidl_string();
        iccIo.pin2 = hidl_string();
        iccIo.aid = cardStatus.applications[i].aidPtr;

        radio->iccIOForApp(++serial, iccIo);
        EXPECT_EQ(std::cv_status::no_timeout, wait());
        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
    }
}

/*
 * Test IRadio.iccTransmitApduBasicChannel() for the response returned.
 */
TEST_F(RadioHidlTest, iccTransmitApduBasicChannel) {
    int serial = 1;
    SimApdu msg;
    memset(&msg, 0, sizeof(msg));
    msg.data = hidl_string();

    radio->iccTransmitApduBasicChannel(serial, msg);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(7, radioRsp->rspInfo.serial);
    EXPECT_EQ(serial, radioRsp->rspInfo.serial);

    EXPECT_EQ(radioRsp->rspInfo.error, RadioError::PASSWORD_INCORRECT);
    // TODO(sanketpadawe): Add test for error code
}

/*
 * Test IRadio.iccOpenLogicalChannel() for the response returned.
 */
TEST_F(RadioHidlTest, iccOpenLogicalChannel) {
    int serial = 1;

    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        radio->iccOpenLogicalChannel(++serial, cardStatus.applications[i].aidPtr);
        EXPECT_EQ(std::cv_status::no_timeout, wait());
        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    }
}

/*
 * Test IRadio.iccCloseLogicalChannel() for the response returned.
 */
TEST_F(RadioHidlTest, iccCloseLogicalChannel) {
    int serial = 1;
    // Try closing invalid channel and check INVALID_ARGUMENTS returned as error
    radio->iccCloseLogicalChannel(serial, 0);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(serial, radioRsp->rspInfo.serial);

    EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
}

/*
 * Test IRadio.iccTransmitApduLogicalChannel() for the response returned.
 */
TEST_F(RadioHidlTest, iccTransmitApduLogicalChannel) {
    SimApdu msg;
    memset(&msg, 0, sizeof(msg));
    msg.data = hidl_string();

    radio->iccTransmitApduLogicalChannel(1, msg);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(1, radioRsp->rspInfo.serial);

    // TODO(sanketpadawe): Add test for error code
}

/*
 * Test IRadio.requestIccSimAuthentication() for the response returned.
 */
TEST_F(RadioHidlTest, requestIccSimAuthentication) {
    int serial = 1;

    // Pass wrong challenge string and check RadioError::INVALID_ARGUMENTS returned as error.
    for (int i = 0; i < (int) cardStatus.applications.size(); i++) {
        radio->requestIccSimAuthentication(++serial, 0, hidl_string("test"),
                cardStatus.applications[i].aidPtr);
        EXPECT_EQ(std::cv_status::no_timeout, wait());
        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
        EXPECT_EQ(RadioError::INVALID_ARGUMENTS, radioRsp->rspInfo.error);
    }
}
 No newline at end of file
+6 −0
Original line number Diff line number Diff line
@@ -27,6 +27,12 @@ void RadioHidlTest::SetUp() {

    radioInd = NULL;
    radio->setResponseFunctions(radioRsp, radioInd);

    radio->getIccCardStatus(1);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
    EXPECT_EQ(1, radioRsp->rspInfo.serial);
    EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
}

void RadioHidlTest::TearDown() {
+8 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <android/hardware/radio/1.0/types.h>

using ::android::hardware::radio::V1_0::ActivityStatsInfo;
using ::android::hardware::radio::V1_0::AppType;
using ::android::hardware::radio::V1_0::CardStatus;
using ::android::hardware::radio::V1_0::Call;
using ::android::hardware::radio::V1_0::CallForwardInfo;
@@ -39,6 +40,7 @@ using ::android::hardware::radio::V1_0::ClipStatus;
using ::android::hardware::radio::V1_0::DataRegStateResult;
using ::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo;
using ::android::hardware::radio::V1_0::HardwareConfig;
using ::android::hardware::radio::V1_0::IccIo;
using ::android::hardware::radio::V1_0::IccIoResult;
using ::android::hardware::radio::V1_0::IRadio;
using ::android::hardware::radio::V1_0::IRadioResponse;
@@ -60,6 +62,7 @@ using ::android::hardware::radio::V1_0::RadioTechnologyFamily;
using ::android::hardware::radio::V1_0::SendSmsResult;
using ::android::hardware::radio::V1_0::SetupDataCallResult;
using ::android::hardware::radio::V1_0::SignalStrength;
using ::android::hardware::radio::V1_0::SimApdu;
using ::android::hardware::radio::V1_0::TtyMode;
using ::android::hardware::radio::V1_0::VoiceRegStateResult;

@@ -71,6 +74,7 @@ using ::android::sp;
#define TIMEOUT_PERIOD 20

class RadioHidlTest;
extern CardStatus cardStatus;

/* Callback class for radio response */
class RadioResponse : public IRadioResponse {
@@ -79,7 +83,9 @@ private:

public:
    RadioResponseInfo rspInfo;
    CardStatus cardStatus;
    hidl_string imsi;
    IccIoResult iccIoResult;
    int channelId;

    RadioResponse(RadioHidlTest& parent);

@@ -443,6 +449,7 @@ public:
    sp<IRadio> radio;
    sp<RadioResponse> radioRsp;
    sp<IRadioIndication> radioInd;

};

// A class for test environment setup
+22 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

#include<radio_hidl_hal_utils.h>

CardStatus cardStatus;

RadioResponse::RadioResponse(RadioHidlTest& parent) : parent(parent) {
}

@@ -85,6 +87,9 @@ Return<void> RadioResponse::dialResponse(const RadioResponseInfo& info) {

Return<void> RadioResponse::getIMSIForAppResponse(
        const RadioResponseInfo& info, const ::android::hardware::hidl_string& imsi) {
    rspInfo = info;
    this->imsi = imsi;
    parent.notify();
    return Void();
}

@@ -170,6 +175,9 @@ Return<void> RadioResponse::setupDataCallResponse(

Return<void> RadioResponse::iccIOForAppResponse(
        const RadioResponseInfo& info, const IccIoResult& iccIo) {
    rspInfo = info;
    this->iccIoResult = iccIo;
    parent.notify();
    return Void();
}

@@ -543,21 +551,32 @@ Return<void> RadioResponse::sendImsSmsResponse(

Return<void> RadioResponse::iccTransmitApduBasicChannelResponse(
        const RadioResponseInfo& info, const IccIoResult& result) {
    rspInfo = info;
    this->iccIoResult = result;
    parent.notify();
    return Void();
}

Return<void> RadioResponse::iccOpenLogicalChannelResponse(
        const RadioResponseInfo& info, int32_t channelId,
        const ::android::hardware::hidl_vec<int8_t>& selectResponse) {
    rspInfo = info;
    this->channelId = channelId;
    parent.notify();
    return Void();
}

Return<void> RadioResponse::iccCloseLogicalChannelResponse(const RadioResponseInfo& info) {
    rspInfo = info;
    parent.notify();
    return Void();
}

Return<void> RadioResponse::iccTransmitApduLogicalChannelResponse(
        const RadioResponseInfo& info, const IccIoResult& result) {
    rspInfo = info;
    this->iccIoResult = result;
    parent.notify();
    return Void();
}

@@ -594,6 +613,9 @@ Return<void> RadioResponse::getHardwareConfigResponse(

Return<void> RadioResponse::requestIccSimAuthenticationResponse(
        const RadioResponseInfo& info, const IccIoResult& result) {
    rspInfo = info;
    this->iccIoResult = result;
    parent.notify();
    return Void();
}