X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=broadcastradio%2F1.0%2Fvts%2Ffunctional%2FVtsHalBroadcastradioV1_0TargetTest.cpp;h=7241ad4c37e5239a093deaf78ecd203fa1aebd48;hb=e6aae839571c8d0fda03c2cb4584c342a1b74f90;hp=ebeadb13dae19bdddd1c6c4db9c6e49e221ca513;hpb=407acbf618247909208ed1826f8585f1c014609c;p=android-x86%2Fhardware-interfaces.git diff --git a/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp b/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp index ebeadb13..7241ad4c 100644 --- a/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp +++ b/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp @@ -228,6 +228,7 @@ class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase, bool getProperties(); bool openTuner(); bool checkAntenna(); + BandConfig& getBand(unsigned idx); static const nsecs_t kConnectCallbacktimeoutNs = seconds_to_nanoseconds(1); static const nsecs_t kConfigCallbacktimeoutNs = seconds_to_nanoseconds(10); @@ -237,6 +238,7 @@ class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase, bool skipped; sp mRadio; Properties mHalProperties; + bool mHalPropertiesInitialized = false; sp mTuner; sp mTunerCallback; Mutex mLock; @@ -280,23 +282,29 @@ static bool operator==(const BandConfig& l, const BandConfig& r) { bool BroadcastRadioHidlTest::getProperties() { - if (mHalProperties.bands.size() == 0) { - Result halResult = Result::NOT_INITIALIZED; - Return hidlReturn = - mRadio->getProperties([&](Result result, const Properties& properties) { - halResult = result; - if (result == Result::OK) { - mHalProperties = properties; - } - }); + if (mHalPropertiesInitialized) return true; - EXPECT_TRUE(hidlReturn.isOk()); - EXPECT_EQ(Result::OK, halResult); - EXPECT_EQ(Class::AM_FM, mHalProperties.classId); - EXPECT_GT(mHalProperties.numTuners, 0u); + Result halResult = Result::NOT_INITIALIZED; + auto hidlReturn = mRadio->getProperties([&](Result result, const Properties& properties) { + halResult = result; + if (result == Result::OK) { + mHalProperties = properties; + } + }); + + EXPECT_TRUE(hidlReturn.isOk()); + EXPECT_EQ(Result::OK, halResult); + EXPECT_EQ(radioClass, mHalProperties.classId); + EXPECT_GT(mHalProperties.numTuners, 0u); + if (radioClass == Class::AM_FM) { EXPECT_GT(mHalProperties.bands.size(), 0u); } - return mHalProperties.bands.size() > 0; + + if (hidlReturn.isOk() && halResult == Result::OK) { + mHalPropertiesInitialized = true; + return true; + } + return false; } bool BroadcastRadioHidlTest::openTuner() @@ -306,17 +314,18 @@ bool BroadcastRadioHidlTest::openTuner() } if (mTuner.get() == nullptr) { Result halResult = Result::NOT_INITIALIZED; - Return hidlReturn = - mRadio->openTuner(mHalProperties.bands[0], true, mTunerCallback, - [&](Result result, const sp& tuner) { - halResult = result; - if (result == Result::OK) { - mTuner = tuner; - } - }); + auto openCb = [&](Result result, const sp& tuner) { + halResult = result; + if (result == Result::OK) { + mTuner = tuner; + } + }; + auto hidlReturn = mRadio->openTuner(getBand(0), true, mTunerCallback, openCb); EXPECT_TRUE(hidlReturn.isOk()); EXPECT_EQ(Result::OK, halResult); - EXPECT_EQ(true, waitForCallback(kConfigCallbacktimeoutNs)); + if (radioClass == Class::AM_FM) { + EXPECT_EQ(true, waitForCallback(kConfigCallbacktimeoutNs)); + } } EXPECT_NE(nullptr, mTuner.get()); return nullptr != mTuner.get(); @@ -324,6 +333,8 @@ bool BroadcastRadioHidlTest::openTuner() bool BroadcastRadioHidlTest::checkAntenna() { + if (radioClass != Class::AM_FM) return true; + BandConfig halConfig; Result halResult = Result::NOT_INITIALIZED; Return hidlReturn = @@ -337,6 +348,19 @@ bool BroadcastRadioHidlTest::checkAntenna() return ((halResult == Result::OK) && (halConfig.antennaConnected == true)); } +BandConfig& BroadcastRadioHidlTest::getBand(unsigned idx) { + static BandConfig dummyBandConfig = {}; + if (radioClass == Class::AM_FM) { + EXPECT_GT(mHalProperties.bands.size(), idx); + if (mHalProperties.bands.size() > idx) { + return mHalProperties.bands[idx]; + } else { + return dummyBandConfig; + } + } else { + return dummyBandConfig; + } +} /** * Test IBroadcastRadio::getProperties() method @@ -344,7 +368,7 @@ bool BroadcastRadioHidlTest::checkAntenna() * Verifies that: * - the HAL implements the method * - the method returns 0 (no error) - * - the implementation class is AM_FM + * - the implementation class is radioClass * - the implementation supports at least one tuner * - the implementation supports at one band */ @@ -383,22 +407,20 @@ TEST_P(BroadcastRadioHidlTest, ReopenTuner) { * Test IBroadcastRadio::openTuner() method called twice. * * Verifies that: - * - the openTuner method fails when called for the second time without deleting previous - * ITuner instance + * - the openTuner method fails with INVALID_STATE or succeeds when called for the second time + * without deleting previous ITuner instance */ TEST_P(BroadcastRadioHidlTest, OpenTunerTwice) { RETURN_IF_SKIPPED; EXPECT_TRUE(openTuner()); Result halResult = Result::NOT_INITIALIZED; - Return hidlReturn = - mRadio->openTuner(mHalProperties.bands[0], true, mTunerCallback, - [&](Result result, const sp&) { - halResult = result; - }); + auto openCb = [&](Result result, const sp&) { halResult = result; }; + auto hidlReturn = mRadio->openTuner(getBand(0), true, mTunerCallback, openCb); EXPECT_TRUE(hidlReturn.isOk()); - EXPECT_EQ(Result::INVALID_STATE, halResult); - EXPECT_TRUE(waitForCallback(kConfigCallbacktimeoutNs)); + if (halResult == Result::INVALID_STATE) { + EXPECT_TRUE(waitForCallback(kConfigCallbacktimeoutNs)); + } } /** @@ -411,16 +433,17 @@ TEST_P(BroadcastRadioHidlTest, OpenTunerTwice) { * - the configuration read back from HAl has the same class Id */ TEST_P(BroadcastRadioHidlTest, SetAndGetConfiguration) { + if (radioClass != Class::AM_FM) skipped = true; RETURN_IF_SKIPPED; ASSERT_EQ(true, openTuner()); // test setConfiguration mCallbackCalled = false; - Return hidlResult = mTuner->setConfiguration(mHalProperties.bands[1]); + Return hidlResult = mTuner->setConfiguration(getBand(1)); EXPECT_TRUE(hidlResult.isOk()); EXPECT_EQ(Result::OK, hidlResult); EXPECT_EQ(true, waitForCallback(kConfigCallbacktimeoutNs)); EXPECT_EQ(Result::OK, mResultCallbackData); - EXPECT_EQ(mHalProperties.bands[1], mBandConfigCallbackData); + EXPECT_EQ(getBand(1), mBandConfigCallbackData); // test getConfiguration BandConfig halConfig; @@ -434,7 +457,7 @@ TEST_P(BroadcastRadioHidlTest, SetAndGetConfiguration) { }); EXPECT_TRUE(hidlReturn.isOk()); EXPECT_EQ(Result::OK, halResult); - EXPECT_EQ(mHalProperties.bands[1], halConfig); + EXPECT_EQ(getBand(1), halConfig); } /** @@ -445,6 +468,7 @@ TEST_P(BroadcastRadioHidlTest, SetAndGetConfiguration) { * - the method recovers and succeeds after passing correct arguments */ TEST_P(BroadcastRadioHidlTest, SetConfigurationFails) { + if (radioClass != Class::AM_FM) skipped = true; RETURN_IF_SKIPPED; ASSERT_EQ(true, openTuner()); @@ -463,7 +487,7 @@ TEST_P(BroadcastRadioHidlTest, SetConfigurationFails) { // Test setConfiguration recovering after passing good data. mCallbackCalled = false; - setResult = mTuner->setConfiguration(mHalProperties.bands[0]); + setResult = mTuner->setConfiguration(getBand(0)); EXPECT_TRUE(setResult.isOk()); EXPECT_EQ(Result::OK, setResult); EXPECT_EQ(true, waitForCallback(kConfigCallbacktimeoutNs)); @@ -508,6 +532,7 @@ TEST_P(BroadcastRadioHidlTest, Scan) { * - skipping sub-channel or not does not fail the call */ TEST_P(BroadcastRadioHidlTest, Step) { + if (radioClass != Class::AM_FM) skipped = true; RETURN_IF_SKIPPED; ASSERT_EQ(true, openTuner()); ASSERT_TRUE(checkAntenna()); @@ -535,18 +560,21 @@ TEST_P(BroadcastRadioHidlTest, Step) { * - the tuned callback is received within kTuneCallbacktimeoutNs ns after tune() */ TEST_P(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) { + if (radioClass != Class::AM_FM) skipped = true; RETURN_IF_SKIPPED; ASSERT_EQ(true, openTuner()); ASSERT_TRUE(checkAntenna()); + auto& band = getBand(0); + // test tune - ASSERT_GT(mHalProperties.bands[0].spacings.size(), 0u); - ASSERT_GT(mHalProperties.bands[0].upperLimit, mHalProperties.bands[0].lowerLimit); + ASSERT_GT(band.spacings.size(), 0u); + ASSERT_GT(band.upperLimit, band.lowerLimit); // test scan UP - uint32_t lowerLimit = mHalProperties.bands[0].lowerLimit; - uint32_t upperLimit = mHalProperties.bands[0].upperLimit; - uint32_t spacing = mHalProperties.bands[0].spacings[0]; + uint32_t lowerLimit = band.lowerLimit; + uint32_t upperLimit = band.upperLimit; + uint32_t spacing = band.spacings[0]; uint32_t channel = lowerLimit + (((upperLimit - lowerLimit) / 2 + spacing - 1) / spacing) * spacing; @@ -571,11 +599,8 @@ TEST_P(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) { EXPECT_TRUE(hidlReturn.isOk()); EXPECT_EQ(Result::OK, halResult); if (mResultCallbackData == Result::OK) { - EXPECT_EQ(true, halInfo.tuned); EXPECT_LE(halInfo.channel, upperLimit); EXPECT_GE(halInfo.channel, lowerLimit); - } else { - EXPECT_EQ(false, halInfo.tuned); } // test cancel @@ -593,6 +618,7 @@ TEST_P(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) { * - the method recovers and succeeds after passing correct arguments */ TEST_P(BroadcastRadioHidlTest, TuneFailsOutOfBounds) { + if (radioClass != Class::AM_FM) skipped = true; RETURN_IF_SKIPPED; ASSERT_TRUE(openTuner()); ASSERT_TRUE(checkAntenna());