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

Commit 03859a7c authored by Amy Zhang's avatar Amy Zhang Committed by Android (Google) Code Review
Browse files

Merge "Add IFrontend.getStatus VTS test" into rvc-dev

parents 614ba3ef 7bfe997e
Loading
Loading
Loading
Loading
+115 −0
Original line number Diff line number Diff line
@@ -246,6 +246,120 @@ AssertionResult FrontendTests::stopScanFrontend() {
    return AssertionResult(status == Result::SUCCESS);
}

void FrontendTests::verifyFrontendStatus(vector<FrontendStatusType> statusTypes,
                                         vector<FrontendStatus> expectStatuses) {
    ASSERT_TRUE(mFrontend) << "Frontend is not opened yet.";
    Result status;
    vector<FrontendStatus> realStatuses;

    mFrontend->getStatus(statusTypes, [&](Result result, const hidl_vec<FrontendStatus>& statuses) {
        status = result;
        realStatuses = statuses;
    });

    ASSERT_TRUE(realStatuses.size() == statusTypes.size());
    for (int i = 0; i < statusTypes.size(); i++) {
        FrontendStatusType type = statusTypes[i];
        switch (type) {
            case FrontendStatusType::DEMOD_LOCK: {
                ASSERT_TRUE(realStatuses[i].isDemodLocked() == expectStatuses[i].isDemodLocked());
                break;
            }
            case FrontendStatusType::SNR: {
                ASSERT_TRUE(realStatuses[i].snr() == expectStatuses[i].snr());
                break;
            }
            case FrontendStatusType::BER: {
                ASSERT_TRUE(realStatuses[i].ber() == expectStatuses[i].ber());
                break;
            }
            case FrontendStatusType::PER: {
                ASSERT_TRUE(realStatuses[i].per() == expectStatuses[i].per());
                break;
            }
            case FrontendStatusType::PRE_BER: {
                ASSERT_TRUE(realStatuses[i].preBer() == expectStatuses[i].preBer());
                break;
            }
            case FrontendStatusType::SIGNAL_QUALITY: {
                ASSERT_TRUE(realStatuses[i].signalQuality() == expectStatuses[i].signalQuality());
                break;
            }
            case FrontendStatusType::SIGNAL_STRENGTH: {
                ASSERT_TRUE(realStatuses[i].signalStrength() == expectStatuses[i].signalStrength());
                break;
            }
            case FrontendStatusType::SYMBOL_RATE: {
                ASSERT_TRUE(realStatuses[i].symbolRate() == expectStatuses[i].symbolRate());
                break;
            }
            case FrontendStatusType::FEC: {
                ASSERT_TRUE(realStatuses[i].innerFec() == expectStatuses[i].innerFec());
                break;
            }
            case FrontendStatusType::MODULATION: {
                // TODO: check modulation status
                break;
            }
            case FrontendStatusType::SPECTRAL: {
                ASSERT_TRUE(realStatuses[i].inversion() == expectStatuses[i].inversion());
                break;
            }
            case FrontendStatusType::LNB_VOLTAGE: {
                ASSERT_TRUE(realStatuses[i].lnbVoltage() == expectStatuses[i].lnbVoltage());
                break;
            }
            case FrontendStatusType::PLP_ID: {
                ASSERT_TRUE(realStatuses[i].plpId() == expectStatuses[i].plpId());
                break;
            }
            case FrontendStatusType::EWBS: {
                ASSERT_TRUE(realStatuses[i].isEWBS() == expectStatuses[i].isEWBS());
                break;
            }
            case FrontendStatusType::AGC: {
                ASSERT_TRUE(realStatuses[i].agc() == expectStatuses[i].agc());
                break;
            }
            case FrontendStatusType::LNA: {
                ASSERT_TRUE(realStatuses[i].isLnaOn() == expectStatuses[i].isLnaOn());
                break;
            }
            case FrontendStatusType::LAYER_ERROR: {
                vector<bool> realLayberError = realStatuses[i].isLayerError();
                vector<bool> expectLayerError = expectStatuses[i].isLayerError();
                ASSERT_TRUE(realLayberError.size() == expectLayerError.size());
                for (int i = 0; i < realLayberError.size(); i++) {
                    ASSERT_TRUE(realLayberError[i] == expectLayerError[i]);
                }
                break;
            }
            case FrontendStatusType::MER: {
                ASSERT_TRUE(realStatuses[i].mer() == expectStatuses[i].mer());
                break;
            }
            case FrontendStatusType::FREQ_OFFSET: {
                ASSERT_TRUE(realStatuses[i].freqOffset() == expectStatuses[i].freqOffset());
                break;
            }
            case FrontendStatusType::HIERARCHY: {
                ASSERT_TRUE(realStatuses[i].hierarchy() == expectStatuses[i].hierarchy());
                break;
            }
            case FrontendStatusType::RF_LOCK: {
                ASSERT_TRUE(realStatuses[i].isRfLocked() == expectStatuses[i].isRfLocked());
                break;
            }
            case FrontendStatusType::ATSC3_PLP_INFO:
                // TODO: verify plpinfo
                break;
            default:
                continue;
        }
    }
    ASSERT_TRUE(status == Result::SUCCESS);
}

AssertionResult FrontendTests::tuneFrontend(FrontendConfig config) {
    EXPECT_TRUE(mFrontendCallback)
            << "test with openFrontendById/setFrontendCallback/getFrontendInfo first.";
@@ -294,6 +408,7 @@ void FrontendTests::tuneTest(FrontendConfig frontendConf) {
    ASSERT_TRUE(openFrontendById(feId));
    ASSERT_TRUE(setFrontendCallback());
    ASSERT_TRUE(tuneFrontend(frontendConf));
    verifyFrontendStatus(frontendConf.tuneStatusTypes, frontendConf.expectTuneStatuses);
    ASSERT_TRUE(stopTuneFrontend());
    ASSERT_TRUE(closeFrontend());
}
+2 −0
Original line number Diff line number Diff line
@@ -109,6 +109,8 @@ class FrontendTests {
    AssertionResult scanFrontend(FrontendConfig config, FrontendScanType type);
    AssertionResult stopScanFrontend();
    AssertionResult tuneFrontend(FrontendConfig config);
    void verifyFrontendStatus(vector<FrontendStatusType> statusTypes,
                              vector<FrontendStatus> expectStatuses);
    AssertionResult stopTuneFrontend();
    AssertionResult closeFrontend();

+12 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ using android::hardware::tv::tuner::V1_0::FrontendDvbtSettings;
using android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
using android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode;
using android::hardware::tv::tuner::V1_0::FrontendSettings;
using android::hardware::tv::tuner::V1_0::FrontendStatus;
using android::hardware::tv::tuner::V1_0::FrontendStatusType;
using android::hardware::tv::tuner::V1_0::FrontendType;
using android::hardware::tv::tuner::V1_0::PlaybackSettings;
using android::hardware::tv::tuner::V1_0::RecordSettings;
@@ -88,6 +90,8 @@ struct FilterConfig {
struct FrontendConfig {
    FrontendType type;
    FrontendSettings settings;
    vector<FrontendStatusType> tuneStatusTypes;
    vector<FrontendStatus> expectTuneStatuses;
};

struct ChannelConfig {
@@ -127,6 +131,14 @@ inline void initFrontendConfig() {
            .standard = FrontendDvbtStandard::T,
    };
    frontendArray[DVBT].type = FrontendType::DVBT, frontendArray[DVBT].settings.dvbt(dvbtSettings);
    vector<FrontendStatusType> types;
    types.push_back(FrontendStatusType::DEMOD_LOCK);
    FrontendStatus status;
    status.isDemodLocked(true);
    vector<FrontendStatus> statuses;
    statuses.push_back(status);
    frontendArray[DVBT].tuneStatusTypes = types;
    frontendArray[DVBT].expectTuneStatuses = statuses;
    frontendArray[DVBS].type = FrontendType::DVBS;
};