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

Commit ffe00b7f authored by Weilin Xu's avatar Weilin Xu
Browse files

Add tune test for default bcradio HAL

Added unit tests for tune method in the default AIDL broadcast radio
HAL implementation.

Bug: 316630344
Test: atest DefaultBroadcastRadioHalTestCase
Change-Id: I62c6ca088c8797fe6c3e9ea1d1fe76d5d7aa5c23
parent 0f8e7ec6
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
@@ -72,6 +72,13 @@ const VirtualRadio& getAmFmMockTestRadio() {
    return amFmRadioMockTestRadio;
}

int getSignalAcquisitionFlags(const ProgramInfo& info) {
    return (info.infoFlags &
            (ProgramInfo::FLAG_SIGNAL_ACQUISITION | ProgramInfo::FLAG_HD_SIS_ACQUISITION |
             ProgramInfo::FLAG_HD_AUDIO_ACQUISITION)) >>
           6;
}

}  // namespace

class DefaultBroadcastRadioHalTest : public testing::Test {
@@ -88,6 +95,28 @@ class DefaultBroadcastRadioHalTest : public testing::Test {
        EXPECT_FALSE(mTunerCallback->isTunerFailed());
    }

    void verifyUpdatedProgramInfo(const ProgramSelector& sel) {
        ASSERT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
        ProgramInfo infoCb1 = mTunerCallback->getCurrentProgramInfo();
        mTunerCallback->reset();
        if (sel.primaryId.type == IdentifierType::HD_STATION_ID_EXT) {
            EXPECT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
            ProgramInfo infoCb2 = mTunerCallback->getCurrentProgramInfo();
            mTunerCallback->reset();
            EXPECT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
            ProgramInfo infoCb3 = mTunerCallback->getCurrentProgramInfo();
            mTunerCallback->reset();
            EXPECT_EQ(infoCb1.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb1), 0b001);
            EXPECT_EQ(infoCb2.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb2), 0b011);
            EXPECT_EQ(infoCb3.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb3), 0b111);
        } else {
            EXPECT_EQ(infoCb1.selector, sel);
        }
    }

    std::shared_ptr<BroadcastRadio> mBroadcastRadioHal;
    std::shared_ptr<MockBroadcastRadioCallback> mTunerCallback;
};
@@ -168,4 +197,53 @@ TEST_F(DefaultBroadcastRadioHalTest, UnsetTunerCallbackWithNull) {
    ASSERT_TRUE(halResult.isOk());
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithAmFmSelectorInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(kFmSel1);

    ASSERT_TRUE(halResult.isOk());
    ASSERT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
    ProgramInfo infoCb = mTunerCallback->getCurrentProgramInfo();
    EXPECT_EQ(infoCb.selector, kFmSel1);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithHdSelectorInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(kFmHdFreq1Sel2);

    ASSERT_TRUE(halResult.isOk());
    verifyUpdatedProgramInfo(kFmHdFreq1Sel2);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWitFrequencyOfHdProgramInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(
            utils::makeSelectorAmfm(utils::getHdFrequency(kFmHdFreq1Sel1)));

    ASSERT_TRUE(halResult.isOk());
    verifyUpdatedProgramInfo(kFmHdFreq1Sel1);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithInvalidSelector) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    ProgramSelector invalidSelector = {utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 0),
                                       {}};

    auto halResult = mBroadcastRadioHal->tune(invalidSelector);

    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_ARGUMENTS));
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithoutTunerCallback) {
    auto halResult = mBroadcastRadioHal->tune(kFmSel1);

    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_STATE));
}

}  // namespace aidl::android::hardware::broadcastradio