1*8b6cd535SAndroid Build Coastguard Worker // Copyright (C) 2023 Google LLC
2*8b6cd535SAndroid Build Coastguard Worker //
3*8b6cd535SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*8b6cd535SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*8b6cd535SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*8b6cd535SAndroid Build Coastguard Worker //
7*8b6cd535SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*8b6cd535SAndroid Build Coastguard Worker //
9*8b6cd535SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*8b6cd535SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*8b6cd535SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*8b6cd535SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*8b6cd535SAndroid Build Coastguard Worker // limitations under the License.
14*8b6cd535SAndroid Build Coastguard Worker
15*8b6cd535SAndroid Build Coastguard Worker #include "icing/file/version-util.h"
16*8b6cd535SAndroid Build Coastguard Worker
17*8b6cd535SAndroid Build Coastguard Worker #include <cstdint>
18*8b6cd535SAndroid Build Coastguard Worker #include <memory>
19*8b6cd535SAndroid Build Coastguard Worker #include <optional>
20*8b6cd535SAndroid Build Coastguard Worker #include <string>
21*8b6cd535SAndroid Build Coastguard Worker #include <unordered_set>
22*8b6cd535SAndroid Build Coastguard Worker #include <utility>
23*8b6cd535SAndroid Build Coastguard Worker
24*8b6cd535SAndroid Build Coastguard Worker #include "gmock/gmock.h"
25*8b6cd535SAndroid Build Coastguard Worker #include "gtest/gtest.h"
26*8b6cd535SAndroid Build Coastguard Worker #include "icing/file/filesystem.h"
27*8b6cd535SAndroid Build Coastguard Worker #include "icing/file/posting_list/flash-index-storage-header.h"
28*8b6cd535SAndroid Build Coastguard Worker #include "icing/portable/equals-proto.h"
29*8b6cd535SAndroid Build Coastguard Worker #include "icing/proto/initialize.pb.h"
30*8b6cd535SAndroid Build Coastguard Worker #include "icing/testing/common-matchers.h"
31*8b6cd535SAndroid Build Coastguard Worker #include "icing/testing/tmp-directory.h"
32*8b6cd535SAndroid Build Coastguard Worker
33*8b6cd535SAndroid Build Coastguard Worker namespace icing {
34*8b6cd535SAndroid Build Coastguard Worker namespace lib {
35*8b6cd535SAndroid Build Coastguard Worker namespace version_util {
36*8b6cd535SAndroid Build Coastguard Worker
37*8b6cd535SAndroid Build Coastguard Worker namespace {
38*8b6cd535SAndroid Build Coastguard Worker
39*8b6cd535SAndroid Build Coastguard Worker using ::testing::Eq;
40*8b6cd535SAndroid Build Coastguard Worker using ::testing::IsEmpty;
41*8b6cd535SAndroid Build Coastguard Worker using ::testing::IsFalse;
42*8b6cd535SAndroid Build Coastguard Worker using ::testing::IsTrue;
43*8b6cd535SAndroid Build Coastguard Worker
MakeTestVersionProto(const VersionInfo & version_info,const std::unordered_set<IcingSearchEngineFeatureInfoProto::FlaggedFeatureType> & features_set)44*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineVersionProto MakeTestVersionProto(
45*8b6cd535SAndroid Build Coastguard Worker const VersionInfo& version_info,
46*8b6cd535SAndroid Build Coastguard Worker const std::unordered_set<
47*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FlaggedFeatureType>& features_set) {
48*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineVersionProto version_proto;
49*8b6cd535SAndroid Build Coastguard Worker version_proto.set_version(version_info.version);
50*8b6cd535SAndroid Build Coastguard Worker version_proto.set_max_version(version_info.max_version);
51*8b6cd535SAndroid Build Coastguard Worker
52*8b6cd535SAndroid Build Coastguard Worker auto* enabled_features = version_proto.mutable_enabled_features();
53*8b6cd535SAndroid Build Coastguard Worker for (const auto& feature : features_set) {
54*8b6cd535SAndroid Build Coastguard Worker enabled_features->Add(GetFeatureInfoProto(feature));
55*8b6cd535SAndroid Build Coastguard Worker }
56*8b6cd535SAndroid Build Coastguard Worker return version_proto;
57*8b6cd535SAndroid Build Coastguard Worker }
58*8b6cd535SAndroid Build Coastguard Worker
59*8b6cd535SAndroid Build Coastguard Worker struct VersionUtilReadVersionTestParam {
60*8b6cd535SAndroid Build Coastguard Worker std::optional<VersionInfo> existing_v1_version_info;
61*8b6cd535SAndroid Build Coastguard Worker std::optional<VersionInfo> existing_v2_version_info;
62*8b6cd535SAndroid Build Coastguard Worker std::optional<int> existing_flash_index_magic;
63*8b6cd535SAndroid Build Coastguard Worker VersionInfo expected_version_info;
64*8b6cd535SAndroid Build Coastguard Worker
VersionUtilReadVersionTestParamicing::lib::version_util::__anon761a82ec0111::VersionUtilReadVersionTestParam65*8b6cd535SAndroid Build Coastguard Worker explicit VersionUtilReadVersionTestParam(
66*8b6cd535SAndroid Build Coastguard Worker std::optional<VersionInfo> existing_v1_version_info_in,
67*8b6cd535SAndroid Build Coastguard Worker std::optional<VersionInfo> existing_v2_version_info_in,
68*8b6cd535SAndroid Build Coastguard Worker std::optional<int> existing_flash_index_magic_in,
69*8b6cd535SAndroid Build Coastguard Worker VersionInfo expected_version_info_in)
70*8b6cd535SAndroid Build Coastguard Worker : existing_v1_version_info(std::move(existing_v1_version_info_in)),
71*8b6cd535SAndroid Build Coastguard Worker existing_v2_version_info(std::move(existing_v2_version_info_in)),
72*8b6cd535SAndroid Build Coastguard Worker existing_flash_index_magic(std::move(existing_flash_index_magic_in)),
73*8b6cd535SAndroid Build Coastguard Worker expected_version_info(std::move(expected_version_info_in)) {}
74*8b6cd535SAndroid Build Coastguard Worker };
75*8b6cd535SAndroid Build Coastguard Worker
76*8b6cd535SAndroid Build Coastguard Worker class VersionUtilReadVersionTest
77*8b6cd535SAndroid Build Coastguard Worker : public ::testing::TestWithParam<VersionUtilReadVersionTestParam> {
78*8b6cd535SAndroid Build Coastguard Worker protected:
SetUp()79*8b6cd535SAndroid Build Coastguard Worker void SetUp() override {
80*8b6cd535SAndroid Build Coastguard Worker base_dir_ = GetTestTempDir() + "/version_util_test";
81*8b6cd535SAndroid Build Coastguard Worker index_path_ = base_dir_ + "/index";
82*8b6cd535SAndroid Build Coastguard Worker
83*8b6cd535SAndroid Build Coastguard Worker ASSERT_TRUE(filesystem_.CreateDirectoryRecursively(base_dir_.c_str()));
84*8b6cd535SAndroid Build Coastguard Worker }
85*8b6cd535SAndroid Build Coastguard Worker
TearDown()86*8b6cd535SAndroid Build Coastguard Worker void TearDown() override {
87*8b6cd535SAndroid Build Coastguard Worker ASSERT_TRUE(filesystem_.DeleteDirectoryRecursively(base_dir_.c_str()));
88*8b6cd535SAndroid Build Coastguard Worker }
89*8b6cd535SAndroid Build Coastguard Worker
filesystem() const90*8b6cd535SAndroid Build Coastguard Worker const Filesystem& filesystem() const { return filesystem_; }
91*8b6cd535SAndroid Build Coastguard Worker
92*8b6cd535SAndroid Build Coastguard Worker Filesystem filesystem_;
93*8b6cd535SAndroid Build Coastguard Worker std::string base_dir_;
94*8b6cd535SAndroid Build Coastguard Worker std::string index_path_;
95*8b6cd535SAndroid Build Coastguard Worker };
96*8b6cd535SAndroid Build Coastguard Worker
TEST_P(VersionUtilReadVersionTest,ReadVersion)97*8b6cd535SAndroid Build Coastguard Worker TEST_P(VersionUtilReadVersionTest, ReadVersion) {
98*8b6cd535SAndroid Build Coastguard Worker const VersionUtilReadVersionTestParam& param = GetParam();
99*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineVersionProto dummy_version_proto;
100*8b6cd535SAndroid Build Coastguard Worker
101*8b6cd535SAndroid Build Coastguard Worker if (param.existing_v1_version_info.has_value()) {
102*8b6cd535SAndroid Build Coastguard Worker ICING_ASSERT_OK(WriteV1Version(filesystem_, base_dir_,
103*8b6cd535SAndroid Build Coastguard Worker param.existing_v1_version_info.value()));
104*8b6cd535SAndroid Build Coastguard Worker }
105*8b6cd535SAndroid Build Coastguard Worker if (param.existing_v2_version_info.has_value()) {
106*8b6cd535SAndroid Build Coastguard Worker dummy_version_proto = MakeTestVersionProto(
107*8b6cd535SAndroid Build Coastguard Worker param.existing_v2_version_info.value(),
108*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR,
109*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::UNKNOWN});
110*8b6cd535SAndroid Build Coastguard Worker ICING_ASSERT_OK(WriteV2Version(
111*8b6cd535SAndroid Build Coastguard Worker filesystem_, base_dir_,
112*8b6cd535SAndroid Build Coastguard Worker std::make_unique<IcingSearchEngineVersionProto>(dummy_version_proto)));
113*8b6cd535SAndroid Build Coastguard Worker }
114*8b6cd535SAndroid Build Coastguard Worker
115*8b6cd535SAndroid Build Coastguard Worker // Prepare flash index file.
116*8b6cd535SAndroid Build Coastguard Worker if (param.existing_flash_index_magic.has_value()) {
117*8b6cd535SAndroid Build Coastguard Worker HeaderBlock header_block(&filesystem_, /*block_size=*/4096);
118*8b6cd535SAndroid Build Coastguard Worker header_block.header()->magic = param.existing_flash_index_magic.value();
119*8b6cd535SAndroid Build Coastguard Worker
120*8b6cd535SAndroid Build Coastguard Worker std::string main_index_dir = index_path_ + "/idx/main";
121*8b6cd535SAndroid Build Coastguard Worker ASSERT_TRUE(filesystem_.CreateDirectoryRecursively(main_index_dir.c_str()));
122*8b6cd535SAndroid Build Coastguard Worker std::string flash_index_file_path = main_index_dir + "/main_index";
123*8b6cd535SAndroid Build Coastguard Worker
124*8b6cd535SAndroid Build Coastguard Worker ScopedFd sfd(filesystem_.OpenForWrite(flash_index_file_path.c_str()));
125*8b6cd535SAndroid Build Coastguard Worker ASSERT_TRUE(sfd.is_valid());
126*8b6cd535SAndroid Build Coastguard Worker ASSERT_TRUE(header_block.Write(sfd.get()));
127*8b6cd535SAndroid Build Coastguard Worker }
128*8b6cd535SAndroid Build Coastguard Worker
129*8b6cd535SAndroid Build Coastguard Worker ICING_ASSERT_OK_AND_ASSIGN(IcingSearchEngineVersionProto version_proto,
130*8b6cd535SAndroid Build Coastguard Worker ReadVersion(filesystem_, base_dir_, index_path_));
131*8b6cd535SAndroid Build Coastguard Worker if (param.existing_v2_version_info.has_value() &&
132*8b6cd535SAndroid Build Coastguard Worker param.expected_version_info.version ==
133*8b6cd535SAndroid Build Coastguard Worker param.existing_v2_version_info.value().version) {
134*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(version_proto,
135*8b6cd535SAndroid Build Coastguard Worker portable_equals_proto::EqualsProto(dummy_version_proto));
136*8b6cd535SAndroid Build Coastguard Worker } else {
137*8b6cd535SAndroid Build Coastguard Worker // We're returning the version from v1 version file, or an invalid version.
138*8b6cd535SAndroid Build Coastguard Worker // version_proto.enabled_features should be empty in this case.
139*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(version_proto.version(),
140*8b6cd535SAndroid Build Coastguard Worker Eq(param.expected_version_info.version));
141*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(version_proto.max_version(),
142*8b6cd535SAndroid Build Coastguard Worker Eq(param.expected_version_info.max_version));
143*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(version_proto.enabled_features(), IsEmpty());
144*8b6cd535SAndroid Build Coastguard Worker }
145*8b6cd535SAndroid Build Coastguard Worker }
146*8b6cd535SAndroid Build Coastguard Worker
147*8b6cd535SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
148*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTest, VersionUtilReadVersionTest,
149*8b6cd535SAndroid Build Coastguard Worker testing::Values(
150*8b6cd535SAndroid Build Coastguard Worker // - Version file doesn't exist
151*8b6cd535SAndroid Build Coastguard Worker // - Flash index doesn't exist
152*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version -1 (invalid)
153*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
154*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::nullopt,
155*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
156*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/std::nullopt,
157*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
158*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/-1)),
159*8b6cd535SAndroid Build Coastguard Worker
160*8b6cd535SAndroid Build Coastguard Worker // - Version file doesn't exist
161*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with version 0 magic
162*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0, max_version 0
163*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
164*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::nullopt,
165*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
166*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
167*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic),
168*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
169*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/0, /*max_version=*/0)),
170*8b6cd535SAndroid Build Coastguard Worker
171*8b6cd535SAndroid Build Coastguard Worker // - Version file doesn't exist
172*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
173*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version -1 (invalid)
174*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
175*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::nullopt,
176*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
177*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
178*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
179*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
180*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/-1)),
181*8b6cd535SAndroid Build Coastguard Worker
182*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists
183*8b6cd535SAndroid Build Coastguard Worker // - Flash index doesn't exist
184*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version 1 (invalid)
185*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
186*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
187*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/1, /*max_version=*/1),
188*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
189*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/std::nullopt,
190*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
191*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/1)),
192*8b6cd535SAndroid Build Coastguard Worker
193*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 1, max_version 1
194*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with version 0 magic
195*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0, max_version 1
196*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
197*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
198*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/1, /*max_version=*/1),
199*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
200*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
201*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic),
202*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
203*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/0, /*max_version=*/1)),
204*8b6cd535SAndroid Build Coastguard Worker
205*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 2, max_version 3
206*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with version 0 magic
207*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0, max_version 3
208*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
209*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
210*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/2, /*max_version=*/3),
211*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
212*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
213*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic),
214*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
215*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/0, /*max_version=*/3)),
216*8b6cd535SAndroid Build Coastguard Worker
217*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 1, max_version 1
218*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
219*8b6cd535SAndroid Build Coastguard Worker // - Result: version 1, max_version 1
220*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
221*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
222*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/1, /*max_version=*/1),
223*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
224*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
225*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
226*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
227*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/1, /*max_version=*/1)),
228*8b6cd535SAndroid Build Coastguard Worker
229*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 2, max_version 3
230*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
231*8b6cd535SAndroid Build Coastguard Worker // - Result: version 2, max_version 3
232*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
233*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
234*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/2, /*max_version=*/3),
235*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
236*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
237*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
238*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
239*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/2, /*max_version=*/3)),
240*8b6cd535SAndroid Build Coastguard Worker
241*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 2, max_version 4
242*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 exists: version 4, max_version 4
243*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
244*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version 4
245*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
246*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
247*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/2, /*max_version=*/4),
248*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/
249*8b6cd535SAndroid Build Coastguard Worker std::make_optional<VersionInfo>(
250*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
251*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
252*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
253*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
254*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/4)),
255*8b6cd535SAndroid Build Coastguard Worker
256*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 4, max_version 4
257*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 exists: version 4, max_version 4
258*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with version 0 magic
259*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version 4
260*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
261*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
262*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
263*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/
264*8b6cd535SAndroid Build Coastguard Worker std::make_optional<VersionInfo>(
265*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
266*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
267*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic),
268*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
269*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/4)),
270*8b6cd535SAndroid Build Coastguard Worker
271*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 4, max_version 4
272*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 exists: version 4, max_version 4
273*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
274*8b6cd535SAndroid Build Coastguard Worker // - Result: version 4, max_version 4
275*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
276*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
277*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
278*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/
279*8b6cd535SAndroid Build Coastguard Worker std::make_optional<VersionInfo>(
280*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
281*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
282*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
283*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
284*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/4, /*max_version=*/4)),
285*8b6cd535SAndroid Build Coastguard Worker
286*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 exists: version 4, max_version 4
287*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 does not exist
288*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
289*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version 4
290*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
291*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::make_optional<VersionInfo>(
292*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
293*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/std::nullopt,
294*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
295*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
296*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
297*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/4)),
298*8b6cd535SAndroid Build Coastguard Worker
299*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 does not exist
300*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 exists: version 4, max_version 4
301*8b6cd535SAndroid Build Coastguard Worker // - Flash index exists with non version 0 magic
302*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version -1
303*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
304*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::nullopt,
305*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/
306*8b6cd535SAndroid Build Coastguard Worker std::make_optional<VersionInfo>(
307*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
308*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/
309*8b6cd535SAndroid Build Coastguard Worker std::make_optional<int>(kVersionZeroFlashIndexMagic + 1),
310*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
311*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/-1)),
312*8b6cd535SAndroid Build Coastguard Worker
313*8b6cd535SAndroid Build Coastguard Worker // - Version file v1 doesn't exist
314*8b6cd535SAndroid Build Coastguard Worker // - Version file v2 exists: version 4, max_version 4
315*8b6cd535SAndroid Build Coastguard Worker // - Flash index doesn't exist
316*8b6cd535SAndroid Build Coastguard Worker // - Result: version -1, max_version -1 (invalid since flash index
317*8b6cd535SAndroid Build Coastguard Worker // doesn't exist)
318*8b6cd535SAndroid Build Coastguard Worker VersionUtilReadVersionTestParam(
319*8b6cd535SAndroid Build Coastguard Worker /*existing_v1_version_info_in=*/std::nullopt,
320*8b6cd535SAndroid Build Coastguard Worker /*existing_v2_version_info_in=*/
321*8b6cd535SAndroid Build Coastguard Worker std::make_optional<VersionInfo>(
322*8b6cd535SAndroid Build Coastguard Worker /*version_in=*/4, /*max_version=*/4),
323*8b6cd535SAndroid Build Coastguard Worker /*existing_flash_index_magic_in=*/std::nullopt,
324*8b6cd535SAndroid Build Coastguard Worker /*expected_version_info_in=*/
325*8b6cd535SAndroid Build Coastguard Worker VersionInfo(/*version_in=*/-1, /*max_version=*/-1))));
326*8b6cd535SAndroid Build Coastguard Worker
327*8b6cd535SAndroid Build Coastguard Worker struct VersionUtilStateChangeTestParam {
328*8b6cd535SAndroid Build Coastguard Worker VersionInfo existing_version_info;
329*8b6cd535SAndroid Build Coastguard Worker int32_t curr_version;
330*8b6cd535SAndroid Build Coastguard Worker StateChange expected_state_change;
331*8b6cd535SAndroid Build Coastguard Worker
VersionUtilStateChangeTestParamicing::lib::version_util::__anon761a82ec0111::VersionUtilStateChangeTestParam332*8b6cd535SAndroid Build Coastguard Worker explicit VersionUtilStateChangeTestParam(VersionInfo existing_version_info_in,
333*8b6cd535SAndroid Build Coastguard Worker int32_t curr_version_in,
334*8b6cd535SAndroid Build Coastguard Worker StateChange expected_state_change_in)
335*8b6cd535SAndroid Build Coastguard Worker : existing_version_info(std::move(existing_version_info_in)),
336*8b6cd535SAndroid Build Coastguard Worker curr_version(curr_version_in),
337*8b6cd535SAndroid Build Coastguard Worker expected_state_change(expected_state_change_in) {}
338*8b6cd535SAndroid Build Coastguard Worker };
339*8b6cd535SAndroid Build Coastguard Worker
340*8b6cd535SAndroid Build Coastguard Worker class VersionUtilStateChangeTest
341*8b6cd535SAndroid Build Coastguard Worker : public ::testing::TestWithParam<VersionUtilStateChangeTestParam> {};
342*8b6cd535SAndroid Build Coastguard Worker
TEST_P(VersionUtilStateChangeTest,GetVersionStateChange)343*8b6cd535SAndroid Build Coastguard Worker TEST_P(VersionUtilStateChangeTest, GetVersionStateChange) {
344*8b6cd535SAndroid Build Coastguard Worker const VersionUtilStateChangeTestParam& param = GetParam();
345*8b6cd535SAndroid Build Coastguard Worker
346*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
347*8b6cd535SAndroid Build Coastguard Worker GetVersionStateChange(param.existing_version_info, param.curr_version),
348*8b6cd535SAndroid Build Coastguard Worker Eq(param.expected_state_change));
349*8b6cd535SAndroid Build Coastguard Worker }
350*8b6cd535SAndroid Build Coastguard Worker
351*8b6cd535SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
352*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTest, VersionUtilStateChangeTest,
353*8b6cd535SAndroid Build Coastguard Worker testing::Values(
354*8b6cd535SAndroid Build Coastguard Worker // - version -1, max_version -1 (invalid)
355*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
356*8b6cd535SAndroid Build Coastguard Worker // - Result: undetermined
357*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
358*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(-1, -1),
359*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
360*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUndetermined),
361*8b6cd535SAndroid Build Coastguard Worker
362*8b6cd535SAndroid Build Coastguard Worker // - version -1, max_version 1 (invalid)
363*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
364*8b6cd535SAndroid Build Coastguard Worker // - Result: undetermined
365*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
366*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(-1, 1),
367*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
368*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUndetermined),
369*8b6cd535SAndroid Build Coastguard Worker
370*8b6cd535SAndroid Build Coastguard Worker // - version -1, max_version -1 (invalid)
371*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
372*8b6cd535SAndroid Build Coastguard Worker // - Result: undetermined
373*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
374*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(-1, -1),
375*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
376*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUndetermined),
377*8b6cd535SAndroid Build Coastguard Worker
378*8b6cd535SAndroid Build Coastguard Worker // - version -1, max_version 1 (invalid)
379*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
380*8b6cd535SAndroid Build Coastguard Worker // - Result: undetermined
381*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
382*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(-1, 1),
383*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
384*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUndetermined),
385*8b6cd535SAndroid Build Coastguard Worker
386*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 0
387*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
388*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 upgrade
389*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
390*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 0),
391*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
392*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroUpgrade),
393*8b6cd535SAndroid Build Coastguard Worker
394*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 1
395*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
396*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 roll forward
397*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
398*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 1),
399*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
400*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroRollForward),
401*8b6cd535SAndroid Build Coastguard Worker
402*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 2
403*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
404*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 roll forward
405*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
406*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 2),
407*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
408*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroRollForward),
409*8b6cd535SAndroid Build Coastguard Worker
410*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 0
411*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
412*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 upgrade
413*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
414*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 0),
415*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
416*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroUpgrade),
417*8b6cd535SAndroid Build Coastguard Worker
418*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 1
419*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
420*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 upgrade
421*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
422*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 1),
423*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
424*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroRollForward),
425*8b6cd535SAndroid Build Coastguard Worker
426*8b6cd535SAndroid Build Coastguard Worker // - version 0, max_version 2
427*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
428*8b6cd535SAndroid Build Coastguard Worker // - Result: version 0 roll forward
429*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
430*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(0, 2),
431*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
432*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kVersionZeroRollForward),
433*8b6cd535SAndroid Build Coastguard Worker
434*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 1
435*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
436*8b6cd535SAndroid Build Coastguard Worker // - Result: compatible
437*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
438*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 1),
439*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
440*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kCompatible),
441*8b6cd535SAndroid Build Coastguard Worker
442*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 2
443*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
444*8b6cd535SAndroid Build Coastguard Worker // - Result: compatible
445*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
446*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 2),
447*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
448*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kCompatible),
449*8b6cd535SAndroid Build Coastguard Worker
450*8b6cd535SAndroid Build Coastguard Worker // - version 2, max_version 2
451*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
452*8b6cd535SAndroid Build Coastguard Worker // - Result: roll back
453*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
454*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(2, 2),
455*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
456*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollBack),
457*8b6cd535SAndroid Build Coastguard Worker
458*8b6cd535SAndroid Build Coastguard Worker // - version 2, max_version 3
459*8b6cd535SAndroid Build Coastguard Worker // - Current version = 1
460*8b6cd535SAndroid Build Coastguard Worker // - Result: roll back
461*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
462*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(2, 3),
463*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/1,
464*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollBack),
465*8b6cd535SAndroid Build Coastguard Worker
466*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 1
467*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
468*8b6cd535SAndroid Build Coastguard Worker // - Result: upgrade
469*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
470*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 1),
471*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
472*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUpgrade),
473*8b6cd535SAndroid Build Coastguard Worker
474*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 2
475*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
476*8b6cd535SAndroid Build Coastguard Worker // - Result: roll forward
477*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
478*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 2),
479*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
480*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollForward),
481*8b6cd535SAndroid Build Coastguard Worker
482*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 2
483*8b6cd535SAndroid Build Coastguard Worker // - Current version = 3
484*8b6cd535SAndroid Build Coastguard Worker // - Result: roll forward
485*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
486*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 2),
487*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/3,
488*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollForward),
489*8b6cd535SAndroid Build Coastguard Worker
490*8b6cd535SAndroid Build Coastguard Worker // - version 1, max_version 3
491*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
492*8b6cd535SAndroid Build Coastguard Worker // - Result: roll forward
493*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
494*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(1, 3),
495*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
496*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollForward),
497*8b6cd535SAndroid Build Coastguard Worker
498*8b6cd535SAndroid Build Coastguard Worker // - version 2, max_version 2
499*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
500*8b6cd535SAndroid Build Coastguard Worker // - Result: compatible
501*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
502*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(2, 2),
503*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
504*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kCompatible),
505*8b6cd535SAndroid Build Coastguard Worker
506*8b6cd535SAndroid Build Coastguard Worker // - version 2, max_version 3
507*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
508*8b6cd535SAndroid Build Coastguard Worker // - Result: compatible
509*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
510*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(2, 3),
511*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
512*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kCompatible),
513*8b6cd535SAndroid Build Coastguard Worker
514*8b6cd535SAndroid Build Coastguard Worker // - version 3, max_version 3
515*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
516*8b6cd535SAndroid Build Coastguard Worker // - Result: rollback
517*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
518*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(3, 3),
519*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
520*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollBack),
521*8b6cd535SAndroid Build Coastguard Worker
522*8b6cd535SAndroid Build Coastguard Worker // - version 3, max_version 4
523*8b6cd535SAndroid Build Coastguard Worker // - Current version = 2
524*8b6cd535SAndroid Build Coastguard Worker // - Result: rollback
525*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
526*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(3, 4),
527*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/2,
528*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollBack),
529*8b6cd535SAndroid Build Coastguard Worker
530*8b6cd535SAndroid Build Coastguard Worker // - version 3, max_version 3
531*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
532*8b6cd535SAndroid Build Coastguard Worker // - Result: upgrade
533*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
534*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(3, 3),
535*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4,
536*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUpgrade),
537*8b6cd535SAndroid Build Coastguard Worker
538*8b6cd535SAndroid Build Coastguard Worker // - version 4, max_version 4
539*8b6cd535SAndroid Build Coastguard Worker // - Current version = 3
540*8b6cd535SAndroid Build Coastguard Worker // - Result: rollback
541*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
542*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(4, 4),
543*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/3,
544*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollBack),
545*8b6cd535SAndroid Build Coastguard Worker
546*8b6cd535SAndroid Build Coastguard Worker // - version 4, max_version 5
547*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
548*8b6cd535SAndroid Build Coastguard Worker // - Result: compatible
549*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
550*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(4, 5),
551*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4,
552*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kCompatible),
553*8b6cd535SAndroid Build Coastguard Worker
554*8b6cd535SAndroid Build Coastguard Worker // - version 3, max_version 4
555*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
556*8b6cd535SAndroid Build Coastguard Worker // - Result: rollforward
557*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
558*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(3, 4),
559*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5,
560*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollForward),
561*8b6cd535SAndroid Build Coastguard Worker
562*8b6cd535SAndroid Build Coastguard Worker // - version 3, max_version 3
563*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
564*8b6cd535SAndroid Build Coastguard Worker // - Result: upgrade
565*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
566*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(3, 3),
567*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5,
568*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kUpgrade),
569*8b6cd535SAndroid Build Coastguard Worker
570*8b6cd535SAndroid Build Coastguard Worker // - version 4, max_version 5
571*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
572*8b6cd535SAndroid Build Coastguard Worker // - Result: rollforward
573*8b6cd535SAndroid Build Coastguard Worker VersionUtilStateChangeTestParam(
574*8b6cd535SAndroid Build Coastguard Worker /*existing_version_info_in=*/VersionInfo(4, 5),
575*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5,
576*8b6cd535SAndroid Build Coastguard Worker /*expected_state_change_in=*/StateChange::kRollForward)));
577*8b6cd535SAndroid Build Coastguard Worker
578*8b6cd535SAndroid Build Coastguard Worker struct VersionUtilDerivedFilesRebuildTestParam {
579*8b6cd535SAndroid Build Coastguard Worker int32_t existing_version;
580*8b6cd535SAndroid Build Coastguard Worker int32_t max_version;
581*8b6cd535SAndroid Build Coastguard Worker std::unordered_set<IcingSearchEngineFeatureInfoProto::FlaggedFeatureType>
582*8b6cd535SAndroid Build Coastguard Worker existing_enabled_features;
583*8b6cd535SAndroid Build Coastguard Worker int32_t curr_version;
584*8b6cd535SAndroid Build Coastguard Worker std::unordered_set<IcingSearchEngineFeatureInfoProto::FlaggedFeatureType>
585*8b6cd535SAndroid Build Coastguard Worker curr_enabled_features;
586*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult expected_derived_files_rebuild_result;
587*8b6cd535SAndroid Build Coastguard Worker
VersionUtilDerivedFilesRebuildTestParamicing::lib::version_util::__anon761a82ec0111::VersionUtilDerivedFilesRebuildTestParam588*8b6cd535SAndroid Build Coastguard Worker explicit VersionUtilDerivedFilesRebuildTestParam(
589*8b6cd535SAndroid Build Coastguard Worker int32_t existing_version_in, int32_t max_version_in,
590*8b6cd535SAndroid Build Coastguard Worker std::unordered_set<IcingSearchEngineFeatureInfoProto::FlaggedFeatureType>
591*8b6cd535SAndroid Build Coastguard Worker existing_enabled_features_in,
592*8b6cd535SAndroid Build Coastguard Worker int32_t curr_version_in,
593*8b6cd535SAndroid Build Coastguard Worker std::unordered_set<IcingSearchEngineFeatureInfoProto::FlaggedFeatureType>
594*8b6cd535SAndroid Build Coastguard Worker curr_enabled_features_in,
595*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult expected_derived_files_rebuild_result_in)
596*8b6cd535SAndroid Build Coastguard Worker : existing_version(existing_version_in),
597*8b6cd535SAndroid Build Coastguard Worker max_version(max_version_in),
598*8b6cd535SAndroid Build Coastguard Worker existing_enabled_features(std::move(existing_enabled_features_in)),
599*8b6cd535SAndroid Build Coastguard Worker curr_version(curr_version_in),
600*8b6cd535SAndroid Build Coastguard Worker curr_enabled_features(std::move(curr_enabled_features_in)),
601*8b6cd535SAndroid Build Coastguard Worker expected_derived_files_rebuild_result(
602*8b6cd535SAndroid Build Coastguard Worker std::move(expected_derived_files_rebuild_result_in)) {}
603*8b6cd535SAndroid Build Coastguard Worker };
604*8b6cd535SAndroid Build Coastguard Worker
605*8b6cd535SAndroid Build Coastguard Worker class VersionUtilDerivedFilesRebuildTest
606*8b6cd535SAndroid Build Coastguard Worker : public ::testing::TestWithParam<VersionUtilDerivedFilesRebuildTestParam> {
607*8b6cd535SAndroid Build Coastguard Worker };
608*8b6cd535SAndroid Build Coastguard Worker
TEST_P(VersionUtilDerivedFilesRebuildTest,CalculateRequiredDerivedFilesRebuild)609*8b6cd535SAndroid Build Coastguard Worker TEST_P(VersionUtilDerivedFilesRebuildTest,
610*8b6cd535SAndroid Build Coastguard Worker CalculateRequiredDerivedFilesRebuild) {
611*8b6cd535SAndroid Build Coastguard Worker const VersionUtilDerivedFilesRebuildTestParam& param = GetParam();
612*8b6cd535SAndroid Build Coastguard Worker
613*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(CalculateRequiredDerivedFilesRebuild(
614*8b6cd535SAndroid Build Coastguard Worker /*prev_version_proto=*/MakeTestVersionProto(
615*8b6cd535SAndroid Build Coastguard Worker VersionInfo(param.existing_version, param.max_version),
616*8b6cd535SAndroid Build Coastguard Worker param.existing_enabled_features),
617*8b6cd535SAndroid Build Coastguard Worker /*curr_version_proto=*/
618*8b6cd535SAndroid Build Coastguard Worker MakeTestVersionProto(
619*8b6cd535SAndroid Build Coastguard Worker VersionInfo(param.curr_version, param.max_version),
620*8b6cd535SAndroid Build Coastguard Worker param.curr_enabled_features)),
621*8b6cd535SAndroid Build Coastguard Worker Eq(param.expected_derived_files_rebuild_result));
622*8b6cd535SAndroid Build Coastguard Worker }
623*8b6cd535SAndroid Build Coastguard Worker
624*8b6cd535SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
625*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTest, VersionUtilDerivedFilesRebuildTest,
626*8b6cd535SAndroid Build Coastguard Worker testing::Values(
627*8b6cd535SAndroid Build Coastguard Worker // - Existing version -1, max_version -1 (invalid)
628*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
629*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
630*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
631*8b6cd535SAndroid Build Coastguard Worker //
632*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild everything
633*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
634*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/-1, /*max_version_in=*/-1,
635*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
636*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
637*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
638*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
639*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
640*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
641*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
642*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
643*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
644*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
645*8b6cd535SAndroid Build Coastguard Worker
646*8b6cd535SAndroid Build Coastguard Worker // - Existing version -1, max_version 2 (invalid)
647*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
648*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
649*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
650*8b6cd535SAndroid Build Coastguard Worker //
651*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild everything
652*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
653*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/-1, /*max_version_in=*/-1,
654*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
655*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
656*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
657*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
658*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
659*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
660*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
661*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
662*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
663*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
664*8b6cd535SAndroid Build Coastguard Worker
665*8b6cd535SAndroid Build Coastguard Worker // - Existing version 3, max_version 3 (pre v2 version check)
666*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
667*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
668*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
669*8b6cd535SAndroid Build Coastguard Worker //
670*8b6cd535SAndroid Build Coastguard Worker // - Result: don't rebuild anything
671*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
672*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/3, /*max_version_in=*/3,
673*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
674*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
675*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
676*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
677*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
678*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
679*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
680*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
681*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
682*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
683*8b6cd535SAndroid Build Coastguard Worker
684*8b6cd535SAndroid Build Coastguard Worker // - Existing version 3, max_version 3 (pre v2 version check)
685*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
686*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
687*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_HAS_PROPERTY_OPERATOR}
688*8b6cd535SAndroid Build Coastguard Worker //
689*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild term index
690*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
691*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/3, /*max_version_in=*/3,
692*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
693*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
694*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR},
695*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
696*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
697*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
698*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
699*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
700*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
701*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
702*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
703*8b6cd535SAndroid Build Coastguard Worker
704*8b6cd535SAndroid Build Coastguard Worker // - Existing version 3, max_version 3 (pre v2 version check)
705*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
706*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
707*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_EMBEDDING_INDEX}
708*8b6cd535SAndroid Build Coastguard Worker //
709*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
710*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
711*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/3, /*max_version_in=*/3,
712*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
713*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
714*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX},
715*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
716*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
717*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
718*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
719*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
720*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
721*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
722*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
723*8b6cd535SAndroid Build Coastguard Worker
724*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
725*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
726*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
727*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
728*8b6cd535SAndroid Build Coastguard Worker //
729*8b6cd535SAndroid Build Coastguard Worker // - Result: don't rebuild anything
730*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
731*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
732*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
733*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
734*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
735*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
736*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
737*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
738*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
739*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
740*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
741*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
742*8b6cd535SAndroid Build Coastguard Worker
743*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
744*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
745*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
746*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
747*8b6cd535SAndroid Build Coastguard Worker //
748*8b6cd535SAndroid Build Coastguard Worker // - Result: 4 -> 5 upgrade -- don't rebuild anything
749*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
750*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
751*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/5,
752*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
753*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
754*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
755*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
756*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
757*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
758*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
759*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
760*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
761*8b6cd535SAndroid Build Coastguard Worker
762*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 5
763*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
764*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
765*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
766*8b6cd535SAndroid Build Coastguard Worker //
767*8b6cd535SAndroid Build Coastguard Worker // - Result: Rollforward -- rebuild everything
768*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
769*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/5,
770*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/5,
771*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
772*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
773*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
774*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
775*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
776*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
777*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
778*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
779*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
780*8b6cd535SAndroid Build Coastguard Worker
781*8b6cd535SAndroid Build Coastguard Worker // - Existing version 5, max_version 5
782*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
783*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
784*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
785*8b6cd535SAndroid Build Coastguard Worker //
786*8b6cd535SAndroid Build Coastguard Worker // - Result: Rollback -- rebuild everything
787*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
788*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/5, /*max_version_in=*/5,
789*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
790*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/{},
791*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
792*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
793*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
794*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
795*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
796*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
797*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
798*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
799*8b6cd535SAndroid Build Coastguard Worker
800*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
801*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
802*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
803*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_HAS_PROPERTY_OPERATOR}
804*8b6cd535SAndroid Build Coastguard Worker //
805*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild term index
806*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
807*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
808*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
809*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
810*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR},
811*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
812*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
813*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
814*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
815*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
816*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
817*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
818*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
819*8b6cd535SAndroid Build Coastguard Worker
820*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
821*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
822*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
823*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_EMBEDDING_INDEX}
824*8b6cd535SAndroid Build Coastguard Worker //
825*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
826*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
827*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
828*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
829*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
830*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX},
831*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
832*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
833*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
834*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
835*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
836*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
837*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
838*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
839*8b6cd535SAndroid Build Coastguard Worker
840*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
841*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
842*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
843*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_EMBEDDING_INDEX,
844*8b6cd535SAndroid Build Coastguard Worker // FEATURE_EMBEDDING_QUANTIZATION}
845*8b6cd535SAndroid Build Coastguard Worker //
846*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
847*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
848*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
849*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/4,
850*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
851*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX,
852*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION},
853*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
854*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
855*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
856*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
857*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
858*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
859*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
860*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
861*8b6cd535SAndroid Build Coastguard Worker
862*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
863*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {FEATURE_EMBEDDING_INDEX}
864*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
865*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_EMBEDDING_INDEX,
866*8b6cd535SAndroid Build Coastguard Worker // FEATURE_EMBEDDING_QUANTIZATION}
867*8b6cd535SAndroid Build Coastguard Worker //
868*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
869*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
870*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
871*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
872*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX},
873*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4,
874*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
875*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX,
876*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION},
877*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
878*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
879*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
880*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
881*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
882*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
883*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
884*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
885*8b6cd535SAndroid Build Coastguard Worker
886*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
887*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {FEATURE_HAS_PROPERTY_OPERATOR}
888*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
889*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
890*8b6cd535SAndroid Build Coastguard Worker //
891*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild term index
892*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
893*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
894*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
895*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR},
896*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4, /*curr_enabled_features_in=*/{},
897*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
898*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
899*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
900*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
901*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
902*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
903*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
904*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
905*8b6cd535SAndroid Build Coastguard Worker
906*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
907*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {FEATURE_EMBEDDING_INDEX}
908*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
909*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
910*8b6cd535SAndroid Build Coastguard Worker //
911*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
912*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
913*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
914*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
915*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX},
916*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4, /*curr_enabled_features_in=*/{},
917*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
918*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
919*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
920*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
921*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
922*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
923*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
924*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
925*8b6cd535SAndroid Build Coastguard Worker
926*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
927*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {FEATURE_EMBEDDING_INDEX,
928*8b6cd535SAndroid Build Coastguard Worker // FEATURE_EMBEDDING_QUANTIZATION}
929*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
930*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
931*8b6cd535SAndroid Build Coastguard Worker //
932*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
933*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
934*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
935*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
936*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX,
937*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION},
938*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4, /*curr_enabled_features_in=*/{},
939*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
940*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
941*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
942*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
943*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
944*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
945*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
946*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
947*8b6cd535SAndroid Build Coastguard Worker
948*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
949*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {FEATURE_EMBEDDING_INDEX,
950*8b6cd535SAndroid Build Coastguard Worker // FEATURE_EMBEDDING_QUANTIZATION}
951*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
952*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_EMBEDDING_INDEX}
953*8b6cd535SAndroid Build Coastguard Worker //
954*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild embedding index
955*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
956*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
957*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
958*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX,
959*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION},
960*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/4, /*curr_enabled_features_in=*/
961*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX},
962*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
963*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
964*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
965*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
966*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
967*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
968*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
969*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
970*8b6cd535SAndroid Build Coastguard Worker
971*8b6cd535SAndroid Build Coastguard Worker // - Existing version 4, max_version 4
972*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {UNKNOWN}
973*8b6cd535SAndroid Build Coastguard Worker // - Current version = 4
974*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_HAS_PROPERTY_OPERATOR}
975*8b6cd535SAndroid Build Coastguard Worker //
976*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild everything
977*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
978*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/4, /*max_version_in=*/4,
979*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
980*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::UNKNOWN}, /*curr_version_in=*/4,
981*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
982*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR},
983*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
984*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
985*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
986*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
987*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
988*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
989*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
990*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)),
991*8b6cd535SAndroid Build Coastguard Worker
992*8b6cd535SAndroid Build Coastguard Worker // - Existing version 5, max_version 5
993*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
994*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
995*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_HAS_PROPERTY_OPERATOR}
996*8b6cd535SAndroid Build Coastguard Worker //
997*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild term index
998*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
999*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/5, /*max_version_in=*/5,
1000*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{}, /*curr_version_in=*/5,
1001*8b6cd535SAndroid Build Coastguard Worker /*curr_enabled_features_in=*/
1002*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR},
1003*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
1004*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
1005*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1006*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1007*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
1008*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1009*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1010*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
1011*8b6cd535SAndroid Build Coastguard Worker
1012*8b6cd535SAndroid Build Coastguard Worker // - Existing version 5, max_version 5
1013*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
1014*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
1015*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {FEATURE_SCHEMA_DATABASE}
1016*8b6cd535SAndroid Build Coastguard Worker //
1017*8b6cd535SAndroid Build Coastguard Worker // - Result: no rebuild
1018*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
1019*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/5, /*max_version_in=*/5,
1020*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{},
1021*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5, /*curr_enabled_features_in=*/
1022*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE},
1023*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
1024*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
1025*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1026*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1027*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1028*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1029*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1030*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
1031*8b6cd535SAndroid Build Coastguard Worker
1032*8b6cd535SAndroid Build Coastguard Worker // - Existing version 5, max_version 5
1033*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features = {}
1034*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
1035*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features =
1036*8b6cd535SAndroid Build Coastguard Worker // {FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM}
1037*8b6cd535SAndroid Build Coastguard Worker //
1038*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild qualified id join index
1039*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
1040*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/5, /*max_version_in=*/5,
1041*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/{},
1042*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5, /*curr_enabled_features_in=*/
1043*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::
1044*8b6cd535SAndroid Build Coastguard Worker FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM},
1045*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
1046*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
1047*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1048*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1049*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1050*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1051*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
1052*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)),
1053*8b6cd535SAndroid Build Coastguard Worker
1054*8b6cd535SAndroid Build Coastguard Worker // - Existing version 5, max_version 5
1055*8b6cd535SAndroid Build Coastguard Worker // - Existing enabled features =
1056*8b6cd535SAndroid Build Coastguard Worker // {FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM}
1057*8b6cd535SAndroid Build Coastguard Worker // - Current version = 5
1058*8b6cd535SAndroid Build Coastguard Worker // - Current enabled features = {}
1059*8b6cd535SAndroid Build Coastguard Worker //
1060*8b6cd535SAndroid Build Coastguard Worker // - Result: rebuild qualified id join index
1061*8b6cd535SAndroid Build Coastguard Worker VersionUtilDerivedFilesRebuildTestParam(
1062*8b6cd535SAndroid Build Coastguard Worker /*existing_version_in=*/5, /*max_version_in=*/5,
1063*8b6cd535SAndroid Build Coastguard Worker /*existing_enabled_features_in=*/
1064*8b6cd535SAndroid Build Coastguard Worker {IcingSearchEngineFeatureInfoProto::
1065*8b6cd535SAndroid Build Coastguard Worker FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM},
1066*8b6cd535SAndroid Build Coastguard Worker /*curr_version_in=*/5, /*curr_enabled_features_in=*/{},
1067*8b6cd535SAndroid Build Coastguard Worker /*expected_derived_files_rebuild_result_in=*/
1068*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult(
1069*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1070*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1071*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1072*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1073*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
1074*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false))));
1075*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesUndeterminedVersion)1076*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesUndeterminedVersion) {
1077*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1078*8b6cd535SAndroid Build Coastguard Worker ShouldRebuildDerivedFiles(VersionInfo(-1, -1), /*curr_version=*/1),
1079*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1080*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1081*8b6cd535SAndroid Build Coastguard Worker ShouldRebuildDerivedFiles(VersionInfo(-1, -1), /*curr_version=*/2),
1082*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1083*8b6cd535SAndroid Build Coastguard Worker }
1084*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesVersionZeroUpgrade)1085*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesVersionZeroUpgrade) {
1086*8b6cd535SAndroid Build Coastguard Worker // 0 -> 1
1087*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 0), /*curr_version=*/1),
1088*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1089*8b6cd535SAndroid Build Coastguard Worker
1090*8b6cd535SAndroid Build Coastguard Worker // 0 -> 2
1091*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 0), /*curr_version=*/2),
1092*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1093*8b6cd535SAndroid Build Coastguard Worker }
1094*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesVersionZeroRollForward)1095*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesVersionZeroRollForward) {
1096*8b6cd535SAndroid Build Coastguard Worker // (1 -> 0), 0 -> 1
1097*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 1), /*curr_version=*/1),
1098*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1099*8b6cd535SAndroid Build Coastguard Worker
1100*8b6cd535SAndroid Build Coastguard Worker // (1 -> 0), 0 -> 2
1101*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 1), /*curr_version=*/2),
1102*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1103*8b6cd535SAndroid Build Coastguard Worker
1104*8b6cd535SAndroid Build Coastguard Worker // (2 -> 0), 0 -> 1
1105*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 2), /*curr_version=*/1),
1106*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1107*8b6cd535SAndroid Build Coastguard Worker
1108*8b6cd535SAndroid Build Coastguard Worker // (5 -> 0), 0 -> 5
1109*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(0, 5), /*curr_version=*/5),
1110*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1111*8b6cd535SAndroid Build Coastguard Worker }
1112*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesRollBack)1113*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesRollBack) {
1114*8b6cd535SAndroid Build Coastguard Worker // 2 -> 1
1115*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(2, 2), /*curr_version=*/1),
1116*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1117*8b6cd535SAndroid Build Coastguard Worker
1118*8b6cd535SAndroid Build Coastguard Worker // 3 -> 1
1119*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(3, 3), /*curr_version=*/1),
1120*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1121*8b6cd535SAndroid Build Coastguard Worker
1122*8b6cd535SAndroid Build Coastguard Worker // (3 -> 2), 2 -> 1
1123*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(2, 3), /*curr_version=*/1),
1124*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1125*8b6cd535SAndroid Build Coastguard Worker
1126*8b6cd535SAndroid Build Coastguard Worker // (5 -> 4), 4 -> 3
1127*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(4, 5), /*curr_version=*/3),
1128*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1129*8b6cd535SAndroid Build Coastguard Worker }
1130*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesRollForward)1131*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesRollForward) {
1132*8b6cd535SAndroid Build Coastguard Worker // (2 -> 1), 1 -> 2
1133*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(1, 2), /*curr_version=*/2),
1134*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1135*8b6cd535SAndroid Build Coastguard Worker
1136*8b6cd535SAndroid Build Coastguard Worker // (2 -> 1), 1 -> 3
1137*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(1, 2), /*curr_version=*/3),
1138*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1139*8b6cd535SAndroid Build Coastguard Worker
1140*8b6cd535SAndroid Build Coastguard Worker // (3 -> 1), 1 -> 2
1141*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(1, 3), /*curr_version=*/2),
1142*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1143*8b6cd535SAndroid Build Coastguard Worker
1144*8b6cd535SAndroid Build Coastguard Worker // (5 -> 4), 4 -> 5
1145*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(4, 5), /*curr_version=*/5),
1146*8b6cd535SAndroid Build Coastguard Worker IsTrue());
1147*8b6cd535SAndroid Build Coastguard Worker }
1148*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,ShouldRebuildDerivedFilesCompatible)1149*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, ShouldRebuildDerivedFilesCompatible) {
1150*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(2, 2), /*curr_version=*/2),
1151*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1152*8b6cd535SAndroid Build Coastguard Worker
1153*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(2, 3), /*curr_version=*/2),
1154*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1155*8b6cd535SAndroid Build Coastguard Worker }
1156*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,Upgrade)1157*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, Upgrade) {
1158*8b6cd535SAndroid Build Coastguard Worker // Unlike other state changes, upgrade depends on the actual "encoded path".
1159*8b6cd535SAndroid Build Coastguard Worker
1160*8b6cd535SAndroid Build Coastguard Worker // kVersionOne -> kVersionTwo
1161*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionOne, kVersionOne),
1162*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionTwo),
1163*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1164*8b6cd535SAndroid Build Coastguard Worker
1165*8b6cd535SAndroid Build Coastguard Worker // kVersionTwo -> kVersionThree
1166*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionTwo, kVersionTwo),
1167*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionThree),
1168*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1169*8b6cd535SAndroid Build Coastguard Worker
1170*8b6cd535SAndroid Build Coastguard Worker // kVersionOne -> kVersionThree.
1171*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionOne, kVersionOne),
1172*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionThree),
1173*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1174*8b6cd535SAndroid Build Coastguard Worker
1175*8b6cd535SAndroid Build Coastguard Worker // kVersionThree -> kVersionFour.
1176*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1177*8b6cd535SAndroid Build Coastguard Worker ShouldRebuildDerivedFiles(VersionInfo(kVersionThree, kVersionThree),
1178*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFour),
1179*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1180*8b6cd535SAndroid Build Coastguard Worker
1181*8b6cd535SAndroid Build Coastguard Worker // kVersionTwo -> kVersionFour
1182*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionTwo, kVersionTwo),
1183*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFour),
1184*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1185*8b6cd535SAndroid Build Coastguard Worker
1186*8b6cd535SAndroid Build Coastguard Worker // kVersionOne -> kVersionFour.
1187*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionOne, kVersionOne),
1188*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFour),
1189*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1190*8b6cd535SAndroid Build Coastguard Worker
1191*8b6cd535SAndroid Build Coastguard Worker // kVersionFour -> kVersionFive.
1192*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionFour, kVersionFour),
1193*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFive),
1194*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1195*8b6cd535SAndroid Build Coastguard Worker
1196*8b6cd535SAndroid Build Coastguard Worker // kVersionThree -> kVersionFive.
1197*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1198*8b6cd535SAndroid Build Coastguard Worker ShouldRebuildDerivedFiles(VersionInfo(kVersionThree, kVersionThree),
1199*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFive),
1200*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1201*8b6cd535SAndroid Build Coastguard Worker
1202*8b6cd535SAndroid Build Coastguard Worker // kVersionTwo -> kVersionFour
1203*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionTwo, kVersionTwo),
1204*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFive),
1205*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1206*8b6cd535SAndroid Build Coastguard Worker
1207*8b6cd535SAndroid Build Coastguard Worker // kVersionOne -> kVersionFour.
1208*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(ShouldRebuildDerivedFiles(VersionInfo(kVersionOne, kVersionOne),
1209*8b6cd535SAndroid Build Coastguard Worker /*curr_version=*/kVersionFive),
1210*8b6cd535SAndroid Build Coastguard Worker IsFalse());
1211*8b6cd535SAndroid Build Coastguard Worker }
1212*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_unknown)1213*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, GetFeatureDerivedFilesRebuildResult_unknown) {
1214*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(GetFeatureDerivedFilesRebuildResult(
1215*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::UNKNOWN),
1216*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1217*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/true,
1218*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/true,
1219*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
1220*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/true,
1221*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
1222*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)));
1223*8b6cd535SAndroid Build Coastguard Worker }
1224*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_featureHasPropertyOperator)1225*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest,
1226*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult_featureHasPropertyOperator) {
1227*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1228*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult(
1229*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR),
1230*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1231*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1232*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1233*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/true,
1234*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1235*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1236*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)));
1237*8b6cd535SAndroid Build Coastguard Worker }
1238*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_featureEmbeddingIndex)1239*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest,
1240*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult_featureEmbeddingIndex) {
1241*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(GetFeatureDerivedFilesRebuildResult(
1242*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX),
1243*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1244*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1245*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1246*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1247*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1248*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1249*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)));
1250*8b6cd535SAndroid Build Coastguard Worker }
1251*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_featureEmbeddingQuantization)1252*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest,
1253*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult_featureEmbeddingQuantization) {
1254*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1255*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult(
1256*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION),
1257*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1258*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1259*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1260*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1261*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1262*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1263*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/true)));
1264*8b6cd535SAndroid Build Coastguard Worker }
1265*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_featureSchemaDatabase)1266*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest,
1267*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult_featureSchemaDatabase) {
1268*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(GetFeatureDerivedFilesRebuildResult(
1269*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE),
1270*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1271*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1272*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1273*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1274*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1275*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/false,
1276*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)));
1277*8b6cd535SAndroid Build Coastguard Worker }
1278*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,GetFeatureDerivedFilesRebuildResult_featureQualifiedIdJoinIndexV3AndDeletePropagateFrom)1279*8b6cd535SAndroid Build Coastguard Worker TEST(
1280*8b6cd535SAndroid Build Coastguard Worker VersionUtilTest,
1281*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult_featureQualifiedIdJoinIndexV3AndDeletePropagateFrom) {
1282*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(
1283*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult(
1284*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::
1285*8b6cd535SAndroid Build Coastguard Worker FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM),
1286*8b6cd535SAndroid Build Coastguard Worker Eq(DerivedFilesRebuildResult(
1287*8b6cd535SAndroid Build Coastguard Worker /*needs_document_store_derived_files_rebuild_in=*/false,
1288*8b6cd535SAndroid Build Coastguard Worker /*needs_schema_store_derived_files_rebuild_in=*/false,
1289*8b6cd535SAndroid Build Coastguard Worker /*needs_term_index_rebuild_in=*/false,
1290*8b6cd535SAndroid Build Coastguard Worker /*needs_integer_index_rebuild_in=*/false,
1291*8b6cd535SAndroid Build Coastguard Worker /*needs_qualified_id_join_index_rebuild_in=*/true,
1292*8b6cd535SAndroid Build Coastguard Worker /*needs_embedding_index_rebuild_in=*/false)));
1293*8b6cd535SAndroid Build Coastguard Worker }
1294*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,SchemaDatabaseMigrationRequired)1295*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, SchemaDatabaseMigrationRequired) {
1296*8b6cd535SAndroid Build Coastguard Worker // Migration is required if the previous version is less than the version at
1297*8b6cd535SAndroid Build Coastguard Worker // which the database field is introduced.
1298*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineVersionProto previous_version_proto;
1299*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_version(kSchemaDatabaseVersion - 1);
1300*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_max_version(kSchemaDatabaseVersion - 1);
1301*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.add_enabled_features()->set_feature_type(
1302*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE);
1303*8b6cd535SAndroid Build Coastguard Worker EXPECT_TRUE(SchemaDatabaseMigrationRequired(previous_version_proto));
1304*8b6cd535SAndroid Build Coastguard Worker
1305*8b6cd535SAndroid Build Coastguard Worker // Migration is required if the schema database feature was not enabled in the
1306*8b6cd535SAndroid Build Coastguard Worker // previous version.
1307*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_version(kSchemaDatabaseVersion);
1308*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_max_version(kSchemaDatabaseVersion);
1309*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.mutable_enabled_features()->Clear();
1310*8b6cd535SAndroid Build Coastguard Worker // Add a feature that is not the schema database feature.
1311*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.add_enabled_features()->set_feature_type(
1312*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR);
1313*8b6cd535SAndroid Build Coastguard Worker EXPECT_TRUE(SchemaDatabaseMigrationRequired(previous_version_proto));
1314*8b6cd535SAndroid Build Coastguard Worker
1315*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_version(kSchemaDatabaseVersion + 1);
1316*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_max_version(kSchemaDatabaseVersion + 1);
1317*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.mutable_enabled_features()->Clear();
1318*8b6cd535SAndroid Build Coastguard Worker EXPECT_TRUE(SchemaDatabaseMigrationRequired(previous_version_proto));
1319*8b6cd535SAndroid Build Coastguard Worker }
1320*8b6cd535SAndroid Build Coastguard Worker
TEST(VersionUtilTest,SchemaDatabaseMigrationNotRequired)1321*8b6cd535SAndroid Build Coastguard Worker TEST(VersionUtilTest, SchemaDatabaseMigrationNotRequired) {
1322*8b6cd535SAndroid Build Coastguard Worker // Migration is not required if previous version is >= the version at which
1323*8b6cd535SAndroid Build Coastguard Worker // the schema database is introduced and the schema database feature was
1324*8b6cd535SAndroid Build Coastguard Worker // enabled in the previous version.
1325*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineVersionProto previous_version_proto;
1326*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_version(kSchemaDatabaseVersion);
1327*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_max_version(kSchemaDatabaseVersion);
1328*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.add_enabled_features()->set_feature_type(
1329*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE);
1330*8b6cd535SAndroid Build Coastguard Worker EXPECT_FALSE(SchemaDatabaseMigrationRequired(previous_version_proto));
1331*8b6cd535SAndroid Build Coastguard Worker
1332*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_version(kSchemaDatabaseVersion + 1);
1333*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.set_max_version(kSchemaDatabaseVersion + 1);
1334*8b6cd535SAndroid Build Coastguard Worker previous_version_proto.add_enabled_features()->set_feature_type(
1335*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE);
1336*8b6cd535SAndroid Build Coastguard Worker EXPECT_FALSE(SchemaDatabaseMigrationRequired(previous_version_proto));
1337*8b6cd535SAndroid Build Coastguard Worker }
1338*8b6cd535SAndroid Build Coastguard Worker
1339*8b6cd535SAndroid Build Coastguard Worker class VersionUtilFeatureProtoTest
1340*8b6cd535SAndroid Build Coastguard Worker : public ::testing::TestWithParam<
1341*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FlaggedFeatureType> {};
1342*8b6cd535SAndroid Build Coastguard Worker
TEST_P(VersionUtilFeatureProtoTest,GetFeatureInfoProto)1343*8b6cd535SAndroid Build Coastguard Worker TEST_P(VersionUtilFeatureProtoTest, GetFeatureInfoProto) {
1344*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FlaggedFeatureType feature_type =
1345*8b6cd535SAndroid Build Coastguard Worker GetParam();
1346*8b6cd535SAndroid Build Coastguard Worker DerivedFilesRebuildResult rebuild_result =
1347*8b6cd535SAndroid Build Coastguard Worker GetFeatureDerivedFilesRebuildResult(feature_type);
1348*8b6cd535SAndroid Build Coastguard Worker
1349*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto feature_info =
1350*8b6cd535SAndroid Build Coastguard Worker GetFeatureInfoProto(feature_type);
1351*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.feature_type(), Eq(feature_type));
1352*8b6cd535SAndroid Build Coastguard Worker
1353*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_document_store_rebuild(),
1354*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_document_store_derived_files_rebuild));
1355*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_schema_store_rebuild(),
1356*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_schema_store_derived_files_rebuild));
1357*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_term_index_rebuild(),
1358*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_term_index_rebuild));
1359*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_integer_index_rebuild(),
1360*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_integer_index_rebuild));
1361*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_qualified_id_join_index_rebuild(),
1362*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_qualified_id_join_index_rebuild));
1363*8b6cd535SAndroid Build Coastguard Worker EXPECT_THAT(feature_info.needs_embedding_index_rebuild(),
1364*8b6cd535SAndroid Build Coastguard Worker Eq(rebuild_result.needs_embedding_index_rebuild));
1365*8b6cd535SAndroid Build Coastguard Worker }
1366*8b6cd535SAndroid Build Coastguard Worker
1367*8b6cd535SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
1368*8b6cd535SAndroid Build Coastguard Worker VersionUtilFeatureProtoTest, VersionUtilFeatureProtoTest,
1369*8b6cd535SAndroid Build Coastguard Worker testing::Values(
1370*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::UNKNOWN,
1371*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_HAS_PROPERTY_OPERATOR,
1372*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCORABLE_PROPERTIES,
1373*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_INDEX,
1374*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_EMBEDDING_QUANTIZATION,
1375*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::FEATURE_SCHEMA_DATABASE,
1376*8b6cd535SAndroid Build Coastguard Worker IcingSearchEngineFeatureInfoProto::
1377*8b6cd535SAndroid Build Coastguard Worker FEATURE_QUALIFIED_ID_JOIN_INDEX_V3_AND_DELETE_PROPAGATE_FROM));
1378*8b6cd535SAndroid Build Coastguard Worker
1379*8b6cd535SAndroid Build Coastguard Worker } // namespace
1380*8b6cd535SAndroid Build Coastguard Worker
1381*8b6cd535SAndroid Build Coastguard Worker } // namespace version_util
1382*8b6cd535SAndroid Build Coastguard Worker } // namespace lib
1383*8b6cd535SAndroid Build Coastguard Worker } // namespace icing
1384