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

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

Add step and cancel tests for default bcradio HAL

Added unit tests for step and cancel methods in the default AIDL
broadcast radio HAL implementation.

Bug: 316630344
Test: atest DefaultBroadcastRadioHalTestCase
Change-Id: I83b7e9321ebd8bad1eb035d4f23bedce47712511
parent a7d831ff
Loading
Loading
Loading
Loading
+102 −0
Original line number Original line Diff line number Diff line
@@ -117,6 +117,21 @@ class DefaultBroadcastRadioHalTest : public testing::Test {
        }
        }
    }
    }


    bool getAmFmBandRange(utils::FrequencyBand band, AmFmBandRange* res) {
        AmFmRegionConfig config;
        auto halResult = mBroadcastRadioHal->getAmFmRegionConfig(/* full= */ false, &config);
        if (!halResult.isOk()) {
            return false;
        }
        for (const auto& range : config.ranges) {
            if (utils::getBand(range.lowerBound) == band) {
                *res = range;
                return true;
            }
        }
        return false;
    }

    std::shared_ptr<BroadcastRadio> mBroadcastRadioHal;
    std::shared_ptr<BroadcastRadio> mBroadcastRadioHal;
    std::shared_ptr<MockBroadcastRadioCallback> mTunerCallback;
    std::shared_ptr<MockBroadcastRadioCallback> mTunerCallback;
};
};
@@ -246,4 +261,91 @@ TEST_F(DefaultBroadcastRadioHalTest, TuneWithoutTunerCallback) {
    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_STATE));
    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_STATE));
}
}


TEST_F(DefaultBroadcastRadioHalTest, StepUp) {
    AmFmBandRange fmRange;
    ASSERT_TRUE(getAmFmBandRange(utils::FrequencyBand::FM, &fmRange));
    ProgramSelector nextChannelSel =
            utils::makeSelectorAmfm(kFmSel1.primaryId.value + fmRange.spacing);
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();
    ASSERT_TRUE(mBroadcastRadioHal->tune(kFmSel1).isOk());
    verifyUpdatedProgramInfo(kFmSel1);

    auto halResult = mBroadcastRadioHal->step(/* in_directionUp= */ true);

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

TEST_F(DefaultBroadcastRadioHalTest, StepUpFromUpperBound) {
    AmFmBandRange fmRange;
    ASSERT_TRUE(getAmFmBandRange(utils::FrequencyBand::FM, &fmRange));
    ProgramSelector upperBoundSel = utils::makeSelectorAmfm(fmRange.upperBound);
    ProgramSelector lowerBoundSel = utils::makeSelectorAmfm(fmRange.lowerBound);
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();
    ASSERT_TRUE(mBroadcastRadioHal->tune(upperBoundSel).isOk());
    verifyUpdatedProgramInfo(upperBoundSel);

    auto halResult = mBroadcastRadioHal->step(/* in_directionUp= */ true);

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

TEST_F(DefaultBroadcastRadioHalTest, StepDown) {
    AmFmBandRange fmRange;
    ASSERT_TRUE(getAmFmBandRange(utils::FrequencyBand::FM, &fmRange));
    ProgramSelector nextChannelSel =
            utils::makeSelectorAmfm(kFmSel1.primaryId.value - fmRange.spacing);
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();
    ASSERT_TRUE(mBroadcastRadioHal->tune(kFmSel1).isOk());
    verifyUpdatedProgramInfo(kFmSel1);

    auto halResult = mBroadcastRadioHal->step(/* directionUp= */ false);

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

TEST_F(DefaultBroadcastRadioHalTest, StepDownFromLowerBound) {
    AmFmBandRange fmRange;
    ASSERT_TRUE(getAmFmBandRange(utils::FrequencyBand::FM, &fmRange));
    ProgramSelector upperBoundSel = utils::makeSelectorAmfm(fmRange.upperBound);
    ProgramSelector lowerBoundSel = utils::makeSelectorAmfm(fmRange.lowerBound);
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();
    ASSERT_TRUE(mBroadcastRadioHal->tune(lowerBoundSel).isOk());
    verifyUpdatedProgramInfo(lowerBoundSel);

    auto halResult = mBroadcastRadioHal->step(/* directionUp= */ false);

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

TEST_F(DefaultBroadcastRadioHalTest, StepWithoutTunerCallback) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();
    ASSERT_TRUE(mBroadcastRadioHal->tune(kFmSel1).isOk());
    verifyUpdatedProgramInfo(kFmSel1);
    mBroadcastRadioHal->unsetTunerCallback();

    auto halResult = mBroadcastRadioHal->step(/* directionUp= */ false);

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

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

    auto halResult = mBroadcastRadioHal->cancel();

    ASSERT_TRUE(halResult.isOk());
    mTunerCallback->reset();
}

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