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

Commit 8e7fc9f4 authored by Nathan Harold's avatar Nathan Harold
Browse files

Add a Test for RadioBandMode to Ensure Auto Mode

The radio band mode is perilous because depending
on the setting and the detected locale, other
settings may be disabled. That can leave the modem
in a soft-brick state. Thus, BandMode = 0 = AUTOMATIC
should always be supported so that the modem can
update and select a band mode of its choosing.

Bug: 28124606
Test: vts radio - getAvailableBandModes
Change-Id: I1f25d9125ef06d290e3a89b5d2162c6bfe939eba
parent 1f88e209
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -716,3 +716,33 @@ TEST_F(RadioHidlTest_v1_2, getDataRegistrationState) {
        radioRsp_v1_2->rspInfo.error,
        {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::NOT_PROVISIONED}));
}

/*
 * Test IRadio.getAvailableBandModes() for the response returned.
 */
TEST_F(RadioHidlTest_v1_2, getAvailableBandModes) {
    int serial = GetRandomSerialNumber();

    Return<void> res = radio_v1_2->getAvailableBandModes(serial);
    ASSERT_OK(res);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_2->rspInfo.type);
    EXPECT_EQ(serial, radioRsp_v1_2->rspInfo.serial);
    ALOGI("getAvailableBandModes, rspInfo.error = %s\n",
          toString(radioRsp_v1_2->rspInfo.error).c_str());
    ASSERT_TRUE(
        CheckAnyOfErrors(radioRsp_v1_2->rspInfo.error,
                         {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::MODEM_ERR,
                          RadioError::INTERNAL_ERR,
                          // If REQUEST_NOT_SUPPORTED is returned, then it should also be returned
                          // for setRandMode().
                          RadioError::REQUEST_NOT_SUPPORTED}));
    bool hasUnspecifiedBandMode = false;
    if (radioRsp_v1_2->rspInfo.error == RadioError::NONE) {
        for (const RadioBandMode& mode : radioRsp_v1_2->radioBandModes) {
            // Automatic mode selection must be supported
            if (mode == RadioBandMode::BAND_MODE_UNSPECIFIED) hasUnspecifiedBandMode = true;
        }
        ASSERT_TRUE(hasUnspecifiedBandMode);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ class RadioResponse_v1_2 : public ::android::hardware::radio::V1_2::IRadioRespon
    RadioHidlTest_v1_2& parent_v1_2;

   public:
    hidl_vec<RadioBandMode> radioBandModes;

    RadioResponseInfo rspInfo;

    RadioResponse_v1_2(RadioHidlTest_v1_2& parent_v1_2);
+4 −2
Original line number Diff line number Diff line
@@ -317,8 +317,10 @@ Return<void> RadioResponse_v1_2::setBandModeResponse(const RadioResponseInfo& /*
}

Return<void> RadioResponse_v1_2::getAvailableBandModesResponse(
    const RadioResponseInfo& /*info*/,
    const ::android::hardware::hidl_vec<RadioBandMode>& /*bandModes*/) {
    const RadioResponseInfo& info, const ::android::hardware::hidl_vec<RadioBandMode>& bandModes) {
    rspInfo = info;
    radioBandModes = bandModes;
    parent_v1_2.notify();
    return Void();
}