Add isValid method test for V2 bcradio utils

Refactored unit tests isValid broadcast radio utils methods to reuse
testcases. Also fixed isValidV2 check for HD station location.

Bug: 310708886
Test: atest broadcastradio_utils_aidl_test
Change-Id: Ic168776493a5433606849d39175347a5a83b492f
This commit is contained in:
Weilin Xu 2024-03-05 12:58:50 -08:00
parent 8caeb885cc
commit fe3a8461f2
3 changed files with 421 additions and 341 deletions

View file

@ -0,0 +1,421 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <broadcastradio-utils-aidl/Utils.h>
#include <broadcastradio-utils-aidl/UtilsV2.h>
#include <gtest/gtest.h>
namespace aidl::android::hardware::broadcastradio {
namespace {
constexpr int64_t kFmFrequencyKHz = 97900;
constexpr uint32_t kDabSid = 0x0000C221u;
constexpr int kDabEccCode = 0xE1u;
constexpr int kDabSCIdS = 0x1u;
constexpr uint64_t kDabSidExt = static_cast<uint64_t>(kDabSid) |
(static_cast<uint64_t>(kDabEccCode) << 32) |
(static_cast<uint64_t>(kDabSCIdS) << 40);
constexpr uint32_t kDabEnsemble = 0xCE15u;
constexpr uint64_t kDabFrequencyKhz = 225648u;
constexpr uint64_t kHdStationId = 0xA0000001u;
constexpr uint64_t kHdSubChannel = 1u;
constexpr uint64_t kHdStationLocation = 0x44E647003665CF6u;
constexpr uint64_t kHdStationLocationInvalid = 0x4E647007665CF6u;
constexpr uint64_t kHdFrequency = 97700u;
constexpr int64_t kRdsValue = 0xBEEF;
struct IsValidIdentifierTestCase {
std::string name;
ProgramIdentifier id;
bool valid;
};
std::vector<IsValidIdentifierTestCase> getIsValidIdentifierTestCases() {
return std::vector<IsValidIdentifierTestCase>({
IsValidIdentifierTestCase{.name = "invalid_id_type",
.id = utils::makeIdentifier(IdentifierType::INVALID, 0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_frequency_high",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_frequency_low",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 100000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_frequency",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 1000000u),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_am_fm_frequency_high",
.id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_am_fm_frequency_low",
.id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 100u),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_am_fm_frequency",
.id = utils::makeIdentifier(
IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
.valid = true},
IsValidIdentifierTestCase{
.name = "drmo_frequency_high",
.id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "drmo_frequency_low",
.id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 100u),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_drmo_frequency",
.id = utils::makeIdentifier(
IdentifierType::DRMO_FREQUENCY_KHZ, kFmFrequencyKHz),
.valid = true},
IsValidIdentifierTestCase{.name = "invalid_rds_low",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x0),
.valid = false},
IsValidIdentifierTestCase{.name = "invalid_rds_high",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x10000),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_rds",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x1000),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_hd_id_zero",
.id = utils::makeSelectorHd(/* stationId= */ 0u, kHdSubChannel, kHdFrequency)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_hd_suchannel",
.id = utils::makeSelectorHd(kHdStationId, /* subChannel= */ 8u, kHdFrequency)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_hd_frequency_low",
.id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, /* frequency= */ 100u)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_hd_id",
.id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency)
.primaryId,
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_hd_station_name",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x41422D464D),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_hd_station_name",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x414231464D),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_dab_sid",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0E100000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ecc_low",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0F700000221u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ecc_high",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x09900000221u),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_sid_ext",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, kDabSidExt),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_dab_ensemble_zero",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ensemble_high",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x10000),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_ensemble",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble),
.valid = true},
IsValidIdentifierTestCase{.name = "invalid_dab_scid_low",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0xF),
.valid = false},
IsValidIdentifierTestCase{.name = "invalid_dab_scid_high",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x1000),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_dab_scid",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x100),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_drmo_id_zero",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_drmo_id_high",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x1000000),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_drmo_id",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x100000),
.valid = true},
});
}
std::vector<IsValidIdentifierTestCase> getIsValidIdentifierV2TestCases() {
std::vector<IsValidIdentifierTestCase> testcases = getIsValidIdentifierTestCases();
std::vector<IsValidIdentifierTestCase> testcasesNew = std::vector<IsValidIdentifierTestCase>({
IsValidIdentifierTestCase{
.name = "invalid_hd_station_location_id",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION,
kHdStationLocationInvalid),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_hd_station_location_id",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION,
kHdStationLocation),
.valid = true},
});
testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
return testcases;
}
struct IsValidSelectorTestCase {
std::string name;
ProgramSelector sel;
bool valid;
};
std::vector<IsValidSelectorTestCase> getIsValidSelectorTestCases() {
return std::vector<IsValidSelectorTestCase>({
IsValidSelectorTestCase{.name = "valid_am_fm_selector",
.sel = utils::makeSelectorAmfm(kFmFrequencyKHz),
.valid = true},
IsValidSelectorTestCase{
.name = "valid_hd_selector",
.sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency),
.valid = true},
IsValidSelectorTestCase{
.name = "valid_dab_selector",
.sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz),
.valid = true},
IsValidSelectorTestCase{.name = "valid_rds_selector",
.sel = ProgramSelector{.primaryId = utils::makeIdentifier(
IdentifierType::RDS_PI, 0x1000)},
.valid = true},
IsValidSelectorTestCase{.name = "selector_with_invalid_id",
.sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel,
/* frequency= */ 100u),
.valid = false},
IsValidSelectorTestCase{
.name = "selector_with_invalid_primary_id_type",
.sel = ProgramSelector{.primaryId = utils::makeIdentifier(
IdentifierType::DAB_ENSEMBLE, kDabEnsemble)},
.valid = false},
IsValidSelectorTestCase{
.name = "selector_with_invalid_secondary_id",
.sel = ProgramSelector{.primaryId = utils::makeIdentifier(
IdentifierType::DAB_SID_EXT, kDabSidExt),
.secondaryIds = {utils::makeIdentifier(
IdentifierType::DAB_ENSEMBLE, 0x0)}},
.valid = false},
});
}
std::vector<IsValidSelectorTestCase> getIsValidSelectorV2TestCases() {
ProgramSelector validHdSel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
validHdSel.secondaryIds = {
utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION, kHdStationLocation)};
ProgramSelector invalidHdSel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
invalidHdSel.secondaryIds = {
utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION, kHdStationLocationInvalid)};
std::vector<IsValidSelectorTestCase> testcasesNew = std::vector<IsValidSelectorTestCase>(
{IsValidSelectorTestCase{.name = "hd_selector_with_valid_station_location",
.sel = validHdSel,
.valid = true},
IsValidSelectorTestCase{.name = "hd_selector_with_invalid_station_location",
.sel = invalidHdSel,
.valid = false}});
std::vector<IsValidSelectorTestCase> testcases = getIsValidSelectorTestCases();
testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
return testcases;
}
struct IsValidMetadataTestCase {
std::string name;
Metadata metadata;
bool valid;
};
std::vector<IsValidMetadataTestCase> getIsValidMetadataTestCases() {
return std::vector<IsValidMetadataTestCase>({
IsValidMetadataTestCase{.name = "valid_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(1),
.valid = true},
IsValidMetadataTestCase{.name = "negative_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(-1),
.valid = false},
IsValidMetadataTestCase{.name = "large_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(256),
.valid = false},
IsValidMetadataTestCase{.name = "valid_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(1),
.valid = true},
IsValidMetadataTestCase{.name = "negative_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(-1),
.valid = false},
IsValidMetadataTestCase{.name = "large_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(256),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_ensemble_name_short",
.metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_ensemble_name_short",
.metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name_long"),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_service_name_short",
.metadata = Metadata::make<Metadata::dabServiceNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_service_name_short",
.metadata = Metadata::make<Metadata::dabServiceNameShort>("name_long"),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_component_name_short",
.metadata = Metadata::make<Metadata::dabComponentNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_component_name_short",
.metadata = Metadata::make<Metadata::dabComponentNameShort>("name_long"),
.valid = false},
});
}
std::vector<IsValidMetadataTestCase> getIsValidMetadataV2TestCases() {
std::vector<IsValidMetadataTestCase> testcases = getIsValidMetadataTestCases();
std::vector<IsValidMetadataTestCase> testcasesNew = std::vector<IsValidMetadataTestCase>({
IsValidMetadataTestCase{
.name = "valid_hd_station_name_short",
.metadata = Metadata::make<Metadata::hdStationNameShort>("name_short"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_hd_station_name_short",
.metadata = Metadata::make<Metadata::hdStationNameShort>("name_too_long"),
.valid = false},
IsValidMetadataTestCase{.name = "valid_hd_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(1),
.valid = true},
IsValidMetadataTestCase{
.name = "negative_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(-1),
.valid = false},
IsValidMetadataTestCase{
.name = "large_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(256),
.valid = false},
});
testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
return testcases;
}
} // namespace
class IsValidIdentifierTest : public testing::TestWithParam<IsValidIdentifierTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidIdentifierTests, IsValidIdentifierTest,
testing::ValuesIn(getIsValidIdentifierTestCases()),
[](const testing::TestParamInfo<IsValidIdentifierTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidIdentifierTest, IsValid) {
IsValidIdentifierTestCase testcase = GetParam();
ASSERT_EQ(utils::isValid(testcase.id), testcase.valid);
}
class IsValidIdentifierV2Test : public testing::TestWithParam<IsValidIdentifierTestCase> {};
INSTANTIATE_TEST_SUITE_P(
IsValidIdentifierV2Tests, IsValidIdentifierV2Test,
testing::ValuesIn(getIsValidIdentifierV2TestCases()),
[](const testing::TestParamInfo<IsValidIdentifierV2Test::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidIdentifierV2Test, IsValidV2) {
IsValidIdentifierTestCase testcase = GetParam();
ASSERT_EQ(utils::isValidV2(testcase.id), testcase.valid);
}
class IsValidSelectorTest : public testing::TestWithParam<IsValidSelectorTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidSelectorTests, IsValidSelectorTest,
testing::ValuesIn(getIsValidSelectorTestCases()),
[](const testing::TestParamInfo<IsValidSelectorTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidSelectorTest, IsValid) {
IsValidSelectorTestCase testcase = GetParam();
ASSERT_EQ(utils::isValid(testcase.sel), testcase.valid);
}
class IsValidSelectorV2Test : public testing::TestWithParam<IsValidSelectorTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidSelectorV2Tests, IsValidSelectorV2Test,
testing::ValuesIn(getIsValidSelectorV2TestCases()),
[](const testing::TestParamInfo<IsValidSelectorV2Test::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidSelectorV2Test, IsValidV2) {
IsValidSelectorTestCase testcase = GetParam();
ASSERT_EQ(utils::isValidV2(testcase.sel), testcase.valid);
}
class IsValidMetadataTest : public testing::TestWithParam<IsValidMetadataTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidMetadataTests, IsValidMetadataTest,
testing::ValuesIn(getIsValidMetadataTestCases()),
[](const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidMetadataTest, IsValidMetadata) {
IsValidMetadataTestCase testParam = GetParam();
ASSERT_EQ(utils::isValidMetadata(testParam.metadata), testParam.valid);
}
class IsValidMetadataV2Test : public testing::TestWithParam<IsValidMetadataTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidMetadataV2Tests, IsValidMetadataV2Test,
testing::ValuesIn(getIsValidMetadataV2TestCases()),
[](const testing::TestParamInfo<IsValidMetadataV2Test::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidMetadataV2Test, IsValidMetadataV2) {
IsValidMetadataTestCase testParam = GetParam();
ASSERT_EQ(utils::isValidMetadataV2(testParam.metadata), testParam.valid);
}
} // namespace aidl::android::hardware::broadcastradio

View file

@ -66,230 +66,6 @@ std::vector<GetBandTestCase> getBandTestCases() {
.frequency = 110000,
.bandResult = utils::FrequencyBand::UNKNOWN}});
}
struct IsValidIdentifierTestCase {
std::string name;
ProgramIdentifier id;
bool valid;
};
std::vector<IsValidIdentifierTestCase> getIsValidIdentifierTestCases() {
return std::vector<IsValidIdentifierTestCase>({
IsValidIdentifierTestCase{.name = "invalid_id_type",
.id = utils::makeIdentifier(IdentifierType::INVALID, 0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_frequency_high",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_frequency_low",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 100000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_frequency",
.id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 1000000u),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_am_fm_frequency_high",
.id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_am_fm_frequency_low",
.id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 100u),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_am_fm_frequency",
.id = utils::makeIdentifier(
IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
.valid = true},
IsValidIdentifierTestCase{
.name = "drmo_frequency_high",
.id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 10000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "drmo_frequency_low",
.id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 100u),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_drmo_frequency",
.id = utils::makeIdentifier(
IdentifierType::DRMO_FREQUENCY_KHZ, kFmFrequencyKHz),
.valid = true},
IsValidIdentifierTestCase{.name = "invalid_rds_low",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x0),
.valid = false},
IsValidIdentifierTestCase{.name = "invalid_rds_high",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x10000),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_rds",
.id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x1000),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_hd_id_zero",
.id = utils::makeSelectorHd(/* stationId= */ 0u, kHdSubChannel, kHdFrequency)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_hd_suchannel",
.id = utils::makeSelectorHd(kHdStationId, /* subChannel= */ 8u, kHdFrequency)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_hd_frequency_low",
.id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, /* frequency= */ 100u)
.primaryId,
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_hd_id",
.id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency)
.primaryId,
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_hd_station_name",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x41422D464D),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_hd_station_name",
.id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x414231464D),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_dab_sid",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0E100000000u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ecc_low",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0F700000221u),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ecc_high",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x09900000221u),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_sid_ext",
.id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, kDabSidExt),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_dab_ensemble_zero",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_dab_ensemble_high",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x10000),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_dab_ensemble",
.id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble),
.valid = true},
IsValidIdentifierTestCase{.name = "invalid_dab_scid_low",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0xF),
.valid = false},
IsValidIdentifierTestCase{.name = "invalid_dab_scid_high",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x1000),
.valid = false},
IsValidIdentifierTestCase{.name = "valid_dab_scid",
.id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x100),
.valid = true},
IsValidIdentifierTestCase{
.name = "invalid_drmo_id_zero",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x0),
.valid = false},
IsValidIdentifierTestCase{
.name = "invalid_drmo_id_high",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x1000000),
.valid = false},
IsValidIdentifierTestCase{
.name = "valid_drmo_id",
.id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x100000),
.valid = true},
});
}
struct IsValidSelectorTestCase {
std::string name;
ProgramSelector sel;
bool valid;
};
std::vector<IsValidSelectorTestCase> getIsValidSelectorTestCases() {
return std::vector<IsValidSelectorTestCase>({
IsValidSelectorTestCase{.name = "valid_am_fm_selector",
.sel = utils::makeSelectorAmfm(kFmFrequencyKHz),
.valid = true},
IsValidSelectorTestCase{
.name = "valid_hd_selector",
.sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency),
.valid = true},
IsValidSelectorTestCase{
.name = "valid_dab_selector",
.sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz),
.valid = true},
IsValidSelectorTestCase{.name = "valid_rds_selector",
.sel = ProgramSelector{.primaryId = utils::makeIdentifier(
IdentifierType::RDS_PI, 0x1000)},
.valid = true},
IsValidSelectorTestCase{.name = "selector_with_invalid_id",
.sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel,
/* frequency= */ 100u),
.valid = false},
IsValidSelectorTestCase{
.name = "selector_with_invalid_primary_id_type",
.sel = ProgramSelector{.primaryId = utils::makeIdentifier(
IdentifierType::DAB_ENSEMBLE, kDabEnsemble)},
.valid = false},
});
}
struct IsValidMetadataTestCase {
std::string name;
Metadata metadata;
bool valid;
};
std::vector<IsValidMetadataTestCase> getIsValidMetadataTestCases() {
return std::vector<IsValidMetadataTestCase>({
IsValidMetadataTestCase{.name = "valid_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(1),
.valid = true},
IsValidMetadataTestCase{.name = "negative_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(-1),
.valid = false},
IsValidMetadataTestCase{.name = "large_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(256),
.valid = false},
IsValidMetadataTestCase{.name = "valid_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(1),
.valid = true},
IsValidMetadataTestCase{.name = "negative_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(-1),
.valid = false},
IsValidMetadataTestCase{.name = "large_rbds_pty",
.metadata = Metadata::make<Metadata::rbdsPty>(256),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_ensemble_name_short",
.metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_ensemble_name_short",
.metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name_long"),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_service_name_short",
.metadata = Metadata::make<Metadata::dabServiceNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_service_name_short",
.metadata = Metadata::make<Metadata::dabServiceNameShort>("name_long"),
.valid = false},
IsValidMetadataTestCase{
.name = "valid_dab_component_name_short",
.metadata = Metadata::make<Metadata::dabComponentNameShort>("name"),
.valid = true},
IsValidMetadataTestCase{
.name = "too_long_dab_component_name_short",
.metadata = Metadata::make<Metadata::dabComponentNameShort>("name_long"),
.valid = false},
});
}
} // namespace
class GetBandTest : public testing::TestWithParam<GetBandTestCase> {};
@ -305,48 +81,6 @@ TEST_P(GetBandTest, GetBand) {
ASSERT_EQ(utils::getBand(testcase.frequency), testcase.bandResult);
}
class IsValidMetadataTest : public testing::TestWithParam<IsValidMetadataTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidMetadataTests, IsValidMetadataTest,
testing::ValuesIn(getIsValidMetadataTestCases()),
[](const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidMetadataTest, IsValidMetadata) {
IsValidMetadataTestCase testParam = GetParam();
ASSERT_EQ(utils::isValidMetadata(testParam.metadata), testParam.valid);
}
class IsValidIdentifierTest : public testing::TestWithParam<IsValidIdentifierTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidIdentifierTests, IsValidIdentifierTest,
testing::ValuesIn(getIsValidIdentifierTestCases()),
[](const testing::TestParamInfo<IsValidIdentifierTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidIdentifierTest, IsValid) {
IsValidIdentifierTestCase testcase = GetParam();
ASSERT_EQ(utils::isValid(testcase.id), testcase.valid);
}
class IsValidSelectorTest : public testing::TestWithParam<IsValidSelectorTestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidSelectorTests, IsValidSelectorTest,
testing::ValuesIn(getIsValidSelectorTestCases()),
[](const testing::TestParamInfo<IsValidSelectorTest::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidSelectorTest, IsValid) {
IsValidSelectorTestCase testcase = GetParam();
ASSERT_EQ(utils::isValid(testcase.sel), testcase.valid);
}
TEST(BroadcastRadioUtilsTest, IdentifierIteratorBegin) {
ProgramSelector sel = {
.primaryId = utils::makeIdentifier(IdentifierType::RDS_PI, kRdsValue),

View file

@ -1,75 +0,0 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <broadcastradio-utils-aidl/UtilsV2.h>
#include <gtest/gtest.h>
namespace aidl::android::hardware::broadcastradio {
namespace {
struct IsValidMetadataV2TestCase {
std::string name;
Metadata metadata;
bool valid;
};
std::vector<IsValidMetadataV2TestCase> getIsValidMetadataV2TestCases() {
return std::vector<IsValidMetadataV2TestCase>({
IsValidMetadataV2TestCase{.name = "valid_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(1),
.valid = true},
IsValidMetadataV2TestCase{.name = "negative_rds_pty",
.metadata = Metadata::make<Metadata::rdsPty>(-1),
.valid = false},
IsValidMetadataV2TestCase{
.name = "valid_hd_station_name_short",
.metadata = Metadata::make<Metadata::hdStationNameShort>("name_short"),
.valid = true},
IsValidMetadataV2TestCase{
.name = "too_long_hd_station_name_short",
.metadata = Metadata::make<Metadata::hdStationNameShort>("name_too_long"),
.valid = false},
IsValidMetadataV2TestCase{
.name = "valid_hd_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(1),
.valid = true},
IsValidMetadataV2TestCase{
.name = "negative_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(-1),
.valid = false},
IsValidMetadataV2TestCase{
.name = "large_subchannel_available",
.metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(256),
.valid = false},
});
}
} // namespace
class IsValidMetadataV2Test : public testing::TestWithParam<IsValidMetadataV2TestCase> {};
INSTANTIATE_TEST_SUITE_P(IsValidMetadataV2Tests, IsValidMetadataV2Test,
testing::ValuesIn(getIsValidMetadataV2TestCases()),
[](const testing::TestParamInfo<IsValidMetadataV2Test::ParamType>& info) {
return info.param.name;
});
TEST_P(IsValidMetadataV2Test, IsValidMetadataV2) {
IsValidMetadataV2TestCase testParam = GetParam();
ASSERT_EQ(utils::isValidMetadataV2(testParam.metadata), testParam.valid);
}
} // namespace aidl::android::hardware::broadcastradio