1*20733378SAndroid Build Coastguard Worker /*
2*20733378SAndroid Build Coastguard Worker * Copyright (C) 2024 The Android Open Source Project
3*20733378SAndroid Build Coastguard Worker *
4*20733378SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*20733378SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*20733378SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*20733378SAndroid Build Coastguard Worker *
8*20733378SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*20733378SAndroid Build Coastguard Worker *
10*20733378SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*20733378SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*20733378SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*20733378SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*20733378SAndroid Build Coastguard Worker * limitations under the License.
15*20733378SAndroid Build Coastguard Worker */
16*20733378SAndroid Build Coastguard Worker
17*20733378SAndroid Build Coastguard Worker #include "aconfigd.h"
18*20733378SAndroid Build Coastguard Worker
19*20733378SAndroid Build Coastguard Worker #include <android-base/file.h>
20*20733378SAndroid Build Coastguard Worker #include <android-base/logging.h>
21*20733378SAndroid Build Coastguard Worker #include <android-base/properties.h>
22*20733378SAndroid Build Coastguard Worker #include <flag_macros.h>
23*20733378SAndroid Build Coastguard Worker #include <gtest/gtest.h>
24*20733378SAndroid Build Coastguard Worker #include <sys/stat.h>
25*20733378SAndroid Build Coastguard Worker
26*20733378SAndroid Build Coastguard Worker #include "aconfigd_test_mock.h"
27*20733378SAndroid Build Coastguard Worker #include "aconfigd_util.h"
28*20733378SAndroid Build Coastguard Worker #include "com_android_aconfig_new_storage.h"
29*20733378SAndroid Build Coastguard Worker
30*20733378SAndroid Build Coastguard Worker #define ACONFIGD_NS com::android::aconfig_new_storage
31*20733378SAndroid Build Coastguard Worker
32*20733378SAndroid Build Coastguard Worker namespace android {
33*20733378SAndroid Build Coastguard Worker namespace aconfigd {
34*20733378SAndroid Build Coastguard Worker
35*20733378SAndroid Build Coastguard Worker class AconfigdTest : public ::testing::Test {
36*20733378SAndroid Build Coastguard Worker protected:
37*20733378SAndroid Build Coastguard Worker
new_storage_message(const std::string & container,const std::string & package_map_file,const std::string & flag_map_file,const std::string & flag_value_file,const std::string & flag_info_file)38*20733378SAndroid Build Coastguard Worker StorageRequestMessage new_storage_message(const std::string& container,
39*20733378SAndroid Build Coastguard Worker const std::string& package_map_file,
40*20733378SAndroid Build Coastguard Worker const std::string& flag_map_file,
41*20733378SAndroid Build Coastguard Worker const std::string& flag_value_file,
42*20733378SAndroid Build Coastguard Worker const std::string& flag_info_file) {
43*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
44*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_new_storage_message();
45*20733378SAndroid Build Coastguard Worker msg->set_container(container);
46*20733378SAndroid Build Coastguard Worker msg->set_package_map(package_map_file);
47*20733378SAndroid Build Coastguard Worker msg->set_flag_map(flag_map_file);
48*20733378SAndroid Build Coastguard Worker msg->set_flag_value(flag_value_file);
49*20733378SAndroid Build Coastguard Worker msg->set_flag_info(flag_info_file);
50*20733378SAndroid Build Coastguard Worker return message;
51*20733378SAndroid Build Coastguard Worker }
52*20733378SAndroid Build Coastguard Worker
new_storage_message(const ContainerMock & mock)53*20733378SAndroid Build Coastguard Worker StorageRequestMessage new_storage_message(const ContainerMock& mock) {
54*20733378SAndroid Build Coastguard Worker return new_storage_message(mock.container, mock.package_map, mock.flag_map,
55*20733378SAndroid Build Coastguard Worker mock.flag_val, mock.flag_info);
56*20733378SAndroid Build Coastguard Worker }
57*20733378SAndroid Build Coastguard Worker
flag_override_message(const std::string & package,const std::string & flag,const std::string & value,bool is_local,bool is_immediate)58*20733378SAndroid Build Coastguard Worker StorageRequestMessage flag_override_message(const std::string& package,
59*20733378SAndroid Build Coastguard Worker const std::string& flag,
60*20733378SAndroid Build Coastguard Worker const std::string& value,
61*20733378SAndroid Build Coastguard Worker bool is_local,
62*20733378SAndroid Build Coastguard Worker bool is_immediate) {
63*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
64*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_flag_override_message();
65*20733378SAndroid Build Coastguard Worker
66*20733378SAndroid Build Coastguard Worker StorageRequestMessage::FlagOverrideType override_type;
67*20733378SAndroid Build Coastguard Worker if (is_local && is_immediate) {
68*20733378SAndroid Build Coastguard Worker override_type = StorageRequestMessage::LOCAL_IMMEDIATE;
69*20733378SAndroid Build Coastguard Worker } else if (is_local && !is_immediate) {
70*20733378SAndroid Build Coastguard Worker override_type = StorageRequestMessage::LOCAL_ON_REBOOT;
71*20733378SAndroid Build Coastguard Worker } else {
72*20733378SAndroid Build Coastguard Worker override_type = StorageRequestMessage::SERVER_ON_REBOOT;
73*20733378SAndroid Build Coastguard Worker }
74*20733378SAndroid Build Coastguard Worker
75*20733378SAndroid Build Coastguard Worker msg->set_package_name(package);
76*20733378SAndroid Build Coastguard Worker msg->set_flag_name(flag);
77*20733378SAndroid Build Coastguard Worker msg->set_flag_value(value);
78*20733378SAndroid Build Coastguard Worker msg->set_override_type(override_type);
79*20733378SAndroid Build Coastguard Worker return message;
80*20733378SAndroid Build Coastguard Worker }
81*20733378SAndroid Build Coastguard Worker
flag_query_message(const std::string & package,const std::string & flag)82*20733378SAndroid Build Coastguard Worker StorageRequestMessage flag_query_message(const std::string& package,
83*20733378SAndroid Build Coastguard Worker const std::string& flag) {
84*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
85*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_flag_query_message();
86*20733378SAndroid Build Coastguard Worker msg->set_package_name(package);
87*20733378SAndroid Build Coastguard Worker msg->set_flag_name(flag);
88*20733378SAndroid Build Coastguard Worker return message;
89*20733378SAndroid Build Coastguard Worker }
90*20733378SAndroid Build Coastguard Worker
flag_local_override_remove_message(const std::string & package,const std::string & flag,bool remove_all=false)91*20733378SAndroid Build Coastguard Worker StorageRequestMessage flag_local_override_remove_message(
92*20733378SAndroid Build Coastguard Worker const std::string& package,
93*20733378SAndroid Build Coastguard Worker const std::string& flag,
94*20733378SAndroid Build Coastguard Worker bool remove_all = false) {
95*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
96*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_remove_local_override_message();
97*20733378SAndroid Build Coastguard Worker msg->set_package_name(package);
98*20733378SAndroid Build Coastguard Worker msg->set_flag_name(flag);
99*20733378SAndroid Build Coastguard Worker msg->set_remove_all(remove_all);
100*20733378SAndroid Build Coastguard Worker return message;
101*20733378SAndroid Build Coastguard Worker }
102*20733378SAndroid Build Coastguard Worker
reset_storage_message()103*20733378SAndroid Build Coastguard Worker StorageRequestMessage reset_storage_message() {
104*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
105*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_reset_storage_message();
106*20733378SAndroid Build Coastguard Worker return message;
107*20733378SAndroid Build Coastguard Worker }
108*20733378SAndroid Build Coastguard Worker
list_storage_message()109*20733378SAndroid Build Coastguard Worker StorageRequestMessage list_storage_message() {
110*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
111*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_list_storage_message();
112*20733378SAndroid Build Coastguard Worker msg->set_all(true);
113*20733378SAndroid Build Coastguard Worker return message;
114*20733378SAndroid Build Coastguard Worker }
115*20733378SAndroid Build Coastguard Worker
list_container_storage_message(const std::string & container)116*20733378SAndroid Build Coastguard Worker StorageRequestMessage list_container_storage_message(const std::string& container) {
117*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
118*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_list_storage_message();
119*20733378SAndroid Build Coastguard Worker msg->set_container(container);
120*20733378SAndroid Build Coastguard Worker return message;
121*20733378SAndroid Build Coastguard Worker }
122*20733378SAndroid Build Coastguard Worker
list_package_storage_message(const std::string & package)123*20733378SAndroid Build Coastguard Worker StorageRequestMessage list_package_storage_message(const std::string& package) {
124*20733378SAndroid Build Coastguard Worker auto message = StorageRequestMessage();
125*20733378SAndroid Build Coastguard Worker auto* msg = message.mutable_list_storage_message();
126*20733378SAndroid Build Coastguard Worker msg->set_package_name(package);
127*20733378SAndroid Build Coastguard Worker return message;
128*20733378SAndroid Build Coastguard Worker }
129*20733378SAndroid Build Coastguard Worker
verify_new_storage_return_message(base::Result<StorageReturnMessage> msg_result,bool ensure_updated=false)130*20733378SAndroid Build Coastguard Worker void verify_new_storage_return_message(base::Result<StorageReturnMessage> msg_result,
131*20733378SAndroid Build Coastguard Worker bool ensure_updated = false) {
132*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.ok()) << msg_result.error();
133*20733378SAndroid Build Coastguard Worker auto msg = *msg_result;
134*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg.has_new_storage_message()) << msg.error_message();
135*20733378SAndroid Build Coastguard Worker if (ensure_updated) {
136*20733378SAndroid Build Coastguard Worker auto message = msg.new_storage_message();
137*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(message.storage_updated());
138*20733378SAndroid Build Coastguard Worker }
139*20733378SAndroid Build Coastguard Worker }
140*20733378SAndroid Build Coastguard Worker
verify_flag_override_return_message(base::Result<StorageReturnMessage> msg_result)141*20733378SAndroid Build Coastguard Worker void verify_flag_override_return_message(
142*20733378SAndroid Build Coastguard Worker base::Result<StorageReturnMessage> msg_result) {
143*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.ok()) << msg_result.error();
144*20733378SAndroid Build Coastguard Worker auto msg = *msg_result;
145*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg.has_flag_override_message()) << msg.error_message();
146*20733378SAndroid Build Coastguard Worker }
147*20733378SAndroid Build Coastguard Worker
verify_flag_query_return_message(const StorageReturnMessage::FlagQueryReturnMessage & message,const std::string & package_name,const std::string & flag_name,const std::string & server_value,const std::string & local_value,const std::string & boot_value,const std::string & default_value,bool is_readwrite,bool has_server_override,bool has_local_override)148*20733378SAndroid Build Coastguard Worker void verify_flag_query_return_message(
149*20733378SAndroid Build Coastguard Worker const StorageReturnMessage::FlagQueryReturnMessage& message,
150*20733378SAndroid Build Coastguard Worker const std::string& package_name,
151*20733378SAndroid Build Coastguard Worker const std::string& flag_name,
152*20733378SAndroid Build Coastguard Worker const std::string& server_value,
153*20733378SAndroid Build Coastguard Worker const std::string& local_value,
154*20733378SAndroid Build Coastguard Worker const std::string& boot_value,
155*20733378SAndroid Build Coastguard Worker const std::string& default_value,
156*20733378SAndroid Build Coastguard Worker bool is_readwrite,
157*20733378SAndroid Build Coastguard Worker bool has_server_override,
158*20733378SAndroid Build Coastguard Worker bool has_local_override) {
159*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.package_name(), package_name);
160*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.flag_name(), flag_name);
161*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.server_flag_value(), server_value);
162*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.local_flag_value(), local_value);
163*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.boot_flag_value(), boot_value);
164*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.default_flag_value(), default_value);
165*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.is_readwrite(), is_readwrite);
166*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.has_server_override(), has_server_override);
167*20733378SAndroid Build Coastguard Worker ASSERT_EQ(message.has_local_override(), has_local_override);
168*20733378SAndroid Build Coastguard Worker }
169*20733378SAndroid Build Coastguard Worker
verify_flag_query_return_message(base::Result<StorageReturnMessage> msg_result,const std::string & package_name,const std::string & flag_name,const std::string & server_value,const std::string & local_value,const std::string & boot_value,const std::string & default_value,bool is_readwrite,bool has_server_override,bool has_local_override)170*20733378SAndroid Build Coastguard Worker void verify_flag_query_return_message(base::Result<StorageReturnMessage> msg_result,
171*20733378SAndroid Build Coastguard Worker const std::string& package_name,
172*20733378SAndroid Build Coastguard Worker const std::string& flag_name,
173*20733378SAndroid Build Coastguard Worker const std::string& server_value,
174*20733378SAndroid Build Coastguard Worker const std::string& local_value,
175*20733378SAndroid Build Coastguard Worker const std::string& boot_value,
176*20733378SAndroid Build Coastguard Worker const std::string& default_value,
177*20733378SAndroid Build Coastguard Worker bool is_readwrite,
178*20733378SAndroid Build Coastguard Worker bool has_server_override,
179*20733378SAndroid Build Coastguard Worker bool has_local_override) {
180*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.ok()) << msg_result.error();
181*20733378SAndroid Build Coastguard Worker auto msg = *msg_result;
182*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg.has_flag_query_message()) << msg.error_message();
183*20733378SAndroid Build Coastguard Worker auto message = msg.flag_query_message();
184*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
185*20733378SAndroid Build Coastguard Worker message, package_name, flag_name, server_value, local_value, boot_value,
186*20733378SAndroid Build Coastguard Worker default_value, is_readwrite, has_server_override, has_local_override);
187*20733378SAndroid Build Coastguard Worker }
188*20733378SAndroid Build Coastguard Worker
verify_local_override_remove_return_message(base::Result<StorageReturnMessage> msg_result)189*20733378SAndroid Build Coastguard Worker void verify_local_override_remove_return_message(
190*20733378SAndroid Build Coastguard Worker base::Result<StorageReturnMessage> msg_result) {
191*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.ok()) << msg_result.error();
192*20733378SAndroid Build Coastguard Worker auto msg = *msg_result;
193*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg.has_remove_local_override_message()) << msg.error_message();
194*20733378SAndroid Build Coastguard Worker }
195*20733378SAndroid Build Coastguard Worker
verify_reset_storage_message(base::Result<StorageReturnMessage> msg_result)196*20733378SAndroid Build Coastguard Worker void verify_reset_storage_message(base::Result<StorageReturnMessage> msg_result) {
197*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.ok()) << msg_result.error();
198*20733378SAndroid Build Coastguard Worker auto msg = *msg_result;
199*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg.has_reset_storage_message()) << msg.error_message();
200*20733378SAndroid Build Coastguard Worker }
201*20733378SAndroid Build Coastguard Worker
verify_error_message(base::Result<StorageReturnMessage> msg_result,const std::string & errmsg)202*20733378SAndroid Build Coastguard Worker void verify_error_message(base::Result<StorageReturnMessage> msg_result,
203*20733378SAndroid Build Coastguard Worker const std::string& errmsg) {
204*20733378SAndroid Build Coastguard Worker ASSERT_FALSE(msg_result.ok());
205*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(msg_result.error().message().find(errmsg) != std::string::npos)
206*20733378SAndroid Build Coastguard Worker << msg_result.error().message();
207*20733378SAndroid Build Coastguard Worker }
208*20733378SAndroid Build Coastguard Worker
verify_equal_file_content(const std::string & file_one,const std::string & file_two)209*20733378SAndroid Build Coastguard Worker void verify_equal_file_content(const std::string& file_one,
210*20733378SAndroid Build Coastguard Worker const std::string& file_two) {
211*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(FileExists(file_one)) << file_one << " does not exist";
212*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(FileExists(file_two)) << file_one << " does not exist";
213*20733378SAndroid Build Coastguard Worker auto content_one = std::string();
214*20733378SAndroid Build Coastguard Worker auto content_two = std::string();
215*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(base::ReadFileToString(file_one, &content_one)) << strerror(errno);
216*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(base::ReadFileToString(file_two, &content_two)) << strerror(errno);
217*20733378SAndroid Build Coastguard Worker ASSERT_EQ(content_one, content_two) << file_one << " is different from "
218*20733378SAndroid Build Coastguard Worker << file_two;
219*20733378SAndroid Build Coastguard Worker }
220*20733378SAndroid Build Coastguard Worker
221*20733378SAndroid Build Coastguard Worker // setup test suites
SetUpTestSuite()222*20733378SAndroid Build Coastguard Worker static void SetUpTestSuite() {
223*20733378SAndroid Build Coastguard Worker auto test_dir = base::GetExecutableDirectory();
224*20733378SAndroid Build Coastguard Worker package_map_ = test_dir + "/tests/data/v1/package.map";
225*20733378SAndroid Build Coastguard Worker flag_map_ = test_dir + "/tests/data/v1/flag.map";
226*20733378SAndroid Build Coastguard Worker flag_val_ = test_dir + "/tests/data/v1/flag.val";
227*20733378SAndroid Build Coastguard Worker flag_info_ = test_dir + "/tests/data/v1/flag.info";
228*20733378SAndroid Build Coastguard Worker updated_package_map_ = test_dir + "/tests/data/v2/package.map";
229*20733378SAndroid Build Coastguard Worker updated_flag_map_ = test_dir + "/tests/data/v2/flag.map";
230*20733378SAndroid Build Coastguard Worker updated_flag_val_ = test_dir + "/tests/data/v2/flag.val";
231*20733378SAndroid Build Coastguard Worker updated_flag_info_ = test_dir + "/tests/data/v2/flag.info";
232*20733378SAndroid Build Coastguard Worker }
233*20733378SAndroid Build Coastguard Worker
234*20733378SAndroid Build Coastguard Worker static std::string package_map_;
235*20733378SAndroid Build Coastguard Worker static std::string flag_map_;
236*20733378SAndroid Build Coastguard Worker static std::string flag_val_;
237*20733378SAndroid Build Coastguard Worker static std::string flag_info_;
238*20733378SAndroid Build Coastguard Worker static std::string updated_package_map_;
239*20733378SAndroid Build Coastguard Worker static std::string updated_flag_map_;
240*20733378SAndroid Build Coastguard Worker static std::string updated_flag_val_;
241*20733378SAndroid Build Coastguard Worker static std::string updated_flag_info_;
242*20733378SAndroid Build Coastguard Worker }; // class AconfigdTest
243*20733378SAndroid Build Coastguard Worker
244*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::package_map_;
245*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::flag_map_;
246*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::flag_val_;
247*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::flag_info_;
248*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::updated_package_map_;
249*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::updated_flag_map_;
250*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::updated_flag_val_;
251*20733378SAndroid Build Coastguard Worker std::string AconfigdTest::updated_flag_info_;
252*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,init_platform_storage_fresh)253*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, init_platform_storage_fresh) {
254*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
255*20733378SAndroid Build Coastguard Worker auto init_result = a_mock.aconfigd.InitializePlatformStorage();
256*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(init_result.ok()) << init_result.error();
257*20733378SAndroid Build Coastguard Worker
258*20733378SAndroid Build Coastguard Worker auto partitions = std::vector<std::pair<std::string, std::string>>{
259*20733378SAndroid Build Coastguard Worker {"system", "/system/etc/aconfig"},
260*20733378SAndroid Build Coastguard Worker {"vendor", "/vendor/etc/aconfig"},
261*20733378SAndroid Build Coastguard Worker {"product", "/product/etc/aconfig"}};
262*20733378SAndroid Build Coastguard Worker
263*20733378SAndroid Build Coastguard Worker for (auto const& [container, storage_dir] : partitions) {
264*20733378SAndroid Build Coastguard Worker auto package_map = std::string(storage_dir) + "/package.map";
265*20733378SAndroid Build Coastguard Worker auto flag_map = std::string(storage_dir) + "/flag.map";
266*20733378SAndroid Build Coastguard Worker auto flag_val = std::string(storage_dir) + "/flag.val";
267*20733378SAndroid Build Coastguard Worker auto flag_info = std::string(storage_dir) + "/flag.info";
268*20733378SAndroid Build Coastguard Worker if (!FileNonZeroSize(flag_val)) {
269*20733378SAndroid Build Coastguard Worker continue;
270*20733378SAndroid Build Coastguard Worker }
271*20733378SAndroid Build Coastguard Worker
272*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/" + container + ".package.map", package_map);
273*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/" + container + ".flag.map", flag_map);
274*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/" + container + ".val", flag_val);
275*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/" + container + ".val", flag_val);
276*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/" + container + ".info", flag_info);
277*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/" + container + ".info", flag_info);
278*20733378SAndroid Build Coastguard Worker }
279*20733378SAndroid Build Coastguard Worker }
280*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,init_platform_storage_reboot)281*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, init_platform_storage_reboot) {
282*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
283*20733378SAndroid Build Coastguard Worker auto init_result = a_mock.aconfigd.InitializePlatformStorage();
284*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(init_result.ok()) << init_result.error();
285*20733378SAndroid Build Coastguard Worker
286*20733378SAndroid Build Coastguard Worker init_result = a_mock.aconfigd.InitializePlatformStorage();
287*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(init_result.ok()) << init_result.error();
288*20733378SAndroid Build Coastguard Worker
289*20733378SAndroid Build Coastguard Worker auto partitions = std::vector<std::pair<std::string, std::string>>{
290*20733378SAndroid Build Coastguard Worker {"system", "/system/etc/aconfig"},
291*20733378SAndroid Build Coastguard Worker {"vendor", "/vendor/etc/aconfig"},
292*20733378SAndroid Build Coastguard Worker {"product", "/product/etc/aconfig"}};
293*20733378SAndroid Build Coastguard Worker
294*20733378SAndroid Build Coastguard Worker for (auto const& [container, storage_dir] : partitions) {
295*20733378SAndroid Build Coastguard Worker auto package_map = std::string(storage_dir) + "/package.map";
296*20733378SAndroid Build Coastguard Worker auto flag_map = std::string(storage_dir) + "/flag.map";
297*20733378SAndroid Build Coastguard Worker auto flag_val = std::string(storage_dir) + "/flag.val";
298*20733378SAndroid Build Coastguard Worker auto flag_info = std::string(storage_dir) + "/flag.info";
299*20733378SAndroid Build Coastguard Worker if (!FileNonZeroSize(flag_val)) {
300*20733378SAndroid Build Coastguard Worker continue;
301*20733378SAndroid Build Coastguard Worker }
302*20733378SAndroid Build Coastguard Worker
303*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/" + container + ".package.map", package_map);
304*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/" + container + ".flag.map", flag_map);
305*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/" + container + ".val", flag_val);
306*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/" + container + ".val", flag_val);
307*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/" + container + ".info", flag_info);
308*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/" + container + ".info", flag_info);
309*20733378SAndroid Build Coastguard Worker }
310*20733378SAndroid Build Coastguard Worker }
311*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,init_mainline_storage_fresh)312*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, init_mainline_storage_fresh) {
313*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
314*20733378SAndroid Build Coastguard Worker auto init_result = a_mock.aconfigd.InitializeMainlineStorage();
315*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(init_result.ok()) << init_result.error();
316*20733378SAndroid Build Coastguard Worker }
317*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,add_new_storage)318*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, add_new_storage) {
319*20733378SAndroid Build Coastguard Worker // create mocks
320*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
321*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
322*20733378SAndroid Build Coastguard Worker
323*20733378SAndroid Build Coastguard Worker // mock a socket request
324*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
325*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
326*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
327*20733378SAndroid Build Coastguard Worker
328*20733378SAndroid Build Coastguard Worker auto digest = GetFilesDigest(
329*20733378SAndroid Build Coastguard Worker {c_mock.package_map, c_mock.flag_map, c_mock.flag_val, c_mock.flag_info});
330*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(digest.ok());
331*20733378SAndroid Build Coastguard Worker
332*20733378SAndroid Build Coastguard Worker // verify the record exists in persist records pb
333*20733378SAndroid Build Coastguard Worker auto persist_records_pb = PersistStorageRecords();
334*20733378SAndroid Build Coastguard Worker auto content = std::string();
335*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(base::ReadFileToString(a_mock.persist_pb, &content)) << strerror(errno);
336*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(persist_records_pb.ParseFromString(content)) << strerror(errno);
337*20733378SAndroid Build Coastguard Worker bool found = false;
338*20733378SAndroid Build Coastguard Worker for (auto& entry : persist_records_pb.records()) {
339*20733378SAndroid Build Coastguard Worker if (entry.container() == "mockup") {
340*20733378SAndroid Build Coastguard Worker found = true;
341*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.version(), 1);
342*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.package_map(), c_mock.package_map);
343*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_map(), c_mock.flag_map);
344*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_val(), c_mock.flag_val);
345*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_info(), c_mock.flag_info);
346*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.digest(), *digest);
347*20733378SAndroid Build Coastguard Worker break;
348*20733378SAndroid Build Coastguard Worker }
349*20733378SAndroid Build Coastguard Worker }
350*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(found);
351*20733378SAndroid Build Coastguard Worker
352*20733378SAndroid Build Coastguard Worker // verify persist and boot files
353*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/mockup.package.map", package_map_);
354*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/mockup.flag.map", flag_map_);
355*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/mockup.val", flag_val_);
356*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/mockup.val", flag_val_);
357*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/mockup.info", flag_info_);
358*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/mockup.info", flag_info_);
359*20733378SAndroid Build Coastguard Worker }
360*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,container_update_in_ota)361*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, container_update_in_ota) {
362*20733378SAndroid Build Coastguard Worker // create mocks
363*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
364*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
365*20733378SAndroid Build Coastguard Worker
366*20733378SAndroid Build Coastguard Worker // mock a socket request
367*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
368*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
369*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
370*20733378SAndroid Build Coastguard Worker
371*20733378SAndroid Build Coastguard Worker // mock an ota container update
372*20733378SAndroid Build Coastguard Worker c_mock.UpdateFiles(
373*20733378SAndroid Build Coastguard Worker updated_package_map_, updated_flag_map_, updated_flag_val_, updated_flag_info_);
374*20733378SAndroid Build Coastguard Worker
375*20733378SAndroid Build Coastguard Worker // force update
376*20733378SAndroid Build Coastguard Worker request_msg = new_storage_message(c_mock);
377*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
378*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
379*20733378SAndroid Build Coastguard Worker
380*20733378SAndroid Build Coastguard Worker auto digest = GetFilesDigest(
381*20733378SAndroid Build Coastguard Worker {c_mock.package_map, c_mock.flag_map, c_mock.flag_val, c_mock.flag_info});
382*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(digest.ok());
383*20733378SAndroid Build Coastguard Worker
384*20733378SAndroid Build Coastguard Worker // verify the record exists in persist records pb
385*20733378SAndroid Build Coastguard Worker auto persist_records_pb = PersistStorageRecords();
386*20733378SAndroid Build Coastguard Worker auto content = std::string();
387*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(base::ReadFileToString(a_mock.persist_pb, &content))
388*20733378SAndroid Build Coastguard Worker << strerror(errno);
389*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(persist_records_pb.ParseFromString(content)) << strerror(errno);
390*20733378SAndroid Build Coastguard Worker bool found = false;
391*20733378SAndroid Build Coastguard Worker for (auto& entry : persist_records_pb.records()) {
392*20733378SAndroid Build Coastguard Worker if (entry.container() == "mockup") {
393*20733378SAndroid Build Coastguard Worker found = true;
394*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.version(), 1);
395*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.package_map(), c_mock.package_map);
396*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_map(), c_mock.flag_map);
397*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_val(), c_mock.flag_val);
398*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.flag_info(), c_mock.flag_info);
399*20733378SAndroid Build Coastguard Worker ASSERT_EQ(entry.digest(), *digest);
400*20733378SAndroid Build Coastguard Worker break;
401*20733378SAndroid Build Coastguard Worker }
402*20733378SAndroid Build Coastguard Worker }
403*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(found);
404*20733378SAndroid Build Coastguard Worker
405*20733378SAndroid Build Coastguard Worker // verify persist and boot files
406*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/mockup.package.map", updated_package_map_);
407*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.maps_dir + "/mockup.flag.map", updated_flag_map_);
408*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/mockup.val", updated_flag_val_);
409*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.flags_dir + "/mockup.info", updated_flag_info_);
410*20733378SAndroid Build Coastguard Worker
411*20733378SAndroid Build Coastguard Worker // the boot copy should never be updated
412*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/mockup.val", flag_val_);
413*20733378SAndroid Build Coastguard Worker verify_equal_file_content(a_mock.boot_dir + "/mockup.info", flag_info_);
414*20733378SAndroid Build Coastguard Worker }
415*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,server_override)416*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, server_override) {
417*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
418*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
419*20733378SAndroid Build Coastguard Worker
420*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
421*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
422*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
423*20733378SAndroid Build Coastguard Worker
424*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
425*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", false, false);
426*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
427*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
428*20733378SAndroid Build Coastguard Worker
429*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
430*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
431*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
432*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
433*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "false", "",
434*20733378SAndroid Build Coastguard Worker "true", "true", true, true, false);
435*20733378SAndroid Build Coastguard Worker
436*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
437*20733378SAndroid Build Coastguard Worker "enabled_rw", "true", false, false);
438*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
439*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
440*20733378SAndroid Build Coastguard Worker
441*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
442*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
443*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
444*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
445*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "true", "",
446*20733378SAndroid Build Coastguard Worker "true", "true", true, true, false);
447*20733378SAndroid Build Coastguard Worker }
448*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,server_override_survive_update)449*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, server_override_survive_update) {
450*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
451*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
452*20733378SAndroid Build Coastguard Worker
453*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
454*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
455*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
456*20733378SAndroid Build Coastguard Worker
457*20733378SAndroid Build Coastguard Worker // create a server override
458*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
459*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", false, false);
460*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
461*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
462*20733378SAndroid Build Coastguard Worker
463*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
464*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
465*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
466*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
467*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "false", "",
468*20733378SAndroid Build Coastguard Worker "true", "true", true, true, false);
469*20733378SAndroid Build Coastguard Worker
470*20733378SAndroid Build Coastguard Worker // mock an ota container update
471*20733378SAndroid Build Coastguard Worker c_mock.UpdateFiles(
472*20733378SAndroid Build Coastguard Worker updated_package_map_, updated_flag_map_, updated_flag_val_, updated_flag_info_);
473*20733378SAndroid Build Coastguard Worker
474*20733378SAndroid Build Coastguard Worker // force update
475*20733378SAndroid Build Coastguard Worker request_msg = new_storage_message(c_mock);
476*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
477*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
478*20733378SAndroid Build Coastguard Worker
479*20733378SAndroid Build Coastguard Worker // server override should persist
480*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
481*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
482*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
483*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
484*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "false", "",
485*20733378SAndroid Build Coastguard Worker "true", "true", true, true, false);
486*20733378SAndroid Build Coastguard Worker }
487*20733378SAndroid Build Coastguard Worker
TEST_F_WITH_FLAGS(AconfigdTest,local_override_immediate,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (ACONFIGD_NS,support_immediate_local_overrides)))488*20733378SAndroid Build Coastguard Worker TEST_F_WITH_FLAGS(AconfigdTest, local_override_immediate,
489*20733378SAndroid Build Coastguard Worker REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(
490*20733378SAndroid Build Coastguard Worker ACONFIGD_NS, support_immediate_local_overrides))) {
491*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
492*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
493*20733378SAndroid Build Coastguard Worker
494*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
495*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
496*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
497*20733378SAndroid Build Coastguard Worker
498*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
499*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", true, true);
500*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
501*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
502*20733378SAndroid Build Coastguard Worker
503*20733378SAndroid Build Coastguard Worker request_msg =
504*20733378SAndroid Build Coastguard Worker flag_query_message("com.android.aconfig.storage.test_1", "enabled_rw");
505*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
506*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
507*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "",
508*20733378SAndroid Build Coastguard Worker "false", "false", "true", true, false, true);
509*20733378SAndroid Build Coastguard Worker }
510*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,local_override)511*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, local_override) {
512*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
513*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
514*20733378SAndroid Build Coastguard Worker
515*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
516*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
517*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
518*20733378SAndroid Build Coastguard Worker
519*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
520*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", true, false);
521*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
522*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
523*20733378SAndroid Build Coastguard Worker
524*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
525*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
526*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
527*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
528*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "false",
529*20733378SAndroid Build Coastguard Worker "true", "true", true, false, true);
530*20733378SAndroid Build Coastguard Worker
531*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
532*20733378SAndroid Build Coastguard Worker "enabled_rw", "true", true, false);
533*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
534*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
535*20733378SAndroid Build Coastguard Worker
536*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
537*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
538*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
539*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
540*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "true",
541*20733378SAndroid Build Coastguard Worker "true", "true", true, false, true);
542*20733378SAndroid Build Coastguard Worker }
543*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,local_override_survive_update)544*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, local_override_survive_update) {
545*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
546*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
547*20733378SAndroid Build Coastguard Worker
548*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
549*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
550*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
551*20733378SAndroid Build Coastguard Worker
552*20733378SAndroid Build Coastguard Worker // create a local override
553*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
554*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", true, false);
555*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
556*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
557*20733378SAndroid Build Coastguard Worker
558*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
559*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
560*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
561*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
562*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "false",
563*20733378SAndroid Build Coastguard Worker "true", "true", true, false, true);
564*20733378SAndroid Build Coastguard Worker
565*20733378SAndroid Build Coastguard Worker // mock an ota container update
566*20733378SAndroid Build Coastguard Worker c_mock.UpdateFiles(
567*20733378SAndroid Build Coastguard Worker updated_package_map_, updated_flag_map_, updated_flag_val_, updated_flag_info_);
568*20733378SAndroid Build Coastguard Worker
569*20733378SAndroid Build Coastguard Worker // force update
570*20733378SAndroid Build Coastguard Worker request_msg = new_storage_message(c_mock);
571*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
572*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
573*20733378SAndroid Build Coastguard Worker
574*20733378SAndroid Build Coastguard Worker // local override should persist
575*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
576*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
577*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
578*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
579*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "false",
580*20733378SAndroid Build Coastguard Worker "true", "true", true, false, true);
581*20733378SAndroid Build Coastguard Worker }
582*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,single_local_override_remove)583*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, single_local_override_remove) {
584*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
585*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
586*20733378SAndroid Build Coastguard Worker
587*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
588*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
589*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
590*20733378SAndroid Build Coastguard Worker
591*20733378SAndroid Build Coastguard Worker // local override enabled_rw
592*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
593*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", true, false);
594*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
595*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
596*20733378SAndroid Build Coastguard Worker
597*20733378SAndroid Build Coastguard Worker // local override disabled_rw
598*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_2",
599*20733378SAndroid Build Coastguard Worker "disabled_rw", "true", true, false);
600*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
601*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
602*20733378SAndroid Build Coastguard Worker
603*20733378SAndroid Build Coastguard Worker // remove local override enabled_rw
604*20733378SAndroid Build Coastguard Worker request_msg = flag_local_override_remove_message(
605*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
606*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
607*20733378SAndroid Build Coastguard Worker verify_local_override_remove_return_message(return_msg);
608*20733378SAndroid Build Coastguard Worker
609*20733378SAndroid Build Coastguard Worker // enabled_rw local override should be gone
610*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
611*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
612*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
613*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
614*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "",
615*20733378SAndroid Build Coastguard Worker "true", "true", true, false, false);
616*20733378SAndroid Build Coastguard Worker
617*20733378SAndroid Build Coastguard Worker // disabled_rw local override should still exists
618*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
619*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_2", "disabled_rw");
620*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
621*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
622*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_2", "disabled_rw", "", "true",
623*20733378SAndroid Build Coastguard Worker "false", "false", true, false, true);
624*20733378SAndroid Build Coastguard Worker }
625*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,readonly_flag_override)626*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, readonly_flag_override) {
627*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
628*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
629*20733378SAndroid Build Coastguard Worker
630*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
631*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
632*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
633*20733378SAndroid Build Coastguard Worker
634*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
635*20733378SAndroid Build Coastguard Worker "enabled_ro", "false", false, false);
636*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
637*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Cannot update read only flag");
638*20733378SAndroid Build Coastguard Worker
639*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
640*20733378SAndroid Build Coastguard Worker "enabled_ro", "false", true, false);
641*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
642*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Cannot update read only flag");
643*20733378SAndroid Build Coastguard Worker }
644*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,nonexist_flag_override)645*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, nonexist_flag_override) {
646*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
647*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
648*20733378SAndroid Build Coastguard Worker
649*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
650*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
651*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
652*20733378SAndroid Build Coastguard Worker
653*20733378SAndroid Build Coastguard Worker request_msg =
654*20733378SAndroid Build Coastguard Worker flag_override_message("unknown", "enabled_rw", "false", false, false);
655*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
656*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Failed to find owning container");
657*20733378SAndroid Build Coastguard Worker
658*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
659*20733378SAndroid Build Coastguard Worker "unknown", "false", false, false);
660*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
661*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Flag does not exist");
662*20733378SAndroid Build Coastguard Worker }
663*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,nonexist_flag_query)664*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, nonexist_flag_query) {
665*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
666*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
667*20733378SAndroid Build Coastguard Worker
668*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
669*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
670*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
671*20733378SAndroid Build Coastguard Worker
672*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message("unknown", "enabled_rw");
673*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
674*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Failed to find owning container");
675*20733378SAndroid Build Coastguard Worker
676*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message("com.android.aconfig.storage.test_1", "unknown");
677*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
678*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "unknown does not exist");
679*20733378SAndroid Build Coastguard Worker }
680*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,storage_reset)681*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, storage_reset) {
682*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
683*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
684*20733378SAndroid Build Coastguard Worker
685*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
686*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
687*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
688*20733378SAndroid Build Coastguard Worker
689*20733378SAndroid Build Coastguard Worker // server override enabled_rw
690*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
691*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", false, false);
692*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
693*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
694*20733378SAndroid Build Coastguard Worker
695*20733378SAndroid Build Coastguard Worker // local override disabled_rw
696*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_2",
697*20733378SAndroid Build Coastguard Worker "disabled_rw", "true", true, false);
698*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
699*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
700*20733378SAndroid Build Coastguard Worker
701*20733378SAndroid Build Coastguard Worker // storage reset
702*20733378SAndroid Build Coastguard Worker request_msg = reset_storage_message();
703*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
704*20733378SAndroid Build Coastguard Worker verify_reset_storage_message(return_msg);
705*20733378SAndroid Build Coastguard Worker
706*20733378SAndroid Build Coastguard Worker // enabled_rw server override should be gone
707*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
708*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_1", "enabled_rw");
709*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
710*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
711*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_1", "enabled_rw", "", "",
712*20733378SAndroid Build Coastguard Worker "true", "true", true, false, false);
713*20733378SAndroid Build Coastguard Worker
714*20733378SAndroid Build Coastguard Worker // disabled_rw local override should be gone
715*20733378SAndroid Build Coastguard Worker request_msg = flag_query_message(
716*20733378SAndroid Build Coastguard Worker "com.android.aconfig.storage.test_2", "disabled_rw");
717*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
718*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
719*20733378SAndroid Build Coastguard Worker return_msg, "com.android.aconfig.storage.test_2", "disabled_rw", "", "",
720*20733378SAndroid Build Coastguard Worker "false", "false", true, false, false);
721*20733378SAndroid Build Coastguard Worker }
722*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,list_package)723*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, list_package) {
724*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
725*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
726*20733378SAndroid Build Coastguard Worker
727*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
728*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
729*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
730*20733378SAndroid Build Coastguard Worker
731*20733378SAndroid Build Coastguard Worker // server override disabled_rw
732*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
733*20733378SAndroid Build Coastguard Worker "disabled_rw", "true", false, false);
734*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
735*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
736*20733378SAndroid Build Coastguard Worker
737*20733378SAndroid Build Coastguard Worker // local override enabled_rw
738*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
739*20733378SAndroid Build Coastguard Worker "enabled_rw", "false", true, false);
740*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
741*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
742*20733378SAndroid Build Coastguard Worker
743*20733378SAndroid Build Coastguard Worker // list package
744*20733378SAndroid Build Coastguard Worker request_msg = list_package_storage_message("com.android.aconfig.storage.test_1");
745*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
746*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(return_msg.ok()) << return_msg.error();
747*20733378SAndroid Build Coastguard Worker auto flags_msg = return_msg->list_storage_message();
748*20733378SAndroid Build Coastguard Worker ASSERT_EQ(flags_msg.flags_size(), 3);
749*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
750*20733378SAndroid Build Coastguard Worker flags_msg.flags(0), "com.android.aconfig.storage.test_1", "disabled_rw",
751*20733378SAndroid Build Coastguard Worker "true", "", "false", "false", true, true, false);
752*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
753*20733378SAndroid Build Coastguard Worker flags_msg.flags(1), "com.android.aconfig.storage.test_1", "enabled_ro",
754*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
755*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
756*20733378SAndroid Build Coastguard Worker flags_msg.flags(2), "com.android.aconfig.storage.test_1", "enabled_rw",
757*20733378SAndroid Build Coastguard Worker "", "false", "true", "true", true, false, true);
758*20733378SAndroid Build Coastguard Worker }
759*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,list_container)760*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, list_container) {
761*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
762*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
763*20733378SAndroid Build Coastguard Worker
764*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
765*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
766*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
767*20733378SAndroid Build Coastguard Worker
768*20733378SAndroid Build Coastguard Worker // server override test1.disabled_rw
769*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
770*20733378SAndroid Build Coastguard Worker "disabled_rw", "true", false, false);
771*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
772*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
773*20733378SAndroid Build Coastguard Worker
774*20733378SAndroid Build Coastguard Worker // local override test2.disabled_rw
775*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_2",
776*20733378SAndroid Build Coastguard Worker "disabled_rw", "false", true, false);
777*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
778*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
779*20733378SAndroid Build Coastguard Worker
780*20733378SAndroid Build Coastguard Worker // list container
781*20733378SAndroid Build Coastguard Worker request_msg = list_container_storage_message("mockup");
782*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
783*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(return_msg.ok()) << return_msg.error();
784*20733378SAndroid Build Coastguard Worker auto flags_msg = return_msg->list_storage_message();
785*20733378SAndroid Build Coastguard Worker ASSERT_EQ(flags_msg.flags_size(), 8);
786*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
787*20733378SAndroid Build Coastguard Worker flags_msg.flags(0), "com.android.aconfig.storage.test_1", "disabled_rw",
788*20733378SAndroid Build Coastguard Worker "true", "", "false", "false", true, true, false);
789*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
790*20733378SAndroid Build Coastguard Worker flags_msg.flags(1), "com.android.aconfig.storage.test_1", "enabled_ro",
791*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
792*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
793*20733378SAndroid Build Coastguard Worker flags_msg.flags(2), "com.android.aconfig.storage.test_1", "enabled_rw",
794*20733378SAndroid Build Coastguard Worker "", "", "true", "true", true, false, false);
795*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
796*20733378SAndroid Build Coastguard Worker flags_msg.flags(3), "com.android.aconfig.storage.test_2", "disabled_rw",
797*20733378SAndroid Build Coastguard Worker "", "false", "false", "false", true, false, true);
798*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
799*20733378SAndroid Build Coastguard Worker flags_msg.flags(4), "com.android.aconfig.storage.test_2", "enabled_fixed_ro",
800*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
801*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
802*20733378SAndroid Build Coastguard Worker flags_msg.flags(5), "com.android.aconfig.storage.test_2", "enabled_ro",
803*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
804*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
805*20733378SAndroid Build Coastguard Worker flags_msg.flags(6), "com.android.aconfig.storage.test_4", "enabled_fixed_ro",
806*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
807*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
808*20733378SAndroid Build Coastguard Worker flags_msg.flags(7), "com.android.aconfig.storage.test_4", "enabled_rw",
809*20733378SAndroid Build Coastguard Worker "", "", "true", "true", true, false, false);
810*20733378SAndroid Build Coastguard Worker }
811*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,list_all)812*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, list_all) {
813*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
814*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
815*20733378SAndroid Build Coastguard Worker
816*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
817*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
818*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
819*20733378SAndroid Build Coastguard Worker
820*20733378SAndroid Build Coastguard Worker // server override test1.disabled_rw
821*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_1",
822*20733378SAndroid Build Coastguard Worker "disabled_rw", "true", false, false);
823*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
824*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
825*20733378SAndroid Build Coastguard Worker
826*20733378SAndroid Build Coastguard Worker // local override test2.disabled_rw
827*20733378SAndroid Build Coastguard Worker request_msg = flag_override_message("com.android.aconfig.storage.test_2",
828*20733378SAndroid Build Coastguard Worker "disabled_rw", "false", true, false);
829*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
830*20733378SAndroid Build Coastguard Worker verify_flag_override_return_message(return_msg);
831*20733378SAndroid Build Coastguard Worker
832*20733378SAndroid Build Coastguard Worker // list all storage
833*20733378SAndroid Build Coastguard Worker request_msg = list_storage_message();
834*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
835*20733378SAndroid Build Coastguard Worker ASSERT_TRUE(return_msg.ok()) << return_msg.error();
836*20733378SAndroid Build Coastguard Worker auto flags_msg = return_msg->list_storage_message();
837*20733378SAndroid Build Coastguard Worker ASSERT_EQ(flags_msg.flags_size(), 8);
838*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
839*20733378SAndroid Build Coastguard Worker flags_msg.flags(0), "com.android.aconfig.storage.test_1", "disabled_rw",
840*20733378SAndroid Build Coastguard Worker "true", "", "false", "false", true, true, false);
841*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
842*20733378SAndroid Build Coastguard Worker flags_msg.flags(1), "com.android.aconfig.storage.test_1", "enabled_ro",
843*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
844*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
845*20733378SAndroid Build Coastguard Worker flags_msg.flags(2), "com.android.aconfig.storage.test_1", "enabled_rw",
846*20733378SAndroid Build Coastguard Worker "", "", "true", "true", true, false, false);
847*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
848*20733378SAndroid Build Coastguard Worker flags_msg.flags(3), "com.android.aconfig.storage.test_2", "disabled_rw",
849*20733378SAndroid Build Coastguard Worker "", "false", "false", "false", true, false, true);
850*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
851*20733378SAndroid Build Coastguard Worker flags_msg.flags(4), "com.android.aconfig.storage.test_2", "enabled_fixed_ro",
852*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
853*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
854*20733378SAndroid Build Coastguard Worker flags_msg.flags(5), "com.android.aconfig.storage.test_2", "enabled_ro",
855*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
856*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
857*20733378SAndroid Build Coastguard Worker flags_msg.flags(6), "com.android.aconfig.storage.test_4", "enabled_fixed_ro",
858*20733378SAndroid Build Coastguard Worker "", "", "true", "true", false, false, false);
859*20733378SAndroid Build Coastguard Worker verify_flag_query_return_message(
860*20733378SAndroid Build Coastguard Worker flags_msg.flags(7), "com.android.aconfig.storage.test_4", "enabled_rw",
861*20733378SAndroid Build Coastguard Worker "", "", "true", "true", true, false, false);
862*20733378SAndroid Build Coastguard Worker }
863*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,list_nonexist_package)864*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, list_nonexist_package) {
865*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
866*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
867*20733378SAndroid Build Coastguard Worker
868*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
869*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
870*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
871*20733378SAndroid Build Coastguard Worker
872*20733378SAndroid Build Coastguard Worker request_msg = list_package_storage_message("unknown");
873*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
874*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "container not found");
875*20733378SAndroid Build Coastguard Worker }
876*20733378SAndroid Build Coastguard Worker
TEST_F(AconfigdTest,list_nonexist_container)877*20733378SAndroid Build Coastguard Worker TEST_F(AconfigdTest, list_nonexist_container) {
878*20733378SAndroid Build Coastguard Worker auto a_mock = AconfigdMock();
879*20733378SAndroid Build Coastguard Worker auto c_mock = ContainerMock("mockup", package_map_, flag_map_, flag_val_, flag_info_);
880*20733378SAndroid Build Coastguard Worker
881*20733378SAndroid Build Coastguard Worker auto request_msg = new_storage_message(c_mock);
882*20733378SAndroid Build Coastguard Worker auto return_msg = a_mock.SendRequestToSocket(request_msg);
883*20733378SAndroid Build Coastguard Worker verify_new_storage_return_message(return_msg, true);
884*20733378SAndroid Build Coastguard Worker
885*20733378SAndroid Build Coastguard Worker request_msg = list_container_storage_message("unknown");
886*20733378SAndroid Build Coastguard Worker return_msg = a_mock.SendRequestToSocket(request_msg);
887*20733378SAndroid Build Coastguard Worker verify_error_message(return_msg, "Missing storage files object");
888*20733378SAndroid Build Coastguard Worker }
889*20733378SAndroid Build Coastguard Worker
890*20733378SAndroid Build Coastguard Worker } // namespace aconfigd
891*20733378SAndroid Build Coastguard Worker } // namespace android
892