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

Commit 2f461016 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Verify all radio classes, instead of FM only.

Also, a bit of code cleanup.

Bug: b/33382424, b/32022455
Test: VTS
Change-Id: Ib314027b256a6ca4bfa75e9de2ba70990a00b4da
parent 8d35ec30
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ void BroadcastRadio::onFirstRef()
    if (rc != 0) {
        ALOGE("couldn't load radio module %s.%s (%s)",
              RADIO_HARDWARE_MODULE_ID, classString, strerror(-rc));
        mStatus = Result::INVALID_ARGUMENTS;
        return;
    }
    rc = radio_hw_device_open(mod, &mHwDevice);
+59 −29
Original line number Diff line number Diff line
@@ -48,21 +48,42 @@ using ::android::hardware::broadcastradio::V1_0::ProgramInfo;
using ::android::hardware::broadcastradio::V1_0::MetaData;


#define RETURN_IF_SKIPPED \
    if (skipped) { \
        std::cout << "[  SKIPPED ] This device class is not supported. " << std::endl; \
        return; \
    }

// The main test class for Broadcast Radio HIDL HAL.

class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase,
        public ::testing::WithParamInterface<Class> {
 protected:
    virtual void SetUp() override {
        ASSERT_EQ(nullptr, mRadio.get());

        radioClass = GetParam();
        skipped = false;

        sp<IBroadcastRadioFactory> factory =
              ::testing::VtsHalHidlTargetTestBase::getService<IBroadcastRadioFactory>();
        if (factory != 0) {
            factory->connectModule(Class::AM_FM,
                             [&](Result retval, const ::android::sp<IBroadcastRadio>& result) {
                if (retval == Result::OK) {
                  mRadio = result;
                }
        ASSERT_NE(nullptr, factory.get());

        Result connectResult;
        factory->connectModule(radioClass, [&](Result ret, const sp<IBroadcastRadio>& radio) {
            connectResult = ret;
            mRadio = radio;
            onCallback_l();
        });
        EXPECT_EQ(true, waitForCallback(kConnectCallbacktimeoutNs));
        mCallbackCalled = false;

        if (connectResult == Result::INVALID_ARGUMENTS) {
            skipped = true;
            return;
        }
        ASSERT_EQ(connectResult, Result::OK);

        mTunerCallback = new MyCallback(this);
        ASSERT_NE(nullptr, mRadio.get());
        ASSERT_NE(nullptr, mTunerCallback.get());
@@ -175,9 +196,9 @@ class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    }


        BroadcastRadioHidlTest() :
            mCallbackCalled(false), mBoolCallbackData(false),
            mResultCallbackData(Result::OK), mHwFailure(false) {}
    BroadcastRadioHidlTest()
        : mCallbackCalled(false), mBoolCallbackData(false), mResultCallbackData(Result::OK),
        mHwFailure(false) {}

    void onCallback_l() {
        if (!mCallbackCalled) {
@@ -208,9 +229,12 @@ class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    bool openTuner();
    bool checkAntenna();

    static const nsecs_t kConnectCallbacktimeoutNs = seconds_to_nanoseconds(1);
    static const nsecs_t kConfigCallbacktimeoutNs = seconds_to_nanoseconds(10);
    static const nsecs_t kTuneCallbacktimeoutNs = seconds_to_nanoseconds(30);

    Class radioClass;
    bool skipped;
    sp<IBroadcastRadio> mRadio;
    Properties mHalProperties;
    sp<ITuner> mTuner;
@@ -225,13 +249,6 @@ class BroadcastRadioHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    bool mHwFailure;
};

// A class for test environment setup (kept since this file is a template).
class BroadcastRadioHidlEnvironment : public ::testing::Environment {
 public:
    virtual void SetUp() {}
    virtual void TearDown() {}
};

namespace android {
namespace hardware {
namespace broadcastradio {
@@ -331,7 +348,8 @@ bool BroadcastRadioHidlTest::checkAntenna()
 *  - the implementation supports at least one tuner
 *  - the implementation supports at one band
 */
TEST_F(BroadcastRadioHidlTest, GetProperties) {
TEST_P(BroadcastRadioHidlTest, GetProperties) {
    RETURN_IF_SKIPPED;
    EXPECT_EQ(true, getProperties());
}

@@ -342,7 +360,8 @@ TEST_F(BroadcastRadioHidlTest, GetProperties) {
 *  - the HAL implements the method
 *  - the method returns 0 (no error) and a valid ITuner interface
 */
TEST_F(BroadcastRadioHidlTest, OpenTuner) {
TEST_P(BroadcastRadioHidlTest, OpenTuner) {
    RETURN_IF_SKIPPED;
    EXPECT_EQ(true, openTuner());
}

@@ -353,7 +372,8 @@ TEST_F(BroadcastRadioHidlTest, OpenTuner) {
 *  - ITuner destruction gets propagated through HAL
 *  - the openTuner method works well when called for the second time
 */
TEST_F(BroadcastRadioHidlTest, ReopenTuner) {
TEST_P(BroadcastRadioHidlTest, ReopenTuner) {
    RETURN_IF_SKIPPED;
    EXPECT_TRUE(openTuner());
    mTuner.clear();
    EXPECT_TRUE(openTuner());
@@ -366,7 +386,8 @@ TEST_F(BroadcastRadioHidlTest, ReopenTuner) {
 *  - the openTuner method fails when called for the second time without deleting previous
 *    ITuner instance
 */
TEST_F(BroadcastRadioHidlTest, OpenTunerTwice) {
TEST_P(BroadcastRadioHidlTest, OpenTunerTwice) {
    RETURN_IF_SKIPPED;
    EXPECT_TRUE(openTuner());

    Result halResult = Result::NOT_INITIALIZED;
@@ -389,7 +410,8 @@ TEST_F(BroadcastRadioHidlTest, OpenTunerTwice) {
 *  - the configuration callback is received within kConfigCallbacktimeoutNs ns
 *  - the configuration read back from HAl has the same class Id
 */
TEST_F(BroadcastRadioHidlTest, SetAndGetConfiguration) {
TEST_P(BroadcastRadioHidlTest, SetAndGetConfiguration) {
    RETURN_IF_SKIPPED;
    ASSERT_EQ(true, openTuner());
    // test setConfiguration
    mCallbackCalled = false;
@@ -422,7 +444,8 @@ TEST_F(BroadcastRadioHidlTest, SetAndGetConfiguration) {
 *  - the methods returns INVALID_ARGUMENTS on invalid arguments
 *  - the method recovers and succeeds after passing correct arguments
 */
TEST_F(BroadcastRadioHidlTest, SetConfigurationFails) {
TEST_P(BroadcastRadioHidlTest, SetConfigurationFails) {
    RETURN_IF_SKIPPED;
    ASSERT_EQ(true, openTuner());

    // Let's define a config that's bad for sure.
@@ -455,7 +478,8 @@ TEST_F(BroadcastRadioHidlTest, SetConfigurationFails) {
 *  - the method returns 0 (no error)
 *  - the tuned callback is received within kTuneCallbacktimeoutNs ns
 */
TEST_F(BroadcastRadioHidlTest, Scan) {
TEST_P(BroadcastRadioHidlTest, Scan) {
    RETURN_IF_SKIPPED;
    ASSERT_EQ(true, openTuner());
    ASSERT_TRUE(checkAntenna());
    // test scan UP
@@ -481,7 +505,8 @@ TEST_F(BroadcastRadioHidlTest, Scan) {
 *  - the method returns 0 (no error)
 *  - the tuned callback is received within kTuneCallbacktimeoutNs ns
 */
TEST_F(BroadcastRadioHidlTest, Step) {
TEST_P(BroadcastRadioHidlTest, Step) {
    RETURN_IF_SKIPPED;
    ASSERT_EQ(true, openTuner());
    ASSERT_TRUE(checkAntenna());
    // test step UP
@@ -507,7 +532,8 @@ TEST_F(BroadcastRadioHidlTest, Step) {
 *  - the methods return 0 (no error)
 *  - the tuned callback is received within kTuneCallbacktimeoutNs ns after tune()
 */
TEST_F(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) {
TEST_P(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) {
    RETURN_IF_SKIPPED;
    ASSERT_EQ(true, openTuner());
    ASSERT_TRUE(checkAntenna());

@@ -564,7 +590,8 @@ TEST_F(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) {
 *  - the method returns INVALID_ARGUMENTS when applicable
 *  - the method recovers and succeeds after passing correct arguments
 */
TEST_F(BroadcastRadioHidlTest, TuneFailsOutOfBounds) {
TEST_P(BroadcastRadioHidlTest, TuneFailsOutOfBounds) {
    RETURN_IF_SKIPPED;
    ASSERT_TRUE(openTuner());
    ASSERT_TRUE(checkAntenna());

@@ -593,9 +620,12 @@ TEST_F(BroadcastRadioHidlTest, TuneFailsOutOfBounds) {
    EXPECT_TRUE(waitForCallback(kTuneCallbacktimeoutNs));
}

INSTANTIATE_TEST_CASE_P(
    BroadcastRadioHidlTestCases,
    BroadcastRadioHidlTest,
    ::testing::Values(Class::AM_FM, Class::SAT, Class::DT));

int main(int argc, char** argv) {
  ::testing::AddGlobalTestEnvironment(new BroadcastRadioHidlEnvironment);
  ::testing::InitGoogleTest(&argc, argv);
  int status = RUN_ALL_TESTS();
  ALOGI("Test result = %d", status);