1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2024 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #include <broadcastradio-utils-aidl/Utils.h>
18*4d7e907cSAndroid Build Coastguard Worker #include <broadcastradio-utils-aidl/UtilsV2.h>
19*4d7e907cSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*4d7e907cSAndroid Build Coastguard Worker 
21*4d7e907cSAndroid Build Coastguard Worker namespace aidl::android::hardware::broadcastradio {
22*4d7e907cSAndroid Build Coastguard Worker 
23*4d7e907cSAndroid Build Coastguard Worker namespace {
24*4d7e907cSAndroid Build Coastguard Worker constexpr int64_t kFmFrequencyKHz = 97900;
25*4d7e907cSAndroid Build Coastguard Worker constexpr uint32_t kDabSid = 0x0000C221u;
26*4d7e907cSAndroid Build Coastguard Worker constexpr int kDabEccCode = 0xE1u;
27*4d7e907cSAndroid Build Coastguard Worker constexpr int kDabSCIdS = 0x1u;
28*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDabSidExt = static_cast<uint64_t>(kDabSid) |
29*4d7e907cSAndroid Build Coastguard Worker                                 (static_cast<uint64_t>(kDabEccCode) << 32) |
30*4d7e907cSAndroid Build Coastguard Worker                                 (static_cast<uint64_t>(kDabSCIdS) << 40);
31*4d7e907cSAndroid Build Coastguard Worker constexpr uint32_t kDabEnsemble = 0xCE15u;
32*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDabFrequencyKhz = 225648u;
33*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdStationId = 0xA0000001u;
34*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdSubChannel = 1u;
35*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdStationLocation = 0x44E647003665CF6u;
36*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdStationLocationInvalid = 0x4E647007665CF6u;
37*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdFrequency = 97700u;
38*4d7e907cSAndroid Build Coastguard Worker constexpr int64_t kRdsValue = 0xBEEF;
39*4d7e907cSAndroid Build Coastguard Worker 
40*4d7e907cSAndroid Build Coastguard Worker struct IsValidIdentifierTestCase {
41*4d7e907cSAndroid Build Coastguard Worker     std::string name;
42*4d7e907cSAndroid Build Coastguard Worker     ProgramIdentifier id;
43*4d7e907cSAndroid Build Coastguard Worker     bool valid;
44*4d7e907cSAndroid Build Coastguard Worker };
45*4d7e907cSAndroid Build Coastguard Worker 
getIsValidIdentifierTestCases()46*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidIdentifierTestCase> getIsValidIdentifierTestCases() {
47*4d7e907cSAndroid Build Coastguard Worker     return std::vector<IsValidIdentifierTestCase>({
48*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "invalid_id_type",
49*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::INVALID, 0),
50*4d7e907cSAndroid Build Coastguard Worker                                       .valid = false},
51*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
52*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_frequency_high",
53*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 10000000u),
54*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
55*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
56*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_frequency_low",
57*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 100000u),
58*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
59*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
60*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_frequency",
61*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 1000000u),
62*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
63*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
64*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_am_fm_frequency_high",
65*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 10000000u),
66*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
67*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
68*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_am_fm_frequency_low",
69*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 100u),
70*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
71*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "valid_am_fm_frequency",
72*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(
73*4d7e907cSAndroid Build Coastguard Worker                                               IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
74*4d7e907cSAndroid Build Coastguard Worker                                       .valid = true},
75*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
76*4d7e907cSAndroid Build Coastguard Worker                     .name = "drmo_frequency_high",
77*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 10000000u),
78*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
79*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
80*4d7e907cSAndroid Build Coastguard Worker                     .name = "drmo_frequency_low",
81*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 100u),
82*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
83*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "valid_drmo_frequency",
84*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(
85*4d7e907cSAndroid Build Coastguard Worker                                               IdentifierType::DRMO_FREQUENCY_KHZ, kFmFrequencyKHz),
86*4d7e907cSAndroid Build Coastguard Worker                                       .valid = true},
87*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "invalid_rds_low",
88*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x0),
89*4d7e907cSAndroid Build Coastguard Worker                                       .valid = false},
90*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "invalid_rds_high",
91*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x10000),
92*4d7e907cSAndroid Build Coastguard Worker                                       .valid = false},
93*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "valid_rds",
94*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x1000),
95*4d7e907cSAndroid Build Coastguard Worker                                       .valid = true},
96*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
97*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_hd_id_zero",
98*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeSelectorHd(/* stationId= */ 0u, kHdSubChannel, kHdFrequency)
99*4d7e907cSAndroid Build Coastguard Worker                                   .primaryId,
100*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
101*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
102*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_hd_suchannel",
103*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeSelectorHd(kHdStationId, /* subChannel= */ 8u, kHdFrequency)
104*4d7e907cSAndroid Build Coastguard Worker                                   .primaryId,
105*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
106*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
107*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_hd_frequency_low",
108*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, /* frequency= */ 100u)
109*4d7e907cSAndroid Build Coastguard Worker                                   .primaryId,
110*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
111*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
112*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_hd_id",
113*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency)
114*4d7e907cSAndroid Build Coastguard Worker                                   .primaryId,
115*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
116*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
117*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_hd_station_name",
118*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x41422D464D),
119*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
120*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
121*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_hd_station_name",
122*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x414231464D),
123*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
124*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
125*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_sid",
126*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0E100000000u),
127*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
128*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
129*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_ecc_low",
130*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0F700000221u),
131*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
132*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
133*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_ecc_high",
134*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x09900000221u),
135*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
136*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
137*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_sid_ext",
138*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, kDabSidExt),
139*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
140*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
141*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_ensemble_zero",
142*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x0),
143*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
144*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
145*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_dab_ensemble_high",
146*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x10000),
147*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
148*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
149*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_ensemble",
150*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble),
151*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
152*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "invalid_dab_scid_low",
153*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0xF),
154*4d7e907cSAndroid Build Coastguard Worker                                       .valid = false},
155*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "invalid_dab_scid_high",
156*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x1000),
157*4d7e907cSAndroid Build Coastguard Worker                                       .valid = false},
158*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{.name = "valid_dab_scid",
159*4d7e907cSAndroid Build Coastguard Worker                                       .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x100),
160*4d7e907cSAndroid Build Coastguard Worker                                       .valid = true},
161*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
162*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_drmo_id_zero",
163*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x0),
164*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
165*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
166*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_drmo_id_high",
167*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x1000000),
168*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
169*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
170*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_drmo_id",
171*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x100000),
172*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
173*4d7e907cSAndroid Build Coastguard Worker     });
174*4d7e907cSAndroid Build Coastguard Worker }
175*4d7e907cSAndroid Build Coastguard Worker 
getIsValidIdentifierV2TestCases()176*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidIdentifierTestCase> getIsValidIdentifierV2TestCases() {
177*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidIdentifierTestCase> testcases = getIsValidIdentifierTestCases();
178*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidIdentifierTestCase> testcasesNew = std::vector<IsValidIdentifierTestCase>({
179*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
180*4d7e907cSAndroid Build Coastguard Worker                     .name = "invalid_hd_station_location_id",
181*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION,
182*4d7e907cSAndroid Build Coastguard Worker                                                 kHdStationLocationInvalid),
183*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
184*4d7e907cSAndroid Build Coastguard Worker             IsValidIdentifierTestCase{
185*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_hd_station_location_id",
186*4d7e907cSAndroid Build Coastguard Worker                     .id = utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION,
187*4d7e907cSAndroid Build Coastguard Worker                                                 kHdStationLocation),
188*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
189*4d7e907cSAndroid Build Coastguard Worker     });
190*4d7e907cSAndroid Build Coastguard Worker     testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
191*4d7e907cSAndroid Build Coastguard Worker     return testcases;
192*4d7e907cSAndroid Build Coastguard Worker }
193*4d7e907cSAndroid Build Coastguard Worker 
194*4d7e907cSAndroid Build Coastguard Worker struct IsValidSelectorTestCase {
195*4d7e907cSAndroid Build Coastguard Worker     std::string name;
196*4d7e907cSAndroid Build Coastguard Worker     ProgramSelector sel;
197*4d7e907cSAndroid Build Coastguard Worker     bool valid;
198*4d7e907cSAndroid Build Coastguard Worker };
199*4d7e907cSAndroid Build Coastguard Worker 
getIsValidSelectorTestCases()200*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidSelectorTestCase> getIsValidSelectorTestCases() {
201*4d7e907cSAndroid Build Coastguard Worker     return std::vector<IsValidSelectorTestCase>({
202*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{.name = "valid_am_fm_selector",
203*4d7e907cSAndroid Build Coastguard Worker                                     .sel = utils::makeSelectorAmfm(kFmFrequencyKHz),
204*4d7e907cSAndroid Build Coastguard Worker                                     .valid = true},
205*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{
206*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_hd_selector",
207*4d7e907cSAndroid Build Coastguard Worker                     .sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency),
208*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
209*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{
210*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_selector",
211*4d7e907cSAndroid Build Coastguard Worker                     .sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz),
212*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
213*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{.name = "valid_rds_selector",
214*4d7e907cSAndroid Build Coastguard Worker                                     .sel = ProgramSelector{.primaryId = utils::makeIdentifier(
215*4d7e907cSAndroid Build Coastguard Worker                                                                    IdentifierType::RDS_PI, 0x1000)},
216*4d7e907cSAndroid Build Coastguard Worker                                     .valid = true},
217*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{.name = "selector_with_invalid_id",
218*4d7e907cSAndroid Build Coastguard Worker                                     .sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel,
219*4d7e907cSAndroid Build Coastguard Worker                                                                  /* frequency= */ 100u),
220*4d7e907cSAndroid Build Coastguard Worker                                     .valid = false},
221*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{
222*4d7e907cSAndroid Build Coastguard Worker                     .name = "selector_with_invalid_primary_id_type",
223*4d7e907cSAndroid Build Coastguard Worker                     .sel = ProgramSelector{.primaryId = utils::makeIdentifier(
224*4d7e907cSAndroid Build Coastguard Worker                                                    IdentifierType::DAB_ENSEMBLE, kDabEnsemble)},
225*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
226*4d7e907cSAndroid Build Coastguard Worker             IsValidSelectorTestCase{
227*4d7e907cSAndroid Build Coastguard Worker                     .name = "selector_with_invalid_secondary_id",
228*4d7e907cSAndroid Build Coastguard Worker                     .sel = ProgramSelector{.primaryId = utils::makeIdentifier(
229*4d7e907cSAndroid Build Coastguard Worker                                                    IdentifierType::DAB_SID_EXT, kDabSidExt),
230*4d7e907cSAndroid Build Coastguard Worker                                            .secondaryIds = {utils::makeIdentifier(
231*4d7e907cSAndroid Build Coastguard Worker                                                    IdentifierType::DAB_ENSEMBLE, 0x0)}},
232*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
233*4d7e907cSAndroid Build Coastguard Worker     });
234*4d7e907cSAndroid Build Coastguard Worker }
235*4d7e907cSAndroid Build Coastguard Worker 
getIsValidSelectorV2TestCases()236*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidSelectorTestCase> getIsValidSelectorV2TestCases() {
237*4d7e907cSAndroid Build Coastguard Worker     ProgramSelector validHdSel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
238*4d7e907cSAndroid Build Coastguard Worker     validHdSel.secondaryIds = {
239*4d7e907cSAndroid Build Coastguard Worker             utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION, kHdStationLocation)};
240*4d7e907cSAndroid Build Coastguard Worker     ProgramSelector invalidHdSel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
241*4d7e907cSAndroid Build Coastguard Worker     invalidHdSel.secondaryIds = {
242*4d7e907cSAndroid Build Coastguard Worker             utils::makeIdentifier(IdentifierType::HD_STATION_LOCATION, kHdStationLocationInvalid)};
243*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidSelectorTestCase> testcasesNew = std::vector<IsValidSelectorTestCase>(
244*4d7e907cSAndroid Build Coastguard Worker             {IsValidSelectorTestCase{.name = "hd_selector_with_valid_station_location",
245*4d7e907cSAndroid Build Coastguard Worker                                      .sel = validHdSel,
246*4d7e907cSAndroid Build Coastguard Worker                                      .valid = true},
247*4d7e907cSAndroid Build Coastguard Worker              IsValidSelectorTestCase{.name = "hd_selector_with_invalid_station_location",
248*4d7e907cSAndroid Build Coastguard Worker                                      .sel = invalidHdSel,
249*4d7e907cSAndroid Build Coastguard Worker                                      .valid = false}});
250*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidSelectorTestCase> testcases = getIsValidSelectorTestCases();
251*4d7e907cSAndroid Build Coastguard Worker     testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
252*4d7e907cSAndroid Build Coastguard Worker     return testcases;
253*4d7e907cSAndroid Build Coastguard Worker }
254*4d7e907cSAndroid Build Coastguard Worker 
255*4d7e907cSAndroid Build Coastguard Worker struct IsValidMetadataTestCase {
256*4d7e907cSAndroid Build Coastguard Worker     std::string name;
257*4d7e907cSAndroid Build Coastguard Worker     Metadata metadata;
258*4d7e907cSAndroid Build Coastguard Worker     bool valid;
259*4d7e907cSAndroid Build Coastguard Worker };
260*4d7e907cSAndroid Build Coastguard Worker 
getIsValidMetadataTestCases()261*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidMetadataTestCase> getIsValidMetadataTestCases() {
262*4d7e907cSAndroid Build Coastguard Worker     return std::vector<IsValidMetadataTestCase>({
263*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "valid_rds_pty",
264*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rdsPty>(1),
265*4d7e907cSAndroid Build Coastguard Worker                                     .valid = true},
266*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "negative_rds_pty",
267*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rdsPty>(-1),
268*4d7e907cSAndroid Build Coastguard Worker                                     .valid = false},
269*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "large_rds_pty",
270*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rdsPty>(256),
271*4d7e907cSAndroid Build Coastguard Worker                                     .valid = false},
272*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "valid_rbds_pty",
273*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rbdsPty>(1),
274*4d7e907cSAndroid Build Coastguard Worker                                     .valid = true},
275*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "negative_rbds_pty",
276*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rbdsPty>(-1),
277*4d7e907cSAndroid Build Coastguard Worker                                     .valid = false},
278*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "large_rbds_pty",
279*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::rbdsPty>(256),
280*4d7e907cSAndroid Build Coastguard Worker                                     .valid = false},
281*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
282*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_ensemble_name_short",
283*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name"),
284*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
285*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
286*4d7e907cSAndroid Build Coastguard Worker                     .name = "too_long_dab_ensemble_name_short",
287*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name_long"),
288*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
289*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
290*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_service_name_short",
291*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabServiceNameShort>("name"),
292*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
293*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
294*4d7e907cSAndroid Build Coastguard Worker                     .name = "too_long_dab_service_name_short",
295*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabServiceNameShort>("name_long"),
296*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
297*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
298*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_dab_component_name_short",
299*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabComponentNameShort>("name"),
300*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
301*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
302*4d7e907cSAndroid Build Coastguard Worker                     .name = "too_long_dab_component_name_short",
303*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::dabComponentNameShort>("name_long"),
304*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
305*4d7e907cSAndroid Build Coastguard Worker     });
306*4d7e907cSAndroid Build Coastguard Worker }
307*4d7e907cSAndroid Build Coastguard Worker 
getIsValidMetadataV2TestCases()308*4d7e907cSAndroid Build Coastguard Worker std::vector<IsValidMetadataTestCase> getIsValidMetadataV2TestCases() {
309*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidMetadataTestCase> testcases = getIsValidMetadataTestCases();
310*4d7e907cSAndroid Build Coastguard Worker     std::vector<IsValidMetadataTestCase> testcasesNew = std::vector<IsValidMetadataTestCase>({
311*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
312*4d7e907cSAndroid Build Coastguard Worker                     .name = "valid_hd_station_name_short",
313*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::hdStationNameShort>("name_short"),
314*4d7e907cSAndroid Build Coastguard Worker                     .valid = true},
315*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
316*4d7e907cSAndroid Build Coastguard Worker                     .name = "too_long_hd_station_name_short",
317*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::hdStationNameShort>("name_too_long"),
318*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
319*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{.name = "valid_hd_subchannel_available",
320*4d7e907cSAndroid Build Coastguard Worker                                     .metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(1),
321*4d7e907cSAndroid Build Coastguard Worker                                     .valid = true},
322*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
323*4d7e907cSAndroid Build Coastguard Worker                     .name = "negative_subchannel_available",
324*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(-1),
325*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
326*4d7e907cSAndroid Build Coastguard Worker             IsValidMetadataTestCase{
327*4d7e907cSAndroid Build Coastguard Worker                     .name = "large_subchannel_available",
328*4d7e907cSAndroid Build Coastguard Worker                     .metadata = Metadata::make<Metadata::hdSubChannelsAvailable>(256),
329*4d7e907cSAndroid Build Coastguard Worker                     .valid = false},
330*4d7e907cSAndroid Build Coastguard Worker     });
331*4d7e907cSAndroid Build Coastguard Worker     testcases.insert(testcases.end(), testcasesNew.begin(), testcasesNew.end());
332*4d7e907cSAndroid Build Coastguard Worker     return testcases;
333*4d7e907cSAndroid Build Coastguard Worker }
334*4d7e907cSAndroid Build Coastguard Worker }  // namespace
335*4d7e907cSAndroid Build Coastguard Worker 
336*4d7e907cSAndroid Build Coastguard Worker class IsValidIdentifierTest : public testing::TestWithParam<IsValidIdentifierTestCase> {};
337*4d7e907cSAndroid Build Coastguard Worker 
338*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IsValidIdentifierTests, IsValidIdentifierTest,
339*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(getIsValidIdentifierTestCases()),
__anon18ab4ae40202(const testing::TestParamInfo<IsValidIdentifierTest::ParamType>& info) 340*4d7e907cSAndroid Build Coastguard Worker                          [](const testing::TestParamInfo<IsValidIdentifierTest::ParamType>& info) {
341*4d7e907cSAndroid Build Coastguard Worker                              return info.param.name;
342*4d7e907cSAndroid Build Coastguard Worker                          });
343*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidIdentifierTest,IsValid)344*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidIdentifierTest, IsValid) {
345*4d7e907cSAndroid Build Coastguard Worker     IsValidIdentifierTestCase testcase = GetParam();
346*4d7e907cSAndroid Build Coastguard Worker 
347*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValid(testcase.id), testcase.valid);
348*4d7e907cSAndroid Build Coastguard Worker }
349*4d7e907cSAndroid Build Coastguard Worker 
350*4d7e907cSAndroid Build Coastguard Worker class IsValidIdentifierV2Test : public testing::TestWithParam<IsValidIdentifierTestCase> {};
351*4d7e907cSAndroid Build Coastguard Worker 
352*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
353*4d7e907cSAndroid Build Coastguard Worker         IsValidIdentifierV2Tests, IsValidIdentifierV2Test,
354*4d7e907cSAndroid Build Coastguard Worker         testing::ValuesIn(getIsValidIdentifierV2TestCases()),
__anon18ab4ae40302(const testing::TestParamInfo<IsValidIdentifierV2Test::ParamType>& info) 355*4d7e907cSAndroid Build Coastguard Worker         [](const testing::TestParamInfo<IsValidIdentifierV2Test::ParamType>& info) {
356*4d7e907cSAndroid Build Coastguard Worker             return info.param.name;
357*4d7e907cSAndroid Build Coastguard Worker         });
358*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidIdentifierV2Test,IsValidV2)359*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidIdentifierV2Test, IsValidV2) {
360*4d7e907cSAndroid Build Coastguard Worker     IsValidIdentifierTestCase testcase = GetParam();
361*4d7e907cSAndroid Build Coastguard Worker 
362*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValidV2(testcase.id), testcase.valid);
363*4d7e907cSAndroid Build Coastguard Worker }
364*4d7e907cSAndroid Build Coastguard Worker 
365*4d7e907cSAndroid Build Coastguard Worker class IsValidSelectorTest : public testing::TestWithParam<IsValidSelectorTestCase> {};
366*4d7e907cSAndroid Build Coastguard Worker 
367*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IsValidSelectorTests, IsValidSelectorTest,
368*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(getIsValidSelectorTestCases()),
__anon18ab4ae40402(const testing::TestParamInfo<IsValidSelectorTest::ParamType>& info) 369*4d7e907cSAndroid Build Coastguard Worker                          [](const testing::TestParamInfo<IsValidSelectorTest::ParamType>& info) {
370*4d7e907cSAndroid Build Coastguard Worker                              return info.param.name;
371*4d7e907cSAndroid Build Coastguard Worker                          });
372*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidSelectorTest,IsValid)373*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidSelectorTest, IsValid) {
374*4d7e907cSAndroid Build Coastguard Worker     IsValidSelectorTestCase testcase = GetParam();
375*4d7e907cSAndroid Build Coastguard Worker 
376*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValid(testcase.sel), testcase.valid);
377*4d7e907cSAndroid Build Coastguard Worker }
378*4d7e907cSAndroid Build Coastguard Worker 
379*4d7e907cSAndroid Build Coastguard Worker class IsValidSelectorV2Test : public testing::TestWithParam<IsValidSelectorTestCase> {};
380*4d7e907cSAndroid Build Coastguard Worker 
381*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IsValidSelectorV2Tests, IsValidSelectorV2Test,
382*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(getIsValidSelectorV2TestCases()),
__anon18ab4ae40502(const testing::TestParamInfo<IsValidSelectorV2Test::ParamType>& info) 383*4d7e907cSAndroid Build Coastguard Worker                          [](const testing::TestParamInfo<IsValidSelectorV2Test::ParamType>& info) {
384*4d7e907cSAndroid Build Coastguard Worker                              return info.param.name;
385*4d7e907cSAndroid Build Coastguard Worker                          });
386*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidSelectorV2Test,IsValidV2)387*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidSelectorV2Test, IsValidV2) {
388*4d7e907cSAndroid Build Coastguard Worker     IsValidSelectorTestCase testcase = GetParam();
389*4d7e907cSAndroid Build Coastguard Worker 
390*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValidV2(testcase.sel), testcase.valid);
391*4d7e907cSAndroid Build Coastguard Worker }
392*4d7e907cSAndroid Build Coastguard Worker 
393*4d7e907cSAndroid Build Coastguard Worker class IsValidMetadataTest : public testing::TestWithParam<IsValidMetadataTestCase> {};
394*4d7e907cSAndroid Build Coastguard Worker 
395*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IsValidMetadataTests, IsValidMetadataTest,
396*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(getIsValidMetadataTestCases()),
__anon18ab4ae40602(const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) 397*4d7e907cSAndroid Build Coastguard Worker                          [](const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) {
398*4d7e907cSAndroid Build Coastguard Worker                              return info.param.name;
399*4d7e907cSAndroid Build Coastguard Worker                          });
400*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidMetadataTest,IsValidMetadata)401*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidMetadataTest, IsValidMetadata) {
402*4d7e907cSAndroid Build Coastguard Worker     IsValidMetadataTestCase testParam = GetParam();
403*4d7e907cSAndroid Build Coastguard Worker 
404*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValidMetadata(testParam.metadata), testParam.valid);
405*4d7e907cSAndroid Build Coastguard Worker }
406*4d7e907cSAndroid Build Coastguard Worker 
407*4d7e907cSAndroid Build Coastguard Worker class IsValidMetadataV2Test : public testing::TestWithParam<IsValidMetadataTestCase> {};
408*4d7e907cSAndroid Build Coastguard Worker 
409*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IsValidMetadataV2Tests, IsValidMetadataV2Test,
410*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(getIsValidMetadataV2TestCases()),
__anon18ab4ae40702(const testing::TestParamInfo<IsValidMetadataV2Test::ParamType>& info) 411*4d7e907cSAndroid Build Coastguard Worker                          [](const testing::TestParamInfo<IsValidMetadataV2Test::ParamType>& info) {
412*4d7e907cSAndroid Build Coastguard Worker                              return info.param.name;
413*4d7e907cSAndroid Build Coastguard Worker                          });
414*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(IsValidMetadataV2Test,IsValidMetadataV2)415*4d7e907cSAndroid Build Coastguard Worker TEST_P(IsValidMetadataV2Test, IsValidMetadataV2) {
416*4d7e907cSAndroid Build Coastguard Worker     IsValidMetadataTestCase testParam = GetParam();
417*4d7e907cSAndroid Build Coastguard Worker 
418*4d7e907cSAndroid Build Coastguard Worker     ASSERT_EQ(utils::isValidMetadataV2(testParam.metadata), testParam.valid);
419*4d7e907cSAndroid Build Coastguard Worker }
420*4d7e907cSAndroid Build Coastguard Worker 
421*4d7e907cSAndroid Build Coastguard Worker }  // namespace aidl::android::hardware::broadcastradio
422