xref: /aosp_15_r20/system/server_configurable_flags/aconfigd/aconfigd_test_mock.h (revision 207333786ba243bc7d4d69ef6b05487aa7071806)
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <string>
20 #include <android-base/file.h>
21 
22 #include "aconfigd.h"
23 #include "aconfigd_util.h"
24 
25 namespace android {
26 namespace aconfigd {
27 
28 struct AconfigdMock {
29   TemporaryDir root_dir;
30   const std::string flags_dir;
31   const std::string maps_dir;
32   const std::string boot_dir;
33   const std::string persist_pb;
34   Aconfigd aconfigd;
35 
AconfigdMockAconfigdMock36   AconfigdMock()
37       : root_dir()
38       , flags_dir(std::string(root_dir.path) + "/flags")
39       , maps_dir(std::string(root_dir.path) + "/maps")
40       , boot_dir(std::string(root_dir.path) + "/boot")
41       , persist_pb(std::string(root_dir.path) + "/persist.pb")
42       , aconfigd(root_dir.path, persist_pb) {
43     mkdir(flags_dir.c_str(), 0770);
44     mkdir(maps_dir.c_str(), 0770);
45     mkdir(boot_dir.c_str(), 0775);
46   }
47 
SendRequestToSocketAconfigdMock48   base::Result<StorageReturnMessage> SendRequestToSocket(
49       const StorageRequestMessage& request) {
50     auto return_msg = StorageReturnMessage();
51     auto result = aconfigd.HandleSocketRequest(request, return_msg);
52     if (!result.ok()) {
53       return base::Error() << result.error();
54     } else {
55       return return_msg;
56     }
57   }
58 };
59 
60 struct ContainerMock {
61   TemporaryDir root_dir;
62   const std::string container;
63   const std::string package_map;
64   const std::string flag_map;
65   const std::string flag_val;
66   const std::string flag_info;
67 
ContainerMockContainerMock68   ContainerMock(const std::string& container_name,
69                 const std::string& package_map_file,
70                 const std::string& flag_map_file,
71                 const std::string& flag_val_file,
72                 const std::string& flag_info_file)
73       : root_dir()
74       , container(container_name)
75       , package_map(std::string(root_dir.path) + "/etc/aconfig/package.map")
76       , flag_map(std::string(root_dir.path) + "/etc/aconfig/flag.map")
77       , flag_val(std::string(root_dir.path) + "/etc/aconfig/flag.val")
78       , flag_info(std::string(root_dir.path) + "/etc/aconfig/flag.info") {
79     auto etc_dir = std::string(root_dir.path) + "/etc";
80     auto aconfig_dir = etc_dir + "/aconfig";
81     mkdir(etc_dir.c_str(), 0777);
82     mkdir(aconfig_dir.c_str(), 0777);
83     CopyFile(package_map_file, package_map, 0444);
84     CopyFile(flag_map_file, flag_map, 0444);
85     CopyFile(flag_val_file, flag_val, 0444);
86     CopyFile(flag_info_file, flag_info, 0444);
87   }
88 
UpdateFilesContainerMock89   void UpdateFiles(const std::string& package_map_file,
90                    const std::string& flag_map_file,
91                    const std::string& flag_val_file,
92                    const std::string& flag_info_file) {
93     CopyFile(package_map_file, package_map, 0444);
94     CopyFile(flag_map_file, flag_map, 0444);
95     CopyFile(flag_val_file, flag_val, 0444);
96     CopyFile(flag_info_file, flag_info, 0444);
97   }
98 };
99 
100 } // namespace aconfigd
101 } // namespace android
102