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