Loading tv/tuner/1.0/vts/functional/FrontendTests.cpp +115 −0 Original line number Diff line number Diff line Loading @@ -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."; Loading Loading @@ -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()); } Loading tv/tuner/1.0/vts/functional/FrontendTests.h +2 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading tv/tuner/1.0/vts/functional/VtsHalTvTunerV1_0TestConfigurations.h +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -88,6 +90,8 @@ struct FilterConfig { struct FrontendConfig { FrontendType type; FrontendSettings settings; vector<FrontendStatusType> tuneStatusTypes; vector<FrontendStatus> expectTuneStatuses; }; struct ChannelConfig { Loading Loading @@ -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; }; Loading Loading
tv/tuner/1.0/vts/functional/FrontendTests.cpp +115 −0 Original line number Diff line number Diff line Loading @@ -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."; Loading Loading @@ -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()); } Loading
tv/tuner/1.0/vts/functional/FrontendTests.h +2 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
tv/tuner/1.0/vts/functional/VtsHalTvTunerV1_0TestConfigurations.h +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -88,6 +90,8 @@ struct FilterConfig { struct FrontendConfig { FrontendType type; FrontendSettings settings; vector<FrontendStatusType> tuneStatusTypes; vector<FrontendStatus> expectTuneStatuses; }; struct ChannelConfig { Loading Loading @@ -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; }; Loading