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
This commit is contained in:
Weilin Xu
2023-12-15 16:05:31 -08:00
parent 0f8e7ec64e
commit ffe00b7fb8

View File

@@ -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