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

Commit d07b5895 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
Merged-In: I1f25d9125ef06d290e3a89b5d2162c6bfe939eba
Change-Id: I1f25d9125ef06d290e3a89b5d2162c6bfe939eba
(cherry picked from commit c9e391801ba5ccd24b41481b26c2861b71ef03d0)
parent 126e8f70
Loading
Loading
Loading
Loading
+30 −0
Original line number Original line Diff line number Diff line
@@ -710,3 +710,33 @@ TEST_F(RadioHidlTest_v1_2, getDataRegistrationState) {
        radioRsp_v1_2->rspInfo.error,
        radioRsp_v1_2->rspInfo.error,
        {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::NOT_PROVISIONED}));
        {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 Original line Diff line number Diff line
@@ -51,6 +51,8 @@ class RadioResponse_v1_2 : public V1_1::IRadioResponse {
    RadioHidlTest_v1_2& parent_v1_2;
    RadioHidlTest_v1_2& parent_v1_2;


   public:
   public:
    hidl_vec<RadioBandMode> radioBandModes;

    RadioResponseInfo rspInfo;
    RadioResponseInfo rspInfo;


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


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