1545fdf9bSopenharmony_ci/*
2545fdf9bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3545fdf9bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4545fdf9bSopenharmony_ci * you may not use this file except in compliance with the License.
5545fdf9bSopenharmony_ci * You may obtain a copy of the License at
6545fdf9bSopenharmony_ci *
7545fdf9bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8545fdf9bSopenharmony_ci *
9545fdf9bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10545fdf9bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11545fdf9bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12545fdf9bSopenharmony_ci * See the License for the specific language governing permissions and
13545fdf9bSopenharmony_ci * limitations under the License.
14545fdf9bSopenharmony_ci */
15545fdf9bSopenharmony_ci#include "bundle_test_tool.h"
16545fdf9bSopenharmony_ci
17545fdf9bSopenharmony_ci#include <chrono>
18545fdf9bSopenharmony_ci#include <cstdlib>
19545fdf9bSopenharmony_ci#include <cstring>
20545fdf9bSopenharmony_ci#include <future>
21545fdf9bSopenharmony_ci#include <getopt.h>
22545fdf9bSopenharmony_ci#include <iostream>
23545fdf9bSopenharmony_ci#include <set>
24545fdf9bSopenharmony_ci#include <sstream>
25545fdf9bSopenharmony_ci#include <thread>
26545fdf9bSopenharmony_ci#include <unistd.h>
27545fdf9bSopenharmony_ci#include <vector>
28545fdf9bSopenharmony_ci
29545fdf9bSopenharmony_ci#include "app_log_wrapper.h"
30545fdf9bSopenharmony_ci#include "appexecfwk_errors.h"
31545fdf9bSopenharmony_ci#include "bundle_command_common.h"
32545fdf9bSopenharmony_ci#include "bundle_death_recipient.h"
33545fdf9bSopenharmony_ci#include "bundle_mgr_client.h"
34545fdf9bSopenharmony_ci#include "bundle_mgr_proxy.h"
35545fdf9bSopenharmony_ci#include "bundle_tool_callback_stub.h"
36545fdf9bSopenharmony_ci#include "common_event_manager.h"
37545fdf9bSopenharmony_ci#include "common_event_support.h"
38545fdf9bSopenharmony_ci#include "data_group_info.h"
39545fdf9bSopenharmony_ci#include "directory_ex.h"
40545fdf9bSopenharmony_ci#include "parameter.h"
41545fdf9bSopenharmony_ci#ifdef BUNDLE_FRAMEWORK_QUICK_FIX
42545fdf9bSopenharmony_ci#include "quick_fix_status_callback_host_impl.h"
43545fdf9bSopenharmony_ci#endif
44545fdf9bSopenharmony_ci#include "status_receiver_impl.h"
45545fdf9bSopenharmony_ci#include "string_ex.h"
46545fdf9bSopenharmony_ci#include "json_util.h"
47545fdf9bSopenharmony_ci
48545fdf9bSopenharmony_cinamespace OHOS {
49545fdf9bSopenharmony_cinamespace AppExecFwk {
50545fdf9bSopenharmony_cinamespace {
51545fdf9bSopenharmony_ciusing OptionHandler = std::function<void(const std::string&)>;
52545fdf9bSopenharmony_ci
53545fdf9bSopenharmony_ciconst std::string LINE_BREAK = "\n";
54545fdf9bSopenharmony_ciconstexpr int32_t SLEEP_SECONDS = 20;
55545fdf9bSopenharmony_ci// param
56545fdf9bSopenharmony_ciconst int32_t INDEX_OFFSET = 2;
57545fdf9bSopenharmony_ci// quick fix error code
58545fdf9bSopenharmony_ciconst int32_t ERR_BUNDLEMANAGER_FEATURE_IS_NOT_SUPPORTED = 801;
59545fdf9bSopenharmony_ciconst int32_t INITIAL_SANDBOX_APP_INDEX = 1000;
60545fdf9bSopenharmony_ciconst int32_t CODE_PROTECT_UID = 7666;
61545fdf9bSopenharmony_ci// quick fix error message
62545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR = "error: quick fix internal error.\n";
63545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PARAM_ERROR = "error: param error.\n";
64545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PROFILE_PARSE_FAILED = "error: profile parse failed.\n";
65545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_SAME = "error: not same bundle name.\n";
66545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_NOT_SAME = "error: not same version code.\n";
67545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_NAME_NOT_SAME = "error: not same version name.\n";
68545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_CODE_NOT_SAME =
69545fdf9bSopenharmony_ci    "error: not same patch version code.\n";
70545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_NAME_NOT_SAME =
71545fdf9bSopenharmony_ci    "error: not same patch version name.\n";
72545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_TYPE_NOT_SAME = "error: not same patch type.\n";
73545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_UNKNOWN_QUICK_FIX_TYPE = "error: unknown quick fix type.\n";
74545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SO_INCOMPATIBLE = "error: patch so incompatible.\n";
75545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_SAME = "error: same moduleName.\n";
76545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_EXIST = "error: bundle name is not existed.\n";
77545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_NOT_EXIST = "error: module name is not existed.\n";
78545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SIGNATURE_INFO_NOT_SAME = "error: signature is not existed.\n";
79545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_ADD_HQF_FAILED = "error: quick fix add hqf failed.\n";
80545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SAVE_APP_QUICK_FIX_FAILED =
81545fdf9bSopenharmony_ci    "error: quick fix save innerAppQuickFix failed.\n";
82545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_ERROR =
83545fdf9bSopenharmony_ci    "error: quick fix version code require greater than original hqf.\n";
84545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_IN_DATABASE = "error: no this quick fix info in database.\n";
85545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INVALID_PATCH_STATUS = "error: wrong quick fix status.\n";
86545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NOT_EXISTED_BUNDLE_INFO =
87545fdf9bSopenharmony_ci    "error: cannot obtain the bundleInfo from data mgr.\n";
88545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_REMOVE_PATCH_PATH_FAILED = "error: quick fix remove path failed.\n";
89545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_EXTRACT_DIFF_FILES_FAILED = "error: extract diff files failed.\n";
90545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_APPLY_DIFF_PATCH_FAILED = "error: apply diff patch failed.\n";
91545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_UNKOWN = "error: unknown.\n";
92545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_FEATURE_IS_NOT_SUPPORTED = "feature is not supported.\n";
93545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_OPERATION_TIME_OUT = "error: quick fix operation time out.\n";
94545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_FAILED_SERVICE_DIED = "error: bundleMgr service is dead.\n";
95545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_NOT_SUPPORT_RELEASE_BUNDLE =
96545fdf9bSopenharmony_ci    "error: hotreload not support release bundle.\n";
97545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_ALREADY_EXISTED = "error: patch type already existed.\n";
98545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_ALREADY_EXISTED =
99545fdf9bSopenharmony_ci    "error: hotreload type already existed.\n";
100545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_INFO_IN_BUNDLE_INFO =
101545fdf9bSopenharmony_ci    "error: no patch info in bundleInfo.\n";
102545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MOVE_PATCH_FILE_FAILED = "error: quick fix move hqf file failed.\n";
103545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_CREATE_PATCH_PATH_FAILED = "error: quick fix create path failed.\n";
104545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_OLD_PATCH_OR_HOT_RELOAD_IN_DB =
105545fdf9bSopenharmony_ci    "error: old patch or hot reload in db.\n";
106545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SEND_REQUEST_FAILED = "error: send request failed.\n";
107545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_REAL_PATH_FAILED = "error: obtain realpath failed.\n";
108545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INVALID_PATH = "error: input invalid path.\n";
109545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_OPEN_SOURCE_FILE_FAILED = "error: open source file failed.\n";
110545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_CREATE_FD_FAILED = "error: create file descriptor failed.\n";
111545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INVALID_TARGET_DIR = "error: invalid designated target dir\n";
112545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_CREATE_TARGET_DIR_FAILED = "error: create target dir failed.\n";
113545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PERMISSION_DENIED = "error: quick fix permission denied.\n";
114545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_WRITE_FILE_FAILED = "error: write file to target dir failed.\n";
115545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_QUICK_FIX_RELEASE_HAP_HAS_RESOURCES_FILE_FAILED =
116545fdf9bSopenharmony_ci    "error: the hqf of release hap cannot contains resources/rawfile.\n";
117545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INVALID_PARAM =
118545fdf9bSopenharmony_ci    "error: invalid param for setting debug mode.\n";
119545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INTERNAL_ERROR =
120545fdf9bSopenharmony_ci    "error: internal error for setting debug mode.\n";
121545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_PARCEL_ERROR = "error: parcel error for setting debug mode.\n";
122545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_SEND_REQUEST_ERROR = "error: send request error.\n";
123545fdf9bSopenharmony_ciconst std::string MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_UID_CHECK_FAILED = "error: uid check failed.\n";
124545fdf9bSopenharmony_ci
125545fdf9bSopenharmony_cistatic const std::string TOOL_NAME = "bundle_test_tool";
126545fdf9bSopenharmony_cistatic const std::string HELP_MSG =
127545fdf9bSopenharmony_ci    "usage: bundle_test_tool <command> <options>\n"
128545fdf9bSopenharmony_ci    "These are common bundle_test_tool commands list:\n"
129545fdf9bSopenharmony_ci    "  help                             list available commands\n"
130545fdf9bSopenharmony_ci    "  setrm                            set module isRemovable by given bundle name and module name\n"
131545fdf9bSopenharmony_ci    "  getrm                            obtain the value of isRemovable by given bundle name and module name\n"
132545fdf9bSopenharmony_ci    "  installSandbox                   indicates install sandbox\n"
133545fdf9bSopenharmony_ci    "  uninstallSandbox                 indicates uninstall sandbox\n"
134545fdf9bSopenharmony_ci    "  dumpSandbox                      indicates dump sandbox info\n"
135545fdf9bSopenharmony_ci    "  getStr                           obtain the value of label by given bundle name, module name and label id\n"
136545fdf9bSopenharmony_ci    "  getIcon                          obtain the value of icon by given bundle name, module name, "
137545fdf9bSopenharmony_ci    "density and icon id\n"
138545fdf9bSopenharmony_ci    "  addAppInstallRule                obtain the value of install controlRule by given some app id "
139545fdf9bSopenharmony_ci    "control rule type, user id and euid\n"
140545fdf9bSopenharmony_ci    "  getAppInstallRule                obtain the value of install controlRule by given some app id "
141545fdf9bSopenharmony_ci    "rule type, user id and euid\n"
142545fdf9bSopenharmony_ci    "  deleteAppInstallRule             obtain the value of install controlRule by given some app id "
143545fdf9bSopenharmony_ci    "user id and euid\n"
144545fdf9bSopenharmony_ci    "  cleanAppInstallRule              obtain the value of install controlRule by given rule type "
145545fdf9bSopenharmony_ci    "user id and euid\n"
146545fdf9bSopenharmony_ci    "  addAppRunningRule                obtain the value of app running control rule "
147545fdf9bSopenharmony_ci    "by given controlRule user id and euidn\n"
148545fdf9bSopenharmony_ci    "  deleteAppRunningRule             obtain the value of app running control rule "
149545fdf9bSopenharmony_ci    "by given controlRule user id and euid\n"
150545fdf9bSopenharmony_ci    "  cleanAppRunningRule              obtain the value of app running control "
151545fdf9bSopenharmony_ci    "rule by given user id and euid\n"
152545fdf9bSopenharmony_ci    "  getAppRunningControlRule         obtain the value of app running control rule "
153545fdf9bSopenharmony_ci    "by given user id and euid and some app id\n"
154545fdf9bSopenharmony_ci    "  getAppRunningControlRuleResult   obtain the value of app running control rule "
155545fdf9bSopenharmony_ci    "by given bundleName user id, euid and controlRuleResult\n"
156545fdf9bSopenharmony_ci    "  deployQuickFix                   deploy a quick fix patch of an already installed bundle\n"
157545fdf9bSopenharmony_ci    "  switchQuickFix                   switch a quick fix patch of an already installed bundle\n"
158545fdf9bSopenharmony_ci    "  deleteQuickFix                   delete a quick fix patch of an already installed bundle\n"
159545fdf9bSopenharmony_ci    "  setDebugMode                     enable signature debug mode\n"
160545fdf9bSopenharmony_ci    "  getBundleStats                   get bundle stats\n"
161545fdf9bSopenharmony_ci    "  getAppProvisionInfo              get appProvisionInfo\n"
162545fdf9bSopenharmony_ci    "  getDistributedBundleName         get distributedBundleName\n"
163545fdf9bSopenharmony_ci    "  eventCB                          register then unregister bundle event callback\n"
164545fdf9bSopenharmony_ci    "  resetAOTCompileStatus            reset AOTCompileStatus\n"
165545fdf9bSopenharmony_ci    "  sendCommonEvent                  send common event\n"
166545fdf9bSopenharmony_ci    "  queryDataGroupInfos              obtain the data group infos of the application\n"
167545fdf9bSopenharmony_ci    "  getGroupDir                      obtain the data group dir path by data group id\n"
168545fdf9bSopenharmony_ci    "  getJsonProfile                   obtain the json string of the specified module\n"
169545fdf9bSopenharmony_ci    "  getOdid                          obtain the odid of the application\n"
170545fdf9bSopenharmony_ci    "  getUidByBundleName               obtain the uid string of the specified bundle\n"
171545fdf9bSopenharmony_ci    "  implicitQuerySkillUriInfo        obtain the skill uri info of the implicit query ability\n"
172545fdf9bSopenharmony_ci    "  queryAbilityInfoByContinueType   get ability info by continue type\n"
173545fdf9bSopenharmony_ci    "  cleanBundleCacheFilesAutomatic   clear cache data of a specified size\n"
174545fdf9bSopenharmony_ci    "  getContinueBundleName            get continue bundle name list\n"
175545fdf9bSopenharmony_ci    "  updateAppEncryptedStatus         update app encrypted status\n"
176545fdf9bSopenharmony_ci    "  getDirByBundleNameAndAppIndex    obtain the dir by bundleName and appIndex\n"
177545fdf9bSopenharmony_ci    "  isBundleInstalled                determine whether the bundle is installed based on bundleName user "
178545fdf9bSopenharmony_ci    "and appIndex\n";
179545fdf9bSopenharmony_ci
180545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_REMOVABLE =
181545fdf9bSopenharmony_ci    "usage: bundle_test_tool getrm <options>\n"
182545fdf9bSopenharmony_ci    "eg:bundle_test_tool getrm -m <module-name> -n <bundle-name> \n"
183545fdf9bSopenharmony_ci    "options list:\n"
184545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
185545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       get isRemovable by moduleNmae and bundleName\n"
186545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        get isRemovable by moduleNmae and bundleName\n";
187545fdf9bSopenharmony_ci
188545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_REMOVABLE_OPTION =
189545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
190545fdf9bSopenharmony_ci    "and a module name with '-m' or '--module-name' \n";
191545fdf9bSopenharmony_ci
192545fdf9bSopenharmony_ciconst std::string HELP_MSG_SET =
193545fdf9bSopenharmony_ci    "usage: bundle_test_tool setrm <options>\n"
194545fdf9bSopenharmony_ci    "eg:bundle_test_tool setrm -m <module-name> -n <bundle-name> -i 1\n"
195545fdf9bSopenharmony_ci    "options list:\n"
196545fdf9bSopenharmony_ci    "  -h, --help                               list available commands\n"
197545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>         set isRemovable by moduleNmae and bundleName\n"
198545fdf9bSopenharmony_ci    "  -i, --is-removable <is-removable>        set isRemovable  0 or 1\n"
199545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>          set isRemovable by moduleNmae and bundleName\n";
200545fdf9bSopenharmony_ci
201545fdf9bSopenharmony_ciconst std::string HELP_MSG_INSTALL_SANDBOX =
202545fdf9bSopenharmony_ci    "usage: bundle_test_tool installSandbox <options>\n"
203545fdf9bSopenharmony_ci    "options list:\n"
204545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
205545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
206545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        install a sandbox of a bundle\n"
207545fdf9bSopenharmony_ci    "  -d, --dlp-type <dlp-type>              specify type of the sandbox application\n";
208545fdf9bSopenharmony_ci
209545fdf9bSopenharmony_ciconst std::string HELP_MSG_UNINSTALL_SANDBOX =
210545fdf9bSopenharmony_ci    "usage: bundle_test_tool uninstallSandbox <options>\n"
211545fdf9bSopenharmony_ci    "options list:\n"
212545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
213545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
214545fdf9bSopenharmony_ci    "  -a, --app-index <app-index>            specify a app index\n"
215545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        install a sandbox of a bundle\n";
216545fdf9bSopenharmony_ci
217545fdf9bSopenharmony_ciconst std::string HELP_MSG_DUMP_SANDBOX =
218545fdf9bSopenharmony_ci    "usage: bundle_test_tool dumpSandbox <options>\n"
219545fdf9bSopenharmony_ci    "options list:\n"
220545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
221545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
222545fdf9bSopenharmony_ci    "  -a, --app-index <app-index>            specify a app index\n"
223545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        install a sandbox of a bundle\n";
224545fdf9bSopenharmony_ci
225545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_STRING =
226545fdf9bSopenharmony_ci    "usage: bundle_test_tool getStr <options>\n"
227545fdf9bSopenharmony_ci    "eg:bundle_test_tool getStr -m <module-name> -n <bundle-name> -u <user-id> -i --id <id> \n"
228545fdf9bSopenharmony_ci    "options list:\n"
229545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
230545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        specify bundle name of the application\n"
231545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        specify module name of the application\n"
232545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
233545fdf9bSopenharmony_ci    "  -i, --id <id>                          specify a label id of the application\n";
234545fdf9bSopenharmony_ci
235545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_ICON =
236545fdf9bSopenharmony_ci    "usage: bundle_test_tool getIcon <options>\n"
237545fdf9bSopenharmony_ci    "eg:bundle_test_tool getIcon -m <module-name> -n <bundle-name> -u <user-id> -d --density <density> -i --id <id> \n"
238545fdf9bSopenharmony_ci    "options list:\n"
239545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
240545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
241545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        specify module name of the application\n"
242545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
243545fdf9bSopenharmony_ci    "  -d, --density <density>                specify a density\n"
244545fdf9bSopenharmony_ci    "  -i, --id <id>                          specify a icon id of the application\n";
245545fdf9bSopenharmony_ci
246545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GETSTRING_OPTION =
247545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
248545fdf9bSopenharmony_ci    "and a module name with '-m' or '--module-name' \n"
249545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n"
250545fdf9bSopenharmony_ci    "and a labelid with '-i' or '--id' \n";
251545fdf9bSopenharmony_ci
252545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GETICON_OPTION =
253545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
254545fdf9bSopenharmony_ci    "and a module name with '-m' or '--module-name' \n"
255545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n"
256545fdf9bSopenharmony_ci    "and a density with '-d' or '--density' \n"
257545fdf9bSopenharmony_ci    "and a iconid with '-i' or '--id' \n";
258545fdf9bSopenharmony_ci
259545fdf9bSopenharmony_ciconst std::string HELP_MSG_ADD_INSTALL_RULE =
260545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
261545fdf9bSopenharmony_ci    "eg:bundle_test_tool addAppInstallRule -a <app-id> -t <control-rule-type> -u <user-id> \n"
262545fdf9bSopenharmony_ci    "options list:\n"
263545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
264545fdf9bSopenharmony_ci    "  -a, --app-id <app-id>                  specify app id of the application\n"
265545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
266545fdf9bSopenharmony_ci    "  -t, --control-rule-type                specify control type of the application\n"
267545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
268545fdf9bSopenharmony_ci
269545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_INSTALL_RULE =
270545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
271545fdf9bSopenharmony_ci    "eg:bundle_test_tool getAppInstallRule -t <control-rule-type> -u <user-id> \n"
272545fdf9bSopenharmony_ci    "options list:\n"
273545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
274545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
275545fdf9bSopenharmony_ci    "  -t, --control-rule-type                specify control type of the application\n"
276545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
277545fdf9bSopenharmony_ci
278545fdf9bSopenharmony_ciconst std::string HELP_MSG_DELETE_INSTALL_RULE =
279545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
280545fdf9bSopenharmony_ci    "eg:bundle_test_tool deleteAppInstallRule -a <app-id> -t <control-rule-type> -u <user-id> \n"
281545fdf9bSopenharmony_ci    "options list:\n"
282545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
283545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
284545fdf9bSopenharmony_ci    "  -a, --app-id <app-id>                  specify app id of the application\n"
285545fdf9bSopenharmony_ci    "  -t, --control-rule-type                specify control type of the application\n"
286545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
287545fdf9bSopenharmony_ci
288545fdf9bSopenharmony_ciconst std::string HELP_MSG_CLEAN_INSTALL_RULE =
289545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
290545fdf9bSopenharmony_ci    "eg:bundle_test_tool cleanAppInstallRule -t <control-rule-type> -u <user-id> \n"
291545fdf9bSopenharmony_ci    "options list:\n"
292545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
293545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
294545fdf9bSopenharmony_ci    "  -t, --control-rule-type                specify control type of the application\n"
295545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
296545fdf9bSopenharmony_ci
297545fdf9bSopenharmony_ciconst std::string HELP_MSG_ADD_APP_RUNNING_RULE =
298545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
299545fdf9bSopenharmony_ci    "eg:bundle_test_tool addAppRunningRule -c <control-rule> -u <user-id> \n"
300545fdf9bSopenharmony_ci    "options list:\n"
301545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
302545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
303545fdf9bSopenharmony_ci    "  -c, --control-rule                     specify control rule of the application\n"
304545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
305545fdf9bSopenharmony_ci
306545fdf9bSopenharmony_ciconst std::string HELP_MSG_DELETE_APP_RUNNING_RULE =
307545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
308545fdf9bSopenharmony_ci    "eg:bundle_test_tool deleteAppRunningRule -c <control-rule> -u <user-id> \n"
309545fdf9bSopenharmony_ci    "options list:\n"
310545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
311545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
312545fdf9bSopenharmony_ci    "  -c, --control-rule                     specify control rule of the application\n"
313545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
314545fdf9bSopenharmony_ci
315545fdf9bSopenharmony_ciconst std::string HELP_MSG_CLEAN_APP_RUNNING_RULE =
316545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
317545fdf9bSopenharmony_ci    "eg:bundle_test_tool cleanAppRunningRule -u <user-id> \n"
318545fdf9bSopenharmony_ci    "options list:\n"
319545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
320545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
321545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
322545fdf9bSopenharmony_ci
323545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_APP_RUNNING_RULE =
324545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
325545fdf9bSopenharmony_ci    "eg:bundle_test_tool getAppRunningControlRule -u <user-id> \n"
326545fdf9bSopenharmony_ci    "options list:\n"
327545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
328545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
329545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
330545fdf9bSopenharmony_ci
331545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_APP_RUNNING_RESULT_RULE =
332545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
333545fdf9bSopenharmony_ci    "eg:bundle_test_tool getAppRunningControlRuleResult -n <bundle-name> \n"
334545fdf9bSopenharmony_ci    "options list:\n"
335545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
336545fdf9bSopenharmony_ci    "  -e, --euid <eu-id>                     default euid value is 3057\n"
337545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
338545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
339545fdf9bSopenharmony_ci
340545fdf9bSopenharmony_ciconst std::string HELP_MSG_AUTO_CLEAN_CACHE_RULE =
341545fdf9bSopenharmony_ci    "usage: bundle_test_tool <options>\n"
342545fdf9bSopenharmony_ci    "eg:bundle_test_tool cleanBundleCacheFilesAutomatic -s <cache-size> \n"
343545fdf9bSopenharmony_ci    "options list:\n"
344545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
345545fdf9bSopenharmony_ci    "  -s, --cache-size <cache-size>          specify the cache size that needs to be cleaned\n";
346545fdf9bSopenharmony_ci
347545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_ADD_INSTALL_RULE_OPTION =
348545fdf9bSopenharmony_ci    "error: you must specify a app id with '-a' or '--app-id' \n"
349545fdf9bSopenharmony_ci    "and a control type with '-t' or '--control-rule-type' \n"
350545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
351545fdf9bSopenharmony_ci
352545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_INSTALL_RULE_OPTION =
353545fdf9bSopenharmony_ci    "error: you must specify a control type with '-t' or '--control-rule-type' \n"
354545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
355545fdf9bSopenharmony_ci
356545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_DELETE_INSTALL_RULE_OPTION =
357545fdf9bSopenharmony_ci    "error: you must specify a control type with '-a' or '--app-id' \n"
358545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
359545fdf9bSopenharmony_ci
360545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_CLEAN_INSTALL_RULE_OPTION =
361545fdf9bSopenharmony_ci    "error: you must specify a control type with '-t' or '--control-rule-type' \n"
362545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
363545fdf9bSopenharmony_ci
364545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_APP_RUNNING_RULE_OPTION =
365545fdf9bSopenharmony_ci    "error: you must specify a app running type with '-c' or '--control-rule' \n"
366545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
367545fdf9bSopenharmony_ci
368545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_CLEAN_APP_RUNNING_RULE_OPTION =
369545fdf9bSopenharmony_ci    "error: you must specify a app running type with a userid '-u' or '--user-id \n";
370545fdf9bSopenharmony_ci
371545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_ALL_APP_RUNNING_RULE_OPTION =
372545fdf9bSopenharmony_ci    "error: you must specify a app running type with '-a' or '--app-id' \n"
373545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
374545fdf9bSopenharmony_ci
375545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_APP_RUNNING_RULE_OPTION =
376545fdf9bSopenharmony_ci    "error: you must specify a app running type with '-n' or '--bundle-name' \n"
377545fdf9bSopenharmony_ci    "and a userid with '-u' or '--user-id' \n";
378545fdf9bSopenharmony_ci
379545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_AUTO_CLEAN_CACHE_OPTION =
380545fdf9bSopenharmony_ci    "error: you must specify a cache size with '-s' or '--cache-size' \n";
381545fdf9bSopenharmony_ci
382545fdf9bSopenharmony_ciconst std::string HELP_MSG_DEPLOY_QUICK_FIX =
383545fdf9bSopenharmony_ci    "usage: bundle_test_tool deploy quick fix <options>\n"
384545fdf9bSopenharmony_ci    "eg:bundle_test_tool deployQuickFix -p <quickFixPath> \n"
385545fdf9bSopenharmony_ci    "options list:\n"
386545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
387545fdf9bSopenharmony_ci    "  -p, --patch-path  <patch-path>         specify patch path of the patch\n"
388545fdf9bSopenharmony_ci    "  -d, --debug  <debug>                   specify deploy mode, 0 represents release, 1 represents debug\n";
389545fdf9bSopenharmony_ci
390545fdf9bSopenharmony_ciconst std::string HELP_MSG_SWITCH_QUICK_FIX =
391545fdf9bSopenharmony_ci    "usage: bundle_test_tool switch quick fix <options>\n"
392545fdf9bSopenharmony_ci    "eg:bundle_test_tool switchQuickFix -n <bundle-name> \n"
393545fdf9bSopenharmony_ci    "options list:\n"
394545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
395545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundleName of the patch\n"
396545fdf9bSopenharmony_ci    "  -e, --enbale  <enable>                 enable a deployed patch of disable an under using patch,\n"
397545fdf9bSopenharmony_ci    "                                         1 represents enable and 0 represents disable\n";
398545fdf9bSopenharmony_ci
399545fdf9bSopenharmony_ciconst std::string HELP_MSG_DELETE_QUICK_FIX =
400545fdf9bSopenharmony_ci    "usage: bundle_test_tool delete quick fix <options>\n"
401545fdf9bSopenharmony_ci    "eg:bundle_test_tool deleteQuickFix -n <bundle-name> \n"
402545fdf9bSopenharmony_ci    "options list:\n"
403545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
404545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundleName of the patch\n";
405545fdf9bSopenharmony_ci
406545fdf9bSopenharmony_ciconst std::string HELP_MSG_SET_DEBUG_MODE =
407545fdf9bSopenharmony_ci    "usage: bundle_test_tool setDebugMode <options>\n"
408545fdf9bSopenharmony_ci    "eg:bundle_test_tool setDebugMode -e <0/1>\n"
409545fdf9bSopenharmony_ci    "options list:\n"
410545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
411545fdf9bSopenharmony_ci    "  -e, --enable  <enable>                 enable signature debug mode, 1 represents enable debug mode and 0\n"
412545fdf9bSopenharmony_ci    "                                         represents disable debug mode\n";
413545fdf9bSopenharmony_ci
414545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_BUNDLE_STATS =
415545fdf9bSopenharmony_ci    "usage: bundle_test_tool getBundleStats <options>\n"
416545fdf9bSopenharmony_ci    "eg:bundle_test_tool getBundleStats -n <bundle-name>\n"
417545fdf9bSopenharmony_ci    "options list:\n"
418545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
419545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
420545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
421545fdf9bSopenharmony_ci    "  -a, --app-index <app-index>            specify a app index\n";
422545fdf9bSopenharmony_ci
423545fdf9bSopenharmony_ci
424545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_APP_PROVISION_INFO =
425545fdf9bSopenharmony_ci    "usage: bundle_test_tool getAppProvisionInfo <options>\n"
426545fdf9bSopenharmony_ci    "eg:bundle_test_tool getAppProvisionInfo -n <bundle-name>\n"
427545fdf9bSopenharmony_ci    "options list:\n"
428545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
429545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
430545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
431545fdf9bSopenharmony_ci
432545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_DISTRIBUTED_BUNDLE_NAME =
433545fdf9bSopenharmony_ci    "usage: bundle_test_tool getDistributedBundleName <options>\n"
434545fdf9bSopenharmony_ci    "eg:bundle_test_tool getDistributedBundleName -n <network-id> -a <access-token-id>\n"
435545fdf9bSopenharmony_ci    "options list:\n"
436545fdf9bSopenharmony_ci    "  -h, --help                                   list available commands\n"
437545fdf9bSopenharmony_ci    "  -n, --network-id  <network-id>               specify networkId of the application\n"
438545fdf9bSopenharmony_ci    "  -a, --access-token-id <access-token-id>      specify a accessTokenId of the application \n";
439545fdf9bSopenharmony_ci
440545fdf9bSopenharmony_ciconst std::string HELP_MSG_BUNDLE_EVENT_CALLBACK =
441545fdf9bSopenharmony_ci    "usage: bundle_test_tool eventCB <options>\n"
442545fdf9bSopenharmony_ci    "options list:\n"
443545fdf9bSopenharmony_ci    "  -h, --help           list available commands\n"
444545fdf9bSopenharmony_ci    "  -o, --onlyUnregister only call unregister, default will call register then unregister\n"
445545fdf9bSopenharmony_ci    "  -u, --uid            specify a uid, default is foundation uid\n";
446545fdf9bSopenharmony_ci
447545fdf9bSopenharmony_ciconst std::string HELP_MSG_RESET_AOT_COMPILE_StATUS =
448545fdf9bSopenharmony_ci    "usage: bundle_test_tool resetAOTCompileStatus <options>\n"
449545fdf9bSopenharmony_ci    "options list:\n"
450545fdf9bSopenharmony_ci    "  -h, --help           list available commands\n"
451545fdf9bSopenharmony_ci    "  -b, --bundle-name    specify bundle name\n"
452545fdf9bSopenharmony_ci    "  -m, --module-name    specify module name\n"
453545fdf9bSopenharmony_ci    "  -t, --trigger-mode   specify trigger mode, default is 0\n"
454545fdf9bSopenharmony_ci    "  -u, --uid            specify a uid, default is bundleName's uid\n";
455545fdf9bSopenharmony_ci
456545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_PROXY_DATA =
457545fdf9bSopenharmony_ci    "usage: bundle_test_tool getProxyDataInfos <options>\n"
458545fdf9bSopenharmony_ci    "eg:bundle_test_tool getProxyDataInfos -m <module-name> -n <bundle-name> -u <user-id>\n"
459545fdf9bSopenharmony_ci    "options list:\n"
460545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
461545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        specify bundle name of the application\n"
462545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        specify module name of the application\n"
463545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
464545fdf9bSopenharmony_ci
465545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_ALL_PROXY_DATA =
466545fdf9bSopenharmony_ci    "usage: bundle_test_tool getAllProxyDataInfos <options>\n"
467545fdf9bSopenharmony_ci    "eg:bundle_test_tool getProxyDataInfos -u <user-id>\n"
468545fdf9bSopenharmony_ci    "options list:\n"
469545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
470545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
471545fdf9bSopenharmony_ci
472545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_BUNDLE_NAME_OPTION =
473545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n";
474545fdf9bSopenharmony_ci
475545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_NETWORK_ID_OPTION =
476545fdf9bSopenharmony_ci    "error: you must specify a network id with '-n' or '--network-id' \n";
477545fdf9bSopenharmony_ci
478545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_ACCESS_TOKEN_ID_OPTION =
479545fdf9bSopenharmony_ci    "error: you must specify a access token id with '-n' or '--access-token-id' \n";
480545fdf9bSopenharmony_ci
481545fdf9bSopenharmony_ciconst std::string HELP_MSG_SET_EXT_NAME_OR_MIME_TYPE =
482545fdf9bSopenharmony_ci    "usage: bundle_test_tool setExtNameOrMimeTypeToApp <options>\n"
483545fdf9bSopenharmony_ci    "eg:bundle_test_tool getProxyDataInfos -m <module-name> -n <bundle-name> -a <ability-name>\n"
484545fdf9bSopenharmony_ci    "options list:\n"
485545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
486545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        specify bundle name of the application\n"
487545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        specify module name of the application\n"
488545fdf9bSopenharmony_ci    "  -a, --ability-name <ability-name>      specify ability name of the application\n"
489545fdf9bSopenharmony_ci    "  -e, --ext-name <ext-name>              specify the ext-name\n"
490545fdf9bSopenharmony_ci    "  -t, --mime-type <mime-type>            specify the mime-type\n";
491545fdf9bSopenharmony_ci
492545fdf9bSopenharmony_ciconst std::string HELP_MSG_DEL_EXT_NAME_OR_MIME_TYPE =
493545fdf9bSopenharmony_ci    "usage: bundle_test_tool setExtNameOrMimeTypeToApp <options>\n"
494545fdf9bSopenharmony_ci    "eg:bundle_test_tool getProxyDataInfos -m <module-name> -n <bundle-name> -a <ability-name>\n"
495545fdf9bSopenharmony_ci    "options list:\n"
496545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
497545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        specify bundle name of the application\n"
498545fdf9bSopenharmony_ci    "  -m, --module-name <module-name>        specify module name of the application\n"
499545fdf9bSopenharmony_ci    "  -a, --ability-name <ability-name>      specify ability name of the application\n"
500545fdf9bSopenharmony_ci    "  -e, --ext-name <ext-name>              specify the ext-name\n"
501545fdf9bSopenharmony_ci    "  -t, --mime-type <mime-type>            specify the mime-type\n";
502545fdf9bSopenharmony_ci
503545fdf9bSopenharmony_ciconst std::string HELP_MSG_QUERY_DATA_GROUP_INFOS =
504545fdf9bSopenharmony_ci    "usage: bundle_test_tool queryDataGroupInfos <options>\n"
505545fdf9bSopenharmony_ci    "eg:bundle_test_tool queryDataGroupInfos -n <bundle-name> -u <user-id>\n"
506545fdf9bSopenharmony_ci    "options list:\n"
507545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
508545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
509545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n";
510545fdf9bSopenharmony_ci
511545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_GROUP_DIR =
512545fdf9bSopenharmony_ci    "usage: bundle_test_tool getGroupDir <options>\n"
513545fdf9bSopenharmony_ci    "eg:bundle_test_tool getGroupDir -d <data-group-id>\n"
514545fdf9bSopenharmony_ci    "options list:\n"
515545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
516545fdf9bSopenharmony_ci    "  -d, --data-group-id  <data-group-id>       specify bundle name of the application\n";
517545fdf9bSopenharmony_ci
518545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_UID_BY_BUNDLENAME =
519545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
520545fdf9bSopenharmony_ci    "and a userId with '-u' or '--user-id' \n"
521545fdf9bSopenharmony_ci    "and a appIndex with '-a' or '--app-index' \n";
522545fdf9bSopenharmony_ci
523545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_DIR_BY_BUNDLENAME_AND_APP_INDEX =
524545fdf9bSopenharmony_ci    "usage: bundle_test_tool getDirByBundleNameAndAppIndex <options>\n"
525545fdf9bSopenharmony_ci    "eg:bundle_test_tool getDirByBundleNameAndAppIndex -n <bundle-name> -a <app-index>\n"
526545fdf9bSopenharmony_ci    "options list:\n"
527545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
528545fdf9bSopenharmony_ci    "  -n, --bundle-name <bundle-name>        specify bundle name of the application\n"
529545fdf9bSopenharmony_ci    "  -a, --app-index <app-index>            specify a app index\n";
530545fdf9bSopenharmony_ci
531545fdf9bSopenharmony_ciconst std::string HELP_MSG_UPDATE_APP_EXCRYPTED_STATUS =
532545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
533545fdf9bSopenharmony_ci    "and a isExisted with '-e' or '--existed' \n"
534545fdf9bSopenharmony_ci    "and a appIndex with '-a' or '--app-index' \n";
535545fdf9bSopenharmony_ci
536545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_JSON_PROFILE_OPTION =
537545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
538545fdf9bSopenharmony_ci    "and a module name with '-m' or '--module-name' \n"
539545fdf9bSopenharmony_ci    "and a userId with '-u' or '--user-id' \n"
540545fdf9bSopenharmony_ci    "and a json profile type with '-p' or '--profile-type' \n";
541545fdf9bSopenharmony_ci
542545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_UNINSTALLED_BUNDLE_INFO_OPTION =
543545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n";
544545fdf9bSopenharmony_ci
545545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_IMPLICIT_QUERY_SKILL_URI_INFO =
546545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
547545fdf9bSopenharmony_ci    "and a action with '-a' or '--action' \n"
548545fdf9bSopenharmony_ci    "and a entity with '-e' or '--entity' \n";
549545fdf9bSopenharmony_ci
550545fdf9bSopenharmony_ciconst std::string HELP_MSG_GET_ODID =
551545fdf9bSopenharmony_ci    "usage: bundle_test_tool getOdid <options>\n"
552545fdf9bSopenharmony_ci    "eg:bundle_test_tool getOdid -u <uid>\n"
553545fdf9bSopenharmony_ci    "options list:\n"
554545fdf9bSopenharmony_ci    "  -h, --help               list available commands\n"
555545fdf9bSopenharmony_ci    "  -u, --uid  <uid>         specify uid of the application\n";
556545fdf9bSopenharmony_ci
557545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE =
558545fdf9bSopenharmony_ci    "error: you must specify a bundle name with '-n' or '--bundle-name' \n"
559545fdf9bSopenharmony_ci    "and a continueType with '-c' or '--continue-type' \n"
560545fdf9bSopenharmony_ci    "and a userId with '-u' or '--user-id' \n";
561545fdf9bSopenharmony_ci
562545fdf9bSopenharmony_ciconst std::string HELP_MSG_IS_BUNDLE_INSTALLED =
563545fdf9bSopenharmony_ci    "usage: bundle_test_tool getrm <options>\n"
564545fdf9bSopenharmony_ci    "eg:bundle_test_tool getrm -m <module-name> -n <bundle-name> \n"
565545fdf9bSopenharmony_ci    "options list:\n"
566545fdf9bSopenharmony_ci    "  -h, --help                             list available commands\n"
567545fdf9bSopenharmony_ci    "  -n, --bundle-name  <bundle-name>       specify bundle name of the application\n"
568545fdf9bSopenharmony_ci    "  -u, --user-id <user-id>                specify a user id\n"
569545fdf9bSopenharmony_ci    "  -a, --app-index <app-index>            specify a app index\n";
570545fdf9bSopenharmony_ci
571545fdf9bSopenharmony_ciconst std::string STRING_IS_BUNDLE_INSTALLED_OK = "IsBundleInstalled is ok \n";
572545fdf9bSopenharmony_ciconst std::string STRING_IS_BUNDLE_INSTALLED_NG = "error: failed to IsBundleInstalled \n";
573545fdf9bSopenharmony_ci
574545fdf9bSopenharmony_ciconst std::string STRING_SET_REMOVABLE_OK = "set removable is ok \n";
575545fdf9bSopenharmony_ciconst std::string STRING_SET_REMOVABLE_NG = "error: failed to set removable \n";
576545fdf9bSopenharmony_ciconst std::string STRING_GET_REMOVABLE_OK = "get removable is ok \n";
577545fdf9bSopenharmony_ciconst std::string STRING_GET_REMOVABLE_NG = "error: failed to get removable \n";
578545fdf9bSopenharmony_ciconst std::string STRING_REQUIRE_CORRECT_VALUE =
579545fdf9bSopenharmony_ci    "error: option requires a correct value or note that\n"
580545fdf9bSopenharmony_ci    "the difference in expressions between short option and long option. \n";
581545fdf9bSopenharmony_ci
582545fdf9bSopenharmony_ciconst std::string STRING_INSTALL_SANDBOX_SUCCESSFULLY = "install sandbox app successfully \n";
583545fdf9bSopenharmony_ciconst std::string STRING_INSTALL_SANDBOX_FAILED = "install sandbox app failed \n";
584545fdf9bSopenharmony_ci
585545fdf9bSopenharmony_ciconst std::string STRING_UPDATE_APP_EXCRYPTED_STATUS_SUCCESSFULLY = "update app encrypted status successfully \n";
586545fdf9bSopenharmony_ciconst std::string STRING_UPDATE_APP_EXCRYPTED_STATUS_FAILED = "update app encrypted status failed \n";
587545fdf9bSopenharmony_ci
588545fdf9bSopenharmony_ciconst std::string STRING_UNINSTALL_SANDBOX_SUCCESSFULLY = "uninstall sandbox app successfully\n";
589545fdf9bSopenharmony_ciconst std::string STRING_UNINSTALL_SANDBOX_FAILED = "uninstall sandbox app failed\n";
590545fdf9bSopenharmony_ci
591545fdf9bSopenharmony_ciconst std::string STRING_DUMP_SANDBOX_FAILED = "dump sandbox app info failed\n";
592545fdf9bSopenharmony_ci
593545fdf9bSopenharmony_ciconst std::string STRING_GET_STRING_NG = "error: failed to get label \n";
594545fdf9bSopenharmony_ci
595545fdf9bSopenharmony_ciconst std::string STRING_GET_ICON_NG = "error: failed to get icon \n";
596545fdf9bSopenharmony_ci
597545fdf9bSopenharmony_ciconst std::string STRING_ADD_RULE_NG = "error: failed to add rule \n";
598545fdf9bSopenharmony_ciconst std::string STRING_GET_RULE_NG = "error: failed to get rule \n";
599545fdf9bSopenharmony_ciconst std::string STRING_DELETE_RULE_NG = "error: failed to delete rule \n";
600545fdf9bSopenharmony_ci
601545fdf9bSopenharmony_ciconst std::string STRING_DEPLOY_QUICK_FIX_OK = "deploy quick fix successfully\n";
602545fdf9bSopenharmony_ciconst std::string STRING_DEPLOY_QUICK_FIX_NG = "deploy quick fix failed\n";
603545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_QUICK_FIX_PATH_OPTION = "need a quick fix patch path\n";
604545fdf9bSopenharmony_ciconst std::string STRING_SWITCH_QUICK_FIX_OK = "switch quick fix successfully\n";
605545fdf9bSopenharmony_ciconst std::string STRING_SWITCH_QUICK_FIX_NG = "switch quick fix failed\n";
606545fdf9bSopenharmony_ciconst std::string STRING_DELETE_QUICK_FIX_OK = "delete quick fix successfully\n";
607545fdf9bSopenharmony_ciconst std::string STRING_DELETE_QUICK_FIX_NG = "delete quick fix failed\n";
608545fdf9bSopenharmony_ci
609545fdf9bSopenharmony_ciconst std::string STRING_SET_DEBUG_MODE_OK = "set debug mode successfully\n";
610545fdf9bSopenharmony_ciconst std::string STRING_SET_DEBUG_MODE_NG = "set debug mode failed\n";
611545fdf9bSopenharmony_ci
612545fdf9bSopenharmony_ciconst std::string STRING_GET_BUNDLE_STATS_OK = "get bundle stats successfully\n";
613545fdf9bSopenharmony_ciconst std::string STRING_GET_BUNDLE_STATS_NG = "get bundle stats failed\n";
614545fdf9bSopenharmony_ci
615545fdf9bSopenharmony_ciconst std::string STRING_GET_APP_PROVISION_INFO_OK = "get appProvisionInfo successfully\n";
616545fdf9bSopenharmony_ciconst std::string STRING_GET_APP_PROVISION_INFO_NG = "get appProvisionInfo failed\n";
617545fdf9bSopenharmony_ci
618545fdf9bSopenharmony_ciconst std::string STRING_QUERY_DATA_GROUP_INFOS_OK = "queryDataGroupInfos successfully\n";
619545fdf9bSopenharmony_ciconst std::string STRING_QUERY_DATA_GROUP_INFOS_NG = "queryDataGroupInfos failed\n";
620545fdf9bSopenharmony_ci
621545fdf9bSopenharmony_ciconst std::string STRING_GET_GROUP_DIR_OK = "getGroupDir successfully\n";
622545fdf9bSopenharmony_ciconst std::string STRING_GET_GROUP_DIR_NG = "getGroupDir failed\n";
623545fdf9bSopenharmony_ci
624545fdf9bSopenharmony_ciconst std::string STRING_GET_JSON_PROFILE_NG = "getJsonProfile failed\n";
625545fdf9bSopenharmony_ci
626545fdf9bSopenharmony_ciconst std::string STRING_GET_UNINSTALLED_BUNDLE_INFO_NG = "getUninstalledBundleInfo failed\n";
627545fdf9bSopenharmony_ci
628545fdf9bSopenharmony_ciconst std::string STRING_GET_ODID_OK = "getOdid successfully\n";
629545fdf9bSopenharmony_ciconst std::string STRING_GET_ODID_NG = "getOdid failed\n";
630545fdf9bSopenharmony_ci
631545fdf9bSopenharmony_ciconst std::string STRING_GET_DIR_OK = "getDirByBundleNameAndAppIndex successfully\n";
632545fdf9bSopenharmony_ciconst std::string STRING_GET_DIR_NG = "getDirByBundleNameAndAppIndex failed\n";
633545fdf9bSopenharmony_ci
634545fdf9bSopenharmony_ciconst std::string STRING_GET_UID_BY_BUNDLENAME_NG = "getUidByBundleName failed\n";
635545fdf9bSopenharmony_ci
636545fdf9bSopenharmony_ciconst std::string STRING_IMPLICIT_QUERY_SKILL_URI_INFO_NG =
637545fdf9bSopenharmony_ci    "implicitQuerySkillUriInfo failed\n";
638545fdf9bSopenharmony_ci
639545fdf9bSopenharmony_ciconst std::string STRING_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE_NG =
640545fdf9bSopenharmony_ci    "queryAbilityInfoByContinueType failed\n";
641545fdf9bSopenharmony_ci
642545fdf9bSopenharmony_ciconst std::string HELP_MSG_NO_GET_DISTRIBUTED_BUNDLE_NAME_OPTION =
643545fdf9bSopenharmony_ci    "error: you must specify a control type with '-n' or '--network-id' \n"
644545fdf9bSopenharmony_ci    "and a accessTokenId with '-a' or '--access-token-id' \n";
645545fdf9bSopenharmony_ci
646545fdf9bSopenharmony_ciconst std::string GET_DISTRIBUTED_BUNDLE_NAME_COMMAND_NAME = "getDistributedBundleName";
647545fdf9bSopenharmony_ci
648545fdf9bSopenharmony_ciconst std::string STRING_GET_DISTRIBUTED_BUNDLE_NAME_OK = "get distributedBundleName successfully\n";
649545fdf9bSopenharmony_ciconst std::string STRING_GET_DISTRIBUTED_BUNDLE_NAME_NG = "get distributedBundleName failed\n";
650545fdf9bSopenharmony_ci
651545fdf9bSopenharmony_ciconst std::string STRING_GET_PROXY_DATA_NG = "get proxyData failed";
652545fdf9bSopenharmony_ci
653545fdf9bSopenharmony_ciconst std::string GET_BUNDLE_STATS_ARRAY[] = {
654545fdf9bSopenharmony_ci    "app data size: ",
655545fdf9bSopenharmony_ci    "user data size: ",
656545fdf9bSopenharmony_ci    "distributed data size: ",
657545fdf9bSopenharmony_ci    "database size: ",
658545fdf9bSopenharmony_ci    "cache size: "
659545fdf9bSopenharmony_ci};
660545fdf9bSopenharmony_ci
661545fdf9bSopenharmony_ciconst std::string GET_RM = "getrm";
662545fdf9bSopenharmony_ciconst std::string SET_RM = "setrm";
663545fdf9bSopenharmony_ciconst std::string INSTALL_SANDBOX = "installSandbox";
664545fdf9bSopenharmony_ciconst std::string UNINSTALL_SANDBOX = "uninstallSandbox";
665545fdf9bSopenharmony_ciconst std::string DUMP_SANDBOX = "dumpSandbox";
666545fdf9bSopenharmony_ci
667545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS = "hn:m:a:d:u:i:";
668545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS[] = {
669545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
670545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
671545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
672545fdf9bSopenharmony_ci    {"ability-name", required_argument, nullptr, 'a'},
673545fdf9bSopenharmony_ci    {"device-id", required_argument, nullptr, 'd'},
674545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
675545fdf9bSopenharmony_ci    {"is-removable", required_argument, nullptr, 'i'},
676545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
677545fdf9bSopenharmony_ci};
678545fdf9bSopenharmony_ci
679545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_IS_BUNDLE_INSTALLED = "hn:u:a:";
680545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_IS_BUNDLE_INSTALLED[] = {
681545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
682545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
683545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
684545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
685545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
686545fdf9bSopenharmony_ci};
687545fdf9bSopenharmony_ci
688545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_SANDBOX = "hn:d:u:a:";
689545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_SANDBOX[] = {
690545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
691545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
692545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
693545fdf9bSopenharmony_ci    {"dlp-type", required_argument, nullptr, 'd'},
694545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
695545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
696545fdf9bSopenharmony_ci};
697545fdf9bSopenharmony_ci
698545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET = "hn:m:u:i:d:";
699545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET[] = {
700545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
701545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
702545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
703545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
704545fdf9bSopenharmony_ci    {"id", required_argument, nullptr, 'i'},
705545fdf9bSopenharmony_ci    {"density", required_argument, nullptr, 'd'},
706545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
707545fdf9bSopenharmony_ci};
708545fdf9bSopenharmony_ci
709545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_RULE = "ha:c:n:e:r:t:u:";
710545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_RULE[] = {
711545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
712545fdf9bSopenharmony_ci    {"app-id", required_argument, nullptr, 'a'},
713545fdf9bSopenharmony_ci    {"control-rule", required_argument, nullptr, 'c'},
714545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
715545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
716545fdf9bSopenharmony_ci    {"euid", required_argument, nullptr, 'e'},
717545fdf9bSopenharmony_ci    {"control-rule-type", required_argument, nullptr, 't'},
718545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
719545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
720545fdf9bSopenharmony_ci};
721545fdf9bSopenharmony_ci
722545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_AUTO_CLEAN_CACHE = "hs:";
723545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_AUTO_CLEAN_CACHE[] = {
724545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
725545fdf9bSopenharmony_ci    {"cache-size", required_argument, nullptr, 's'},
726545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
727545fdf9bSopenharmony_ci};
728545fdf9bSopenharmony_ci
729545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_UPDATE_APP_EXCRYPTED_STATUS = "hn:e:a:";
730545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_UPDATE_APP_EXCRYPTED_STATUS[] = {
731545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
732545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
733545fdf9bSopenharmony_ci    {"existed", required_argument, nullptr, 'e'},
734545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
735545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
736545fdf9bSopenharmony_ci};
737545fdf9bSopenharmony_ci
738545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_QUICK_FIX = "hp:n:e:d:";
739545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_QUICK_FIX[] = {
740545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
741545fdf9bSopenharmony_ci    {"patch-path", required_argument, nullptr, 'p'},
742545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
743545fdf9bSopenharmony_ci    {"enable", required_argument, nullptr, 'e'},
744545fdf9bSopenharmony_ci    {"debug", required_argument, nullptr, 'd'},
745545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
746545fdf9bSopenharmony_ci};
747545fdf9bSopenharmony_ci
748545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_DEBUG_MODE = "he:";
749545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_DEBUG_MODE[] = {
750545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
751545fdf9bSopenharmony_ci    {"enable", required_argument, nullptr, 'e'},
752545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
753545fdf9bSopenharmony_ci};
754545fdf9bSopenharmony_ci
755545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_BUNDLE_STATS = "hn:u:a:";
756545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_BUNDLE_STATS[] = {
757545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
758545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
759545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
760545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
761545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
762545fdf9bSopenharmony_ci};
763545fdf9bSopenharmony_ci
764545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_DISTRIBUTED_BUNDLE_NAME = "hn:a:";
765545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_DISTRIBUTED_BUNDLE_NAME[] = {
766545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
767545fdf9bSopenharmony_ci    {"network-id", required_argument, nullptr, 'n'},
768545fdf9bSopenharmony_ci    {"access-token-id", required_argument, nullptr, 'a'},
769545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
770545fdf9bSopenharmony_ci};
771545fdf9bSopenharmony_ci
772545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_BUNDLE_EVENT_CALLBACK = "hou:";
773545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_BUNDLE_EVENT_CALLBACK[] = {
774545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
775545fdf9bSopenharmony_ci    {"onlyUnregister", no_argument, nullptr, 'o'},
776545fdf9bSopenharmony_ci    {"uid", required_argument, nullptr, 'u'},
777545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
778545fdf9bSopenharmony_ci};
779545fdf9bSopenharmony_ci
780545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_RESET_AOT_COMPILE_StATUS = "b:m:t:u:";
781545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_RESET_AOT_COMPILE_StATUS[] = {
782545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
783545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'b'},
784545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
785545fdf9bSopenharmony_ci    {"trigger-mode", required_argument, nullptr, 't'},
786545fdf9bSopenharmony_ci    {"uid", required_argument, nullptr, 'u'},
787545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
788545fdf9bSopenharmony_ci};
789545fdf9bSopenharmony_ci
790545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_PROXY_DATA = "hn:m:u:";
791545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_PROXY_DATA[] = {
792545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
793545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
794545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
795545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
796545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
797545fdf9bSopenharmony_ci};
798545fdf9bSopenharmony_ci
799545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_ALL_PROXY_DATA = "hu:";
800545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_ALL_PROXY_DATA[] = {
801545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
802545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
803545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
804545fdf9bSopenharmony_ci};
805545fdf9bSopenharmony_ci
806545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_UID_BY_BUNDLENAME = "hn:u:a:";
807545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_UID_BY_BUNDLENAME[] = {
808545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
809545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
810545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
811545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
812545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
813545fdf9bSopenharmony_ci};
814545fdf9bSopenharmony_ci
815545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_MIME = "ha:e:m:n:t:";
816545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_MIME[] = {
817545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
818545fdf9bSopenharmony_ci    {"ability-name", required_argument, nullptr, 'a'},
819545fdf9bSopenharmony_ci    {"ext-name", required_argument, nullptr, 'e'},
820545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
821545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
822545fdf9bSopenharmony_ci    {"mime-type", required_argument, nullptr, 't'},
823545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
824545fdf9bSopenharmony_ci};
825545fdf9bSopenharmony_ci
826545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_GROUP_DIR = "hd:";
827545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_GROUP_DIR[] = {
828545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
829545fdf9bSopenharmony_ci    {"data-group-id", required_argument, nullptr, 'd'},
830545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
831545fdf9bSopenharmony_ci};
832545fdf9bSopenharmony_ci
833545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_JSON_PROFILE = "hp:n:m:u:";
834545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_JSON_PROFILE[] = {
835545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
836545fdf9bSopenharmony_ci    {"profile-type", required_argument, nullptr, 'p'},
837545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
838545fdf9bSopenharmony_ci    {"module-name", required_argument, nullptr, 'm'},
839545fdf9bSopenharmony_ci    {"user-id", required_argument, nullptr, 'u'},
840545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
841545fdf9bSopenharmony_ci};
842545fdf9bSopenharmony_ci
843545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_UNINSTALLED_BUNDLE_INFO = "hn:";
844545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_UNINSTALLED_BUNDLE_INFO[] = {
845545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
846545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
847545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
848545fdf9bSopenharmony_ci};
849545fdf9bSopenharmony_ci
850545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_ODID = "hu:";
851545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_ODID[] = {
852545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
853545fdf9bSopenharmony_ci    {"uid", required_argument, nullptr, 'u'},
854545fdf9bSopenharmony_ci};
855545fdf9bSopenharmony_ci
856545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_IMPLICIT_QUERY_SKILL_URI_INFO = "hn:a:e:u:t:";
857545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_IMPLICIT_QUERY_SKILL_URI_INFO[] = {
858545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
859545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
860545fdf9bSopenharmony_ci    {"action", required_argument, nullptr, 'a'},
861545fdf9bSopenharmony_ci    {"entity", required_argument, nullptr, 'e'},
862545fdf9bSopenharmony_ci    {"uri", required_argument, nullptr, 'u'},
863545fdf9bSopenharmony_ci    {"type", required_argument, nullptr, 't'},
864545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
865545fdf9bSopenharmony_ci};
866545fdf9bSopenharmony_ci
867545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE = "hn:c:u:";
868545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE[] = {
869545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
870545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
871545fdf9bSopenharmony_ci    {"continueType", required_argument, nullptr, 'c'},
872545fdf9bSopenharmony_ci    {"userId", required_argument, nullptr, 'u'},
873545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
874545fdf9bSopenharmony_ci};
875545fdf9bSopenharmony_ci
876545fdf9bSopenharmony_ciconst std::string SHORT_OPTIONS_GET_DIR = "hn:a:";
877545fdf9bSopenharmony_ciconst struct option LONG_OPTIONS_GET_DIR[] = {
878545fdf9bSopenharmony_ci    {"help", no_argument, nullptr, 'h'},
879545fdf9bSopenharmony_ci    {"bundle-name", required_argument, nullptr, 'n'},
880545fdf9bSopenharmony_ci    {"app-index", required_argument, nullptr, 'a'},
881545fdf9bSopenharmony_ci    {nullptr, 0, nullptr, 0},
882545fdf9bSopenharmony_ci};
883545fdf9bSopenharmony_ci
884545fdf9bSopenharmony_ci}  // namespace
885545fdf9bSopenharmony_ci
886545fdf9bSopenharmony_ciBundleEventCallbackImpl::BundleEventCallbackImpl()
887545fdf9bSopenharmony_ci{
888545fdf9bSopenharmony_ci    APP_LOGI("create BundleEventCallbackImpl");
889545fdf9bSopenharmony_ci}
890545fdf9bSopenharmony_ci
891545fdf9bSopenharmony_ciBundleEventCallbackImpl::~BundleEventCallbackImpl()
892545fdf9bSopenharmony_ci{
893545fdf9bSopenharmony_ci    APP_LOGI("destroy BundleEventCallbackImpl");
894545fdf9bSopenharmony_ci}
895545fdf9bSopenharmony_ci
896545fdf9bSopenharmony_civoid BundleEventCallbackImpl::OnReceiveEvent(const EventFwk::CommonEventData eventData)
897545fdf9bSopenharmony_ci{
898545fdf9bSopenharmony_ci    const Want &want = eventData.GetWant();
899545fdf9bSopenharmony_ci    std::string bundleName = want.GetElement().GetBundleName();
900545fdf9bSopenharmony_ci    std::string moduleName = want.GetElement().GetModuleName();
901545fdf9bSopenharmony_ci    APP_LOGI("OnReceiveEvent, bundleName:%{public}s, moduleName:%{public}s", bundleName.c_str(), moduleName.c_str());
902545fdf9bSopenharmony_ci}
903545fdf9bSopenharmony_ci
904545fdf9bSopenharmony_ciBundleTestTool::BundleTestTool(int argc, char *argv[]) : ShellCommand(argc, argv, TOOL_NAME)
905545fdf9bSopenharmony_ci{}
906545fdf9bSopenharmony_ci
907545fdf9bSopenharmony_ciBundleTestTool::~BundleTestTool()
908545fdf9bSopenharmony_ci{}
909545fdf9bSopenharmony_ci
910545fdf9bSopenharmony_ciErrCode BundleTestTool::CreateCommandMap()
911545fdf9bSopenharmony_ci{
912545fdf9bSopenharmony_ci    commandMap_ = {
913545fdf9bSopenharmony_ci        {"help", std::bind(&BundleTestTool::RunAsHelpCommand, this)},
914545fdf9bSopenharmony_ci        {"check", std::bind(&BundleTestTool::RunAsCheckCommand, this)},
915545fdf9bSopenharmony_ci        {"setrm", std::bind(&BundleTestTool::RunAsSetRemovableCommand, this)},
916545fdf9bSopenharmony_ci        {"getrm", std::bind(&BundleTestTool::RunAsGetRemovableCommand, this)},
917545fdf9bSopenharmony_ci        {"installSandbox", std::bind(&BundleTestTool::RunAsInstallSandboxCommand, this)},
918545fdf9bSopenharmony_ci        {"uninstallSandbox", std::bind(&BundleTestTool::RunAsUninstallSandboxCommand, this)},
919545fdf9bSopenharmony_ci        {"dumpSandbox", std::bind(&BundleTestTool::RunAsDumpSandboxCommand, this)},
920545fdf9bSopenharmony_ci        {"getStr", std::bind(&BundleTestTool::RunAsGetStringCommand, this)},
921545fdf9bSopenharmony_ci        {"getIcon", std::bind(&BundleTestTool::RunAsGetIconCommand, this)},
922545fdf9bSopenharmony_ci        {"addAppInstallRule", std::bind(&BundleTestTool::RunAsAddInstallRuleCommand, this)},
923545fdf9bSopenharmony_ci        {"getAppInstallRule", std::bind(&BundleTestTool::RunAsGetInstallRuleCommand, this)},
924545fdf9bSopenharmony_ci        {"deleteAppInstallRule", std::bind(&BundleTestTool::RunAsDeleteInstallRuleCommand, this)},
925545fdf9bSopenharmony_ci        {"cleanAppInstallRule", std::bind(&BundleTestTool::RunAsCleanInstallRuleCommand, this)},
926545fdf9bSopenharmony_ci        {"addAppRunningRule", std::bind(&BundleTestTool::RunAsAddAppRunningRuleCommand, this)},
927545fdf9bSopenharmony_ci        {"deleteAppRunningRule", std::bind(&BundleTestTool::RunAsDeleteAppRunningRuleCommand, this)},
928545fdf9bSopenharmony_ci        {"cleanAppRunningRule", std::bind(&BundleTestTool::RunAsCleanAppRunningRuleCommand, this)},
929545fdf9bSopenharmony_ci        {"getAppRunningControlRule", std::bind(&BundleTestTool::RunAsGetAppRunningControlRuleCommand, this)},
930545fdf9bSopenharmony_ci        {"getAppRunningControlRuleResult",
931545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsGetAppRunningControlRuleResultCommand, this)},
932545fdf9bSopenharmony_ci        {"deployQuickFix", std::bind(&BundleTestTool::RunAsDeployQuickFix, this)},
933545fdf9bSopenharmony_ci        {"switchQuickFix", std::bind(&BundleTestTool::RunAsSwitchQuickFix, this)},
934545fdf9bSopenharmony_ci        {"deleteQuickFix", std::bind(&BundleTestTool::RunAsDeleteQuickFix, this)},
935545fdf9bSopenharmony_ci        {"setDebugMode", std::bind(&BundleTestTool::RunAsSetDebugMode, this)},
936545fdf9bSopenharmony_ci        {"getBundleStats", std::bind(&BundleTestTool::RunAsGetBundleStats, this)},
937545fdf9bSopenharmony_ci        {"getAppProvisionInfo", std::bind(&BundleTestTool::RunAsGetAppProvisionInfo, this)},
938545fdf9bSopenharmony_ci        {"getDistributedBundleName", std::bind(&BundleTestTool::RunAsGetDistributedBundleName, this)},
939545fdf9bSopenharmony_ci        {"eventCB", std::bind(&BundleTestTool::HandleBundleEventCallback, this)},
940545fdf9bSopenharmony_ci        {"resetAOTCompileStatus", std::bind(&BundleTestTool::ResetAOTCompileStatus, this)},
941545fdf9bSopenharmony_ci        {"sendCommonEvent", std::bind(&BundleTestTool::SendCommonEvent, this)},
942545fdf9bSopenharmony_ci        {"getProxyDataInfos", std::bind(&BundleTestTool::RunAsGetProxyDataCommand, this)},
943545fdf9bSopenharmony_ci        {"getAllProxyDataInfos", std::bind(&BundleTestTool::RunAsGetAllProxyDataCommand, this)},
944545fdf9bSopenharmony_ci        {"setExtNameOrMimeToApp", std::bind(&BundleTestTool::RunAsSetExtNameOrMIMEToAppCommand, this)},
945545fdf9bSopenharmony_ci        {"delExtNameOrMimeToApp", std::bind(&BundleTestTool::RunAsDelExtNameOrMIMEToAppCommand, this)},
946545fdf9bSopenharmony_ci        {"queryDataGroupInfos", std::bind(&BundleTestTool::RunAsQueryDataGroupInfos, this)},
947545fdf9bSopenharmony_ci        {"getGroupDir", std::bind(&BundleTestTool::RunAsGetGroupDir, this)},
948545fdf9bSopenharmony_ci        {"getJsonProfile", std::bind(&BundleTestTool::RunAsGetJsonProfile, this)},
949545fdf9bSopenharmony_ci        {"getUninstalledBundleInfo", std::bind(&BundleTestTool::RunAsGetUninstalledBundleInfo, this)},
950545fdf9bSopenharmony_ci        {"getOdid", std::bind(&BundleTestTool::RunAsGetOdid, this)},
951545fdf9bSopenharmony_ci        {"getUidByBundleName", std::bind(&BundleTestTool::RunGetUidByBundleName, this)},
952545fdf9bSopenharmony_ci        {"implicitQuerySkillUriInfo",
953545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsImplicitQuerySkillUriInfo, this)},
954545fdf9bSopenharmony_ci        {"queryAbilityInfoByContinueType",
955545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsQueryAbilityInfoByContinueType, this)},
956545fdf9bSopenharmony_ci        {"cleanBundleCacheFilesAutomatic",
957545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsCleanBundleCacheFilesAutomaticCommand, this)},
958545fdf9bSopenharmony_ci        {"getContinueBundleName",
959545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsGetContinueBundleName, this)},
960545fdf9bSopenharmony_ci        {"updateAppEncryptedStatus",
961545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsUpdateAppEncryptedStatus, this)},
962545fdf9bSopenharmony_ci        {"getDirByBundleNameAndAppIndex",
963545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsGetDirByBundleNameAndAppIndex, this)},
964545fdf9bSopenharmony_ci        {"isBundleInstalled",
965545fdf9bSopenharmony_ci            std::bind(&BundleTestTool::RunAsIsBundleInstalled, this)}
966545fdf9bSopenharmony_ci    };
967545fdf9bSopenharmony_ci
968545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
969545fdf9bSopenharmony_ci}
970545fdf9bSopenharmony_ci
971545fdf9bSopenharmony_ciErrCode BundleTestTool::CreateMessageMap()
972545fdf9bSopenharmony_ci{
973545fdf9bSopenharmony_ci    messageMap_ = BundleCommandCommon::bundleMessageMap_;
974545fdf9bSopenharmony_ci
975545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
976545fdf9bSopenharmony_ci}
977545fdf9bSopenharmony_ci
978545fdf9bSopenharmony_ciErrCode BundleTestTool::Init()
979545fdf9bSopenharmony_ci{
980545fdf9bSopenharmony_ci    APP_LOGI("BundleTestTool Init()");
981545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
982545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
983545fdf9bSopenharmony_ci        bundleMgrProxy_ = BundleCommandCommon::GetBundleMgrProxy();
984545fdf9bSopenharmony_ci        if (bundleMgrProxy_ != nullptr) {
985545fdf9bSopenharmony_ci            if (bundleInstallerProxy_ == nullptr) {
986545fdf9bSopenharmony_ci                bundleInstallerProxy_ = bundleMgrProxy_->GetBundleInstaller();
987545fdf9bSopenharmony_ci            }
988545fdf9bSopenharmony_ci        }
989545fdf9bSopenharmony_ci    }
990545fdf9bSopenharmony_ci
991545fdf9bSopenharmony_ci    if ((bundleMgrProxy_ == nullptr) || (bundleInstallerProxy_ == nullptr) ||
992545fdf9bSopenharmony_ci        (bundleInstallerProxy_->AsObject() == nullptr)) {
993545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
994545fdf9bSopenharmony_ci    }
995545fdf9bSopenharmony_ci
996545fdf9bSopenharmony_ci#ifdef DISTRIBUTED_BUNDLE_FRAMEWORK
997545fdf9bSopenharmony_ci    if (distributedBmsProxy_ == nullptr) {
998545fdf9bSopenharmony_ci        distributedBmsProxy_ = BundleCommandCommon::GetDistributedBundleMgrService();
999545fdf9bSopenharmony_ci    }
1000545fdf9bSopenharmony_ci#endif
1001545fdf9bSopenharmony_ci
1002545fdf9bSopenharmony_ci    return result;
1003545fdf9bSopenharmony_ci}
1004545fdf9bSopenharmony_ci
1005545fdf9bSopenharmony_civoid BundleTestTool::CreateQuickFixMsgMap(std::unordered_map<int32_t, std::string> &quickFixMsgMap)
1006545fdf9bSopenharmony_ci{
1007545fdf9bSopenharmony_ci    quickFixMsgMap = {
1008545fdf9bSopenharmony_ci        { ERR_OK, Constants::EMPTY_STRING },
1009545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR },
1010545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PARAM_ERROR, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PARAM_ERROR },
1011545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PROFILE_PARSE_FAILED, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PROFILE_PARSE_FAILED },
1012545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_SAME, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_SAME },
1013545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_NOT_SAME, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_NOT_SAME },
1014545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_NAME_NOT_SAME, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_NAME_NOT_SAME },
1015545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_CODE_NOT_SAME,
1016545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_CODE_NOT_SAME },
1017545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_NAME_NOT_SAME,
1018545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_VERSION_NAME_NOT_SAME },
1019545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_TYPE_NOT_SAME, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_TYPE_NOT_SAME },
1020545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_UNKNOWN_QUICK_FIX_TYPE, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_UNKNOWN_QUICK_FIX_TYPE },
1021545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_SO_INCOMPATIBLE, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SO_INCOMPATIBLE },
1022545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_EXIST, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_BUNDLE_NAME_NOT_EXIST },
1023545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_NOT_EXIST, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_NOT_EXIST },
1024545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_SIGNATURE_INFO_NOT_SAME,
1025545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SIGNATURE_INFO_NOT_SAME },
1026545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_EXTRACT_DIFF_FILES_FAILED,
1027545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_EXTRACT_DIFF_FILES_FAILED },
1028545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_APPLY_DIFF_PATCH_FAILED,
1029545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_APPLY_DIFF_PATCH_FAILED },
1030545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_FEATURE_IS_NOT_SUPPORTED, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_FEATURE_IS_NOT_SUPPORTED },
1031545fdf9bSopenharmony_ci        { ERR_APPEXECFWK_OPERATION_TIME_OUT, MSG_ERR_BUNDLEMANAGER_OPERATION_TIME_OUT },
1032545fdf9bSopenharmony_ci        { ERR_APPEXECFWK_FAILED_SERVICE_DIED, MSG_ERR_BUNDLEMANAGER_FAILED_SERVICE_DIED },
1033545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_NOT_SUPPORT_RELEASE_BUNDLE,
1034545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_NOT_SUPPORT_RELEASE_BUNDLE },
1035545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_ALREADY_EXISTED, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_PATCH_ALREADY_EXISTED },
1036545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_ALREADY_EXISTED,
1037545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_HOT_RELOAD_ALREADY_EXISTED },
1038545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_SAME, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MODULE_NAME_SAME },
1039545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_INFO_IN_BUNDLE_INFO,
1040545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_INFO_IN_BUNDLE_INFO },
1041545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INVALID_PARAM, MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INVALID_PARAM },
1042545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INTERNAL_ERROR, MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INTERNAL_ERROR },
1043545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_SET_DEBUG_MODE_PARCEL_ERROR, MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_PARCEL_ERROR },
1044545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_SET_DEBUG_MODE_SEND_REQUEST_ERROR,
1045545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_SEND_REQUEST_ERROR },
1046545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_SET_DEBUG_MODE_UID_CHECK_FAILED, MSG_ERR_BUNDLEMANAGER_SET_DEBUG_MODE_UID_CHECK_FAILED },
1047545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_ADD_HQF_FAILED, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_ADD_HQF_FAILED },
1048545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_SAVE_APP_QUICK_FIX_FAILED,
1049545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_SAVE_APP_QUICK_FIX_FAILED },
1050545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_ERROR, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_VERSION_CODE_ERROR },
1051545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_IN_DATABASE, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NO_PATCH_IN_DATABASE },
1052545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_INVALID_PATCH_STATUS, MSG_ERR_BUNDLEMANAGER_QUICK_FIX_INVALID_PATCH_STATUS },
1053545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_NOT_EXISTED_BUNDLE_INFO,
1054545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_NOT_EXISTED_BUNDLE_INFO },
1055545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_REMOVE_PATCH_PATH_FAILED,
1056545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_REMOVE_PATCH_PATH_FAILED },
1057545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_MOVE_PATCH_FILE_FAILED,
1058545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_MOVE_PATCH_FILE_FAILED },
1059545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_CREATE_PATCH_PATH_FAILED,
1060545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_CREATE_PATCH_PATH_FAILED },
1061545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_OLD_PATCH_OR_HOT_RELOAD_IN_DB,
1062545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_OLD_PATCH_OR_HOT_RELOAD_IN_DB },
1063545fdf9bSopenharmony_ci        { ERR_BUNDLEMANAGER_QUICK_FIX_RELEASE_HAP_HAS_RESOURCES_FILE_FAILED,
1064545fdf9bSopenharmony_ci            MSG_ERR_BUNDLEMANAGER_QUICK_FIX_RELEASE_HAP_HAS_RESOURCES_FILE_FAILED }
1065545fdf9bSopenharmony_ci    };
1066545fdf9bSopenharmony_ci}
1067545fdf9bSopenharmony_ci
1068545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsHelpCommand()
1069545fdf9bSopenharmony_ci{
1070545fdf9bSopenharmony_ci    resultReceiver_.append(HELP_MSG);
1071545fdf9bSopenharmony_ci
1072545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
1073545fdf9bSopenharmony_ci}
1074545fdf9bSopenharmony_ci
1075545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckOperation(int userId, std::string deviceId, std::string bundleName,
1076545fdf9bSopenharmony_ci    std::string moduleName, std::string abilityName)
1077545fdf9bSopenharmony_ci{
1078545fdf9bSopenharmony_ci    std::unique_lock<std::mutex> lock(mutex_);
1079545fdf9bSopenharmony_ci    sptr<BundleToolCallbackStub> bundleToolCallbackStub =
1080545fdf9bSopenharmony_ci        new(std::nothrow) BundleToolCallbackStub(cv_, mutex_, dataReady_);
1081545fdf9bSopenharmony_ci    if (bundleToolCallbackStub == nullptr) {
1082545fdf9bSopenharmony_ci        APP_LOGE("bundleToolCallbackStub is null");
1083545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
1084545fdf9bSopenharmony_ci    }
1085545fdf9bSopenharmony_ci    APP_LOGI("CheckAbilityEnableInstall param: userId:%{public}d, bundleName:%{public}s, moduleName:%{public}s," \
1086545fdf9bSopenharmony_ci        "abilityName:%{public}s", userId, bundleName.c_str(), moduleName.c_str(), abilityName.c_str());
1087545fdf9bSopenharmony_ci    AAFwk::Want want;
1088545fdf9bSopenharmony_ci    want.SetElementName(deviceId, bundleName, abilityName, moduleName);
1089545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->CheckAbilityEnableInstall(want, 1, userId, bundleToolCallbackStub);
1090545fdf9bSopenharmony_ci    if (!ret) {
1091545fdf9bSopenharmony_ci        APP_LOGE("CheckAbilityEnableInstall failed");
1092545fdf9bSopenharmony_ci        return OHOS::ERR_OK;
1093545fdf9bSopenharmony_ci    }
1094545fdf9bSopenharmony_ci    APP_LOGI("CheckAbilityEnableInstall wait");
1095545fdf9bSopenharmony_ci    cv_.wait(lock, [this] { return dataReady_; });
1096545fdf9bSopenharmony_ci    dataReady_ = false;
1097545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
1098545fdf9bSopenharmony_ci}
1099545fdf9bSopenharmony_ci
1100545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsCheckCommand()
1101545fdf9bSopenharmony_ci{
1102545fdf9bSopenharmony_ci    int counter = 0;
1103545fdf9bSopenharmony_ci    int userId = 100;
1104545fdf9bSopenharmony_ci    std::string deviceId = "";
1105545fdf9bSopenharmony_ci    std::string bundleName = "";
1106545fdf9bSopenharmony_ci    std::string moduleName = "";
1107545fdf9bSopenharmony_ci    std::string abilityName = "";
1108545fdf9bSopenharmony_ci    while (true) {
1109545fdf9bSopenharmony_ci        counter++;
1110545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS.c_str(), LONG_OPTIONS, nullptr);
1111545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1112545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1113545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1114545fdf9bSopenharmony_ci        }
1115545fdf9bSopenharmony_ci        if (option == -1) {
1116545fdf9bSopenharmony_ci            // When scanning the first argument
1117545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
1118545fdf9bSopenharmony_ci                // 'CheckAbilityEnableInstall' with no option: CheckAbilityEnableInstall
1119545fdf9bSopenharmony_ci                // 'CheckAbilityEnableInstall' with a wrong argument: CheckAbilityEnableInstall
1120545fdf9bSopenharmony_ci                APP_LOGD("'CheckAbilityEnableInstall' with no option.");
1121545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
1122545fdf9bSopenharmony_ci            }
1123545fdf9bSopenharmony_ci            break;
1124545fdf9bSopenharmony_ci        }
1125545fdf9bSopenharmony_ci        switch (option) {
1126545fdf9bSopenharmony_ci            case 'n': {
1127545fdf9bSopenharmony_ci                bundleName = optarg;
1128545fdf9bSopenharmony_ci                break;
1129545fdf9bSopenharmony_ci            }
1130545fdf9bSopenharmony_ci            case 'm': {
1131545fdf9bSopenharmony_ci                moduleName = optarg;
1132545fdf9bSopenharmony_ci                break;
1133545fdf9bSopenharmony_ci            }
1134545fdf9bSopenharmony_ci            case 'a': {
1135545fdf9bSopenharmony_ci                abilityName = optarg;
1136545fdf9bSopenharmony_ci                break;
1137545fdf9bSopenharmony_ci            }
1138545fdf9bSopenharmony_ci            case 'd': {
1139545fdf9bSopenharmony_ci                deviceId = optarg;
1140545fdf9bSopenharmony_ci                break;
1141545fdf9bSopenharmony_ci            }
1142545fdf9bSopenharmony_ci            case 'u': {
1143545fdf9bSopenharmony_ci                userId = std::stoi(optarg);
1144545fdf9bSopenharmony_ci                break;
1145545fdf9bSopenharmony_ci            }
1146545fdf9bSopenharmony_ci            default: {
1147545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
1148545fdf9bSopenharmony_ci            }
1149545fdf9bSopenharmony_ci        }
1150545fdf9bSopenharmony_ci    }
1151545fdf9bSopenharmony_ci    return CheckOperation(userId, deviceId, bundleName, moduleName, abilityName);
1152545fdf9bSopenharmony_ci}
1153545fdf9bSopenharmony_ci
1154545fdf9bSopenharmony_cibool BundleTestTool::SetIsRemovableOperation(
1155545fdf9bSopenharmony_ci    const std::string &bundleName, const std::string &moduleName, int isRemovable) const
1156545fdf9bSopenharmony_ci{
1157545fdf9bSopenharmony_ci    bool enable = true;
1158545fdf9bSopenharmony_ci    if (isRemovable == 0) {
1159545fdf9bSopenharmony_ci        enable = false;
1160545fdf9bSopenharmony_ci    }
1161545fdf9bSopenharmony_ci    APP_LOGD("bundleName: %{public}s, moduleName:%{public}s, enable:%{public}d", bundleName.c_str(), moduleName.c_str(),
1162545fdf9bSopenharmony_ci        enable);
1163545fdf9bSopenharmony_ci    auto ret = bundleMgrProxy_->SetModuleRemovable(bundleName, moduleName, enable);
1164545fdf9bSopenharmony_ci    APP_LOGD("SetModuleRemovable end bundleName: %{public}d", ret);
1165545fdf9bSopenharmony_ci    if (!ret) {
1166545fdf9bSopenharmony_ci        APP_LOGE("SetIsRemovableOperation failed");
1167545fdf9bSopenharmony_ci        return false;
1168545fdf9bSopenharmony_ci    }
1169545fdf9bSopenharmony_ci    return ret;
1170545fdf9bSopenharmony_ci}
1171545fdf9bSopenharmony_ci
1172545fdf9bSopenharmony_cibool BundleTestTool::GetIsRemovableOperation(
1173545fdf9bSopenharmony_ci    const std::string &bundleName, const std::string &moduleName, std::string &result) const
1174545fdf9bSopenharmony_ci{
1175545fdf9bSopenharmony_ci    APP_LOGD("bundleName: %{public}s, moduleName:%{public}s", bundleName.c_str(), moduleName.c_str());
1176545fdf9bSopenharmony_ci    bool isRemovable = false;
1177545fdf9bSopenharmony_ci    auto ret = bundleMgrProxy_->IsModuleRemovable(bundleName, moduleName, isRemovable);
1178545fdf9bSopenharmony_ci    APP_LOGD("IsModuleRemovable end bundleName: %{public}s, isRemovable:%{public}d", bundleName.c_str(), isRemovable);
1179545fdf9bSopenharmony_ci    result.append("isRemovable: " + std::to_string(isRemovable) + "\n");
1180545fdf9bSopenharmony_ci    if (ret != ERR_OK) {
1181545fdf9bSopenharmony_ci        APP_LOGE("IsModuleRemovable failed, ret: %{public}d", ret);
1182545fdf9bSopenharmony_ci        return false;
1183545fdf9bSopenharmony_ci    }
1184545fdf9bSopenharmony_ci    return true;
1185545fdf9bSopenharmony_ci}
1186545fdf9bSopenharmony_ci
1187545fdf9bSopenharmony_cibool BundleTestTool::CheckRemovableErrorOption(int option, int counter, const std::string &commandName)
1188545fdf9bSopenharmony_ci{
1189545fdf9bSopenharmony_ci    if (option == -1) {
1190545fdf9bSopenharmony_ci        if (counter == 1) {
1191545fdf9bSopenharmony_ci            if (strcmp(argv_[optind], cmd_.c_str()) == 0) {
1192545fdf9bSopenharmony_ci                // 'bundle_test_tool setrm/getrm' with no option: bundle_test_tool setrm/getrm
1193545fdf9bSopenharmony_ci                // 'bundle_test_tool setrm/getrm' with a wrong argument: bundle_test_tool setrm/getrm xxx
1194545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with no option.", commandName.c_str());
1195545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
1196545fdf9bSopenharmony_ci                return false;
1197545fdf9bSopenharmony_ci            }
1198545fdf9bSopenharmony_ci        }
1199545fdf9bSopenharmony_ci        return true;
1200545fdf9bSopenharmony_ci    } else if (option == '?') {
1201545fdf9bSopenharmony_ci        switch (optopt) {
1202545fdf9bSopenharmony_ci            case 'i': {
1203545fdf9bSopenharmony_ci                if (commandName == GET_RM) {
1204545fdf9bSopenharmony_ci                    std::string unknownOption = "";
1205545fdf9bSopenharmony_ci                    std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1206545fdf9bSopenharmony_ci                    APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1207545fdf9bSopenharmony_ci                    resultReceiver_.append(unknownOptionMsg);
1208545fdf9bSopenharmony_ci                } else {
1209545fdf9bSopenharmony_ci                    APP_LOGD("'bundle_test_tool %{public}s -i' with no argument.", commandName.c_str());
1210545fdf9bSopenharmony_ci                    resultReceiver_.append("error: -i option requires a value.\n");
1211545fdf9bSopenharmony_ci                }
1212545fdf9bSopenharmony_ci                break;
1213545fdf9bSopenharmony_ci            }
1214545fdf9bSopenharmony_ci            case 'm': {
1215545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s -m' with no argument.", commandName.c_str());
1216545fdf9bSopenharmony_ci                resultReceiver_.append("error: -m option requires a value.\n");
1217545fdf9bSopenharmony_ci                break;
1218545fdf9bSopenharmony_ci            }
1219545fdf9bSopenharmony_ci            case 'n': {
1220545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s -n' with no argument.", commandName.c_str());
1221545fdf9bSopenharmony_ci                resultReceiver_.append("error: -n option requires a value.\n");
1222545fdf9bSopenharmony_ci                break;
1223545fdf9bSopenharmony_ci            }
1224545fdf9bSopenharmony_ci            default: {
1225545fdf9bSopenharmony_ci                std::string unknownOption = "";
1226545fdf9bSopenharmony_ci                std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1227545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1228545fdf9bSopenharmony_ci                resultReceiver_.append(unknownOptionMsg);
1229545fdf9bSopenharmony_ci                break;
1230545fdf9bSopenharmony_ci            }
1231545fdf9bSopenharmony_ci        }
1232545fdf9bSopenharmony_ci    }
1233545fdf9bSopenharmony_ci    return false;
1234545fdf9bSopenharmony_ci}
1235545fdf9bSopenharmony_ci
1236545fdf9bSopenharmony_cibool BundleTestTool::CheckRemovableCorrectOption(
1237545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &isRemovable, std::string &name)
1238545fdf9bSopenharmony_ci{
1239545fdf9bSopenharmony_ci    bool ret = true;
1240545fdf9bSopenharmony_ci    switch (option) {
1241545fdf9bSopenharmony_ci        case 'h': {
1242545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s %{public}s'", commandName.c_str(), argv_[optind - 1]);
1243545fdf9bSopenharmony_ci            ret = false;
1244545fdf9bSopenharmony_ci            break;
1245545fdf9bSopenharmony_ci        }
1246545fdf9bSopenharmony_ci        case 'n': {
1247545fdf9bSopenharmony_ci            name = optarg;
1248545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s -n %{public}s'", commandName.c_str(), argv_[optind - 1]);
1249545fdf9bSopenharmony_ci            break;
1250545fdf9bSopenharmony_ci        }
1251545fdf9bSopenharmony_ci        case 'i': {
1252545fdf9bSopenharmony_ci            if (commandName == GET_RM) {
1253545fdf9bSopenharmony_ci                std::string unknownOption = "";
1254545fdf9bSopenharmony_ci                std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1255545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1256545fdf9bSopenharmony_ci                resultReceiver_.append(unknownOptionMsg);
1257545fdf9bSopenharmony_ci                ret = false;
1258545fdf9bSopenharmony_ci            } else if (OHOS::StrToInt(optarg, isRemovable)) {
1259545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s -i isRemovable:%{public}d, %{public}s'",
1260545fdf9bSopenharmony_ci                    commandName.c_str(), isRemovable, argv_[optind - 1]);
1261545fdf9bSopenharmony_ci            } else {
1262545fdf9bSopenharmony_ci                APP_LOGE("bundle_test_tool setrm with error %{private}s", optarg);
1263545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
1264545fdf9bSopenharmony_ci                ret = false;
1265545fdf9bSopenharmony_ci            }
1266545fdf9bSopenharmony_ci            break;
1267545fdf9bSopenharmony_ci        }
1268545fdf9bSopenharmony_ci        case 'm': {
1269545fdf9bSopenharmony_ci            name = optarg;
1270545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s -m module-name:%{public}s, %{public}s'",
1271545fdf9bSopenharmony_ci                commandName.c_str(), name.c_str(), argv_[optind - 1]);
1272545fdf9bSopenharmony_ci            break;
1273545fdf9bSopenharmony_ci        }
1274545fdf9bSopenharmony_ci        default: {
1275545fdf9bSopenharmony_ci            std::string unknownOption = "";
1276545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1277545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1278545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
1279545fdf9bSopenharmony_ci            ret = false;
1280545fdf9bSopenharmony_ci            break;
1281545fdf9bSopenharmony_ci        }
1282545fdf9bSopenharmony_ci    }
1283545fdf9bSopenharmony_ci    return ret;
1284545fdf9bSopenharmony_ci}
1285545fdf9bSopenharmony_ci
1286545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsSetRemovableCommand()
1287545fdf9bSopenharmony_ci{
1288545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1289545fdf9bSopenharmony_ci    int counter = 0;
1290545fdf9bSopenharmony_ci    int isRemovable = 0;
1291545fdf9bSopenharmony_ci    std::string commandName = SET_RM;
1292545fdf9bSopenharmony_ci    std::string name = "";
1293545fdf9bSopenharmony_ci    std::string bundleName = "";
1294545fdf9bSopenharmony_ci    std::string moduleName = "";
1295545fdf9bSopenharmony_ci    APP_LOGD("RunAsSetCommand is start");
1296545fdf9bSopenharmony_ci    while (true) {
1297545fdf9bSopenharmony_ci        counter++;
1298545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS.c_str(), LONG_OPTIONS, nullptr);
1299545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1300545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1301545fdf9bSopenharmony_ci        }
1302545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d, argv_[optind - 1]:%{public}s", option,
1303545fdf9bSopenharmony_ci            optopt, optind, argv_[optind - 1]);
1304545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
1305545fdf9bSopenharmony_ci            result = !CheckRemovableErrorOption(option, counter, commandName)? OHOS::ERR_INVALID_VALUE : result;
1306545fdf9bSopenharmony_ci            break;
1307545fdf9bSopenharmony_ci        }
1308545fdf9bSopenharmony_ci        result = !CheckRemovableCorrectOption(option, commandName, isRemovable, name)
1309545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
1310545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
1311545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
1312545fdf9bSopenharmony_ci    }
1313545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK) {
1314545fdf9bSopenharmony_ci        if (resultReceiver_ == "" && (bundleName.size() == 0 || moduleName.size() == 0)) {
1315545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool setrm' with not enough option.");
1316545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_NO_REMOVABLE_OPTION);
1317545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
1318545fdf9bSopenharmony_ci        }
1319545fdf9bSopenharmony_ci    }
1320545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1321545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_SET);
1322545fdf9bSopenharmony_ci    } else {
1323545fdf9bSopenharmony_ci        bool setResult = false;
1324545fdf9bSopenharmony_ci        setResult = SetIsRemovableOperation(bundleName, moduleName, isRemovable);
1325545fdf9bSopenharmony_ci        APP_LOGD("'bundle_test_tool setrm' isRemovable is %{public}d", isRemovable);
1326545fdf9bSopenharmony_ci        resultReceiver_ = setResult ? STRING_SET_REMOVABLE_OK : STRING_SET_REMOVABLE_NG;
1327545fdf9bSopenharmony_ci    }
1328545fdf9bSopenharmony_ci    return result;
1329545fdf9bSopenharmony_ci}
1330545fdf9bSopenharmony_ci
1331545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetRemovableCommand()
1332545fdf9bSopenharmony_ci{
1333545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1334545fdf9bSopenharmony_ci    int counter = 0;
1335545fdf9bSopenharmony_ci    std::string commandName = GET_RM;
1336545fdf9bSopenharmony_ci    std::string name = "";
1337545fdf9bSopenharmony_ci    std::string bundleName = "";
1338545fdf9bSopenharmony_ci    std::string moduleName = "";
1339545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetRemovableCommand is start");
1340545fdf9bSopenharmony_ci    while (true) {
1341545fdf9bSopenharmony_ci        counter++;
1342545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS.c_str(), LONG_OPTIONS, nullptr);
1343545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1344545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1345545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1346545fdf9bSopenharmony_ci        }
1347545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
1348545fdf9bSopenharmony_ci            result = !CheckRemovableErrorOption(option, counter, commandName) ? OHOS::ERR_INVALID_VALUE : result;
1349545fdf9bSopenharmony_ci            break;
1350545fdf9bSopenharmony_ci        }
1351545fdf9bSopenharmony_ci        int tempIsRem = 0;
1352545fdf9bSopenharmony_ci        result = !CheckRemovableCorrectOption(option, commandName, tempIsRem, name)
1353545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
1354545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
1355545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
1356545fdf9bSopenharmony_ci    }
1357545fdf9bSopenharmony_ci
1358545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK) {
1359545fdf9bSopenharmony_ci        if (resultReceiver_ == "" && (bundleName.size() == 0 || moduleName.size() == 0)) {
1360545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool getrm' with no option.");
1361545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_NO_REMOVABLE_OPTION);
1362545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
1363545fdf9bSopenharmony_ci        }
1364545fdf9bSopenharmony_ci    }
1365545fdf9bSopenharmony_ci
1366545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1367545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_REMOVABLE);
1368545fdf9bSopenharmony_ci    } else {
1369545fdf9bSopenharmony_ci        std::string results = "";
1370545fdf9bSopenharmony_ci        GetIsRemovableOperation(bundleName, moduleName, results);
1371545fdf9bSopenharmony_ci        if (results.empty()) {
1372545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_REMOVABLE_NG);
1373545fdf9bSopenharmony_ci            return result;
1374545fdf9bSopenharmony_ci        }
1375545fdf9bSopenharmony_ci        resultReceiver_.append(results);
1376545fdf9bSopenharmony_ci    }
1377545fdf9bSopenharmony_ci    return result;
1378545fdf9bSopenharmony_ci}
1379545fdf9bSopenharmony_ci
1380545fdf9bSopenharmony_cibool BundleTestTool::CheckSandboxErrorOption(int option, int counter, const std::string &commandName)
1381545fdf9bSopenharmony_ci{
1382545fdf9bSopenharmony_ci    if (option == -1) {
1383545fdf9bSopenharmony_ci        if (counter == 1) {
1384545fdf9bSopenharmony_ci            if (strcmp(argv_[optind], cmd_.c_str()) == 0) {
1385545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with no option.", commandName.c_str());
1386545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
1387545fdf9bSopenharmony_ci                return false;
1388545fdf9bSopenharmony_ci            }
1389545fdf9bSopenharmony_ci        }
1390545fdf9bSopenharmony_ci        return true;
1391545fdf9bSopenharmony_ci    } else if (option == '?') {
1392545fdf9bSopenharmony_ci        switch (optopt) {
1393545fdf9bSopenharmony_ci            case 'n':
1394545fdf9bSopenharmony_ci            case 'u':
1395545fdf9bSopenharmony_ci            case 'd':
1396545fdf9bSopenharmony_ci            case 'a': {
1397545fdf9bSopenharmony_ci                if ((commandName != INSTALL_SANDBOX && optopt == 'd') ||
1398545fdf9bSopenharmony_ci                    (commandName == INSTALL_SANDBOX && optopt == 'a')) {
1399545fdf9bSopenharmony_ci                    std::string unknownOption = "";
1400545fdf9bSopenharmony_ci                    std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1401545fdf9bSopenharmony_ci                    APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1402545fdf9bSopenharmony_ci                    resultReceiver_.append(unknownOptionMsg);
1403545fdf9bSopenharmony_ci                    break;
1404545fdf9bSopenharmony_ci                }
1405545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' -%{public}c with no argument.", commandName.c_str(), optopt);
1406545fdf9bSopenharmony_ci                resultReceiver_.append("error: option requires a value.\n");
1407545fdf9bSopenharmony_ci                break;
1408545fdf9bSopenharmony_ci            }
1409545fdf9bSopenharmony_ci            default: {
1410545fdf9bSopenharmony_ci                std::string unknownOption = "";
1411545fdf9bSopenharmony_ci                std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1412545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1413545fdf9bSopenharmony_ci                resultReceiver_.append(unknownOptionMsg);
1414545fdf9bSopenharmony_ci                break;
1415545fdf9bSopenharmony_ci            }
1416545fdf9bSopenharmony_ci        }
1417545fdf9bSopenharmony_ci    }
1418545fdf9bSopenharmony_ci    return false;
1419545fdf9bSopenharmony_ci}
1420545fdf9bSopenharmony_ci
1421545fdf9bSopenharmony_cibool BundleTestTool::CheckSandboxCorrectOption(
1422545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &data, std::string &bundleName)
1423545fdf9bSopenharmony_ci{
1424545fdf9bSopenharmony_ci    bool ret = true;
1425545fdf9bSopenharmony_ci    switch (option) {
1426545fdf9bSopenharmony_ci        case 'h': {
1427545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s %{public}s'", commandName.c_str(), argv_[optind - 1]);
1428545fdf9bSopenharmony_ci            ret = false;
1429545fdf9bSopenharmony_ci            break;
1430545fdf9bSopenharmony_ci        }
1431545fdf9bSopenharmony_ci        case 'n': {
1432545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s %{public}s'", commandName.c_str(), argv_[optind - 1]);
1433545fdf9bSopenharmony_ci            bundleName = optarg;
1434545fdf9bSopenharmony_ci            break;
1435545fdf9bSopenharmony_ci        }
1436545fdf9bSopenharmony_ci        case 'u':
1437545fdf9bSopenharmony_ci        case 'a':
1438545fdf9bSopenharmony_ci        case 'd': {
1439545fdf9bSopenharmony_ci            if ((commandName != INSTALL_SANDBOX && option == 'd') ||
1440545fdf9bSopenharmony_ci                (commandName == INSTALL_SANDBOX && option == 'a')) {
1441545fdf9bSopenharmony_ci                std::string unknownOption = "";
1442545fdf9bSopenharmony_ci                std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1443545fdf9bSopenharmony_ci                APP_LOGD("'bundle_test_tool %{public}s' with an unknown option.", commandName.c_str());
1444545fdf9bSopenharmony_ci                resultReceiver_.append(unknownOptionMsg);
1445545fdf9bSopenharmony_ci                ret = false;
1446545fdf9bSopenharmony_ci                break;
1447545fdf9bSopenharmony_ci            }
1448545fdf9bSopenharmony_ci
1449545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s %{public}s %{public}s'", commandName.c_str(),
1450545fdf9bSopenharmony_ci                argv_[optind - OFFSET_REQUIRED_ARGUMENT], optarg);
1451545fdf9bSopenharmony_ci
1452545fdf9bSopenharmony_ci            if (!OHOS::StrToInt(optarg, data)) {
1453545fdf9bSopenharmony_ci                if (option == 'u') {
1454545fdf9bSopenharmony_ci                    APP_LOGE("bundle_test_tool %{public}s with error -u %{private}s", commandName.c_str(), optarg);
1455545fdf9bSopenharmony_ci                } else if (option == 'a') {
1456545fdf9bSopenharmony_ci                    APP_LOGE("bundle_test_tool %{public}s with error -a %{private}s", commandName.c_str(), optarg);
1457545fdf9bSopenharmony_ci                } else {
1458545fdf9bSopenharmony_ci                    APP_LOGE("bundle_test_tool %{public}s with error -d %{private}s", commandName.c_str(), optarg);
1459545fdf9bSopenharmony_ci                }
1460545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
1461545fdf9bSopenharmony_ci                ret = false;
1462545fdf9bSopenharmony_ci            }
1463545fdf9bSopenharmony_ci            break;
1464545fdf9bSopenharmony_ci        }
1465545fdf9bSopenharmony_ci        default: {
1466545fdf9bSopenharmony_ci            ret = false;
1467545fdf9bSopenharmony_ci            break;
1468545fdf9bSopenharmony_ci        }
1469545fdf9bSopenharmony_ci    }
1470545fdf9bSopenharmony_ci    return ret;
1471545fdf9bSopenharmony_ci}
1472545fdf9bSopenharmony_ci
1473545fdf9bSopenharmony_ciErrCode BundleTestTool::InstallSandboxOperation(
1474545fdf9bSopenharmony_ci    const std::string &bundleName, const int32_t userId, const int32_t dlpType, int32_t &appIndex) const
1475545fdf9bSopenharmony_ci{
1476545fdf9bSopenharmony_ci    APP_LOGD("InstallSandboxOperation of bundleName %{public}s, dipType is %{public}d", bundleName.c_str(), dlpType);
1477545fdf9bSopenharmony_ci    return bundleInstallerProxy_->InstallSandboxApp(bundleName, dlpType, userId, appIndex);
1478545fdf9bSopenharmony_ci}
1479545fdf9bSopenharmony_ci
1480545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsInstallSandboxCommand()
1481545fdf9bSopenharmony_ci{
1482545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1483545fdf9bSopenharmony_ci    int counter = 0;
1484545fdf9bSopenharmony_ci    std::string commandName = INSTALL_SANDBOX;
1485545fdf9bSopenharmony_ci    std::string bundleName = "";
1486545fdf9bSopenharmony_ci    int32_t userId = 100;
1487545fdf9bSopenharmony_ci    int32_t dlpType = 0;
1488545fdf9bSopenharmony_ci    while (true) {
1489545fdf9bSopenharmony_ci        counter++;
1490545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_SANDBOX.c_str(), LONG_OPTIONS_SANDBOX, nullptr);
1491545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1492545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1493545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1494545fdf9bSopenharmony_ci        }
1495545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
1496545fdf9bSopenharmony_ci            result = !CheckSandboxErrorOption(option, counter, commandName) ? OHOS::ERR_INVALID_VALUE : result;
1497545fdf9bSopenharmony_ci            break;
1498545fdf9bSopenharmony_ci        } else if (option == 'u') {
1499545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, userId, bundleName) ?
1500545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1501545fdf9bSopenharmony_ci        } else {
1502545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, dlpType, bundleName) ?
1503545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1504545fdf9bSopenharmony_ci        }
1505545fdf9bSopenharmony_ci    }
1506545fdf9bSopenharmony_ci
1507545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK && bundleName == "") {
1508545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_BUNDLE_NAME_OPTION);
1509545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
1510545fdf9bSopenharmony_ci    } else {
1511545fdf9bSopenharmony_ci        APP_LOGD("installSandbox app bundleName is %{public}s", bundleName.c_str());
1512545fdf9bSopenharmony_ci    }
1513545fdf9bSopenharmony_ci
1514545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1515545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_INSTALL_SANDBOX);
1516545fdf9bSopenharmony_ci        return result;
1517545fdf9bSopenharmony_ci    }
1518545fdf9bSopenharmony_ci
1519545fdf9bSopenharmony_ci    int32_t appIndex = 0;
1520545fdf9bSopenharmony_ci    auto ret = InstallSandboxOperation(bundleName, userId, dlpType, appIndex);
1521545fdf9bSopenharmony_ci    if (ret == OHOS::ERR_OK) {
1522545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_INSTALL_SANDBOX_SUCCESSFULLY);
1523545fdf9bSopenharmony_ci    } else {
1524545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_INSTALL_SANDBOX_FAILED + "errCode is "+ std::to_string(ret) + "\n");
1525545fdf9bSopenharmony_ci    }
1526545fdf9bSopenharmony_ci    return result;
1527545fdf9bSopenharmony_ci}
1528545fdf9bSopenharmony_ci
1529545fdf9bSopenharmony_ciErrCode BundleTestTool::UninstallSandboxOperation(const std::string &bundleName,
1530545fdf9bSopenharmony_ci    const int32_t appIndex, const int32_t userId) const
1531545fdf9bSopenharmony_ci{
1532545fdf9bSopenharmony_ci    APP_LOGD("UninstallSandboxOperation of bundleName %{public}s_%{public}d", bundleName.c_str(), appIndex);
1533545fdf9bSopenharmony_ci    return bundleInstallerProxy_->UninstallSandboxApp(bundleName, appIndex, userId);
1534545fdf9bSopenharmony_ci}
1535545fdf9bSopenharmony_ci
1536545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsUninstallSandboxCommand()
1537545fdf9bSopenharmony_ci{
1538545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1539545fdf9bSopenharmony_ci    int counter = 0;
1540545fdf9bSopenharmony_ci    std::string bundleName = "";
1541545fdf9bSopenharmony_ci    std::string commandName = UNINSTALL_SANDBOX;
1542545fdf9bSopenharmony_ci    int32_t userId = 100;
1543545fdf9bSopenharmony_ci    int32_t appIndex = -1;
1544545fdf9bSopenharmony_ci    while (true) {
1545545fdf9bSopenharmony_ci        counter++;
1546545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_SANDBOX.c_str(), LONG_OPTIONS_SANDBOX, nullptr);
1547545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1548545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1549545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1550545fdf9bSopenharmony_ci        }
1551545fdf9bSopenharmony_ci
1552545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
1553545fdf9bSopenharmony_ci            result = !CheckSandboxErrorOption(option, counter, commandName) ? OHOS::ERR_INVALID_VALUE : result;
1554545fdf9bSopenharmony_ci            break;
1555545fdf9bSopenharmony_ci        } else if (option == 'u') {
1556545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, userId, bundleName) ?
1557545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1558545fdf9bSopenharmony_ci        } else {
1559545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, appIndex, bundleName) ?
1560545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1561545fdf9bSopenharmony_ci        }
1562545fdf9bSopenharmony_ci    }
1563545fdf9bSopenharmony_ci
1564545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK && bundleName == "") {
1565545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_BUNDLE_NAME_OPTION);
1566545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
1567545fdf9bSopenharmony_ci    } else {
1568545fdf9bSopenharmony_ci        APP_LOGD("uninstallSandbox app bundleName is %{private}s", bundleName.c_str());
1569545fdf9bSopenharmony_ci    }
1570545fdf9bSopenharmony_ci
1571545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1572545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_UNINSTALL_SANDBOX);
1573545fdf9bSopenharmony_ci        return result;
1574545fdf9bSopenharmony_ci    }
1575545fdf9bSopenharmony_ci
1576545fdf9bSopenharmony_ci    auto ret = UninstallSandboxOperation(bundleName, appIndex, userId);
1577545fdf9bSopenharmony_ci    if (ret == ERR_OK) {
1578545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_UNINSTALL_SANDBOX_SUCCESSFULLY);
1579545fdf9bSopenharmony_ci    } else {
1580545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_UNINSTALL_SANDBOX_FAILED + "errCode is " + std::to_string(ret) + "\n");
1581545fdf9bSopenharmony_ci    }
1582545fdf9bSopenharmony_ci    return result;
1583545fdf9bSopenharmony_ci}
1584545fdf9bSopenharmony_ci
1585545fdf9bSopenharmony_ciErrCode BundleTestTool::DumpSandboxBundleInfo(const std::string &bundleName, const int32_t appIndex,
1586545fdf9bSopenharmony_ci    const int32_t userId, std::string &dumpResults)
1587545fdf9bSopenharmony_ci{
1588545fdf9bSopenharmony_ci    APP_LOGD("DumpSandboxBundleInfo of bundleName %{public}s_%{public}d", bundleName.c_str(), appIndex);
1589545fdf9bSopenharmony_ci    BundleInfo bundleInfo;
1590545fdf9bSopenharmony_ci    BundleMgrClient client;
1591545fdf9bSopenharmony_ci    auto dumpRet = client.GetSandboxBundleInfo(bundleName, appIndex, userId, bundleInfo);
1592545fdf9bSopenharmony_ci    if (dumpRet == ERR_OK) {
1593545fdf9bSopenharmony_ci        nlohmann::json jsonObject = bundleInfo;
1594545fdf9bSopenharmony_ci        jsonObject["applicationInfo"] = bundleInfo.applicationInfo;
1595545fdf9bSopenharmony_ci        dumpResults= jsonObject.dump(Constants::DUMP_INDENT);
1596545fdf9bSopenharmony_ci    }
1597545fdf9bSopenharmony_ci    return dumpRet;
1598545fdf9bSopenharmony_ci}
1599545fdf9bSopenharmony_ci
1600545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDumpSandboxCommand()
1601545fdf9bSopenharmony_ci{
1602545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1603545fdf9bSopenharmony_ci    int counter = 0;
1604545fdf9bSopenharmony_ci    std::string bundleName = "";
1605545fdf9bSopenharmony_ci    std::string commandName = DUMP_SANDBOX;
1606545fdf9bSopenharmony_ci    int32_t userId = 100;
1607545fdf9bSopenharmony_ci    int32_t appIndex = -1;
1608545fdf9bSopenharmony_ci    while (true) {
1609545fdf9bSopenharmony_ci        counter++;
1610545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_SANDBOX.c_str(), LONG_OPTIONS_SANDBOX, nullptr);
1611545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1612545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1613545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1614545fdf9bSopenharmony_ci        }
1615545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
1616545fdf9bSopenharmony_ci            result = !CheckSandboxErrorOption(option, counter, commandName) ? OHOS::ERR_INVALID_VALUE : result;
1617545fdf9bSopenharmony_ci            break;
1618545fdf9bSopenharmony_ci        } else if (option == 'u') {
1619545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, userId, bundleName) ?
1620545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1621545fdf9bSopenharmony_ci        } else {
1622545fdf9bSopenharmony_ci            result = !CheckSandboxCorrectOption(option, commandName, appIndex, bundleName) ?
1623545fdf9bSopenharmony_ci                OHOS::ERR_INVALID_VALUE : result;
1624545fdf9bSopenharmony_ci        }
1625545fdf9bSopenharmony_ci    }
1626545fdf9bSopenharmony_ci
1627545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK && bundleName == "") {
1628545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_BUNDLE_NAME_OPTION);
1629545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
1630545fdf9bSopenharmony_ci    } else {
1631545fdf9bSopenharmony_ci        APP_LOGD("dumpSandbox app bundleName is %{public}s", bundleName.c_str());
1632545fdf9bSopenharmony_ci    }
1633545fdf9bSopenharmony_ci
1634545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1635545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_DUMP_SANDBOX);
1636545fdf9bSopenharmony_ci        return result;
1637545fdf9bSopenharmony_ci    }
1638545fdf9bSopenharmony_ci
1639545fdf9bSopenharmony_ci    std::string dumpRes = "";
1640545fdf9bSopenharmony_ci    ErrCode ret = DumpSandboxBundleInfo(bundleName, appIndex, userId, dumpRes);
1641545fdf9bSopenharmony_ci    if (ret == ERR_OK) {
1642545fdf9bSopenharmony_ci        resultReceiver_.append(dumpRes + "\n");
1643545fdf9bSopenharmony_ci    } else {
1644545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_DUMP_SANDBOX_FAILED + "errCode is "+ std::to_string(ret) + "\n");
1645545fdf9bSopenharmony_ci    }
1646545fdf9bSopenharmony_ci    return result;
1647545fdf9bSopenharmony_ci}
1648545fdf9bSopenharmony_ci
1649545fdf9bSopenharmony_ciErrCode BundleTestTool::StringToInt(
1650545fdf9bSopenharmony_ci    std::string optarg, const std::string &commandName, int &temp, bool &result)
1651545fdf9bSopenharmony_ci{
1652545fdf9bSopenharmony_ci    try {
1653545fdf9bSopenharmony_ci        temp = std::stoi(optarg);
1654545fdf9bSopenharmony_ci        if (optind > 0 && optind <= argc_) {
1655545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -u user-id:%{public}d, %{public}s",
1656545fdf9bSopenharmony_ci                commandName.c_str(), temp, argv_[optind - 1]);
1657545fdf9bSopenharmony_ci        }
1658545fdf9bSopenharmony_ci    } catch (const std::exception& e) {
1659545fdf9bSopenharmony_ci        std::cerr << e.what() << std::endl;
1660545fdf9bSopenharmony_ci        result = false;
1661545fdf9bSopenharmony_ci    }
1662545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
1663545fdf9bSopenharmony_ci}
1664545fdf9bSopenharmony_ci
1665545fdf9bSopenharmony_ciErrCode BundleTestTool::StringToUnsignedLongLong(
1666545fdf9bSopenharmony_ci    std::string optarg, const std::string &commandName, uint64_t &temp, bool &result)
1667545fdf9bSopenharmony_ci{
1668545fdf9bSopenharmony_ci    try {
1669545fdf9bSopenharmony_ci        APP_LOGI("StringToUnsignedLongLong start, optarg : %{public}s", optarg.c_str());
1670545fdf9bSopenharmony_ci        if ((optarg == "") || (optarg[0] == '0') || (!isdigit(optarg[0]))) {
1671545fdf9bSopenharmony_ci            resultReceiver_.append("error: parameter error, cache size must be greater than 0\n");
1672545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1673545fdf9bSopenharmony_ci        }
1674545fdf9bSopenharmony_ci        temp = std::stoull(optarg);
1675545fdf9bSopenharmony_ci    } catch (const std::exception& e) {
1676545fdf9bSopenharmony_ci        std::cerr << e.what() << std::endl;
1677545fdf9bSopenharmony_ci        result = false;
1678545fdf9bSopenharmony_ci    }
1679545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
1680545fdf9bSopenharmony_ci}
1681545fdf9bSopenharmony_ci
1682545fdf9bSopenharmony_cibool BundleTestTool::HandleUnknownOption(const std::string &commandName, bool &ret)
1683545fdf9bSopenharmony_ci{
1684545fdf9bSopenharmony_ci    std::string unknownOption = "";
1685545fdf9bSopenharmony_ci    std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1686545fdf9bSopenharmony_ci    APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
1687545fdf9bSopenharmony_ci    resultReceiver_.append(unknownOptionMsg);
1688545fdf9bSopenharmony_ci    return ret = false;
1689545fdf9bSopenharmony_ci}
1690545fdf9bSopenharmony_ci
1691545fdf9bSopenharmony_cibool BundleTestTool::CheckGetStringCorrectOption(
1692545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &temp, std::string &name)
1693545fdf9bSopenharmony_ci{
1694545fdf9bSopenharmony_ci    bool ret = true;
1695545fdf9bSopenharmony_ci    switch (option) {
1696545fdf9bSopenharmony_ci        case 'h': {
1697545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
1698545fdf9bSopenharmony_ci            ret = false;
1699545fdf9bSopenharmony_ci            break;
1700545fdf9bSopenharmony_ci        }
1701545fdf9bSopenharmony_ci        case 'n': {
1702545fdf9bSopenharmony_ci            name = optarg;
1703545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -n %{public}s", commandName.c_str(), argv_[optind - 1]);
1704545fdf9bSopenharmony_ci            break;
1705545fdf9bSopenharmony_ci        }
1706545fdf9bSopenharmony_ci        case 'm': {
1707545fdf9bSopenharmony_ci            name = optarg;
1708545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m module-name:%{public}s, %{public}s",
1709545fdf9bSopenharmony_ci                commandName.c_str(), name.c_str(), argv_[optind - 1]);
1710545fdf9bSopenharmony_ci            break;
1711545fdf9bSopenharmony_ci        }
1712545fdf9bSopenharmony_ci        case 'c': {
1713545fdf9bSopenharmony_ci            name = optarg;
1714545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m continue-type:%{public}s, %{public}s",
1715545fdf9bSopenharmony_ci                commandName.c_str(), name.c_str(), argv_[optind - 1]);
1716545fdf9bSopenharmony_ci            break;
1717545fdf9bSopenharmony_ci        }
1718545fdf9bSopenharmony_ci        case 'u': {
1719545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1720545fdf9bSopenharmony_ci            break;
1721545fdf9bSopenharmony_ci        }
1722545fdf9bSopenharmony_ci        case 'a': {
1723545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1724545fdf9bSopenharmony_ci            break;
1725545fdf9bSopenharmony_ci        }
1726545fdf9bSopenharmony_ci        case 'p': {
1727545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1728545fdf9bSopenharmony_ci            break;
1729545fdf9bSopenharmony_ci        }
1730545fdf9bSopenharmony_ci        case 'i': {
1731545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1732545fdf9bSopenharmony_ci            break;
1733545fdf9bSopenharmony_ci        }
1734545fdf9bSopenharmony_ci        default: {
1735545fdf9bSopenharmony_ci            HandleUnknownOption(commandName, ret);
1736545fdf9bSopenharmony_ci            break;
1737545fdf9bSopenharmony_ci        }
1738545fdf9bSopenharmony_ci    }
1739545fdf9bSopenharmony_ci    return ret;
1740545fdf9bSopenharmony_ci}
1741545fdf9bSopenharmony_ci
1742545fdf9bSopenharmony_cibool BundleTestTool::CheckGetProxyDataCorrectOption(
1743545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &temp, std::string &name)
1744545fdf9bSopenharmony_ci{
1745545fdf9bSopenharmony_ci    bool ret = true;
1746545fdf9bSopenharmony_ci    switch (option) {
1747545fdf9bSopenharmony_ci        case 'h': {
1748545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
1749545fdf9bSopenharmony_ci            ret = false;
1750545fdf9bSopenharmony_ci            break;
1751545fdf9bSopenharmony_ci        }
1752545fdf9bSopenharmony_ci        case 'n': {
1753545fdf9bSopenharmony_ci            name = optarg;
1754545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -n %{public}s", commandName.c_str(), argv_[optind - 1]);
1755545fdf9bSopenharmony_ci            break;
1756545fdf9bSopenharmony_ci        }
1757545fdf9bSopenharmony_ci        case 'm': {
1758545fdf9bSopenharmony_ci            name = optarg;
1759545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m module-name:%{public}s, %{public}s",
1760545fdf9bSopenharmony_ci                     commandName.c_str(), name.c_str(), argv_[optind - 1]);
1761545fdf9bSopenharmony_ci            break;
1762545fdf9bSopenharmony_ci        }
1763545fdf9bSopenharmony_ci        case 'u': {
1764545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1765545fdf9bSopenharmony_ci            break;
1766545fdf9bSopenharmony_ci        }
1767545fdf9bSopenharmony_ci        default: {
1768545fdf9bSopenharmony_ci            std::string unknownOption = "";
1769545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1770545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
1771545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
1772545fdf9bSopenharmony_ci            ret = false;
1773545fdf9bSopenharmony_ci            break;
1774545fdf9bSopenharmony_ci        }
1775545fdf9bSopenharmony_ci    }
1776545fdf9bSopenharmony_ci    return ret;
1777545fdf9bSopenharmony_ci}
1778545fdf9bSopenharmony_ci
1779545fdf9bSopenharmony_cibool BundleTestTool::CheckGetAllProxyDataCorrectOption(
1780545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &temp, std::string &name)
1781545fdf9bSopenharmony_ci{
1782545fdf9bSopenharmony_ci    bool ret = true;
1783545fdf9bSopenharmony_ci    switch (option) {
1784545fdf9bSopenharmony_ci        case 'h': {
1785545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
1786545fdf9bSopenharmony_ci            ret = false;
1787545fdf9bSopenharmony_ci            break;
1788545fdf9bSopenharmony_ci        }
1789545fdf9bSopenharmony_ci        case 'u': {
1790545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
1791545fdf9bSopenharmony_ci            break;
1792545fdf9bSopenharmony_ci        }
1793545fdf9bSopenharmony_ci        default: {
1794545fdf9bSopenharmony_ci            std::string unknownOption = "";
1795545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1796545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
1797545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
1798545fdf9bSopenharmony_ci            ret = false;
1799545fdf9bSopenharmony_ci            break;
1800545fdf9bSopenharmony_ci        }
1801545fdf9bSopenharmony_ci    }
1802545fdf9bSopenharmony_ci    return ret;
1803545fdf9bSopenharmony_ci}
1804545fdf9bSopenharmony_ci
1805545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetProxyDataCommand()
1806545fdf9bSopenharmony_ci{
1807545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1808545fdf9bSopenharmony_ci    int counter = 0;
1809545fdf9bSopenharmony_ci    std::string commandName = "getProxyData";
1810545fdf9bSopenharmony_ci    std::string name = "";
1811545fdf9bSopenharmony_ci    std::string bundleName = "";
1812545fdf9bSopenharmony_ci    std::string moduleName = "";
1813545fdf9bSopenharmony_ci    int userId = Constants::ALL_USERID;
1814545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetProxyDataCommand is start");
1815545fdf9bSopenharmony_ci    while (true) {
1816545fdf9bSopenharmony_ci        counter++;
1817545fdf9bSopenharmony_ci        int32_t option = getopt_long(
1818545fdf9bSopenharmony_ci            argc_, argv_, SHORT_OPTIONS_PROXY_DATA.c_str(), LONG_OPTIONS_PROXY_DATA, nullptr);
1819545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1820545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1821545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1822545fdf9bSopenharmony_ci        }
1823545fdf9bSopenharmony_ci        if (option == -1) {
1824545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
1825545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getProxyData with no option.");
1826545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_GET_PROXY_DATA);
1827545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
1828545fdf9bSopenharmony_ci            }
1829545fdf9bSopenharmony_ci            break;
1830545fdf9bSopenharmony_ci        }
1831545fdf9bSopenharmony_ci        int temp = 0;
1832545fdf9bSopenharmony_ci        result = !CheckGetProxyDataCorrectOption(option, commandName, temp, name)
1833545fdf9bSopenharmony_ci                 ? OHOS::ERR_INVALID_VALUE : result;
1834545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
1835545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
1836545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
1837545fdf9bSopenharmony_ci    }
1838545fdf9bSopenharmony_ci
1839545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1840545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_PROXY_DATA);
1841545fdf9bSopenharmony_ci    } else {
1842545fdf9bSopenharmony_ci        std::vector<ProxyData> proxyDatas;
1843545fdf9bSopenharmony_ci        result = bundleMgrProxy_->GetProxyDataInfos(bundleName, moduleName, proxyDatas, userId);
1844545fdf9bSopenharmony_ci        if (result == ERR_OK) {
1845545fdf9bSopenharmony_ci            nlohmann::json jsonObject = proxyDatas;
1846545fdf9bSopenharmony_ci            std::string results = jsonObject.dump(Constants::DUMP_INDENT);
1847545fdf9bSopenharmony_ci            resultReceiver_.append(results);
1848545fdf9bSopenharmony_ci        } else {
1849545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_PROXY_DATA_NG + " errCode is "+ std::to_string(result) + "\n");
1850545fdf9bSopenharmony_ci        }
1851545fdf9bSopenharmony_ci    }
1852545fdf9bSopenharmony_ci    return result;
1853545fdf9bSopenharmony_ci}
1854545fdf9bSopenharmony_ci
1855545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetAllProxyDataCommand()
1856545fdf9bSopenharmony_ci{
1857545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1858545fdf9bSopenharmony_ci    int counter = 0;
1859545fdf9bSopenharmony_ci    std::string commandName = "getProxyData";
1860545fdf9bSopenharmony_ci    std::string name = "";
1861545fdf9bSopenharmony_ci    int userId = Constants::ALL_USERID;
1862545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetAllProxyDataCommand is start");
1863545fdf9bSopenharmony_ci    while (true) {
1864545fdf9bSopenharmony_ci        counter++;
1865545fdf9bSopenharmony_ci        int32_t option = getopt_long(
1866545fdf9bSopenharmony_ci            argc_, argv_, SHORT_OPTIONS_ALL_PROXY_DATA.c_str(), LONG_OPTIONS_ALL_PROXY_DATA, nullptr);
1867545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1868545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1869545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1870545fdf9bSopenharmony_ci        }
1871545fdf9bSopenharmony_ci        if (option == -1) {
1872545fdf9bSopenharmony_ci            break;
1873545fdf9bSopenharmony_ci        }
1874545fdf9bSopenharmony_ci
1875545fdf9bSopenharmony_ci        int temp = 0;
1876545fdf9bSopenharmony_ci        result = !CheckGetAllProxyDataCorrectOption(option, commandName, temp, name)
1877545fdf9bSopenharmony_ci                 ? OHOS::ERR_INVALID_VALUE : result;
1878545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
1879545fdf9bSopenharmony_ci    }
1880545fdf9bSopenharmony_ci
1881545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1882545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_ALL_PROXY_DATA);
1883545fdf9bSopenharmony_ci    } else {
1884545fdf9bSopenharmony_ci        std::vector<ProxyData> proxyDatas;
1885545fdf9bSopenharmony_ci        result = bundleMgrProxy_->GetAllProxyDataInfos(proxyDatas, userId);
1886545fdf9bSopenharmony_ci        if (result == ERR_OK) {
1887545fdf9bSopenharmony_ci            nlohmann::json jsonObject = proxyDatas;
1888545fdf9bSopenharmony_ci            std::string results = jsonObject.dump(Constants::DUMP_INDENT);
1889545fdf9bSopenharmony_ci            resultReceiver_.append(results);
1890545fdf9bSopenharmony_ci        } else {
1891545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_PROXY_DATA_NG + " errCode is "+ std::to_string(result) + "\n");
1892545fdf9bSopenharmony_ci        }
1893545fdf9bSopenharmony_ci    }
1894545fdf9bSopenharmony_ci    return result;
1895545fdf9bSopenharmony_ci}
1896545fdf9bSopenharmony_ci
1897545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetStringCommand()
1898545fdf9bSopenharmony_ci{
1899545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
1900545fdf9bSopenharmony_ci    int counter = 0;
1901545fdf9bSopenharmony_ci    std::string commandName = "getStr";
1902545fdf9bSopenharmony_ci    std::string name = "";
1903545fdf9bSopenharmony_ci    std::string bundleName = "";
1904545fdf9bSopenharmony_ci    std::string moduleName = "";
1905545fdf9bSopenharmony_ci    int userId = 100;
1906545fdf9bSopenharmony_ci    int labelId = 0;
1907545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetStringCommand is start");
1908545fdf9bSopenharmony_ci    while (true) {
1909545fdf9bSopenharmony_ci        counter++;
1910545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET.c_str(), LONG_OPTIONS_GET, nullptr);
1911545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
1912545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
1913545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
1914545fdf9bSopenharmony_ci        }
1915545fdf9bSopenharmony_ci        if (option == -1) {
1916545fdf9bSopenharmony_ci            // When scanning the first argument
1917545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
1918545fdf9bSopenharmony_ci                // 'GetStringById' with no option: GetStringById
1919545fdf9bSopenharmony_ci                // 'GetStringById' with a wrong argument: GetStringById
1920545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getStr with no option.");
1921545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GETSTRING_OPTION);
1922545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
1923545fdf9bSopenharmony_ci            }
1924545fdf9bSopenharmony_ci            break;
1925545fdf9bSopenharmony_ci        }
1926545fdf9bSopenharmony_ci        int temp = 0;
1927545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
1928545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
1929545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
1930545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
1931545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
1932545fdf9bSopenharmony_ci        labelId = option == 'i' ? temp : labelId;
1933545fdf9bSopenharmony_ci    }
1934545fdf9bSopenharmony_ci
1935545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
1936545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_STRING);
1937545fdf9bSopenharmony_ci    } else {
1938545fdf9bSopenharmony_ci        std::string results = "";
1939545fdf9bSopenharmony_ci        results = bundleMgrProxy_->GetStringById(bundleName, moduleName, labelId, userId);
1940545fdf9bSopenharmony_ci        if (results.empty()) {
1941545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_STRING_NG);
1942545fdf9bSopenharmony_ci            return result;
1943545fdf9bSopenharmony_ci        }
1944545fdf9bSopenharmony_ci        resultReceiver_.append(results);
1945545fdf9bSopenharmony_ci    }
1946545fdf9bSopenharmony_ci    return result;
1947545fdf9bSopenharmony_ci}
1948545fdf9bSopenharmony_ci
1949545fdf9bSopenharmony_cibool BundleTestTool::CheckExtOrMimeCorrectOption(
1950545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &temp, std::string &name)
1951545fdf9bSopenharmony_ci{
1952545fdf9bSopenharmony_ci    bool ret = true;
1953545fdf9bSopenharmony_ci    switch (option) {
1954545fdf9bSopenharmony_ci        case 'h': {
1955545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
1956545fdf9bSopenharmony_ci            ret = false;
1957545fdf9bSopenharmony_ci            break;
1958545fdf9bSopenharmony_ci        }
1959545fdf9bSopenharmony_ci        case 'n': {
1960545fdf9bSopenharmony_ci            name = optarg;
1961545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -n %{public}s", commandName.c_str(), argv_[optind - 1]);
1962545fdf9bSopenharmony_ci            break;
1963545fdf9bSopenharmony_ci        }
1964545fdf9bSopenharmony_ci        case 'm': {
1965545fdf9bSopenharmony_ci            name = optarg;
1966545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m module-name:%{public}s, %{public}s",
1967545fdf9bSopenharmony_ci                     commandName.c_str(), name.c_str(), argv_[optind - 1]);
1968545fdf9bSopenharmony_ci            break;
1969545fdf9bSopenharmony_ci        }
1970545fdf9bSopenharmony_ci        case 'a': {
1971545fdf9bSopenharmony_ci            name = optarg;
1972545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m ability-name:%{public}s, %{public}s",
1973545fdf9bSopenharmony_ci                     commandName.c_str(), name.c_str(), argv_[optind - 1]);
1974545fdf9bSopenharmony_ci            break;
1975545fdf9bSopenharmony_ci        }
1976545fdf9bSopenharmony_ci        case 'e': {
1977545fdf9bSopenharmony_ci            name = optarg;
1978545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m ext-name:%{public}s, %{public}s",
1979545fdf9bSopenharmony_ci                     commandName.c_str(), name.c_str(), argv_[optind - 1]);
1980545fdf9bSopenharmony_ci            break;
1981545fdf9bSopenharmony_ci        }
1982545fdf9bSopenharmony_ci        case 't': {
1983545fdf9bSopenharmony_ci            name = optarg;
1984545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m mime-type:%{public}s, %{public}s",
1985545fdf9bSopenharmony_ci                     commandName.c_str(), name.c_str(), argv_[optind - 1]);
1986545fdf9bSopenharmony_ci            break;
1987545fdf9bSopenharmony_ci        }
1988545fdf9bSopenharmony_ci        default: {
1989545fdf9bSopenharmony_ci            std::string unknownOption = "";
1990545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
1991545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
1992545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
1993545fdf9bSopenharmony_ci            ret = false;
1994545fdf9bSopenharmony_ci            break;
1995545fdf9bSopenharmony_ci        }
1996545fdf9bSopenharmony_ci    }
1997545fdf9bSopenharmony_ci    return ret;
1998545fdf9bSopenharmony_ci}
1999545fdf9bSopenharmony_ci
2000545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsSetExtNameOrMIMEToAppCommand()
2001545fdf9bSopenharmony_ci{
2002545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
2003545fdf9bSopenharmony_ci    int counter = 0;
2004545fdf9bSopenharmony_ci    std::string commandName = "setExtNameOrMimeToApp";
2005545fdf9bSopenharmony_ci    std::string name = "";
2006545fdf9bSopenharmony_ci    std::string bundleName = "";
2007545fdf9bSopenharmony_ci    std::string moduleName = "";
2008545fdf9bSopenharmony_ci    std::string abilityName = "";
2009545fdf9bSopenharmony_ci    std::string extName = "";
2010545fdf9bSopenharmony_ci    std::string mimeType = "";
2011545fdf9bSopenharmony_ci    APP_LOGD("RunAsSetExtNameOrMIMEToAppCommand is start");
2012545fdf9bSopenharmony_ci    while (true) {
2013545fdf9bSopenharmony_ci        counter++;
2014545fdf9bSopenharmony_ci        int32_t option = getopt_long(
2015545fdf9bSopenharmony_ci            argc_, argv_, SHORT_OPTIONS_MIME.c_str(), LONG_OPTIONS_MIME, nullptr);
2016545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2017545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2018545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2019545fdf9bSopenharmony_ci        }
2020545fdf9bSopenharmony_ci        if (option == -1) {
2021545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2022545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool RunAsSetExtNameOrMIMEToAppCommand with no option.");
2023545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_SET_EXT_NAME_OR_MIME_TYPE);
2024545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2025545fdf9bSopenharmony_ci            }
2026545fdf9bSopenharmony_ci            break;
2027545fdf9bSopenharmony_ci        }
2028545fdf9bSopenharmony_ci        int temp = 0;
2029545fdf9bSopenharmony_ci        result = !CheckExtOrMimeCorrectOption(option, commandName, temp, name)
2030545fdf9bSopenharmony_ci                 ? OHOS::ERR_INVALID_VALUE : result;
2031545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
2032545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
2033545fdf9bSopenharmony_ci        abilityName = option == 'a' ? name : abilityName;
2034545fdf9bSopenharmony_ci        extName = option == 'e' ? name : extName;
2035545fdf9bSopenharmony_ci        mimeType = option == 't' ? name : mimeType;
2036545fdf9bSopenharmony_ci    }
2037545fdf9bSopenharmony_ci
2038545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
2039545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_PROXY_DATA);
2040545fdf9bSopenharmony_ci    } else {
2041545fdf9bSopenharmony_ci        result = bundleMgrProxy_->SetExtNameOrMIMEToApp(bundleName, moduleName, abilityName, extName, mimeType);
2042545fdf9bSopenharmony_ci        if (result == ERR_OK) {
2043545fdf9bSopenharmony_ci            resultReceiver_.append("SetExtNameOrMIMEToApp succeeded,");
2044545fdf9bSopenharmony_ci        } else {
2045545fdf9bSopenharmony_ci            resultReceiver_.append("SetExtNameOrMIMEToApp failed, errCode is "+ std::to_string(result) + "\n");
2046545fdf9bSopenharmony_ci        }
2047545fdf9bSopenharmony_ci    }
2048545fdf9bSopenharmony_ci    return result;
2049545fdf9bSopenharmony_ci}
2050545fdf9bSopenharmony_ci
2051545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDelExtNameOrMIMEToAppCommand()
2052545fdf9bSopenharmony_ci{
2053545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
2054545fdf9bSopenharmony_ci    int counter = 0;
2055545fdf9bSopenharmony_ci    std::string commandName = "delExtNameOrMimeToApp";
2056545fdf9bSopenharmony_ci    std::string name = "";
2057545fdf9bSopenharmony_ci    std::string bundleName = "";
2058545fdf9bSopenharmony_ci    std::string moduleName = "";
2059545fdf9bSopenharmony_ci    std::string abilityName = "";
2060545fdf9bSopenharmony_ci    std::string extName = "";
2061545fdf9bSopenharmony_ci    std::string mimeType = "";
2062545fdf9bSopenharmony_ci    APP_LOGD("RunAsDelExtNameOrMIMEToAppCommand is start");
2063545fdf9bSopenharmony_ci    while (true) {
2064545fdf9bSopenharmony_ci        counter++;
2065545fdf9bSopenharmony_ci        int32_t option = getopt_long(
2066545fdf9bSopenharmony_ci            argc_, argv_, SHORT_OPTIONS_MIME.c_str(), LONG_OPTIONS_MIME, nullptr);
2067545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2068545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2069545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2070545fdf9bSopenharmony_ci        }
2071545fdf9bSopenharmony_ci        if (option == -1) {
2072545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2073545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool RunAsDelExtNameOrMIMEToAppCommand with no option.");
2074545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_SET_EXT_NAME_OR_MIME_TYPE);
2075545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2076545fdf9bSopenharmony_ci            }
2077545fdf9bSopenharmony_ci            break;
2078545fdf9bSopenharmony_ci        }
2079545fdf9bSopenharmony_ci        int temp = 0;
2080545fdf9bSopenharmony_ci        result = !CheckExtOrMimeCorrectOption(option, commandName, temp, name)
2081545fdf9bSopenharmony_ci                 ? OHOS::ERR_INVALID_VALUE : result;
2082545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
2083545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
2084545fdf9bSopenharmony_ci        abilityName = option == 'a' ? name : abilityName;
2085545fdf9bSopenharmony_ci        extName = option == 'e' ? name : extName;
2086545fdf9bSopenharmony_ci        mimeType = option == 't' ? name : mimeType;
2087545fdf9bSopenharmony_ci    }
2088545fdf9bSopenharmony_ci
2089545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
2090545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_PROXY_DATA);
2091545fdf9bSopenharmony_ci    } else {
2092545fdf9bSopenharmony_ci        result = bundleMgrProxy_->DelExtNameOrMIMEToApp(bundleName, moduleName, abilityName, extName, mimeType);
2093545fdf9bSopenharmony_ci        if (result == ERR_OK) {
2094545fdf9bSopenharmony_ci            resultReceiver_.append("DelExtNameOrMIMEToApp succeeded");
2095545fdf9bSopenharmony_ci        } else {
2096545fdf9bSopenharmony_ci            resultReceiver_.append("DelExtNameOrMIMEToApp failed, errCode is "+ std::to_string(result) + "\n");
2097545fdf9bSopenharmony_ci        }
2098545fdf9bSopenharmony_ci    }
2099545fdf9bSopenharmony_ci    return result;
2100545fdf9bSopenharmony_ci}
2101545fdf9bSopenharmony_ci
2102545fdf9bSopenharmony_cibool BundleTestTool::CheckGetIconCorrectOption(
2103545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &temp, std::string &name)
2104545fdf9bSopenharmony_ci{
2105545fdf9bSopenharmony_ci    bool ret = true;
2106545fdf9bSopenharmony_ci    switch (option) {
2107545fdf9bSopenharmony_ci        case 'h': {
2108545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2109545fdf9bSopenharmony_ci            ret = false;
2110545fdf9bSopenharmony_ci            break;
2111545fdf9bSopenharmony_ci        }
2112545fdf9bSopenharmony_ci        case 'n': {
2113545fdf9bSopenharmony_ci            name = optarg;
2114545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -n %{public}s", commandName.c_str(), argv_[optind - 1]);
2115545fdf9bSopenharmony_ci            break;
2116545fdf9bSopenharmony_ci        }
2117545fdf9bSopenharmony_ci        case 'm': {
2118545fdf9bSopenharmony_ci            name = optarg;
2119545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -m module-name:%{public}s, %{public}s",
2120545fdf9bSopenharmony_ci                commandName.c_str(), name.c_str(), argv_[optind - 1]);
2121545fdf9bSopenharmony_ci            break;
2122545fdf9bSopenharmony_ci        }
2123545fdf9bSopenharmony_ci        case 'u': {
2124545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
2125545fdf9bSopenharmony_ci            break;
2126545fdf9bSopenharmony_ci        }
2127545fdf9bSopenharmony_ci        case 'i': {
2128545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
2129545fdf9bSopenharmony_ci            break;
2130545fdf9bSopenharmony_ci        }
2131545fdf9bSopenharmony_ci        case 'd': {
2132545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, temp, ret);
2133545fdf9bSopenharmony_ci            break;
2134545fdf9bSopenharmony_ci        }
2135545fdf9bSopenharmony_ci        default: {
2136545fdf9bSopenharmony_ci            std::string unknownOption = "";
2137545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2138545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2139545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2140545fdf9bSopenharmony_ci            ret = false;
2141545fdf9bSopenharmony_ci            break;
2142545fdf9bSopenharmony_ci        }
2143545fdf9bSopenharmony_ci    }
2144545fdf9bSopenharmony_ci    return ret;
2145545fdf9bSopenharmony_ci}
2146545fdf9bSopenharmony_ci
2147545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetIconCommand()
2148545fdf9bSopenharmony_ci{
2149545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
2150545fdf9bSopenharmony_ci    int counter = 0;
2151545fdf9bSopenharmony_ci    std::string commandName = "getIcon";
2152545fdf9bSopenharmony_ci    std::string name = "";
2153545fdf9bSopenharmony_ci    std::string bundleName = "";
2154545fdf9bSopenharmony_ci    std::string moduleName = "";
2155545fdf9bSopenharmony_ci    int userId = 100;
2156545fdf9bSopenharmony_ci    int iconId = 0;
2157545fdf9bSopenharmony_ci    int density = 0;
2158545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetIconCommand is start");
2159545fdf9bSopenharmony_ci    while (true) {
2160545fdf9bSopenharmony_ci        counter++;
2161545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET.c_str(), LONG_OPTIONS_GET, nullptr);
2162545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2163545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2164545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2165545fdf9bSopenharmony_ci        }
2166545fdf9bSopenharmony_ci        if (option == -1) {
2167545fdf9bSopenharmony_ci            // When scanning the first argument
2168545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2169545fdf9bSopenharmony_ci                // 'GetIconById' with no option: GetStringById
2170545fdf9bSopenharmony_ci                // 'GetIconById' with a wrong argument: GetStringById
2171545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getIcon with no option.");
2172545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GETICON_OPTION);
2173545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2174545fdf9bSopenharmony_ci            }
2175545fdf9bSopenharmony_ci            break;
2176545fdf9bSopenharmony_ci        }
2177545fdf9bSopenharmony_ci        int temp = 0;
2178545fdf9bSopenharmony_ci        result = !CheckGetIconCorrectOption(option, commandName, temp, name)
2179545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
2180545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
2181545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
2182545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
2183545fdf9bSopenharmony_ci        iconId = option == 'i' ? temp : iconId;
2184545fdf9bSopenharmony_ci        density = option == 'd' ? temp : density;
2185545fdf9bSopenharmony_ci    }
2186545fdf9bSopenharmony_ci
2187545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
2188545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_ICON);
2189545fdf9bSopenharmony_ci    } else {
2190545fdf9bSopenharmony_ci        std::string results = "";
2191545fdf9bSopenharmony_ci        results = bundleMgrProxy_->GetIconById(bundleName, moduleName, iconId, density, userId);
2192545fdf9bSopenharmony_ci        if (results.empty()) {
2193545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_ICON_NG);
2194545fdf9bSopenharmony_ci            return result;
2195545fdf9bSopenharmony_ci        }
2196545fdf9bSopenharmony_ci        resultReceiver_.append(results);
2197545fdf9bSopenharmony_ci    }
2198545fdf9bSopenharmony_ci    return result;
2199545fdf9bSopenharmony_ci}
2200545fdf9bSopenharmony_ci
2201545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckAddInstallRuleCorrectOption(int option, const std::string &commandName,
2202545fdf9bSopenharmony_ci    std::vector<std::string> &appIds, int &controlRuleType, int &userId, int &euid)
2203545fdf9bSopenharmony_ci{
2204545fdf9bSopenharmony_ci    bool ret = true;
2205545fdf9bSopenharmony_ci    switch (option) {
2206545fdf9bSopenharmony_ci        case 'h': {
2207545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2208545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2209545fdf9bSopenharmony_ci        }
2210545fdf9bSopenharmony_ci        case 'a': {
2211545fdf9bSopenharmony_ci            std::string arrayAppId = optarg;
2212545fdf9bSopenharmony_ci            std::stringstream array(arrayAppId);
2213545fdf9bSopenharmony_ci            std::string object;
2214545fdf9bSopenharmony_ci            while (getline(array, object, ',')) {
2215545fdf9bSopenharmony_ci                appIds.emplace_back(object);
2216545fdf9bSopenharmony_ci            }
2217545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -a %{public}s", commandName.c_str(), argv_[optind - 1]);
2218545fdf9bSopenharmony_ci            break;
2219545fdf9bSopenharmony_ci        }
2220545fdf9bSopenharmony_ci        case 'e': {
2221545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2222545fdf9bSopenharmony_ci            break;
2223545fdf9bSopenharmony_ci        }
2224545fdf9bSopenharmony_ci        case 't': {
2225545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, controlRuleType, ret);
2226545fdf9bSopenharmony_ci            break;
2227545fdf9bSopenharmony_ci        }
2228545fdf9bSopenharmony_ci        case 'u': {
2229545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2230545fdf9bSopenharmony_ci            break;
2231545fdf9bSopenharmony_ci        }
2232545fdf9bSopenharmony_ci        default: {
2233545fdf9bSopenharmony_ci            std::string unknownOption = "";
2234545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2235545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2236545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2237545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2238545fdf9bSopenharmony_ci        }
2239545fdf9bSopenharmony_ci    }
2240545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2241545fdf9bSopenharmony_ci}
2242545fdf9bSopenharmony_ci
2243545fdf9bSopenharmony_ci// bundle_test_tool addAppInstallRule -a test1,test2 -t 1 -u 101 -e 3057
2244545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsAddInstallRuleCommand()
2245545fdf9bSopenharmony_ci{
2246545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2247545fdf9bSopenharmony_ci    int counter = 0;
2248545fdf9bSopenharmony_ci    std::string commandName = "addAppInstallRule";
2249545fdf9bSopenharmony_ci    std::vector<std::string> appIds;
2250545fdf9bSopenharmony_ci    int euid = 3057;
2251545fdf9bSopenharmony_ci    int userId = 100;
2252545fdf9bSopenharmony_ci    int ruleType = 0;
2253545fdf9bSopenharmony_ci    APP_LOGD("RunAsAddInstallRuleCommand is start");
2254545fdf9bSopenharmony_ci    while (true) {
2255545fdf9bSopenharmony_ci        counter++;
2256545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2257545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2258545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2259545fdf9bSopenharmony_ci        }
2260545fdf9bSopenharmony_ci        if (option == -1) {
2261545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2262545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_ADD_INSTALL_RULE_OPTION);
2263545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2264545fdf9bSopenharmony_ci            }
2265545fdf9bSopenharmony_ci            break;
2266545fdf9bSopenharmony_ci        }
2267545fdf9bSopenharmony_ci        result = CheckAddInstallRuleCorrectOption(option, commandName, appIds, ruleType, userId, euid);
2268545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2269545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_ADD_INSTALL_RULE);
2270545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2271545fdf9bSopenharmony_ci        }
2272545fdf9bSopenharmony_ci    }
2273545fdf9bSopenharmony_ci    seteuid(euid);
2274545fdf9bSopenharmony_ci    auto rule = static_cast<AppInstallControlRuleType>(ruleType);
2275545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2276545fdf9bSopenharmony_ci    if (!appControlProxy) {
2277545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2278545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2279545fdf9bSopenharmony_ci    }
2280545fdf9bSopenharmony_ci    std::string appIdParam = "";
2281545fdf9bSopenharmony_ci    for (auto param : appIds) {
2282545fdf9bSopenharmony_ci        appIdParam = appIdParam.append(param) + ";";
2283545fdf9bSopenharmony_ci    }
2284545fdf9bSopenharmony_ci    APP_LOGI("appIds: %{public}s, controlRuleType: %{public}d, userId: %{public}d",
2285545fdf9bSopenharmony_ci        appIdParam.c_str(), ruleType, userId);
2286545fdf9bSopenharmony_ci    int32_t res = appControlProxy->AddAppInstallControlRule(appIds, rule, userId);
2287545fdf9bSopenharmony_ci    APP_LOGI("AddAppInstallControlRule return code: %{public}d", res);
2288545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2289545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_ADD_RULE_NG);
2290545fdf9bSopenharmony_ci        return res;
2291545fdf9bSopenharmony_ci    }
2292545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2293545fdf9bSopenharmony_ci    return result;
2294545fdf9bSopenharmony_ci}
2295545fdf9bSopenharmony_ci
2296545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetInstallRuleCorrectOption(int option, const std::string &commandName,
2297545fdf9bSopenharmony_ci    int &controlRuleType, int &userId, int &euid)
2298545fdf9bSopenharmony_ci{
2299545fdf9bSopenharmony_ci    bool ret = true;
2300545fdf9bSopenharmony_ci    switch (option) {
2301545fdf9bSopenharmony_ci        case 'h': {
2302545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2303545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2304545fdf9bSopenharmony_ci        }
2305545fdf9bSopenharmony_ci        case 'e': {
2306545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2307545fdf9bSopenharmony_ci            break;
2308545fdf9bSopenharmony_ci        }
2309545fdf9bSopenharmony_ci        case 't': {
2310545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, controlRuleType, ret);
2311545fdf9bSopenharmony_ci            break;
2312545fdf9bSopenharmony_ci        }
2313545fdf9bSopenharmony_ci        case 'u': {
2314545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2315545fdf9bSopenharmony_ci            break;
2316545fdf9bSopenharmony_ci        }
2317545fdf9bSopenharmony_ci        default: {
2318545fdf9bSopenharmony_ci            std::string unknownOption = "";
2319545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2320545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2321545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2322545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2323545fdf9bSopenharmony_ci        }
2324545fdf9bSopenharmony_ci    }
2325545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2326545fdf9bSopenharmony_ci}
2327545fdf9bSopenharmony_ci
2328545fdf9bSopenharmony_ci// bundle_test_tool getAppInstallRule -t 1 -u 101 -e 3057
2329545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetInstallRuleCommand()
2330545fdf9bSopenharmony_ci{
2331545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2332545fdf9bSopenharmony_ci    int counter = 0;
2333545fdf9bSopenharmony_ci    std::string commandName = "getAppInstallRule";
2334545fdf9bSopenharmony_ci    int euid = 3057;
2335545fdf9bSopenharmony_ci    int userId = 100;
2336545fdf9bSopenharmony_ci    int ruleType = 0;
2337545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetInstallRuleCommand is start");
2338545fdf9bSopenharmony_ci    while (true) {
2339545fdf9bSopenharmony_ci        counter++;
2340545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2341545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2342545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2343545fdf9bSopenharmony_ci        }
2344545fdf9bSopenharmony_ci        if (option == -1) {
2345545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2346545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_INSTALL_RULE_OPTION);
2347545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2348545fdf9bSopenharmony_ci            }
2349545fdf9bSopenharmony_ci            break;
2350545fdf9bSopenharmony_ci        }
2351545fdf9bSopenharmony_ci        result = CheckGetInstallRuleCorrectOption(option, commandName, ruleType, userId, euid);
2352545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2353545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_INSTALL_RULE);
2354545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2355545fdf9bSopenharmony_ci        }
2356545fdf9bSopenharmony_ci    }
2357545fdf9bSopenharmony_ci    seteuid(euid);
2358545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2359545fdf9bSopenharmony_ci    if (!appControlProxy) {
2360545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2361545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2362545fdf9bSopenharmony_ci    }
2363545fdf9bSopenharmony_ci    APP_LOGI("controlRuleType: %{public}d, userId: %{public}d", ruleType, userId);
2364545fdf9bSopenharmony_ci    auto rule = static_cast<AppInstallControlRuleType>(ruleType);
2365545fdf9bSopenharmony_ci    std::vector<std::string> appIds;
2366545fdf9bSopenharmony_ci    int32_t res = appControlProxy->GetAppInstallControlRule(rule, userId, appIds);
2367545fdf9bSopenharmony_ci    APP_LOGI("GetAppInstallControlRule return code: %{public}d", res);
2368545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2369545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_GET_RULE_NG);
2370545fdf9bSopenharmony_ci        return res;
2371545fdf9bSopenharmony_ci    }
2372545fdf9bSopenharmony_ci    std::string appIdParam = "";
2373545fdf9bSopenharmony_ci    for (auto param : appIds) {
2374545fdf9bSopenharmony_ci        appIdParam = appIdParam.append(param) + "; ";
2375545fdf9bSopenharmony_ci    }
2376545fdf9bSopenharmony_ci    resultReceiver_.append("appId : " + appIdParam + "\n");
2377545fdf9bSopenharmony_ci    return result;
2378545fdf9bSopenharmony_ci}
2379545fdf9bSopenharmony_ci
2380545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckDeleteInstallRuleCorrectOption(int option, const std::string &commandName,
2381545fdf9bSopenharmony_ci    int &controlRuleType, std::vector<std::string> &appIds, int &userId, int &euid)
2382545fdf9bSopenharmony_ci{
2383545fdf9bSopenharmony_ci    bool ret = true;
2384545fdf9bSopenharmony_ci    switch (option) {
2385545fdf9bSopenharmony_ci        case 'h': {
2386545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2387545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2388545fdf9bSopenharmony_ci        }
2389545fdf9bSopenharmony_ci        case 'a': {
2390545fdf9bSopenharmony_ci            std::string arrayAppId = optarg;
2391545fdf9bSopenharmony_ci            std::stringstream array(arrayAppId);
2392545fdf9bSopenharmony_ci            std::string object;
2393545fdf9bSopenharmony_ci            while (getline(array, object, ',')) {
2394545fdf9bSopenharmony_ci                appIds.emplace_back(object);
2395545fdf9bSopenharmony_ci            }
2396545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s -a %{public}s", commandName.c_str(), argv_[optind - 1]);
2397545fdf9bSopenharmony_ci            break;
2398545fdf9bSopenharmony_ci        }
2399545fdf9bSopenharmony_ci        case 'e': {
2400545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2401545fdf9bSopenharmony_ci            break;
2402545fdf9bSopenharmony_ci        }
2403545fdf9bSopenharmony_ci        case 't': {
2404545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, controlRuleType, ret);
2405545fdf9bSopenharmony_ci            break;
2406545fdf9bSopenharmony_ci        }
2407545fdf9bSopenharmony_ci        case 'u': {
2408545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2409545fdf9bSopenharmony_ci            break;
2410545fdf9bSopenharmony_ci        }
2411545fdf9bSopenharmony_ci        default: {
2412545fdf9bSopenharmony_ci            std::string unknownOption = "";
2413545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2414545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2415545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2416545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2417545fdf9bSopenharmony_ci        }
2418545fdf9bSopenharmony_ci    }
2419545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2420545fdf9bSopenharmony_ci}
2421545fdf9bSopenharmony_ci
2422545fdf9bSopenharmony_ci// bundle_test_tool deleteAppInstallRule -a test1 -t 1 -u 101 -e 3057
2423545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDeleteInstallRuleCommand()
2424545fdf9bSopenharmony_ci{
2425545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2426545fdf9bSopenharmony_ci    int counter = 0;
2427545fdf9bSopenharmony_ci    int euid = 3057;
2428545fdf9bSopenharmony_ci    std::string commandName = "deleteAppInstallRule";
2429545fdf9bSopenharmony_ci    std::vector<std::string> appIds;
2430545fdf9bSopenharmony_ci    int ruleType = 0;
2431545fdf9bSopenharmony_ci    int userId = 100;
2432545fdf9bSopenharmony_ci    APP_LOGD("RunAsDeleteInstallRuleCommand is start");
2433545fdf9bSopenharmony_ci    while (true) {
2434545fdf9bSopenharmony_ci        counter++;
2435545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2436545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2437545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2438545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2439545fdf9bSopenharmony_ci        }
2440545fdf9bSopenharmony_ci        if (option == -1) {
2441545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2442545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_DELETE_INSTALL_RULE_OPTION);
2443545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2444545fdf9bSopenharmony_ci            }
2445545fdf9bSopenharmony_ci            break;
2446545fdf9bSopenharmony_ci        }
2447545fdf9bSopenharmony_ci        result = CheckDeleteInstallRuleCorrectOption(option, commandName, ruleType, appIds, userId, euid);
2448545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2449545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_DELETE_INSTALL_RULE);
2450545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2451545fdf9bSopenharmony_ci        }
2452545fdf9bSopenharmony_ci    }
2453545fdf9bSopenharmony_ci    seteuid(euid);
2454545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2455545fdf9bSopenharmony_ci    if (!appControlProxy) {
2456545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2457545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2458545fdf9bSopenharmony_ci    }
2459545fdf9bSopenharmony_ci    std::string appIdParam = "";
2460545fdf9bSopenharmony_ci    for (auto param : appIds) {
2461545fdf9bSopenharmony_ci        appIdParam = appIdParam.append(param) + ";";
2462545fdf9bSopenharmony_ci    }
2463545fdf9bSopenharmony_ci    APP_LOGI("appIds: %{public}s, userId: %{public}d", appIdParam.c_str(), userId);
2464545fdf9bSopenharmony_ci    auto rule = static_cast<AppInstallControlRuleType>(ruleType);
2465545fdf9bSopenharmony_ci    int32_t res = appControlProxy->DeleteAppInstallControlRule(rule, appIds, userId);
2466545fdf9bSopenharmony_ci    APP_LOGI("DeleteAppInstallControlRule return code: %{public}d", res);
2467545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2468545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_DELETE_RULE_NG);
2469545fdf9bSopenharmony_ci        return res;
2470545fdf9bSopenharmony_ci    }
2471545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2472545fdf9bSopenharmony_ci    return result;
2473545fdf9bSopenharmony_ci}
2474545fdf9bSopenharmony_ci
2475545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckCleanInstallRuleCorrectOption(
2476545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &controlRuleType, int &userId, int &euid)
2477545fdf9bSopenharmony_ci{
2478545fdf9bSopenharmony_ci    bool ret = true;
2479545fdf9bSopenharmony_ci    switch (option) {
2480545fdf9bSopenharmony_ci        case 'h': {
2481545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2482545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2483545fdf9bSopenharmony_ci        }
2484545fdf9bSopenharmony_ci        case 'e': {
2485545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2486545fdf9bSopenharmony_ci            break;
2487545fdf9bSopenharmony_ci        }
2488545fdf9bSopenharmony_ci        case 't': {
2489545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, controlRuleType, ret);
2490545fdf9bSopenharmony_ci            break;
2491545fdf9bSopenharmony_ci        }
2492545fdf9bSopenharmony_ci        case 'u': {
2493545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2494545fdf9bSopenharmony_ci            break;
2495545fdf9bSopenharmony_ci        }
2496545fdf9bSopenharmony_ci        default: {
2497545fdf9bSopenharmony_ci            std::string unknownOption = "";
2498545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2499545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2500545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2501545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2502545fdf9bSopenharmony_ci        }
2503545fdf9bSopenharmony_ci    }
2504545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2505545fdf9bSopenharmony_ci}
2506545fdf9bSopenharmony_ci
2507545fdf9bSopenharmony_ci// bundle_test_tool cleanAppInstallRule -t 1 -u 101 -e 3057
2508545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsCleanInstallRuleCommand()
2509545fdf9bSopenharmony_ci{
2510545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2511545fdf9bSopenharmony_ci    int counter = 0;
2512545fdf9bSopenharmony_ci    int euid = 3057;
2513545fdf9bSopenharmony_ci    std::string commandName = "cleanAppInstallRule";
2514545fdf9bSopenharmony_ci    int userId = 100;
2515545fdf9bSopenharmony_ci    int ruleType = 0;
2516545fdf9bSopenharmony_ci    APP_LOGD("RunAsCleanInstallRuleCommand is start");
2517545fdf9bSopenharmony_ci    while (true) {
2518545fdf9bSopenharmony_ci        counter++;
2519545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2520545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2521545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2522545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2523545fdf9bSopenharmony_ci        }
2524545fdf9bSopenharmony_ci        if (option == -1) {
2525545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2526545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2527545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_CLEAN_INSTALL_RULE_OPTION);
2528545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2529545fdf9bSopenharmony_ci            }
2530545fdf9bSopenharmony_ci            break;
2531545fdf9bSopenharmony_ci        }
2532545fdf9bSopenharmony_ci        result = CheckCleanInstallRuleCorrectOption(option, commandName, ruleType, userId, euid);
2533545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2534545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_NO_CLEAN_INSTALL_RULE_OPTION);
2535545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2536545fdf9bSopenharmony_ci        }
2537545fdf9bSopenharmony_ci    }
2538545fdf9bSopenharmony_ci    seteuid(euid);
2539545fdf9bSopenharmony_ci    auto rule = static_cast<AppInstallControlRuleType>(ruleType);
2540545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2541545fdf9bSopenharmony_ci    if (!appControlProxy) {
2542545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2543545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2544545fdf9bSopenharmony_ci    }
2545545fdf9bSopenharmony_ci    APP_LOGI("controlRuleType: %{public}d, userId: %{public}d", ruleType, userId);
2546545fdf9bSopenharmony_ci    int32_t res = appControlProxy->DeleteAppInstallControlRule(rule, userId);
2547545fdf9bSopenharmony_ci    APP_LOGI("DeleteAppInstallControlRule clean return code: %{public}d", res);
2548545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2549545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_DELETE_RULE_NG);
2550545fdf9bSopenharmony_ci        return res;
2551545fdf9bSopenharmony_ci    }
2552545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2553545fdf9bSopenharmony_ci    return result;
2554545fdf9bSopenharmony_ci}
2555545fdf9bSopenharmony_ci
2556545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckAppRunningRuleCorrectOption(int option, const std::string &commandName,
2557545fdf9bSopenharmony_ci    std::vector<AppRunningControlRule> &controlRule, int &userId, int &euid)
2558545fdf9bSopenharmony_ci{
2559545fdf9bSopenharmony_ci    bool ret = true;
2560545fdf9bSopenharmony_ci    switch (option) {
2561545fdf9bSopenharmony_ci        case 'h': {
2562545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2563545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2564545fdf9bSopenharmony_ci        }
2565545fdf9bSopenharmony_ci        case 'c': {
2566545fdf9bSopenharmony_ci            std::string arrayJsonRule = optarg;
2567545fdf9bSopenharmony_ci            std::stringstream array(arrayJsonRule);
2568545fdf9bSopenharmony_ci            std::string object;
2569545fdf9bSopenharmony_ci            while (getline(array, object, ';')) {
2570545fdf9bSopenharmony_ci                size_t pos1 = object.find("appId");
2571545fdf9bSopenharmony_ci                size_t pos2 = object.find("controlMessage");
2572545fdf9bSopenharmony_ci                size_t pos3 = object.find(":", pos2);
2573545fdf9bSopenharmony_ci                if ((pos1 == std::string::npos) || (pos2 == std::string::npos)) {
2574545fdf9bSopenharmony_ci                    return OHOS::ERR_INVALID_VALUE;
2575545fdf9bSopenharmony_ci                }
2576545fdf9bSopenharmony_ci                std::string appId = object.substr(pos1+6, pos2-pos1-7);
2577545fdf9bSopenharmony_ci                std::string controlMessage = object.substr(pos3+1);
2578545fdf9bSopenharmony_ci                AppRunningControlRule rule;
2579545fdf9bSopenharmony_ci                rule.appId = appId;
2580545fdf9bSopenharmony_ci                rule.controlMessage = controlMessage;
2581545fdf9bSopenharmony_ci                controlRule.emplace_back(rule);
2582545fdf9bSopenharmony_ci            }
2583545fdf9bSopenharmony_ci            break;
2584545fdf9bSopenharmony_ci        }
2585545fdf9bSopenharmony_ci        case 'e': {
2586545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2587545fdf9bSopenharmony_ci            break;
2588545fdf9bSopenharmony_ci        }
2589545fdf9bSopenharmony_ci        case 'u': {
2590545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2591545fdf9bSopenharmony_ci            break;
2592545fdf9bSopenharmony_ci        }
2593545fdf9bSopenharmony_ci        default: {
2594545fdf9bSopenharmony_ci            std::string unknownOption = "";
2595545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2596545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2597545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2598545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2599545fdf9bSopenharmony_ci        }
2600545fdf9bSopenharmony_ci    }
2601545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2602545fdf9bSopenharmony_ci}
2603545fdf9bSopenharmony_ci
2604545fdf9bSopenharmony_ci// bundle_test_tool addAppRunningRule -c appId:id1,controlMessage:msg1;appId:id2,controlMessage:msg2
2605545fdf9bSopenharmony_ci// -u 101 -e 3057
2606545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsAddAppRunningRuleCommand()
2607545fdf9bSopenharmony_ci{
2608545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2609545fdf9bSopenharmony_ci    int counter = 0;
2610545fdf9bSopenharmony_ci    int euid = 3057;
2611545fdf9bSopenharmony_ci    std::string commandName = "addAppRunningRule";
2612545fdf9bSopenharmony_ci    int userId = 100;
2613545fdf9bSopenharmony_ci    std::vector<AppRunningControlRule> controlRule;
2614545fdf9bSopenharmony_ci    APP_LOGD("RunAsAddAppRunningRuleCommand is start");
2615545fdf9bSopenharmony_ci    while (true) {
2616545fdf9bSopenharmony_ci        counter++;
2617545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2618545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2619545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2620545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2621545fdf9bSopenharmony_ci        }
2622545fdf9bSopenharmony_ci        if (option == -1) {
2623545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2624545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2625545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_APP_RUNNING_RULE_OPTION);
2626545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2627545fdf9bSopenharmony_ci            }
2628545fdf9bSopenharmony_ci            break;
2629545fdf9bSopenharmony_ci        }
2630545fdf9bSopenharmony_ci        result = CheckAppRunningRuleCorrectOption(option, commandName, controlRule, userId, euid);
2631545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2632545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_ADD_APP_RUNNING_RULE);
2633545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2634545fdf9bSopenharmony_ci        }
2635545fdf9bSopenharmony_ci    }
2636545fdf9bSopenharmony_ci    seteuid(euid);
2637545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2638545fdf9bSopenharmony_ci    if (!appControlProxy) {
2639545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2640545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2641545fdf9bSopenharmony_ci    }
2642545fdf9bSopenharmony_ci    std::string appIdParam = "";
2643545fdf9bSopenharmony_ci    for (auto param : controlRule) {
2644545fdf9bSopenharmony_ci        appIdParam = appIdParam.append("appId:"+ param.appId + ":" + "message" + param.controlMessage);
2645545fdf9bSopenharmony_ci    }
2646545fdf9bSopenharmony_ci    APP_LOGI("appRunningControlRule: %{public}s, userId: %{public}d", appIdParam.c_str(), userId);
2647545fdf9bSopenharmony_ci    int32_t res = appControlProxy->AddAppRunningControlRule(controlRule, userId);
2648545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2649545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_ADD_RULE_NG);
2650545fdf9bSopenharmony_ci        return res;
2651545fdf9bSopenharmony_ci    }
2652545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2653545fdf9bSopenharmony_ci    return result;
2654545fdf9bSopenharmony_ci}
2655545fdf9bSopenharmony_ci
2656545fdf9bSopenharmony_ci// bundle_test_tool deleteAppRunningRule -c appId:101,controlMessage:msg1 -u 101 -e 3057
2657545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDeleteAppRunningRuleCommand()
2658545fdf9bSopenharmony_ci{
2659545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2660545fdf9bSopenharmony_ci    int counter = 0;
2661545fdf9bSopenharmony_ci    int euid = 3057;
2662545fdf9bSopenharmony_ci    std::string commandName = "addAppRunningRule";
2663545fdf9bSopenharmony_ci    int userId = 100;
2664545fdf9bSopenharmony_ci    std::vector<AppRunningControlRule> controlRule;
2665545fdf9bSopenharmony_ci    APP_LOGD("RunAsDeleteAppRunningRuleCommand is start");
2666545fdf9bSopenharmony_ci    while (true) {
2667545fdf9bSopenharmony_ci        counter++;
2668545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2669545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2670545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2671545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2672545fdf9bSopenharmony_ci        }
2673545fdf9bSopenharmony_ci        if (option == -1) {
2674545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2675545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2676545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_APP_RUNNING_RULE_OPTION);
2677545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2678545fdf9bSopenharmony_ci            }
2679545fdf9bSopenharmony_ci            break;
2680545fdf9bSopenharmony_ci        }
2681545fdf9bSopenharmony_ci        result = CheckAppRunningRuleCorrectOption(option, commandName, controlRule, userId, euid);
2682545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2683545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_DELETE_APP_RUNNING_RULE);
2684545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2685545fdf9bSopenharmony_ci        }
2686545fdf9bSopenharmony_ci    }
2687545fdf9bSopenharmony_ci    seteuid(euid);
2688545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2689545fdf9bSopenharmony_ci    if (!appControlProxy) {
2690545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2691545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2692545fdf9bSopenharmony_ci    }
2693545fdf9bSopenharmony_ci    std::string appIdParam = "";
2694545fdf9bSopenharmony_ci    for (auto param : controlRule) {
2695545fdf9bSopenharmony_ci        appIdParam = appIdParam.append("appId:"+ param.appId + ":" + "message" + param.controlMessage);
2696545fdf9bSopenharmony_ci    }
2697545fdf9bSopenharmony_ci    APP_LOGI("appRunningControlRule: %{public}s, userId: %{public}d", appIdParam.c_str(), userId);
2698545fdf9bSopenharmony_ci    int32_t res = appControlProxy->DeleteAppRunningControlRule(controlRule, userId);
2699545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2700545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_DELETE_RULE_NG);
2701545fdf9bSopenharmony_ci        return res;
2702545fdf9bSopenharmony_ci    }
2703545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2704545fdf9bSopenharmony_ci    return result;
2705545fdf9bSopenharmony_ci}
2706545fdf9bSopenharmony_ci
2707545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckCleanAppRunningRuleCorrectOption(
2708545fdf9bSopenharmony_ci    int option, const std::string &commandName, int &userId, int &euid)
2709545fdf9bSopenharmony_ci{
2710545fdf9bSopenharmony_ci    bool ret = true;
2711545fdf9bSopenharmony_ci    switch (option) {
2712545fdf9bSopenharmony_ci        case 'h': {
2713545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2714545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2715545fdf9bSopenharmony_ci        }
2716545fdf9bSopenharmony_ci        case 'e': {
2717545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2718545fdf9bSopenharmony_ci            break;
2719545fdf9bSopenharmony_ci        }
2720545fdf9bSopenharmony_ci        case 'u': {
2721545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2722545fdf9bSopenharmony_ci            break;
2723545fdf9bSopenharmony_ci        }
2724545fdf9bSopenharmony_ci        default: {
2725545fdf9bSopenharmony_ci            std::string unknownOption = "";
2726545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2727545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2728545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2729545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2730545fdf9bSopenharmony_ci        }
2731545fdf9bSopenharmony_ci    }
2732545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2733545fdf9bSopenharmony_ci}
2734545fdf9bSopenharmony_ci
2735545fdf9bSopenharmony_ci// bundle_test_tool cleanAppRunningRule -u 101 -e 3057
2736545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsCleanAppRunningRuleCommand()
2737545fdf9bSopenharmony_ci{
2738545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2739545fdf9bSopenharmony_ci    int counter = 0;
2740545fdf9bSopenharmony_ci    int euid = 3057;
2741545fdf9bSopenharmony_ci    std::string commandName = "addAppRunningRule";
2742545fdf9bSopenharmony_ci    int userId = 100;
2743545fdf9bSopenharmony_ci    APP_LOGD("RunAsCleanAppRunningRuleCommand is start");
2744545fdf9bSopenharmony_ci    while (true) {
2745545fdf9bSopenharmony_ci        counter++;
2746545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2747545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2748545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2749545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2750545fdf9bSopenharmony_ci        }
2751545fdf9bSopenharmony_ci        if (option == -1) {
2752545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2753545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2754545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_CLEAN_APP_RUNNING_RULE_OPTION);
2755545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2756545fdf9bSopenharmony_ci            }
2757545fdf9bSopenharmony_ci            break;
2758545fdf9bSopenharmony_ci        }
2759545fdf9bSopenharmony_ci        result = CheckCleanAppRunningRuleCorrectOption(option, commandName, userId, euid);
2760545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2761545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_CLEAN_APP_RUNNING_RULE);
2762545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2763545fdf9bSopenharmony_ci        }
2764545fdf9bSopenharmony_ci    }
2765545fdf9bSopenharmony_ci    seteuid(euid);
2766545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2767545fdf9bSopenharmony_ci    if (!appControlProxy) {
2768545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2769545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2770545fdf9bSopenharmony_ci    }
2771545fdf9bSopenharmony_ci    APP_LOGI("userId: %{public}d", userId);
2772545fdf9bSopenharmony_ci    int32_t res = appControlProxy->DeleteAppRunningControlRule(userId);
2773545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2774545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_DELETE_RULE_NG);
2775545fdf9bSopenharmony_ci        return res;
2776545fdf9bSopenharmony_ci    }
2777545fdf9bSopenharmony_ci    resultReceiver_.append(std::to_string(res) + "\n");
2778545fdf9bSopenharmony_ci    return result;
2779545fdf9bSopenharmony_ci}
2780545fdf9bSopenharmony_ci
2781545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetAppRunningRuleCorrectOption(int option, const std::string &commandName,
2782545fdf9bSopenharmony_ci    int32_t &userId, int &euid)
2783545fdf9bSopenharmony_ci{
2784545fdf9bSopenharmony_ci    bool ret = true;
2785545fdf9bSopenharmony_ci    switch (option) {
2786545fdf9bSopenharmony_ci        case 'h': {
2787545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2788545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2789545fdf9bSopenharmony_ci        }
2790545fdf9bSopenharmony_ci        case 'e': {
2791545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2792545fdf9bSopenharmony_ci            break;
2793545fdf9bSopenharmony_ci        }
2794545fdf9bSopenharmony_ci        case 'u': {
2795545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2796545fdf9bSopenharmony_ci            break;
2797545fdf9bSopenharmony_ci        }
2798545fdf9bSopenharmony_ci        default: {
2799545fdf9bSopenharmony_ci            std::string unknownOption = "";
2800545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2801545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2802545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2803545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2804545fdf9bSopenharmony_ci        }
2805545fdf9bSopenharmony_ci    }
2806545fdf9bSopenharmony_ci    return OHOS::ERR_OK ;
2807545fdf9bSopenharmony_ci}
2808545fdf9bSopenharmony_ci
2809545fdf9bSopenharmony_ci// bundle_test_tool getAppRunningControlRule -u 101 -e 3057
2810545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetAppRunningControlRuleCommand()
2811545fdf9bSopenharmony_ci{
2812545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2813545fdf9bSopenharmony_ci    int counter = 0;
2814545fdf9bSopenharmony_ci    int euid = 3057;
2815545fdf9bSopenharmony_ci    std::string commandName = "addAppRunningRule";
2816545fdf9bSopenharmony_ci    int userId = 100;
2817545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetAppRunningControlRuleCommand is start");
2818545fdf9bSopenharmony_ci    while (true) {
2819545fdf9bSopenharmony_ci        counter++;
2820545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2821545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2822545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2823545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2824545fdf9bSopenharmony_ci        }
2825545fdf9bSopenharmony_ci        if (option == -1) {
2826545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2827545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2828545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_ALL_APP_RUNNING_RULE_OPTION);
2829545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2830545fdf9bSopenharmony_ci            }
2831545fdf9bSopenharmony_ci            break;
2832545fdf9bSopenharmony_ci        }
2833545fdf9bSopenharmony_ci        result = CheckGetAppRunningRuleCorrectOption(option, commandName, userId, euid);
2834545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2835545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_APP_RUNNING_RULE);
2836545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2837545fdf9bSopenharmony_ci        }
2838545fdf9bSopenharmony_ci    }
2839545fdf9bSopenharmony_ci    seteuid(euid);
2840545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2841545fdf9bSopenharmony_ci    if (!appControlProxy) {
2842545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2843545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2844545fdf9bSopenharmony_ci    }
2845545fdf9bSopenharmony_ci    APP_LOGI("userId: %{public}d", userId);
2846545fdf9bSopenharmony_ci    std::vector<std::string> appIds;
2847545fdf9bSopenharmony_ci    int32_t res = appControlProxy->GetAppRunningControlRule(userId, appIds);
2848545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2849545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_GET_RULE_NG);
2850545fdf9bSopenharmony_ci        return res;
2851545fdf9bSopenharmony_ci    }
2852545fdf9bSopenharmony_ci    std::string appIdParam = "";
2853545fdf9bSopenharmony_ci    for (auto param : appIds) {
2854545fdf9bSopenharmony_ci        appIdParam = appIdParam.append(param) + "; ";
2855545fdf9bSopenharmony_ci    }
2856545fdf9bSopenharmony_ci    resultReceiver_.append("appId : " + appIdParam + "\n");
2857545fdf9bSopenharmony_ci    return result;
2858545fdf9bSopenharmony_ci}
2859545fdf9bSopenharmony_ci
2860545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetAppRunningRuleResultCorrectOption(int option, const std::string &commandName,
2861545fdf9bSopenharmony_ci    std::string &bundleName, int32_t &userId, int &euid)
2862545fdf9bSopenharmony_ci{
2863545fdf9bSopenharmony_ci    bool ret = true;
2864545fdf9bSopenharmony_ci    switch (option) {
2865545fdf9bSopenharmony_ci        case 'h': {
2866545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2867545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2868545fdf9bSopenharmony_ci        }
2869545fdf9bSopenharmony_ci        case 'e': {
2870545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, euid, ret);
2871545fdf9bSopenharmony_ci            break;
2872545fdf9bSopenharmony_ci        }
2873545fdf9bSopenharmony_ci        case 'n': {
2874545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool %{public}s %{public}s'", commandName.c_str(), argv_[optind - 1]);
2875545fdf9bSopenharmony_ci            bundleName = optarg;
2876545fdf9bSopenharmony_ci            break;
2877545fdf9bSopenharmony_ci        }
2878545fdf9bSopenharmony_ci        case 'u': {
2879545fdf9bSopenharmony_ci            StringToInt(optarg, commandName, userId, ret);
2880545fdf9bSopenharmony_ci            break;
2881545fdf9bSopenharmony_ci        }
2882545fdf9bSopenharmony_ci        default: {
2883545fdf9bSopenharmony_ci            std::string unknownOption = "";
2884545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2885545fdf9bSopenharmony_ci            APP_LOGD("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2886545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2887545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2888545fdf9bSopenharmony_ci        }
2889545fdf9bSopenharmony_ci    }
2890545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2891545fdf9bSopenharmony_ci}
2892545fdf9bSopenharmony_ci
2893545fdf9bSopenharmony_ci// bundle_test_tool getAppRunningControlRuleResult -n com.ohos.example -e 3057
2894545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetAppRunningControlRuleResultCommand()
2895545fdf9bSopenharmony_ci{
2896545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2897545fdf9bSopenharmony_ci    int counter = 0;
2898545fdf9bSopenharmony_ci    int euid = 3057;
2899545fdf9bSopenharmony_ci    std::string commandName = "addAppRunningRule";
2900545fdf9bSopenharmony_ci    int userId = 100;
2901545fdf9bSopenharmony_ci    std::string bundleName;
2902545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetAppRunningControlRuleResultCommand is start");
2903545fdf9bSopenharmony_ci    while (true) {
2904545fdf9bSopenharmony_ci        counter++;
2905545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_RULE.c_str(), LONG_OPTIONS_RULE, nullptr);
2906545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2907545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2908545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2909545fdf9bSopenharmony_ci        }
2910545fdf9bSopenharmony_ci        if (option == -1) {
2911545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2912545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getRule with no option.");
2913545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_APP_RUNNING_RULE_OPTION);
2914545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2915545fdf9bSopenharmony_ci            }
2916545fdf9bSopenharmony_ci            break;
2917545fdf9bSopenharmony_ci        }
2918545fdf9bSopenharmony_ci        result = CheckGetAppRunningRuleResultCorrectOption(option, commandName, bundleName, userId, euid);
2919545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2920545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_APP_RUNNING_RESULT_RULE);
2921545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2922545fdf9bSopenharmony_ci        }
2923545fdf9bSopenharmony_ci    }
2924545fdf9bSopenharmony_ci    seteuid(euid);
2925545fdf9bSopenharmony_ci    auto appControlProxy = bundleMgrProxy_->GetAppControlProxy();
2926545fdf9bSopenharmony_ci    if (!appControlProxy) {
2927545fdf9bSopenharmony_ci        APP_LOGE("fail to get app control proxy.");
2928545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
2929545fdf9bSopenharmony_ci    }
2930545fdf9bSopenharmony_ci    AppRunningControlRuleResult ruleResult;
2931545fdf9bSopenharmony_ci    APP_LOGI("bundleName: %{public}s, userId: %{public}d", bundleName.c_str(), userId);
2932545fdf9bSopenharmony_ci    int32_t res = appControlProxy->GetAppRunningControlRule(bundleName, userId, ruleResult);
2933545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
2934545fdf9bSopenharmony_ci        APP_LOGI("GetAppRunningControlRule result: %{public}d", res);
2935545fdf9bSopenharmony_ci        resultReceiver_.append("message:" + ruleResult.controlMessage + " bundle:notFind" + "\n");
2936545fdf9bSopenharmony_ci        return res;
2937545fdf9bSopenharmony_ci    }
2938545fdf9bSopenharmony_ci    resultReceiver_.append("message:" + ruleResult.controlMessage + "\n");
2939545fdf9bSopenharmony_ci    if (ruleResult.controlWant != nullptr) {
2940545fdf9bSopenharmony_ci        resultReceiver_.append("controlWant:" + ruleResult.controlWant->ToString() + "\n");
2941545fdf9bSopenharmony_ci    } else {
2942545fdf9bSopenharmony_ci        resultReceiver_.append("controlWant: nullptr \n");
2943545fdf9bSopenharmony_ci    }
2944545fdf9bSopenharmony_ci    return result;
2945545fdf9bSopenharmony_ci}
2946545fdf9bSopenharmony_ci
2947545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckCleanBundleCacheFilesAutomaticOption(
2948545fdf9bSopenharmony_ci    int option, const std::string &commandName, uint64_t &cacheSize)
2949545fdf9bSopenharmony_ci{
2950545fdf9bSopenharmony_ci    bool ret = true;
2951545fdf9bSopenharmony_ci    switch (option) {
2952545fdf9bSopenharmony_ci        case 'h': {
2953545fdf9bSopenharmony_ci            APP_LOGI("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2954545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2955545fdf9bSopenharmony_ci        }
2956545fdf9bSopenharmony_ci        case 's': {
2957545fdf9bSopenharmony_ci            APP_LOGI("bundle_test_tool %{public}s %{public}s", commandName.c_str(), argv_[optind - 1]);
2958545fdf9bSopenharmony_ci            StringToUnsignedLongLong(optarg, commandName, cacheSize, ret);
2959545fdf9bSopenharmony_ci            break;
2960545fdf9bSopenharmony_ci        }
2961545fdf9bSopenharmony_ci        default: {
2962545fdf9bSopenharmony_ci            std::string unknownOption = "";
2963545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
2964545fdf9bSopenharmony_ci            APP_LOGE("bundle_test_tool %{public}s with an unknown option.", commandName.c_str());
2965545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
2966545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2967545fdf9bSopenharmony_ci        }
2968545fdf9bSopenharmony_ci    }
2969545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
2970545fdf9bSopenharmony_ci}
2971545fdf9bSopenharmony_ci
2972545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsCleanBundleCacheFilesAutomaticCommand()
2973545fdf9bSopenharmony_ci{
2974545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
2975545fdf9bSopenharmony_ci    int counter = 0;
2976545fdf9bSopenharmony_ci    std::string commandName = "cleanBundleCacheFilesAutomatic";
2977545fdf9bSopenharmony_ci    uint64_t cacheSize;
2978545fdf9bSopenharmony_ci    APP_LOGI("RunAsCleanBundleCacheFilesAutomaticCommand is start");
2979545fdf9bSopenharmony_ci    while (true) {
2980545fdf9bSopenharmony_ci        counter++;
2981545fdf9bSopenharmony_ci        int option = getopt_long(argc_, argv_, SHORT_OPTIONS_AUTO_CLEAN_CACHE.c_str(),
2982545fdf9bSopenharmony_ci            LONG_OPTIONS_AUTO_CLEAN_CACHE, nullptr);
2983545fdf9bSopenharmony_ci        APP_LOGI("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
2984545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
2985545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2986545fdf9bSopenharmony_ci        }
2987545fdf9bSopenharmony_ci        if (option == -1) {
2988545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
2989545fdf9bSopenharmony_ci                APP_LOGE("bundle_test_tool getRule with no option.");
2990545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_AUTO_CLEAN_CACHE_OPTION);
2991545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
2992545fdf9bSopenharmony_ci            }
2993545fdf9bSopenharmony_ci            break;
2994545fdf9bSopenharmony_ci        }
2995545fdf9bSopenharmony_ci        result = CheckCleanBundleCacheFilesAutomaticOption(option, commandName, cacheSize);
2996545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
2997545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_AUTO_CLEAN_CACHE_RULE);
2998545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
2999545fdf9bSopenharmony_ci        }
3000545fdf9bSopenharmony_ci    }
3001545fdf9bSopenharmony_ci
3002545fdf9bSopenharmony_ci    ErrCode res = bundleMgrProxy_->CleanBundleCacheFilesAutomatic(cacheSize);
3003545fdf9bSopenharmony_ci    if (res == ERR_OK) {
3004545fdf9bSopenharmony_ci        resultReceiver_.append("clean fixed size cache successfully\n");
3005545fdf9bSopenharmony_ci    } else {
3006545fdf9bSopenharmony_ci        resultReceiver_.append("clean fixed size cache failed, errCode is "+ std::to_string(res) + "\n");
3007545fdf9bSopenharmony_ci        APP_LOGE("CleanBundleCacheFilesAutomatic failed, result: %{public}d", res);
3008545fdf9bSopenharmony_ci        return res;
3009545fdf9bSopenharmony_ci    }
3010545fdf9bSopenharmony_ci
3011545fdf9bSopenharmony_ci    return res;
3012545fdf9bSopenharmony_ci}
3013545fdf9bSopenharmony_ci
3014545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetContinueBundleName()
3015545fdf9bSopenharmony_ci{
3016545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetContinueBundleName start");
3017545fdf9bSopenharmony_ci    std::string bundleName;
3018545fdf9bSopenharmony_ci    int32_t userId = Constants::UNSPECIFIED_USERID;
3019545fdf9bSopenharmony_ci    int32_t appIndex;
3020545fdf9bSopenharmony_ci    int32_t result = BundleNameAndUserIdCommonFunc(bundleName, userId, appIndex);
3021545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3022545fdf9bSopenharmony_ci        resultReceiver_.append("RunAsGetContinueBundleName erro!!");
3023545fdf9bSopenharmony_ci    } else {
3024545fdf9bSopenharmony_ci        if (userId == Constants::UNSPECIFIED_USERID) {
3025545fdf9bSopenharmony_ci            int32_t mockUid = 20010099;
3026545fdf9bSopenharmony_ci            // Mock the current tool uid, the current default user must be executed under 100.
3027545fdf9bSopenharmony_ci            int setResult = setuid(mockUid);
3028545fdf9bSopenharmony_ci            APP_LOGD("Set uid result: %{public}d", setResult);
3029545fdf9bSopenharmony_ci        }
3030545fdf9bSopenharmony_ci
3031545fdf9bSopenharmony_ci        std::string msg;
3032545fdf9bSopenharmony_ci        result = GetContinueBundleName(bundleName, userId, msg);
3033545fdf9bSopenharmony_ci        APP_LOGD("Get continue bundle result %{public}d", result);
3034545fdf9bSopenharmony_ci        if (result == OHOS::ERR_OK) {
3035545fdf9bSopenharmony_ci            resultReceiver_.append(msg);
3036545fdf9bSopenharmony_ci            return ERR_OK;
3037545fdf9bSopenharmony_ci        } else {
3038545fdf9bSopenharmony_ci            APP_LOGE("Get continue bundle name error: %{public}d", result);
3039545fdf9bSopenharmony_ci            std::string err("Get continue bundle name error!");
3040545fdf9bSopenharmony_ci            resultReceiver_.append(err);
3041545fdf9bSopenharmony_ci        }
3042545fdf9bSopenharmony_ci    }
3043545fdf9bSopenharmony_ci    return OHOS::ERR_INVALID_VALUE;
3044545fdf9bSopenharmony_ci}
3045545fdf9bSopenharmony_ci
3046545fdf9bSopenharmony_ciErrCode BundleTestTool::GetContinueBundleName(const std::string &bundleName, int32_t userId, std::string& msg)
3047545fdf9bSopenharmony_ci{
3048545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3049545fdf9bSopenharmony_ci        APP_LOGE("Bundle mgr proxy is nullptr");
3050545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3051545fdf9bSopenharmony_ci    }
3052545fdf9bSopenharmony_ci    std::vector<std::string> continueBundleName;
3053545fdf9bSopenharmony_ci    auto ret = bundleMgrProxy_->GetContinueBundleNames(bundleName, continueBundleName, userId);
3054545fdf9bSopenharmony_ci    APP_LOGD("Get continue bundle names result: %{public}d", ret);
3055545fdf9bSopenharmony_ci    if (ret == OHOS::ERR_OK) {
3056545fdf9bSopenharmony_ci        msg = "continueBundleNameList:\n{\n";
3057545fdf9bSopenharmony_ci        for (const auto &name : continueBundleName) {
3058545fdf9bSopenharmony_ci            msg +="     ";
3059545fdf9bSopenharmony_ci            msg += name;
3060545fdf9bSopenharmony_ci            msg += "\n";
3061545fdf9bSopenharmony_ci        }
3062545fdf9bSopenharmony_ci        msg += "}\n";
3063545fdf9bSopenharmony_ci        return ERR_OK;
3064545fdf9bSopenharmony_ci    }
3065545fdf9bSopenharmony_ci    return ret;
3066545fdf9bSopenharmony_ci}
3067545fdf9bSopenharmony_ci
3068545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDeployQuickFix()
3069545fdf9bSopenharmony_ci{
3070545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
3071545fdf9bSopenharmony_ci    int32_t counter = 0;
3072545fdf9bSopenharmony_ci    int32_t index = 0;
3073545fdf9bSopenharmony_ci    std::vector<std::string> quickFixPaths;
3074545fdf9bSopenharmony_ci    int32_t isDebug = 0;
3075545fdf9bSopenharmony_ci    while (true) {
3076545fdf9bSopenharmony_ci        counter++;
3077545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_QUICK_FIX.c_str(), LONG_OPTIONS_QUICK_FIX, nullptr);
3078545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3079545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3080545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3081545fdf9bSopenharmony_ci        }
3082545fdf9bSopenharmony_ci
3083545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
3084545fdf9bSopenharmony_ci            if (counter == 1 && strcmp(argv_[optind], cmd_.c_str()) == 0) {
3085545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
3086545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3087545fdf9bSopenharmony_ci                break;
3088545fdf9bSopenharmony_ci            }
3089545fdf9bSopenharmony_ci            if ((optopt == 'p') || (optopt == 'd')) {
3090545fdf9bSopenharmony_ci                // 'bm deployQuickFix --patch-path' with no argument
3091545fdf9bSopenharmony_ci                // 'bm deployQuickFix -d' with no argument
3092545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3093545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3094545fdf9bSopenharmony_ci                break;
3095545fdf9bSopenharmony_ci            }
3096545fdf9bSopenharmony_ci            break;
3097545fdf9bSopenharmony_ci        }
3098545fdf9bSopenharmony_ci
3099545fdf9bSopenharmony_ci        if (option == 'p') {
3100545fdf9bSopenharmony_ci            APP_LOGD("'bm deployQuickFix -p %{public}s'", argv_[optind - 1]);
3101545fdf9bSopenharmony_ci            quickFixPaths.emplace_back(optarg);
3102545fdf9bSopenharmony_ci            index = optind;
3103545fdf9bSopenharmony_ci            continue;
3104545fdf9bSopenharmony_ci        }
3105545fdf9bSopenharmony_ci        if ((option == 'd') && OHOS::StrToInt(optarg, isDebug)) {
3106545fdf9bSopenharmony_ci            APP_LOGD("'bm deployQuickFix -d %{public}s'", argv_[optind - 1]);
3107545fdf9bSopenharmony_ci            continue;
3108545fdf9bSopenharmony_ci        }
3109545fdf9bSopenharmony_ci
3110545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
3111545fdf9bSopenharmony_ci        break;
3112545fdf9bSopenharmony_ci    }
3113545fdf9bSopenharmony_ci
3114545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK || GetQuickFixPath(index, quickFixPaths) != OHOS::ERR_OK) {
3115545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_DEPLOY_QUICK_FIX);
3116545fdf9bSopenharmony_ci        return result;
3117545fdf9bSopenharmony_ci    }
3118545fdf9bSopenharmony_ci
3119545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> deployRes = nullptr;
3120545fdf9bSopenharmony_ci    result = DeployQuickFix(quickFixPaths, deployRes, isDebug != 0);
3121545fdf9bSopenharmony_ci    resultReceiver_ = (result == OHOS::ERR_OK) ? STRING_DEPLOY_QUICK_FIX_OK : STRING_DEPLOY_QUICK_FIX_NG;
3122545fdf9bSopenharmony_ci    resultReceiver_ += GetResMsg(result, deployRes);
3123545fdf9bSopenharmony_ci
3124545fdf9bSopenharmony_ci    return result;
3125545fdf9bSopenharmony_ci}
3126545fdf9bSopenharmony_ci
3127545fdf9bSopenharmony_ciErrCode BundleTestTool::GetQuickFixPath(int32_t index, std::vector<std::string>& quickFixPaths) const
3128545fdf9bSopenharmony_ci{
3129545fdf9bSopenharmony_ci    APP_LOGI("GetQuickFixPath start");
3130545fdf9bSopenharmony_ci    for (; index < argc_ && index >= INDEX_OFFSET; ++index) {
3131545fdf9bSopenharmony_ci        if (argList_[index - INDEX_OFFSET] == "-p" || argList_[index - INDEX_OFFSET] == "--patch-path") {
3132545fdf9bSopenharmony_ci            break;
3133545fdf9bSopenharmony_ci        }
3134545fdf9bSopenharmony_ci
3135545fdf9bSopenharmony_ci        std::string innerPath = argList_[index - INDEX_OFFSET];
3136545fdf9bSopenharmony_ci        if (innerPath.empty() || innerPath == "-p" || innerPath == "--patch-path") {
3137545fdf9bSopenharmony_ci            quickFixPaths.clear();
3138545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3139545fdf9bSopenharmony_ci        }
3140545fdf9bSopenharmony_ci        APP_LOGD("GetQuickFixPath is %{public}s'", innerPath.c_str());
3141545fdf9bSopenharmony_ci        quickFixPaths.emplace_back(innerPath);
3142545fdf9bSopenharmony_ci    }
3143545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3144545fdf9bSopenharmony_ci}
3145545fdf9bSopenharmony_ci
3146545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsSwitchQuickFix()
3147545fdf9bSopenharmony_ci{
3148545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
3149545fdf9bSopenharmony_ci    int32_t counter = 0;
3150545fdf9bSopenharmony_ci    int32_t enable = -1;
3151545fdf9bSopenharmony_ci    std::string bundleName;
3152545fdf9bSopenharmony_ci    while (true) {
3153545fdf9bSopenharmony_ci        counter++;
3154545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_QUICK_FIX.c_str(), LONG_OPTIONS_QUICK_FIX, nullptr);
3155545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3156545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3157545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3158545fdf9bSopenharmony_ci        }
3159545fdf9bSopenharmony_ci
3160545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
3161545fdf9bSopenharmony_ci            if (counter == 1 && strcmp(argv_[optind], cmd_.c_str()) == 0) {
3162545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
3163545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3164545fdf9bSopenharmony_ci                break;
3165545fdf9bSopenharmony_ci            }
3166545fdf9bSopenharmony_ci            if (optopt == 'n' || optopt == 'e') {
3167545fdf9bSopenharmony_ci                // 'bm switchQuickFix -n -e' with no argument
3168545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3169545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3170545fdf9bSopenharmony_ci                break;
3171545fdf9bSopenharmony_ci            }
3172545fdf9bSopenharmony_ci            break;
3173545fdf9bSopenharmony_ci        }
3174545fdf9bSopenharmony_ci
3175545fdf9bSopenharmony_ci        if (option == 'n') {
3176545fdf9bSopenharmony_ci            APP_LOGD("'bm switchQuickFix -n %{public}s'", argv_[optind - 1]);
3177545fdf9bSopenharmony_ci            bundleName = optarg;
3178545fdf9bSopenharmony_ci            continue;
3179545fdf9bSopenharmony_ci        }
3180545fdf9bSopenharmony_ci        if (option == 'e' && OHOS::StrToInt(optarg, enable)) {
3181545fdf9bSopenharmony_ci            APP_LOGD("'bm switchQuickFix -e %{public}s'", argv_[optind - 1]);
3182545fdf9bSopenharmony_ci            continue;
3183545fdf9bSopenharmony_ci        }
3184545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
3185545fdf9bSopenharmony_ci        break;
3186545fdf9bSopenharmony_ci    }
3187545fdf9bSopenharmony_ci
3188545fdf9bSopenharmony_ci    if ((result != OHOS::ERR_OK) || (enable < 0) || (enable > 1)) {
3189545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_SWITCH_QUICK_FIX);
3190545fdf9bSopenharmony_ci        return result;
3191545fdf9bSopenharmony_ci    }
3192545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> switchRes = nullptr;
3193545fdf9bSopenharmony_ci    result = SwitchQuickFix(bundleName, enable, switchRes);
3194545fdf9bSopenharmony_ci    resultReceiver_ = (result == OHOS::ERR_OK) ? STRING_SWITCH_QUICK_FIX_OK : STRING_SWITCH_QUICK_FIX_NG;
3195545fdf9bSopenharmony_ci    resultReceiver_ += GetResMsg(result, switchRes);
3196545fdf9bSopenharmony_ci
3197545fdf9bSopenharmony_ci    return result;
3198545fdf9bSopenharmony_ci}
3199545fdf9bSopenharmony_ci
3200545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsDeleteQuickFix()
3201545fdf9bSopenharmony_ci{
3202545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
3203545fdf9bSopenharmony_ci    int32_t counter = 0;
3204545fdf9bSopenharmony_ci    std::string bundleName;
3205545fdf9bSopenharmony_ci    while (true) {
3206545fdf9bSopenharmony_ci        counter++;
3207545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_QUICK_FIX.c_str(), LONG_OPTIONS_QUICK_FIX, nullptr);
3208545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3209545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3210545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3211545fdf9bSopenharmony_ci        }
3212545fdf9bSopenharmony_ci
3213545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
3214545fdf9bSopenharmony_ci            if (counter == 1 && strcmp(argv_[optind], cmd_.c_str()) == 0) {
3215545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
3216545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3217545fdf9bSopenharmony_ci                break;
3218545fdf9bSopenharmony_ci            }
3219545fdf9bSopenharmony_ci            if (optopt == 'n') {
3220545fdf9bSopenharmony_ci                // 'bm deleteQuickFix -n' with no argument
3221545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3222545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3223545fdf9bSopenharmony_ci                break;
3224545fdf9bSopenharmony_ci            }
3225545fdf9bSopenharmony_ci            break;
3226545fdf9bSopenharmony_ci        }
3227545fdf9bSopenharmony_ci
3228545fdf9bSopenharmony_ci        if (option == 'n') {
3229545fdf9bSopenharmony_ci            APP_LOGD("'bm deleteQuickFix -n %{public}s'", argv_[optind - 1]);
3230545fdf9bSopenharmony_ci            bundleName = optarg;
3231545fdf9bSopenharmony_ci            continue;
3232545fdf9bSopenharmony_ci        }
3233545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
3234545fdf9bSopenharmony_ci        break;
3235545fdf9bSopenharmony_ci    }
3236545fdf9bSopenharmony_ci
3237545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3238545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_DELETE_QUICK_FIX);
3239545fdf9bSopenharmony_ci        return result;
3240545fdf9bSopenharmony_ci    }
3241545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> deleteRes = nullptr;
3242545fdf9bSopenharmony_ci    result = DeleteQuickFix(bundleName, deleteRes);
3243545fdf9bSopenharmony_ci    resultReceiver_ = (result == OHOS::ERR_OK) ? STRING_DELETE_QUICK_FIX_OK : STRING_DELETE_QUICK_FIX_NG;
3244545fdf9bSopenharmony_ci    resultReceiver_ += GetResMsg(result, deleteRes);
3245545fdf9bSopenharmony_ci
3246545fdf9bSopenharmony_ci    return result;
3247545fdf9bSopenharmony_ci}
3248545fdf9bSopenharmony_ci
3249545fdf9bSopenharmony_ciErrCode BundleTestTool::DeployQuickFix(const std::vector<std::string> &quickFixPaths,
3250545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> &quickFixRes, bool isDebug)
3251545fdf9bSopenharmony_ci{
3252545fdf9bSopenharmony_ci#ifdef BUNDLE_FRAMEWORK_QUICK_FIX
3253545fdf9bSopenharmony_ci    std::set<std::string> realPathSet;
3254545fdf9bSopenharmony_ci    for (const auto &quickFixPath : quickFixPaths) {
3255545fdf9bSopenharmony_ci        std::string realPath;
3256545fdf9bSopenharmony_ci        if (!PathToRealPath(quickFixPath, realPath)) {
3257545fdf9bSopenharmony_ci            APP_LOGW("quickFixPath %{public}s is invalid", quickFixPath.c_str());
3258545fdf9bSopenharmony_ci            continue;
3259545fdf9bSopenharmony_ci        }
3260545fdf9bSopenharmony_ci        APP_LOGD("realPath is %{public}s", realPath.c_str());
3261545fdf9bSopenharmony_ci        realPathSet.insert(realPath);
3262545fdf9bSopenharmony_ci    }
3263545fdf9bSopenharmony_ci    std::vector<std::string> pathVec(realPathSet.begin(), realPathSet.end());
3264545fdf9bSopenharmony_ci
3265545fdf9bSopenharmony_ci    sptr<QuickFixStatusCallbackHostlmpl> callback(new (std::nothrow) QuickFixStatusCallbackHostlmpl());
3266545fdf9bSopenharmony_ci    if (callback == nullptr || bundleMgrProxy_ == nullptr) {
3267545fdf9bSopenharmony_ci        APP_LOGE("callback or bundleMgrProxy is null");
3268545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3269545fdf9bSopenharmony_ci    }
3270545fdf9bSopenharmony_ci    sptr<BundleDeathRecipient> recipient(new (std::nothrow) BundleDeathRecipient(nullptr, callback));
3271545fdf9bSopenharmony_ci    if (recipient == nullptr) {
3272545fdf9bSopenharmony_ci        APP_LOGE("recipient is null");
3273545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3274545fdf9bSopenharmony_ci    }
3275545fdf9bSopenharmony_ci    bundleMgrProxy_->AsObject()->AddDeathRecipient(recipient);
3276545fdf9bSopenharmony_ci    auto quickFixProxy = bundleMgrProxy_->GetQuickFixManagerProxy();
3277545fdf9bSopenharmony_ci    if (quickFixProxy == nullptr) {
3278545fdf9bSopenharmony_ci        APP_LOGE("quickFixProxy is null");
3279545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3280545fdf9bSopenharmony_ci    }
3281545fdf9bSopenharmony_ci    std::vector<std::string> destFiles;
3282545fdf9bSopenharmony_ci    auto res = quickFixProxy->CopyFiles(pathVec, destFiles);
3283545fdf9bSopenharmony_ci    if (res != ERR_OK) {
3284545fdf9bSopenharmony_ci        APP_LOGE("Copy files failed with %{public}d.", res);
3285545fdf9bSopenharmony_ci        return res;
3286545fdf9bSopenharmony_ci    }
3287545fdf9bSopenharmony_ci    res = quickFixProxy->DeployQuickFix(destFiles, callback, isDebug);
3288545fdf9bSopenharmony_ci    if (res != ERR_OK) {
3289545fdf9bSopenharmony_ci        APP_LOGE("DeployQuickFix failed");
3290545fdf9bSopenharmony_ci        return res;
3291545fdf9bSopenharmony_ci    }
3292545fdf9bSopenharmony_ci
3293545fdf9bSopenharmony_ci    return callback->GetResultCode(quickFixRes);
3294545fdf9bSopenharmony_ci#else
3295545fdf9bSopenharmony_ci    return ERR_BUNDLEMANAGER_FEATURE_IS_NOT_SUPPORTED;
3296545fdf9bSopenharmony_ci#endif
3297545fdf9bSopenharmony_ci}
3298545fdf9bSopenharmony_ci
3299545fdf9bSopenharmony_ciErrCode BundleTestTool::SwitchQuickFix(const std::string &bundleName, int32_t enable,
3300545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> &quickFixRes)
3301545fdf9bSopenharmony_ci{
3302545fdf9bSopenharmony_ci    APP_LOGD("SwitchQuickFix bundleName: %{public}s, enable: %{public}d", bundleName.c_str(), enable);
3303545fdf9bSopenharmony_ci#ifdef BUNDLE_FRAMEWORK_QUICK_FIX
3304545fdf9bSopenharmony_ci    sptr<QuickFixStatusCallbackHostlmpl> callback(new (std::nothrow) QuickFixStatusCallbackHostlmpl());
3305545fdf9bSopenharmony_ci    if (callback == nullptr || bundleMgrProxy_ == nullptr) {
3306545fdf9bSopenharmony_ci        APP_LOGE("callback or bundleMgrProxy is null");
3307545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3308545fdf9bSopenharmony_ci    }
3309545fdf9bSopenharmony_ci    sptr<BundleDeathRecipient> recipient(new (std::nothrow) BundleDeathRecipient(nullptr, callback));
3310545fdf9bSopenharmony_ci    if (recipient == nullptr) {
3311545fdf9bSopenharmony_ci        APP_LOGE("recipient is null");
3312545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3313545fdf9bSopenharmony_ci    }
3314545fdf9bSopenharmony_ci    bundleMgrProxy_->AsObject()->AddDeathRecipient(recipient);
3315545fdf9bSopenharmony_ci    auto quickFixProxy = bundleMgrProxy_->GetQuickFixManagerProxy();
3316545fdf9bSopenharmony_ci    if (quickFixProxy == nullptr) {
3317545fdf9bSopenharmony_ci        APP_LOGE("quickFixProxy is null");
3318545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3319545fdf9bSopenharmony_ci    }
3320545fdf9bSopenharmony_ci    bool enableFlag = (enable == 0) ? false : true;
3321545fdf9bSopenharmony_ci    auto res = quickFixProxy->SwitchQuickFix(bundleName, enableFlag, callback);
3322545fdf9bSopenharmony_ci    if (res != ERR_OK) {
3323545fdf9bSopenharmony_ci        APP_LOGE("SwitchQuickFix failed");
3324545fdf9bSopenharmony_ci        return res;
3325545fdf9bSopenharmony_ci    }
3326545fdf9bSopenharmony_ci    return callback->GetResultCode(quickFixRes);
3327545fdf9bSopenharmony_ci#else
3328545fdf9bSopenharmony_ci    return ERR_BUNDLEMANAGER_FEATURE_IS_NOT_SUPPORTED;
3329545fdf9bSopenharmony_ci#endif
3330545fdf9bSopenharmony_ci}
3331545fdf9bSopenharmony_ci
3332545fdf9bSopenharmony_ciErrCode BundleTestTool::DeleteQuickFix(const std::string &bundleName,
3333545fdf9bSopenharmony_ci    std::shared_ptr<QuickFixResult> &quickFixRes)
3334545fdf9bSopenharmony_ci{
3335545fdf9bSopenharmony_ci    APP_LOGD("DeleteQuickFix bundleName: %{public}s", bundleName.c_str());
3336545fdf9bSopenharmony_ci#ifdef BUNDLE_FRAMEWORK_QUICK_FIX
3337545fdf9bSopenharmony_ci    sptr<QuickFixStatusCallbackHostlmpl> callback(new (std::nothrow) QuickFixStatusCallbackHostlmpl());
3338545fdf9bSopenharmony_ci    if (callback == nullptr || bundleMgrProxy_ == nullptr) {
3339545fdf9bSopenharmony_ci        APP_LOGE("callback or bundleMgrProxy is null");
3340545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3341545fdf9bSopenharmony_ci    }
3342545fdf9bSopenharmony_ci    sptr<BundleDeathRecipient> recipient(new (std::nothrow) BundleDeathRecipient(nullptr, callback));
3343545fdf9bSopenharmony_ci    if (recipient == nullptr) {
3344545fdf9bSopenharmony_ci        APP_LOGE("recipient is null");
3345545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3346545fdf9bSopenharmony_ci    }
3347545fdf9bSopenharmony_ci    bundleMgrProxy_->AsObject()->AddDeathRecipient(recipient);
3348545fdf9bSopenharmony_ci    auto quickFixProxy = bundleMgrProxy_->GetQuickFixManagerProxy();
3349545fdf9bSopenharmony_ci    if (quickFixProxy == nullptr) {
3350545fdf9bSopenharmony_ci        APP_LOGE("quickFixProxy is null");
3351545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_QUICK_FIX_INTERNAL_ERROR;
3352545fdf9bSopenharmony_ci    }
3353545fdf9bSopenharmony_ci    auto res = quickFixProxy->DeleteQuickFix(bundleName, callback);
3354545fdf9bSopenharmony_ci    if (res != ERR_OK) {
3355545fdf9bSopenharmony_ci        APP_LOGE("DeleteQuickFix failed");
3356545fdf9bSopenharmony_ci        return res;
3357545fdf9bSopenharmony_ci    }
3358545fdf9bSopenharmony_ci    return callback->GetResultCode(quickFixRes);
3359545fdf9bSopenharmony_ci#else
3360545fdf9bSopenharmony_ci    return ERR_BUNDLEMANAGER_FEATURE_IS_NOT_SUPPORTED;
3361545fdf9bSopenharmony_ci#endif
3362545fdf9bSopenharmony_ci}
3363545fdf9bSopenharmony_ci
3364545fdf9bSopenharmony_cistd::string BundleTestTool::GetResMsg(int32_t code)
3365545fdf9bSopenharmony_ci{
3366545fdf9bSopenharmony_ci    std::unordered_map<int32_t, std::string> quickFixMsgMap;
3367545fdf9bSopenharmony_ci    CreateQuickFixMsgMap(quickFixMsgMap);
3368545fdf9bSopenharmony_ci    if (quickFixMsgMap.find(code) != quickFixMsgMap.end()) {
3369545fdf9bSopenharmony_ci        return quickFixMsgMap.at(code);
3370545fdf9bSopenharmony_ci    }
3371545fdf9bSopenharmony_ci    return MSG_ERR_BUNDLEMANAGER_QUICK_FIX_UNKOWN;
3372545fdf9bSopenharmony_ci}
3373545fdf9bSopenharmony_ci
3374545fdf9bSopenharmony_cistd::string BundleTestTool::GetResMsg(int32_t code, const std::shared_ptr<QuickFixResult> &quickFixRes)
3375545fdf9bSopenharmony_ci{
3376545fdf9bSopenharmony_ci    std::string resMsg;
3377545fdf9bSopenharmony_ci    std::unordered_map<int32_t, std::string> quickFixMsgMap;
3378545fdf9bSopenharmony_ci    CreateQuickFixMsgMap(quickFixMsgMap);
3379545fdf9bSopenharmony_ci    if (quickFixMsgMap.find(code) != quickFixMsgMap.end()) {
3380545fdf9bSopenharmony_ci        resMsg += quickFixMsgMap.at(code);
3381545fdf9bSopenharmony_ci    } else {
3382545fdf9bSopenharmony_ci        resMsg += MSG_ERR_BUNDLEMANAGER_QUICK_FIX_UNKOWN;
3383545fdf9bSopenharmony_ci    }
3384545fdf9bSopenharmony_ci    if (quickFixRes != nullptr) {
3385545fdf9bSopenharmony_ci        resMsg += quickFixRes->ToString() + "\n";
3386545fdf9bSopenharmony_ci    }
3387545fdf9bSopenharmony_ci    return resMsg;
3388545fdf9bSopenharmony_ci}
3389545fdf9bSopenharmony_ci
3390545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsSetDebugMode()
3391545fdf9bSopenharmony_ci{
3392545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
3393545fdf9bSopenharmony_ci    int32_t counter = 0;
3394545fdf9bSopenharmony_ci    int32_t enable = -1;
3395545fdf9bSopenharmony_ci    while (true) {
3396545fdf9bSopenharmony_ci        counter++;
3397545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_DEBUG_MODE.c_str(), LONG_OPTIONS_DEBUG_MODE, nullptr);
3398545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3399545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3400545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3401545fdf9bSopenharmony_ci        }
3402545fdf9bSopenharmony_ci
3403545fdf9bSopenharmony_ci        if (option == -1 || option == '?') {
3404545fdf9bSopenharmony_ci            if (counter == 1 && strcmp(argv_[optind], cmd_.c_str()) == 0) {
3405545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
3406545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3407545fdf9bSopenharmony_ci                break;
3408545fdf9bSopenharmony_ci            }
3409545fdf9bSopenharmony_ci            if (optopt == 'e') {
3410545fdf9bSopenharmony_ci                // 'bundle_test_tool setDebugMode -e' with no argument
3411545fdf9bSopenharmony_ci                resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3412545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3413545fdf9bSopenharmony_ci                break;
3414545fdf9bSopenharmony_ci            }
3415545fdf9bSopenharmony_ci            break;
3416545fdf9bSopenharmony_ci        }
3417545fdf9bSopenharmony_ci
3418545fdf9bSopenharmony_ci        if (option == 'e' && OHOS::StrToInt(optarg, enable)) {
3419545fdf9bSopenharmony_ci            APP_LOGD("'bundle_test_tool setDebugMode -e %{public}s'", argv_[optind - 1]);
3420545fdf9bSopenharmony_ci            continue;
3421545fdf9bSopenharmony_ci        }
3422545fdf9bSopenharmony_ci        result = OHOS::ERR_INVALID_VALUE;
3423545fdf9bSopenharmony_ci        break;
3424545fdf9bSopenharmony_ci    }
3425545fdf9bSopenharmony_ci
3426545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3427545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_SET_DEBUG_MODE);
3428545fdf9bSopenharmony_ci        return result;
3429545fdf9bSopenharmony_ci    }
3430545fdf9bSopenharmony_ci    ErrCode setResult = SetDebugMode(enable);
3431545fdf9bSopenharmony_ci    if (setResult == OHOS::ERR_OK) {
3432545fdf9bSopenharmony_ci        resultReceiver_ = STRING_SET_DEBUG_MODE_OK;
3433545fdf9bSopenharmony_ci    } else {
3434545fdf9bSopenharmony_ci        resultReceiver_ = STRING_SET_DEBUG_MODE_NG + GetResMsg(setResult);
3435545fdf9bSopenharmony_ci    }
3436545fdf9bSopenharmony_ci    return setResult;
3437545fdf9bSopenharmony_ci}
3438545fdf9bSopenharmony_ci
3439545fdf9bSopenharmony_ciErrCode BundleTestTool::SetDebugMode(int32_t debugMode)
3440545fdf9bSopenharmony_ci{
3441545fdf9bSopenharmony_ci    if (debugMode != 0 && debugMode != 1) {
3442545fdf9bSopenharmony_ci        APP_LOGE("SetDebugMode param is invalid");
3443545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INVALID_PARAM;
3444545fdf9bSopenharmony_ci    }
3445545fdf9bSopenharmony_ci    bool enable = debugMode == 0 ? false : true;
3446545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3447545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
3448545fdf9bSopenharmony_ci        return ERR_BUNDLEMANAGER_SET_DEBUG_MODE_INTERNAL_ERROR;
3449545fdf9bSopenharmony_ci    }
3450545fdf9bSopenharmony_ci    return bundleMgrProxy_->SetDebugMode(enable);
3451545fdf9bSopenharmony_ci}
3452545fdf9bSopenharmony_ci
3453545fdf9bSopenharmony_ciErrCode BundleTestTool::BundleNameAndUserIdCommonFunc(std::string &bundleName, int32_t &userId, int32_t &appIndex)
3454545fdf9bSopenharmony_ci{
3455545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
3456545fdf9bSopenharmony_ci    int32_t counter = 0;
3457545fdf9bSopenharmony_ci    userId = Constants::UNSPECIFIED_USERID;
3458545fdf9bSopenharmony_ci    while (true) {
3459545fdf9bSopenharmony_ci        counter++;
3460545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_BUNDLE_STATS.c_str(),
3461545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_BUNDLE_STATS, nullptr);
3462545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3463545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3464545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3465545fdf9bSopenharmony_ci        }
3466545fdf9bSopenharmony_ci        if (option == -1) {
3467545fdf9bSopenharmony_ci            if (counter == 1) {
3468545fdf9bSopenharmony_ci                // When scanning the first argument
3469545fdf9bSopenharmony_ci                if (strcmp(argv_[optind], cmd_.c_str()) == 0) {
3470545fdf9bSopenharmony_ci                    resultReceiver_.append(HELP_MSG_NO_OPTION + "\n");
3471545fdf9bSopenharmony_ci                    result = OHOS::ERR_INVALID_VALUE;
3472545fdf9bSopenharmony_ci                }
3473545fdf9bSopenharmony_ci            }
3474545fdf9bSopenharmony_ci            break;
3475545fdf9bSopenharmony_ci        }
3476545fdf9bSopenharmony_ci
3477545fdf9bSopenharmony_ci        if (option == '?') {
3478545fdf9bSopenharmony_ci            switch (optopt) {
3479545fdf9bSopenharmony_ci                case 'n': {
3480545fdf9bSopenharmony_ci                    resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3481545fdf9bSopenharmony_ci                    result = OHOS::ERR_INVALID_VALUE;
3482545fdf9bSopenharmony_ci                    break;
3483545fdf9bSopenharmony_ci                }
3484545fdf9bSopenharmony_ci                case 'u': {
3485545fdf9bSopenharmony_ci                    resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3486545fdf9bSopenharmony_ci                    result = OHOS::ERR_INVALID_VALUE;
3487545fdf9bSopenharmony_ci                    break;
3488545fdf9bSopenharmony_ci                }
3489545fdf9bSopenharmony_ci                case 'a': {
3490545fdf9bSopenharmony_ci                    resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3491545fdf9bSopenharmony_ci                    result = OHOS::ERR_INVALID_VALUE;
3492545fdf9bSopenharmony_ci                    break;
3493545fdf9bSopenharmony_ci                }
3494545fdf9bSopenharmony_ci                default: {
3495545fdf9bSopenharmony_ci                    std::string unknownOption = "";
3496545fdf9bSopenharmony_ci                    std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
3497545fdf9bSopenharmony_ci                    resultReceiver_.append(unknownOptionMsg);
3498545fdf9bSopenharmony_ci                    result = OHOS::ERR_INVALID_VALUE;
3499545fdf9bSopenharmony_ci                    break;
3500545fdf9bSopenharmony_ci                }
3501545fdf9bSopenharmony_ci            }
3502545fdf9bSopenharmony_ci            break;
3503545fdf9bSopenharmony_ci        }
3504545fdf9bSopenharmony_ci
3505545fdf9bSopenharmony_ci        switch (option) {
3506545fdf9bSopenharmony_ci            case 'h': {
3507545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3508545fdf9bSopenharmony_ci                break;
3509545fdf9bSopenharmony_ci            }
3510545fdf9bSopenharmony_ci            case 'n': {
3511545fdf9bSopenharmony_ci                bundleName = optarg;
3512545fdf9bSopenharmony_ci                break;
3513545fdf9bSopenharmony_ci            }
3514545fdf9bSopenharmony_ci            case 'u': {
3515545fdf9bSopenharmony_ci                if (!OHOS::StrToInt(optarg, userId) || userId < 0) {
3516545fdf9bSopenharmony_ci                    resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3517545fdf9bSopenharmony_ci                    return OHOS::ERR_INVALID_VALUE;
3518545fdf9bSopenharmony_ci                }
3519545fdf9bSopenharmony_ci                break;
3520545fdf9bSopenharmony_ci            }
3521545fdf9bSopenharmony_ci            case 'a': {
3522545fdf9bSopenharmony_ci                if (!OHOS::StrToInt(optarg, appIndex) || (appIndex < 0 || appIndex > INITIAL_SANDBOX_APP_INDEX)) {
3523545fdf9bSopenharmony_ci                    resultReceiver_.append(STRING_REQUIRE_CORRECT_VALUE);
3524545fdf9bSopenharmony_ci                    return OHOS::ERR_INVALID_VALUE;
3525545fdf9bSopenharmony_ci                }
3526545fdf9bSopenharmony_ci                break;
3527545fdf9bSopenharmony_ci            }
3528545fdf9bSopenharmony_ci            default: {
3529545fdf9bSopenharmony_ci                result = OHOS::ERR_INVALID_VALUE;
3530545fdf9bSopenharmony_ci                break;
3531545fdf9bSopenharmony_ci            }
3532545fdf9bSopenharmony_ci        }
3533545fdf9bSopenharmony_ci    }
3534545fdf9bSopenharmony_ci
3535545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK) {
3536545fdf9bSopenharmony_ci        if (resultReceiver_ == "" && bundleName.size() == 0) {
3537545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_NO_BUNDLE_NAME_OPTION + "\n");
3538545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
3539545fdf9bSopenharmony_ci        }
3540545fdf9bSopenharmony_ci    }
3541545fdf9bSopenharmony_ci    return result;
3542545fdf9bSopenharmony_ci}
3543545fdf9bSopenharmony_ci
3544545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetBundleStats()
3545545fdf9bSopenharmony_ci{
3546545fdf9bSopenharmony_ci    std::string bundleName;
3547545fdf9bSopenharmony_ci    int32_t userId;
3548545fdf9bSopenharmony_ci    int32_t appIndex = 0;
3549545fdf9bSopenharmony_ci    int32_t result = BundleNameAndUserIdCommonFunc(bundleName, userId, appIndex);
3550545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3551545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_BUNDLE_STATS);
3552545fdf9bSopenharmony_ci    } else {
3553545fdf9bSopenharmony_ci        std::string msg;
3554545fdf9bSopenharmony_ci        bool ret = GetBundleStats(bundleName, userId, msg, appIndex);
3555545fdf9bSopenharmony_ci        if (ret) {
3556545fdf9bSopenharmony_ci            resultReceiver_ = STRING_GET_BUNDLE_STATS_OK + msg;
3557545fdf9bSopenharmony_ci        } else {
3558545fdf9bSopenharmony_ci            resultReceiver_ = STRING_GET_BUNDLE_STATS_NG + "\n";
3559545fdf9bSopenharmony_ci        }
3560545fdf9bSopenharmony_ci    }
3561545fdf9bSopenharmony_ci
3562545fdf9bSopenharmony_ci    return result;
3563545fdf9bSopenharmony_ci}
3564545fdf9bSopenharmony_ci
3565545fdf9bSopenharmony_cibool BundleTestTool::GetBundleStats(const std::string &bundleName, int32_t userId,
3566545fdf9bSopenharmony_ci    std::string& msg, int32_t appIndex)
3567545fdf9bSopenharmony_ci{
3568545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3569545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
3570545fdf9bSopenharmony_ci        return false;
3571545fdf9bSopenharmony_ci    }
3572545fdf9bSopenharmony_ci    userId = BundleCommandCommon::GetCurrentUserId(userId);
3573545fdf9bSopenharmony_ci    std::vector<std::int64_t> bundleStats;
3574545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->GetBundleStats(bundleName, userId, bundleStats, appIndex);
3575545fdf9bSopenharmony_ci    if (ret) {
3576545fdf9bSopenharmony_ci        for (size_t index = 0; index < bundleStats.size(); ++index) {
3577545fdf9bSopenharmony_ci            msg += GET_BUNDLE_STATS_ARRAY[index] + std::to_string(bundleStats[index]) + "\n";
3578545fdf9bSopenharmony_ci        }
3579545fdf9bSopenharmony_ci    }
3580545fdf9bSopenharmony_ci    return ret;
3581545fdf9bSopenharmony_ci}
3582545fdf9bSopenharmony_ci
3583545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetAppProvisionInfo()
3584545fdf9bSopenharmony_ci{
3585545fdf9bSopenharmony_ci    std::string bundleName;
3586545fdf9bSopenharmony_ci    int32_t userId;
3587545fdf9bSopenharmony_ci    int32_t appIndex = 0;
3588545fdf9bSopenharmony_ci    int32_t result = BundleNameAndUserIdCommonFunc(bundleName, userId, appIndex);
3589545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3590545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_APP_PROVISION_INFO);
3591545fdf9bSopenharmony_ci    } else {
3592545fdf9bSopenharmony_ci        std::string msg;
3593545fdf9bSopenharmony_ci        result = GetAppProvisionInfo(bundleName, userId, msg);
3594545fdf9bSopenharmony_ci        if (result == OHOS::ERR_OK) {
3595545fdf9bSopenharmony_ci            resultReceiver_ = STRING_GET_APP_PROVISION_INFO_OK + msg;
3596545fdf9bSopenharmony_ci        } else {
3597545fdf9bSopenharmony_ci            resultReceiver_ = STRING_GET_APP_PROVISION_INFO_NG + "\n";
3598545fdf9bSopenharmony_ci        }
3599545fdf9bSopenharmony_ci    }
3600545fdf9bSopenharmony_ci
3601545fdf9bSopenharmony_ci    return result;
3602545fdf9bSopenharmony_ci}
3603545fdf9bSopenharmony_ci
3604545fdf9bSopenharmony_ciErrCode BundleTestTool::GetAppProvisionInfo(const std::string &bundleName,
3605545fdf9bSopenharmony_ci    int32_t userId, std::string& msg)
3606545fdf9bSopenharmony_ci{
3607545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3608545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
3609545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3610545fdf9bSopenharmony_ci    }
3611545fdf9bSopenharmony_ci    userId = BundleCommandCommon::GetCurrentUserId(userId);
3612545fdf9bSopenharmony_ci    AppProvisionInfo info;
3613545fdf9bSopenharmony_ci    auto ret = bundleMgrProxy_->GetAppProvisionInfo(bundleName, userId, info);
3614545fdf9bSopenharmony_ci    if (ret == ERR_OK) {
3615545fdf9bSopenharmony_ci        msg = "{\n";
3616545fdf9bSopenharmony_ci        msg += "    versionCode: " + std::to_string(info.versionCode) + "\n";
3617545fdf9bSopenharmony_ci        msg += "    versionName: " + info.versionName+ "\n";
3618545fdf9bSopenharmony_ci        msg += "    uuid: " + info.uuid + "\n";
3619545fdf9bSopenharmony_ci        msg += "    type: " + info.type + "\n";
3620545fdf9bSopenharmony_ci        msg += "    appDistributionType: " + info.appDistributionType + "\n";
3621545fdf9bSopenharmony_ci        msg += "    developerId: " + info.developerId + "\n";
3622545fdf9bSopenharmony_ci        msg += "    certificate: " + info.certificate + "\n";
3623545fdf9bSopenharmony_ci        msg += "    apl: " + info.apl + "\n";
3624545fdf9bSopenharmony_ci        msg += "    issuer: " + info.issuer + "\n";
3625545fdf9bSopenharmony_ci        msg += "    validity: {\n";
3626545fdf9bSopenharmony_ci        msg += "        notBefore: " + std::to_string(info.validity.notBefore) + "\n";
3627545fdf9bSopenharmony_ci        msg += "        notAfter: " + std::to_string(info.validity.notAfter) + "\n";
3628545fdf9bSopenharmony_ci        msg += "    }\n";
3629545fdf9bSopenharmony_ci        msg += "    appServiceCapabilities: " + info.appServiceCapabilities + "\n";
3630545fdf9bSopenharmony_ci        msg += "}\n";
3631545fdf9bSopenharmony_ci    }
3632545fdf9bSopenharmony_ci    return ret;
3633545fdf9bSopenharmony_ci}
3634545fdf9bSopenharmony_ci
3635545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetDistributedBundleName()
3636545fdf9bSopenharmony_ci{
3637545fdf9bSopenharmony_ci    ErrCode result;
3638545fdf9bSopenharmony_ci    std::string networkId;
3639545fdf9bSopenharmony_ci    int32_t counter = 0;
3640545fdf9bSopenharmony_ci    int32_t accessTokenId = 0;
3641545fdf9bSopenharmony_ci    while (true) {
3642545fdf9bSopenharmony_ci        counter++;
3643545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_DISTRIBUTED_BUNDLE_NAME.c_str(),
3644545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_DISTRIBUTED_BUNDLE_NAME, nullptr);
3645545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3646545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3647545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3648545fdf9bSopenharmony_ci        }
3649545fdf9bSopenharmony_ci        if (option == -1) {
3650545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
3651545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_DISTRIBUTED_BUNDLE_NAME_OPTION);
3652545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
3653545fdf9bSopenharmony_ci            }
3654545fdf9bSopenharmony_ci            break;
3655545fdf9bSopenharmony_ci        }
3656545fdf9bSopenharmony_ci        result = CheckGetDistributedBundleNameCorrectOption(option, GET_DISTRIBUTED_BUNDLE_NAME_COMMAND_NAME,
3657545fdf9bSopenharmony_ci            networkId, accessTokenId);
3658545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
3659545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_DISTRIBUTED_BUNDLE_NAME);
3660545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3661545fdf9bSopenharmony_ci        }
3662545fdf9bSopenharmony_ci    }
3663545fdf9bSopenharmony_ci    if (accessTokenId == 0 || networkId.size() == 0) {
3664545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_GET_DISTRIBUTED_BUNDLE_NAME_OPTION);
3665545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3666545fdf9bSopenharmony_ci    }
3667545fdf9bSopenharmony_ci    std::string msg;
3668545fdf9bSopenharmony_ci    result = GetDistributedBundleName(networkId, accessTokenId, msg);
3669545fdf9bSopenharmony_ci    if (result == OHOS::ERR_OK) {
3670545fdf9bSopenharmony_ci        resultReceiver_ = STRING_GET_DISTRIBUTED_BUNDLE_NAME_OK + msg;
3671545fdf9bSopenharmony_ci    } else {
3672545fdf9bSopenharmony_ci        resultReceiver_ = STRING_GET_DISTRIBUTED_BUNDLE_NAME_NG + "\n";
3673545fdf9bSopenharmony_ci        APP_LOGE("RunAsGetDistributedBundleName fail result %{public}d.", result);
3674545fdf9bSopenharmony_ci    }
3675545fdf9bSopenharmony_ci    return result;
3676545fdf9bSopenharmony_ci}
3677545fdf9bSopenharmony_ci
3678545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetDistributedBundleNameCorrectOption(int32_t option, const std::string &commandName,
3679545fdf9bSopenharmony_ci    std::string &networkId, int32_t &accessTokenId)
3680545fdf9bSopenharmony_ci{
3681545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
3682545fdf9bSopenharmony_ci    switch (option) {
3683545fdf9bSopenharmony_ci        case 'h': {
3684545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
3685545fdf9bSopenharmony_ci            break;
3686545fdf9bSopenharmony_ci        }
3687545fdf9bSopenharmony_ci        case 'n': {
3688545fdf9bSopenharmony_ci            networkId = optarg;
3689545fdf9bSopenharmony_ci            if (networkId.size() == 0) {
3690545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
3691545fdf9bSopenharmony_ci            }
3692545fdf9bSopenharmony_ci            break;
3693545fdf9bSopenharmony_ci        }
3694545fdf9bSopenharmony_ci        case 'a': {
3695545fdf9bSopenharmony_ci            if (!OHOS::StrToInt(optarg, accessTokenId) || accessTokenId < 0) {
3696545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
3697545fdf9bSopenharmony_ci            }
3698545fdf9bSopenharmony_ci            break;
3699545fdf9bSopenharmony_ci        }
3700545fdf9bSopenharmony_ci        default: {
3701545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
3702545fdf9bSopenharmony_ci            break;
3703545fdf9bSopenharmony_ci        }
3704545fdf9bSopenharmony_ci    }
3705545fdf9bSopenharmony_ci    return result;
3706545fdf9bSopenharmony_ci}
3707545fdf9bSopenharmony_ci
3708545fdf9bSopenharmony_ciErrCode BundleTestTool::GetDistributedBundleName(const std::string &networkId,
3709545fdf9bSopenharmony_ci    int32_t accessTokenId, std::string& msg)
3710545fdf9bSopenharmony_ci{
3711545fdf9bSopenharmony_ci#ifdef DISTRIBUTED_BUNDLE_FRAMEWORK
3712545fdf9bSopenharmony_ci    if (distributedBmsProxy_ == nullptr) {
3713545fdf9bSopenharmony_ci        APP_LOGE("distributedBmsProxy_ is nullptr");
3714545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3715545fdf9bSopenharmony_ci    }
3716545fdf9bSopenharmony_ci    std::string bundleName;
3717545fdf9bSopenharmony_ci    auto ret = distributedBmsProxy_->GetDistributedBundleName(networkId, accessTokenId, bundleName);
3718545fdf9bSopenharmony_ci    if (ret == OHOS::NO_ERROR) {
3719545fdf9bSopenharmony_ci        msg = "\n";
3720545fdf9bSopenharmony_ci        if (bundleName.size() == 0) {
3721545fdf9bSopenharmony_ci            msg += "no match found \n";
3722545fdf9bSopenharmony_ci        } else {
3723545fdf9bSopenharmony_ci            msg += bundleName + "\n";
3724545fdf9bSopenharmony_ci        }
3725545fdf9bSopenharmony_ci        msg += "\n";
3726545fdf9bSopenharmony_ci    } else {
3727545fdf9bSopenharmony_ci        APP_LOGE("distributedBmsProxy_ GetDistributedBundleName fail errcode %{public}d.", ret);
3728545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3729545fdf9bSopenharmony_ci    }
3730545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3731545fdf9bSopenharmony_ci#else
3732545fdf9bSopenharmony_ci    return OHOS::ERR_INVALID_VALUE;
3733545fdf9bSopenharmony_ci#endif
3734545fdf9bSopenharmony_ci}
3735545fdf9bSopenharmony_ci
3736545fdf9bSopenharmony_cibool BundleTestTool::ParseEventCallbackOptions(bool &onlyUnregister, int32_t &uid)
3737545fdf9bSopenharmony_ci{
3738545fdf9bSopenharmony_ci    int32_t opt;
3739545fdf9bSopenharmony_ci    while ((opt = getopt_long(argc_, argv_, SHORT_OPTIONS_BUNDLE_EVENT_CALLBACK.c_str(),
3740545fdf9bSopenharmony_ci        LONG_OPTIONS_BUNDLE_EVENT_CALLBACK, nullptr)) != -1) {
3741545fdf9bSopenharmony_ci        switch (opt) {
3742545fdf9bSopenharmony_ci            case 'o': {
3743545fdf9bSopenharmony_ci                onlyUnregister = true;
3744545fdf9bSopenharmony_ci                break;
3745545fdf9bSopenharmony_ci            }
3746545fdf9bSopenharmony_ci            case 'u': {
3747545fdf9bSopenharmony_ci                if (!OHOS::StrToInt(optarg, uid)) {
3748545fdf9bSopenharmony_ci                    std::string msg = "invalid param, uid should be int";
3749545fdf9bSopenharmony_ci                    resultReceiver_.append(msg).append(LINE_BREAK);
3750545fdf9bSopenharmony_ci                    APP_LOGE("%{public}s", msg.c_str());
3751545fdf9bSopenharmony_ci                    return false;
3752545fdf9bSopenharmony_ci                }
3753545fdf9bSopenharmony_ci                break;
3754545fdf9bSopenharmony_ci            }
3755545fdf9bSopenharmony_ci            case 'h': {
3756545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_BUNDLE_EVENT_CALLBACK);
3757545fdf9bSopenharmony_ci                return false;
3758545fdf9bSopenharmony_ci            }
3759545fdf9bSopenharmony_ci            default: {
3760545fdf9bSopenharmony_ci                std::string msg = "unsupported option";
3761545fdf9bSopenharmony_ci                resultReceiver_.append(msg).append(LINE_BREAK);
3762545fdf9bSopenharmony_ci                APP_LOGE("%{public}s", msg.c_str());
3763545fdf9bSopenharmony_ci                return false;
3764545fdf9bSopenharmony_ci            }
3765545fdf9bSopenharmony_ci        }
3766545fdf9bSopenharmony_ci    }
3767545fdf9bSopenharmony_ci    APP_LOGI("ParseEventCallbackOptions success");
3768545fdf9bSopenharmony_ci    return true;
3769545fdf9bSopenharmony_ci}
3770545fdf9bSopenharmony_ci
3771545fdf9bSopenharmony_cibool BundleTestTool::ParseResetAOTCompileStatusOptions(std::string &bundleName, std::string &moduleName,
3772545fdf9bSopenharmony_ci    int32_t &triggerMode, int32_t &uid)
3773545fdf9bSopenharmony_ci{
3774545fdf9bSopenharmony_ci    int32_t opt;
3775545fdf9bSopenharmony_ci    while ((opt = getopt_long(argc_, argv_, SHORT_OPTIONS_RESET_AOT_COMPILE_StATUS.c_str(),
3776545fdf9bSopenharmony_ci        LONG_OPTIONS_RESET_AOT_COMPILE_StATUS, nullptr)) != -1) {
3777545fdf9bSopenharmony_ci        switch (opt) {
3778545fdf9bSopenharmony_ci            case 'b': {
3779545fdf9bSopenharmony_ci                bundleName = optarg;
3780545fdf9bSopenharmony_ci                break;
3781545fdf9bSopenharmony_ci            }
3782545fdf9bSopenharmony_ci            case 'm': {
3783545fdf9bSopenharmony_ci                moduleName = optarg;
3784545fdf9bSopenharmony_ci                break;
3785545fdf9bSopenharmony_ci            }
3786545fdf9bSopenharmony_ci            case 't': {
3787545fdf9bSopenharmony_ci                if (!OHOS::StrToInt(optarg, triggerMode)) {
3788545fdf9bSopenharmony_ci                    std::string msg = "invalid param, triggerMode should be int";
3789545fdf9bSopenharmony_ci                    resultReceiver_.append(msg).append(LINE_BREAK);
3790545fdf9bSopenharmony_ci                    APP_LOGE("%{public}s", msg.c_str());
3791545fdf9bSopenharmony_ci                    return false;
3792545fdf9bSopenharmony_ci                }
3793545fdf9bSopenharmony_ci                break;
3794545fdf9bSopenharmony_ci            }
3795545fdf9bSopenharmony_ci            case 'u': {
3796545fdf9bSopenharmony_ci                if (!OHOS::StrToInt(optarg, uid)) {
3797545fdf9bSopenharmony_ci                    std::string msg = "invalid param, uid should be int";
3798545fdf9bSopenharmony_ci                    resultReceiver_.append(msg).append(LINE_BREAK);
3799545fdf9bSopenharmony_ci                    APP_LOGE("%{public}s", msg.c_str());
3800545fdf9bSopenharmony_ci                    return false;
3801545fdf9bSopenharmony_ci                }
3802545fdf9bSopenharmony_ci                break;
3803545fdf9bSopenharmony_ci            }
3804545fdf9bSopenharmony_ci            case 'h': {
3805545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_RESET_AOT_COMPILE_StATUS);
3806545fdf9bSopenharmony_ci                return false;
3807545fdf9bSopenharmony_ci            }
3808545fdf9bSopenharmony_ci            default: {
3809545fdf9bSopenharmony_ci                std::string msg = "unsupported option";
3810545fdf9bSopenharmony_ci                resultReceiver_.append(msg).append(LINE_BREAK);
3811545fdf9bSopenharmony_ci                APP_LOGE("%{public}s", msg.c_str());
3812545fdf9bSopenharmony_ci                return false;
3813545fdf9bSopenharmony_ci            }
3814545fdf9bSopenharmony_ci        }
3815545fdf9bSopenharmony_ci    }
3816545fdf9bSopenharmony_ci    APP_LOGI("ParseResetAOTCompileStatusOptions success");
3817545fdf9bSopenharmony_ci    return true;
3818545fdf9bSopenharmony_ci}
3819545fdf9bSopenharmony_ci
3820545fdf9bSopenharmony_civoid BundleTestTool::Sleep(int32_t seconds)
3821545fdf9bSopenharmony_ci{
3822545fdf9bSopenharmony_ci    APP_LOGI("begin to sleep %{public}d seconds", seconds);
3823545fdf9bSopenharmony_ci    std::this_thread::sleep_for(std::chrono::seconds(seconds));
3824545fdf9bSopenharmony_ci    APP_LOGI("sleep done");
3825545fdf9bSopenharmony_ci}
3826545fdf9bSopenharmony_ci
3827545fdf9bSopenharmony_ciErrCode BundleTestTool::CallRegisterBundleEventCallback(sptr<BundleEventCallbackImpl> bundleEventCallback)
3828545fdf9bSopenharmony_ci{
3829545fdf9bSopenharmony_ci    APP_LOGI("begin to call RegisterBundleEventCallback");
3830545fdf9bSopenharmony_ci    std::string msg;
3831545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->RegisterBundleEventCallback(bundleEventCallback);
3832545fdf9bSopenharmony_ci    if (!ret) {
3833545fdf9bSopenharmony_ci        msg = "RegisterBundleEventCallback failed";
3834545fdf9bSopenharmony_ci        resultReceiver_.append(msg).append(LINE_BREAK);
3835545fdf9bSopenharmony_ci        APP_LOGE("%{public}s", msg.c_str());
3836545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3837545fdf9bSopenharmony_ci    }
3838545fdf9bSopenharmony_ci    msg = "RegisterBundleEventCallback success";
3839545fdf9bSopenharmony_ci    resultReceiver_.append(msg).append(LINE_BREAK);
3840545fdf9bSopenharmony_ci    APP_LOGI("%{public}s", msg.c_str());
3841545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3842545fdf9bSopenharmony_ci}
3843545fdf9bSopenharmony_ci
3844545fdf9bSopenharmony_ciErrCode BundleTestTool::CallUnRegisterBundleEventCallback(sptr<BundleEventCallbackImpl> bundleEventCallback)
3845545fdf9bSopenharmony_ci{
3846545fdf9bSopenharmony_ci    APP_LOGI("begin to call UnregisterBundleEventCallback");
3847545fdf9bSopenharmony_ci    std::string msg;
3848545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->UnregisterBundleEventCallback(bundleEventCallback);
3849545fdf9bSopenharmony_ci    if (!ret) {
3850545fdf9bSopenharmony_ci        msg = "UnregisterBundleEventCallback failed";
3851545fdf9bSopenharmony_ci        resultReceiver_.append(msg).append(LINE_BREAK);
3852545fdf9bSopenharmony_ci        APP_LOGE("%{public}s", msg.c_str());
3853545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3854545fdf9bSopenharmony_ci    }
3855545fdf9bSopenharmony_ci    msg = "UnregisterBundleEventCallback success";
3856545fdf9bSopenharmony_ci    resultReceiver_.append(msg).append(LINE_BREAK);
3857545fdf9bSopenharmony_ci    APP_LOGI("%{public}s", msg.c_str());
3858545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3859545fdf9bSopenharmony_ci}
3860545fdf9bSopenharmony_ci
3861545fdf9bSopenharmony_ciErrCode BundleTestTool::HandleBundleEventCallback()
3862545fdf9bSopenharmony_ci{
3863545fdf9bSopenharmony_ci    APP_LOGI("begin to HandleBundleEventCallback");
3864545fdf9bSopenharmony_ci    bool onlyUnregister = false;
3865545fdf9bSopenharmony_ci    int32_t uid = Constants::FOUNDATION_UID;
3866545fdf9bSopenharmony_ci    if (!ParseEventCallbackOptions(onlyUnregister, uid)) {
3867545fdf9bSopenharmony_ci        APP_LOGE("ParseEventCallbackOptions failed");
3868545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3869545fdf9bSopenharmony_ci    }
3870545fdf9bSopenharmony_ci    APP_LOGI("onlyUnregister : %{public}d, uid : %{public}d", onlyUnregister, uid);
3871545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3872545fdf9bSopenharmony_ci        std::string msg = "bundleMgrProxy_ is nullptr";
3873545fdf9bSopenharmony_ci        resultReceiver_.append(msg).append(LINE_BREAK);
3874545fdf9bSopenharmony_ci        APP_LOGE("%{public}s", msg.c_str());
3875545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3876545fdf9bSopenharmony_ci    }
3877545fdf9bSopenharmony_ci    seteuid(uid);
3878545fdf9bSopenharmony_ci    ErrCode ret;
3879545fdf9bSopenharmony_ci    sptr<BundleEventCallbackImpl> bundleEventCallback = new (std::nothrow) BundleEventCallbackImpl();
3880545fdf9bSopenharmony_ci    if (onlyUnregister) {
3881545fdf9bSopenharmony_ci        // only call UnRegisterBundleEventCallback
3882545fdf9bSopenharmony_ci        return CallUnRegisterBundleEventCallback(bundleEventCallback);
3883545fdf9bSopenharmony_ci    }
3884545fdf9bSopenharmony_ci    // call RegisterBundleEventCallback then call UnRegisterBundleEventCallback
3885545fdf9bSopenharmony_ci    ret = CallRegisterBundleEventCallback(bundleEventCallback);
3886545fdf9bSopenharmony_ci    if (ret != OHOS::ERR_OK) {
3887545fdf9bSopenharmony_ci        return ret;
3888545fdf9bSopenharmony_ci    }
3889545fdf9bSopenharmony_ci    Sleep(SLEEP_SECONDS);
3890545fdf9bSopenharmony_ci    ret = CallUnRegisterBundleEventCallback(bundleEventCallback);
3891545fdf9bSopenharmony_ci    if (ret != OHOS::ERR_OK) {
3892545fdf9bSopenharmony_ci        return ret;
3893545fdf9bSopenharmony_ci    }
3894545fdf9bSopenharmony_ci    Sleep(SLEEP_SECONDS);
3895545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3896545fdf9bSopenharmony_ci}
3897545fdf9bSopenharmony_ci
3898545fdf9bSopenharmony_ciErrCode BundleTestTool::ResetAOTCompileStatus()
3899545fdf9bSopenharmony_ci{
3900545fdf9bSopenharmony_ci    APP_LOGI("begin to ResetAOTCompileStatus");
3901545fdf9bSopenharmony_ci    std::string bundleName;
3902545fdf9bSopenharmony_ci    std::string moduleName;
3903545fdf9bSopenharmony_ci    int32_t triggerMode = 0;
3904545fdf9bSopenharmony_ci    int32_t uid = -1;
3905545fdf9bSopenharmony_ci    if (!ParseResetAOTCompileStatusOptions(bundleName, moduleName, triggerMode, uid)) {
3906545fdf9bSopenharmony_ci        APP_LOGE("ParseResetAOTCompileStatusOptions failed");
3907545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3908545fdf9bSopenharmony_ci    }
3909545fdf9bSopenharmony_ci    APP_LOGI("bundleName : %{public}s, moduleName : %{public}s, triggerMode : %{public}d",
3910545fdf9bSopenharmony_ci        bundleName.c_str(), moduleName.c_str(), triggerMode);
3911545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3912545fdf9bSopenharmony_ci        std::string msg = "bundleMgrProxy_ is nullptr";
3913545fdf9bSopenharmony_ci        resultReceiver_.append(msg).append(LINE_BREAK);
3914545fdf9bSopenharmony_ci        APP_LOGE("%{public}s", msg.c_str());
3915545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3916545fdf9bSopenharmony_ci    }
3917545fdf9bSopenharmony_ci    if (uid == -1) {
3918545fdf9bSopenharmony_ci        int32_t userId = 100;
3919545fdf9bSopenharmony_ci        uid = bundleMgrProxy_->GetUidByBundleName(bundleName, userId);
3920545fdf9bSopenharmony_ci    }
3921545fdf9bSopenharmony_ci    APP_LOGI("uid : %{public}d", uid);
3922545fdf9bSopenharmony_ci    seteuid(uid);
3923545fdf9bSopenharmony_ci    ErrCode ret = bundleMgrProxy_->ResetAOTCompileStatus(bundleName, moduleName, triggerMode);
3924545fdf9bSopenharmony_ci    APP_LOGI("ret : %{public}d", ret);
3925545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3926545fdf9bSopenharmony_ci}
3927545fdf9bSopenharmony_ci
3928545fdf9bSopenharmony_ciErrCode BundleTestTool::SendCommonEvent()
3929545fdf9bSopenharmony_ci{
3930545fdf9bSopenharmony_ci    APP_LOGI("begin to SendCommonEvent");
3931545fdf9bSopenharmony_ci    OHOS::AAFwk::Want want;
3932545fdf9bSopenharmony_ci    want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_CHARGE_IDLE_MODE_CHANGED);
3933545fdf9bSopenharmony_ci    EventFwk::CommonEventData commonData { want };
3934545fdf9bSopenharmony_ci    EventFwk::CommonEventManager::PublishCommonEvent(commonData);
3935545fdf9bSopenharmony_ci    return OHOS::ERR_OK;
3936545fdf9bSopenharmony_ci}
3937545fdf9bSopenharmony_ci
3938545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsQueryDataGroupInfos()
3939545fdf9bSopenharmony_ci{
3940545fdf9bSopenharmony_ci    APP_LOGI("RunAsQueryDataGroupInfos start");
3941545fdf9bSopenharmony_ci    std::string bundleName;
3942545fdf9bSopenharmony_ci    int32_t userId;
3943545fdf9bSopenharmony_ci    int32_t appIndex;
3944545fdf9bSopenharmony_ci    int32_t result = BundleNameAndUserIdCommonFunc(bundleName, userId, appIndex);
3945545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
3946545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_QUERY_DATA_GROUP_INFOS);
3947545fdf9bSopenharmony_ci    } else {
3948545fdf9bSopenharmony_ci        std::string msg;
3949545fdf9bSopenharmony_ci        result = QueryDataGroupInfos(bundleName, userId, msg);
3950545fdf9bSopenharmony_ci        if (result) {
3951545fdf9bSopenharmony_ci            resultReceiver_ = STRING_QUERY_DATA_GROUP_INFOS_OK + msg;
3952545fdf9bSopenharmony_ci            return ERR_OK;
3953545fdf9bSopenharmony_ci        } else {
3954545fdf9bSopenharmony_ci            resultReceiver_ = STRING_QUERY_DATA_GROUP_INFOS_NG + "\n";
3955545fdf9bSopenharmony_ci        }
3956545fdf9bSopenharmony_ci    }
3957545fdf9bSopenharmony_ci    return OHOS::ERR_INVALID_VALUE;
3958545fdf9bSopenharmony_ci}
3959545fdf9bSopenharmony_ci
3960545fdf9bSopenharmony_cibool BundleTestTool::QueryDataGroupInfos(const std::string &bundleName,
3961545fdf9bSopenharmony_ci    int32_t userId, std::string& msg)
3962545fdf9bSopenharmony_ci{
3963545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
3964545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
3965545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
3966545fdf9bSopenharmony_ci    }
3967545fdf9bSopenharmony_ci    std::vector<DataGroupInfo> infos;
3968545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->QueryDataGroupInfos(bundleName, userId, infos);
3969545fdf9bSopenharmony_ci    if (ret) {
3970545fdf9bSopenharmony_ci        msg = "dataGroupInfos:\n{\n";
3971545fdf9bSopenharmony_ci        for (const auto &dataGroupInfo : infos) {
3972545fdf9bSopenharmony_ci            msg +="     ";
3973545fdf9bSopenharmony_ci            msg += dataGroupInfo.ToString();
3974545fdf9bSopenharmony_ci            msg += "\n";
3975545fdf9bSopenharmony_ci        }
3976545fdf9bSopenharmony_ci        msg += "}\n";
3977545fdf9bSopenharmony_ci        return true;
3978545fdf9bSopenharmony_ci    }
3979545fdf9bSopenharmony_ci
3980545fdf9bSopenharmony_ci    return false;
3981545fdf9bSopenharmony_ci}
3982545fdf9bSopenharmony_ci
3983545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetGroupDir()
3984545fdf9bSopenharmony_ci{
3985545fdf9bSopenharmony_ci    APP_LOGI("RunAsGetGroupDir start");
3986545fdf9bSopenharmony_ci    ErrCode result;
3987545fdf9bSopenharmony_ci    std::string dataGroupId;
3988545fdf9bSopenharmony_ci    int32_t counter = 0;
3989545fdf9bSopenharmony_ci    while (true) {
3990545fdf9bSopenharmony_ci        counter++;
3991545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_GROUP_DIR.c_str(),
3992545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_GROUP_DIR, nullptr);
3993545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
3994545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
3995545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
3996545fdf9bSopenharmony_ci        }
3997545fdf9bSopenharmony_ci        if (option == -1) {
3998545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
3999545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_GET_GROUP_DIR);
4000545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4001545fdf9bSopenharmony_ci            }
4002545fdf9bSopenharmony_ci            break;
4003545fdf9bSopenharmony_ci        }
4004545fdf9bSopenharmony_ci        result = CheckGetGroupIdCorrectOption(option, dataGroupId);
4005545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
4006545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_GROUP_DIR);
4007545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4008545fdf9bSopenharmony_ci        }
4009545fdf9bSopenharmony_ci    }
4010545fdf9bSopenharmony_ci    std::string msg;
4011545fdf9bSopenharmony_ci    bool ret = GetGroupDir(dataGroupId, msg);
4012545fdf9bSopenharmony_ci    if (ret) {
4013545fdf9bSopenharmony_ci        resultReceiver_ = STRING_GET_GROUP_DIR_OK + msg;
4014545fdf9bSopenharmony_ci    } else {
4015545fdf9bSopenharmony_ci        resultReceiver_ = STRING_GET_GROUP_DIR_NG + "\n";
4016545fdf9bSopenharmony_ci        APP_LOGE("RunAsGetGroupDir fail");
4017545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
4018545fdf9bSopenharmony_ci    }
4019545fdf9bSopenharmony_ci    return result;
4020545fdf9bSopenharmony_ci}
4021545fdf9bSopenharmony_ci
4022545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetGroupIdCorrectOption(int32_t option, std::string &dataGroupId)
4023545fdf9bSopenharmony_ci{
4024545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
4025545fdf9bSopenharmony_ci    switch (option) {
4026545fdf9bSopenharmony_ci        case 'h': {
4027545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
4028545fdf9bSopenharmony_ci            break;
4029545fdf9bSopenharmony_ci        }
4030545fdf9bSopenharmony_ci        case 'd': {
4031545fdf9bSopenharmony_ci            dataGroupId = optarg;
4032545fdf9bSopenharmony_ci            if (dataGroupId.size() == 0) {
4033545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4034545fdf9bSopenharmony_ci            }
4035545fdf9bSopenharmony_ci            break;
4036545fdf9bSopenharmony_ci        }
4037545fdf9bSopenharmony_ci        default: {
4038545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
4039545fdf9bSopenharmony_ci            break;
4040545fdf9bSopenharmony_ci        }
4041545fdf9bSopenharmony_ci    }
4042545fdf9bSopenharmony_ci    return result;
4043545fdf9bSopenharmony_ci}
4044545fdf9bSopenharmony_ci
4045545fdf9bSopenharmony_cibool BundleTestTool::GetGroupDir(const std::string &dataGroupId, std::string& msg)
4046545fdf9bSopenharmony_ci{
4047545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
4048545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
4049545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
4050545fdf9bSopenharmony_ci    }
4051545fdf9bSopenharmony_ci    std::string dir;
4052545fdf9bSopenharmony_ci    bool ret = bundleMgrProxy_->GetGroupDir(dataGroupId, dir);
4053545fdf9bSopenharmony_ci    if (ret) {
4054545fdf9bSopenharmony_ci        msg = "group dir:\n";
4055545fdf9bSopenharmony_ci        msg += dir;
4056545fdf9bSopenharmony_ci        msg += "\n";
4057545fdf9bSopenharmony_ci        return true;
4058545fdf9bSopenharmony_ci    }
4059545fdf9bSopenharmony_ci
4060545fdf9bSopenharmony_ci    return false;
4061545fdf9bSopenharmony_ci}
4062545fdf9bSopenharmony_ci
4063545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckGetBundleNameOption(int32_t option, std::string &bundleName)
4064545fdf9bSopenharmony_ci{
4065545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
4066545fdf9bSopenharmony_ci    switch (option) {
4067545fdf9bSopenharmony_ci        case 'h': {
4068545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
4069545fdf9bSopenharmony_ci            break;
4070545fdf9bSopenharmony_ci        }
4071545fdf9bSopenharmony_ci        case 'n': {
4072545fdf9bSopenharmony_ci            bundleName = optarg;
4073545fdf9bSopenharmony_ci            if (bundleName.size() == 0) {
4074545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4075545fdf9bSopenharmony_ci            }
4076545fdf9bSopenharmony_ci            break;
4077545fdf9bSopenharmony_ci        }
4078545fdf9bSopenharmony_ci        default: {
4079545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
4080545fdf9bSopenharmony_ci            break;
4081545fdf9bSopenharmony_ci        }
4082545fdf9bSopenharmony_ci    }
4083545fdf9bSopenharmony_ci    return result;
4084545fdf9bSopenharmony_ci}
4085545fdf9bSopenharmony_ci
4086545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetJsonProfile()
4087545fdf9bSopenharmony_ci{
4088545fdf9bSopenharmony_ci    APP_LOGI("RunAsGetJsonProfile start");
4089545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
4090545fdf9bSopenharmony_ci    int counter = 0;
4091545fdf9bSopenharmony_ci    std::string commandName = "getJsonProfile";
4092545fdf9bSopenharmony_ci    std::string name = "";
4093545fdf9bSopenharmony_ci    std::string bundleName = "";
4094545fdf9bSopenharmony_ci    std::string moduleName = "";
4095545fdf9bSopenharmony_ci    int jsonProfileType = -1;
4096545fdf9bSopenharmony_ci    int userId = 100;
4097545fdf9bSopenharmony_ci    APP_LOGD("RunAsGetStringCommand is start");
4098545fdf9bSopenharmony_ci    while (true) {
4099545fdf9bSopenharmony_ci        counter++;
4100545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_JSON_PROFILE.c_str(),
4101545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_JSON_PROFILE, nullptr);
4102545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4103545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4104545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4105545fdf9bSopenharmony_ci        }
4106545fdf9bSopenharmony_ci        if (option == -1) {
4107545fdf9bSopenharmony_ci            // When scanning the first argument
4108545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4109545fdf9bSopenharmony_ci                // 'GetStringById' with no option: GetStringById
4110545fdf9bSopenharmony_ci                // 'GetStringById' with a wrong argument: GetStringById
4111545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getStr with no option.");
4112545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_JSON_PROFILE_OPTION);
4113545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4114545fdf9bSopenharmony_ci            }
4115545fdf9bSopenharmony_ci            break;
4116545fdf9bSopenharmony_ci        }
4117545fdf9bSopenharmony_ci        int temp = 0;
4118545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
4119545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
4120545fdf9bSopenharmony_ci        moduleName = option == 'm' ? name : moduleName;
4121545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
4122545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
4123545fdf9bSopenharmony_ci        jsonProfileType = option == 'p' ? temp : jsonProfileType;
4124545fdf9bSopenharmony_ci    }
4125545fdf9bSopenharmony_ci
4126545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4127545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_STRING);
4128545fdf9bSopenharmony_ci    } else {
4129545fdf9bSopenharmony_ci        std::string results = "";
4130545fdf9bSopenharmony_ci        auto res = bundleMgrProxy_->GetJsonProfile(static_cast<ProfileType>(jsonProfileType),
4131545fdf9bSopenharmony_ci            bundleName, moduleName, results, userId);
4132545fdf9bSopenharmony_ci        if (res != OHOS::ERR_OK || results.empty()) {
4133545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_JSON_PROFILE_NG);
4134545fdf9bSopenharmony_ci            return result;
4135545fdf9bSopenharmony_ci        }
4136545fdf9bSopenharmony_ci        resultReceiver_.append(results);
4137545fdf9bSopenharmony_ci        resultReceiver_.append("\n");
4138545fdf9bSopenharmony_ci    }
4139545fdf9bSopenharmony_ci    return result;
4140545fdf9bSopenharmony_ci}
4141545fdf9bSopenharmony_ci
4142545fdf9bSopenharmony_ciErrCode BundleTestTool::RunGetUidByBundleName()
4143545fdf9bSopenharmony_ci{
4144545fdf9bSopenharmony_ci    APP_LOGI("RunGetUidByBundleName start");
4145545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
4146545fdf9bSopenharmony_ci    int counter = 0;
4147545fdf9bSopenharmony_ci    std::string name = "";
4148545fdf9bSopenharmony_ci    std::string commandName = "getUidByBundleName";
4149545fdf9bSopenharmony_ci    std::string bundleName = "";
4150545fdf9bSopenharmony_ci    int userId = 100;
4151545fdf9bSopenharmony_ci    int appIndex = 0;
4152545fdf9bSopenharmony_ci    APP_LOGD("RunGetIntCommand is start");
4153545fdf9bSopenharmony_ci    bool flag = true;
4154545fdf9bSopenharmony_ci    while (flag) {
4155545fdf9bSopenharmony_ci        counter++;
4156545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_UID_BY_BUNDLENAME.c_str(),
4157545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_UID_BY_BUNDLENAME, nullptr);
4158545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4159545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4160545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4161545fdf9bSopenharmony_ci        }
4162545fdf9bSopenharmony_ci        if (option == -1) {
4163545fdf9bSopenharmony_ci            // When scanning the first argument
4164545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4165545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getUidByBundleName with no option.");
4166545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_UID_BY_BUNDLENAME);
4167545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4168545fdf9bSopenharmony_ci            }
4169545fdf9bSopenharmony_ci            break;
4170545fdf9bSopenharmony_ci        }
4171545fdf9bSopenharmony_ci        int temp = 0;
4172545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
4173545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
4174545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
4175545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
4176545fdf9bSopenharmony_ci        appIndex = option == 'a' ? temp : appIndex;
4177545fdf9bSopenharmony_ci    }
4178545fdf9bSopenharmony_ci
4179545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4180545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_GET_UID_BY_BUNDLENAME);
4181545fdf9bSopenharmony_ci    } else {
4182545fdf9bSopenharmony_ci        int32_t res = bundleMgrProxy_->GetUidByBundleName(bundleName, userId, appIndex);
4183545fdf9bSopenharmony_ci        if (res == -1) {
4184545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_UID_BY_BUNDLENAME_NG);
4185545fdf9bSopenharmony_ci            return result;
4186545fdf9bSopenharmony_ci        }
4187545fdf9bSopenharmony_ci        resultReceiver_.append(std::to_string(res));
4188545fdf9bSopenharmony_ci        resultReceiver_.append("\n");
4189545fdf9bSopenharmony_ci    }
4190545fdf9bSopenharmony_ci    return result;
4191545fdf9bSopenharmony_ci}
4192545fdf9bSopenharmony_ci
4193545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetUninstalledBundleInfo()
4194545fdf9bSopenharmony_ci{
4195545fdf9bSopenharmony_ci    APP_LOGI("RunAsGetUninstalledBundleInfo start");
4196545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
4197545fdf9bSopenharmony_ci    int counter = 0;
4198545fdf9bSopenharmony_ci    std::string bundleName = "";
4199545fdf9bSopenharmony_ci    while (true) {
4200545fdf9bSopenharmony_ci        counter++;
4201545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_UNINSTALLED_BUNDLE_INFO.c_str(),
4202545fdf9bSopenharmony_ci            LONG_OPTIONS_UNINSTALLED_BUNDLE_INFO, nullptr);
4203545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4204545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4205545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4206545fdf9bSopenharmony_ci        }
4207545fdf9bSopenharmony_ci        if (option == -1) {
4208545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4209545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_GET_UNINSTALLED_BUNDLE_INFO_OPTION);
4210545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4211545fdf9bSopenharmony_ci            }
4212545fdf9bSopenharmony_ci            break;
4213545fdf9bSopenharmony_ci        }
4214545fdf9bSopenharmony_ci        result = CheckGetBundleNameOption(option, bundleName);
4215545fdf9bSopenharmony_ci        APP_LOGD("getUninstalledBundleInfo optind: %{public}s", bundleName.c_str());
4216545fdf9bSopenharmony_ci    }
4217545fdf9bSopenharmony_ci
4218545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4219545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_GET_UNINSTALLED_BUNDLE_INFO_OPTION);
4220545fdf9bSopenharmony_ci    } else {
4221545fdf9bSopenharmony_ci        BundleInfo bundleInfo;
4222545fdf9bSopenharmony_ci        auto res = bundleMgrProxy_->GetUninstalledBundleInfo(bundleName, bundleInfo);
4223545fdf9bSopenharmony_ci        if (res != OHOS::ERR_OK) {
4224545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_UNINSTALLED_BUNDLE_INFO_NG);
4225545fdf9bSopenharmony_ci            return result;
4226545fdf9bSopenharmony_ci        }
4227545fdf9bSopenharmony_ci        nlohmann::json jsonObject = bundleInfo;
4228545fdf9bSopenharmony_ci        jsonObject["applicationInfo"] = bundleInfo.applicationInfo;
4229545fdf9bSopenharmony_ci        std::string results = jsonObject.dump(Constants::DUMP_INDENT);
4230545fdf9bSopenharmony_ci        resultReceiver_.append(results);
4231545fdf9bSopenharmony_ci        resultReceiver_.append("\n");
4232545fdf9bSopenharmony_ci    }
4233545fdf9bSopenharmony_ci    return result;
4234545fdf9bSopenharmony_ci}
4235545fdf9bSopenharmony_ci
4236545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetOdid()
4237545fdf9bSopenharmony_ci{
4238545fdf9bSopenharmony_ci    std::string commandName = "getOdid";
4239545fdf9bSopenharmony_ci    int uid = Constants::INVALID_UID;
4240545fdf9bSopenharmony_ci    int opt = 0;
4241545fdf9bSopenharmony_ci
4242545fdf9bSopenharmony_ci    const std::map<char, OptionHandler> getOdidOptionHandlers = {
4243545fdf9bSopenharmony_ci        {'u', [&uid, &commandName, this](const std::string& value) {
4244545fdf9bSopenharmony_ci            bool ret;
4245545fdf9bSopenharmony_ci            StringToInt(value, commandName, uid, ret); }}
4246545fdf9bSopenharmony_ci    };
4247545fdf9bSopenharmony_ci    while ((opt = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_ODID.c_str(), LONG_OPTIONS_GET_ODID, nullptr)) != -1) {
4248545fdf9bSopenharmony_ci        auto it = getOdidOptionHandlers.find(opt);
4249545fdf9bSopenharmony_ci        if (it != getOdidOptionHandlers.end()) {
4250545fdf9bSopenharmony_ci            it->second(optarg);
4251545fdf9bSopenharmony_ci        } else {
4252545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_GET_ODID);
4253545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4254545fdf9bSopenharmony_ci        }
4255545fdf9bSopenharmony_ci    }
4256545fdf9bSopenharmony_ci    std::string odid;
4257545fdf9bSopenharmony_ci    setuid(uid);
4258545fdf9bSopenharmony_ci    auto result = bundleMgrProxy_->GetOdid(odid);
4259545fdf9bSopenharmony_ci    setuid(Constants::ROOT_UID);
4260545fdf9bSopenharmony_ci    if (result == ERR_OK) {
4261545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_GET_ODID_OK);
4262545fdf9bSopenharmony_ci        resultReceiver_.append(odid + "\n");
4263545fdf9bSopenharmony_ci    } else if (result == ERR_BUNDLE_MANAGER_BUNDLE_NOT_EXIST) {
4264545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_GET_ODID_NG + "Please enter a valid uid\n");
4265545fdf9bSopenharmony_ci    } else {
4266545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_GET_ODID_NG + "errCode is "+ std::to_string(result) + "\n");
4267545fdf9bSopenharmony_ci    }
4268545fdf9bSopenharmony_ci    return result;
4269545fdf9bSopenharmony_ci}
4270545fdf9bSopenharmony_ci
4271545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsUpdateAppEncryptedStatus()
4272545fdf9bSopenharmony_ci{
4273545fdf9bSopenharmony_ci    std::string commandName = "updateAppEncryptedStatus";
4274545fdf9bSopenharmony_ci    int appIndex = 0;
4275545fdf9bSopenharmony_ci    int appEcrypted = 0;
4276545fdf9bSopenharmony_ci    std::string bundleName;
4277545fdf9bSopenharmony_ci    int opt = 0;
4278545fdf9bSopenharmony_ci
4279545fdf9bSopenharmony_ci    const std::map<char, OptionHandler> optionHandlers = {
4280545fdf9bSopenharmony_ci        {'a', [&appIndex, &commandName, this](const std::string& value) {
4281545fdf9bSopenharmony_ci            bool ret;
4282545fdf9bSopenharmony_ci            StringToInt(value, commandName, appIndex, ret); }},
4283545fdf9bSopenharmony_ci        {'e', [&appEcrypted, &commandName, this](const std::string& value) {
4284545fdf9bSopenharmony_ci            bool ret;
4285545fdf9bSopenharmony_ci            StringToInt(value, commandName, appEcrypted, ret); }},
4286545fdf9bSopenharmony_ci        {'n', [&bundleName, &commandName, this](const std::string& value) {
4287545fdf9bSopenharmony_ci            bundleName = value; }},
4288545fdf9bSopenharmony_ci
4289545fdf9bSopenharmony_ci    };
4290545fdf9bSopenharmony_ci    while ((opt = getopt_long(argc_, argv_, SHORT_OPTIONS_UPDATE_APP_EXCRYPTED_STATUS.c_str(),
4291545fdf9bSopenharmony_ci        LONG_OPTIONS_UPDATE_APP_EXCRYPTED_STATUS, nullptr)) != -1) {
4292545fdf9bSopenharmony_ci        auto it = optionHandlers.find(opt);
4293545fdf9bSopenharmony_ci        if (it != optionHandlers.end()) {
4294545fdf9bSopenharmony_ci            it->second(optarg);
4295545fdf9bSopenharmony_ci        } else {
4296545fdf9bSopenharmony_ci            resultReceiver_.append(HELP_MSG_UPDATE_APP_EXCRYPTED_STATUS);
4297545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4298545fdf9bSopenharmony_ci        }
4299545fdf9bSopenharmony_ci    }
4300545fdf9bSopenharmony_ci    setuid(CODE_PROTECT_UID);
4301545fdf9bSopenharmony_ci    auto result = bundleMgrProxy_->UpdateAppEncryptedStatus(bundleName, static_cast<bool>(appEcrypted), appIndex);
4302545fdf9bSopenharmony_ci    setuid(Constants::ROOT_UID);
4303545fdf9bSopenharmony_ci    if (result == ERR_OK) {
4304545fdf9bSopenharmony_ci        resultReceiver_.append(STRING_UPDATE_APP_EXCRYPTED_STATUS_SUCCESSFULLY);
4305545fdf9bSopenharmony_ci    } else {
4306545fdf9bSopenharmony_ci        resultReceiver_.append(
4307545fdf9bSopenharmony_ci            STRING_UPDATE_APP_EXCRYPTED_STATUS_FAILED + "errCode is "+ std::to_string(result) + "\n");
4308545fdf9bSopenharmony_ci    }
4309545fdf9bSopenharmony_ci    return result;
4310545fdf9bSopenharmony_ci}
4311545fdf9bSopenharmony_ci
4312545fdf9bSopenharmony_ciErrCode BundleTestTool::CheckImplicitQueryWantOption(int option, std::string &value)
4313545fdf9bSopenharmony_ci{
4314545fdf9bSopenharmony_ci    ErrCode result = OHOS::ERR_OK;
4315545fdf9bSopenharmony_ci    switch (option) {
4316545fdf9bSopenharmony_ci        case 'n': {
4317545fdf9bSopenharmony_ci            value = optarg;
4318545fdf9bSopenharmony_ci            break;
4319545fdf9bSopenharmony_ci        }
4320545fdf9bSopenharmony_ci        case 'a': {
4321545fdf9bSopenharmony_ci            value = optarg;
4322545fdf9bSopenharmony_ci            break;
4323545fdf9bSopenharmony_ci        }
4324545fdf9bSopenharmony_ci        case 'e': {
4325545fdf9bSopenharmony_ci            value = optarg;
4326545fdf9bSopenharmony_ci            break;
4327545fdf9bSopenharmony_ci        }
4328545fdf9bSopenharmony_ci        case 'u': {
4329545fdf9bSopenharmony_ci            value = optarg;
4330545fdf9bSopenharmony_ci            break;
4331545fdf9bSopenharmony_ci        }
4332545fdf9bSopenharmony_ci        case 't': {
4333545fdf9bSopenharmony_ci            value = optarg;
4334545fdf9bSopenharmony_ci            break;
4335545fdf9bSopenharmony_ci        }
4336545fdf9bSopenharmony_ci        default: {
4337545fdf9bSopenharmony_ci            std::string unknownOption = "";
4338545fdf9bSopenharmony_ci            std::string unknownOptionMsg = GetUnknownOptionMsg(unknownOption);
4339545fdf9bSopenharmony_ci            resultReceiver_.append(unknownOptionMsg);
4340545fdf9bSopenharmony_ci            result = OHOS::ERR_INVALID_VALUE;
4341545fdf9bSopenharmony_ci            break;
4342545fdf9bSopenharmony_ci        }
4343545fdf9bSopenharmony_ci    }
4344545fdf9bSopenharmony_ci    return result;
4345545fdf9bSopenharmony_ci}
4346545fdf9bSopenharmony_ci
4347545fdf9bSopenharmony_ciErrCode BundleTestTool::ImplicitQuerySkillUriInfo(const std::string &bundleName,
4348545fdf9bSopenharmony_ci    const std::string &action, const std::string &entity, const std::string &uri,
4349545fdf9bSopenharmony_ci    const std::string &type, std::string &msg)
4350545fdf9bSopenharmony_ci{
4351545fdf9bSopenharmony_ci    if (bundleMgrProxy_ == nullptr) {
4352545fdf9bSopenharmony_ci        APP_LOGE("bundleMgrProxy_ is nullptr");
4353545fdf9bSopenharmony_ci        return OHOS::ERR_INVALID_VALUE;
4354545fdf9bSopenharmony_ci    }
4355545fdf9bSopenharmony_ci    AAFwk::Want want;
4356545fdf9bSopenharmony_ci    want.SetAction(action);
4357545fdf9bSopenharmony_ci    want.AddEntity(entity);
4358545fdf9bSopenharmony_ci    ElementName elementName("", bundleName, "", "");
4359545fdf9bSopenharmony_ci    want.SetElement(elementName);
4360545fdf9bSopenharmony_ci    want.SetUri(uri);
4361545fdf9bSopenharmony_ci    want.SetType(type);
4362545fdf9bSopenharmony_ci
4363545fdf9bSopenharmony_ci    int32_t userId = BundleCommandCommon::GetCurrentUserId(Constants::UNSPECIFIED_USERID);
4364545fdf9bSopenharmony_ci    std::vector<AbilityInfo> abilityInfos;
4365545fdf9bSopenharmony_ci    int32_t flags = static_cast<int32_t>(GetAbilityInfoFlag::GET_ABILITY_INFO_WITH_SKILL_URI);
4366545fdf9bSopenharmony_ci    ErrCode res = bundleMgrProxy_->QueryAbilityInfosV9(want, flags, userId, abilityInfos);
4367545fdf9bSopenharmony_ci    if (res != OHOS::ERR_OK) {
4368545fdf9bSopenharmony_ci        return res;
4369545fdf9bSopenharmony_ci    }
4370545fdf9bSopenharmony_ci    for (auto &ability: abilityInfos) {
4371545fdf9bSopenharmony_ci        msg += "Ability start\n";
4372545fdf9bSopenharmony_ci        for (auto &uri: ability.skillUri) {
4373545fdf9bSopenharmony_ci            msg += "{\n";
4374545fdf9bSopenharmony_ci            msg += "    scheme: " + uri.scheme + "\n";
4375545fdf9bSopenharmony_ci            msg += "    host: " + uri.host + "\n";
4376545fdf9bSopenharmony_ci            msg += "    port: " + uri.port + "\n";
4377545fdf9bSopenharmony_ci            msg += "    path: " + uri.path + "\n";
4378545fdf9bSopenharmony_ci            msg += "    pathStartWith: " + uri.pathStartWith + "\n";
4379545fdf9bSopenharmony_ci            msg += "    pathRegex: " + uri.pathRegex + "\n";
4380545fdf9bSopenharmony_ci            msg += "    type: " + uri.type + "\n";
4381545fdf9bSopenharmony_ci            msg += "    utd: " + uri.utd + "\n";
4382545fdf9bSopenharmony_ci            msg += "    maxFileSupported: " + std::to_string(uri.maxFileSupported) + "\n";
4383545fdf9bSopenharmony_ci            msg += "    linkFeature: " + uri.linkFeature + "\n";
4384545fdf9bSopenharmony_ci            msg += "    isMatch: " + std::to_string(uri.isMatch) + "\n";
4385545fdf9bSopenharmony_ci            msg += "}\n";
4386545fdf9bSopenharmony_ci        }
4387545fdf9bSopenharmony_ci        msg += "Ability end\n";
4388545fdf9bSopenharmony_ci    }
4389545fdf9bSopenharmony_ci    return res;
4390545fdf9bSopenharmony_ci}
4391545fdf9bSopenharmony_ci
4392545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsImplicitQuerySkillUriInfo()
4393545fdf9bSopenharmony_ci{
4394545fdf9bSopenharmony_ci    APP_LOGI("RunAsGetAbilityInfoWithSkillUriFlag start");
4395545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
4396545fdf9bSopenharmony_ci    int counter = 0;
4397545fdf9bSopenharmony_ci    std::string bundleName = "";
4398545fdf9bSopenharmony_ci    std::string action = "";
4399545fdf9bSopenharmony_ci    std::string entity = "";
4400545fdf9bSopenharmony_ci    std::string uri = "";
4401545fdf9bSopenharmony_ci    std::string type = "";
4402545fdf9bSopenharmony_ci    while (true) {
4403545fdf9bSopenharmony_ci        counter++;
4404545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_IMPLICIT_QUERY_SKILL_URI_INFO.c_str(),
4405545fdf9bSopenharmony_ci            LONG_OPTIONS_IMPLICIT_QUERY_SKILL_URI_INFO, nullptr);
4406545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4407545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4408545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4409545fdf9bSopenharmony_ci        }
4410545fdf9bSopenharmony_ci        if (option == -1) {
4411545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4412545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_IMPLICIT_QUERY_SKILL_URI_INFO);
4413545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4414545fdf9bSopenharmony_ci            }
4415545fdf9bSopenharmony_ci            break;
4416545fdf9bSopenharmony_ci        }
4417545fdf9bSopenharmony_ci        std::string value = "";
4418545fdf9bSopenharmony_ci        result = CheckImplicitQueryWantOption(option, value);
4419545fdf9bSopenharmony_ci        bundleName = option == 'n' ? value : bundleName;
4420545fdf9bSopenharmony_ci        action = option == 'a' ? value : action;
4421545fdf9bSopenharmony_ci        entity = option == 'e' ? value : entity;
4422545fdf9bSopenharmony_ci        uri = option == 'u' ? value : uri;
4423545fdf9bSopenharmony_ci        type = option == 't' ? value : type;
4424545fdf9bSopenharmony_ci    }
4425545fdf9bSopenharmony_ci    APP_LOGI("bundleName: %{public}s, action: %{public}s, entity: %{public}s, uri: %{public}s, type: %{public}s",
4426545fdf9bSopenharmony_ci        bundleName.c_str(), action.c_str(), entity.c_str(), uri.c_str(), type.c_str());
4427545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4428545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_IMPLICIT_QUERY_SKILL_URI_INFO);
4429545fdf9bSopenharmony_ci    } else {
4430545fdf9bSopenharmony_ci        std::string msg;
4431545fdf9bSopenharmony_ci        result = ImplicitQuerySkillUriInfo(bundleName, action, entity, uri, type, msg);
4432545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
4433545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_IMPLICIT_QUERY_SKILL_URI_INFO_NG);
4434545fdf9bSopenharmony_ci        } else {
4435545fdf9bSopenharmony_ci            resultReceiver_.append(msg);
4436545fdf9bSopenharmony_ci        }
4437545fdf9bSopenharmony_ci        resultReceiver_.append("\n");
4438545fdf9bSopenharmony_ci    }
4439545fdf9bSopenharmony_ci    return result;
4440545fdf9bSopenharmony_ci}
4441545fdf9bSopenharmony_ci
4442545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsQueryAbilityInfoByContinueType()
4443545fdf9bSopenharmony_ci{
4444545fdf9bSopenharmony_ci    APP_LOGI("RunAsQueryAbilityInfoByContinueType start");
4445545fdf9bSopenharmony_ci    int result = OHOS::ERR_OK;
4446545fdf9bSopenharmony_ci    int counter = 0;
4447545fdf9bSopenharmony_ci    std::string commandName = "queryAbilityInfoByContinueType";
4448545fdf9bSopenharmony_ci    std::string name = "";
4449545fdf9bSopenharmony_ci    std::string bundleName = "";
4450545fdf9bSopenharmony_ci    std::string continueType = "";
4451545fdf9bSopenharmony_ci    int userId = 100;
4452545fdf9bSopenharmony_ci    while (true) {
4453545fdf9bSopenharmony_ci        counter++;
4454545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE.c_str(),
4455545fdf9bSopenharmony_ci            LONG_OPTIONS_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE, nullptr);
4456545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4457545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4458545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4459545fdf9bSopenharmony_ci        }
4460545fdf9bSopenharmony_ci        if (option == -1) {
4461545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4462545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_NO_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE);
4463545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4464545fdf9bSopenharmony_ci            }
4465545fdf9bSopenharmony_ci            break;
4466545fdf9bSopenharmony_ci        }
4467545fdf9bSopenharmony_ci        int temp = 0;
4468545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
4469545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
4470545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
4471545fdf9bSopenharmony_ci        continueType = option == 'c' ? name : continueType;
4472545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
4473545fdf9bSopenharmony_ci    }
4474545fdf9bSopenharmony_ci    APP_LOGI("bundleName: %{public}s, continueType: %{public}s, userId: %{public}d",
4475545fdf9bSopenharmony_ci        bundleName.c_str(), continueType.c_str(), userId);
4476545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4477545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_NO_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE);
4478545fdf9bSopenharmony_ci    } else {
4479545fdf9bSopenharmony_ci        AbilityInfo abilityInfo;
4480545fdf9bSopenharmony_ci        result = bundleMgrProxy_->QueryAbilityInfoByContinueType(bundleName, continueType, abilityInfo, userId);
4481545fdf9bSopenharmony_ci        if (result != OHOS::ERR_OK) {
4482545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_QUERY_ABILITY_INFO_BY_CONTINUE_TYPE_NG);
4483545fdf9bSopenharmony_ci        } else {
4484545fdf9bSopenharmony_ci            nlohmann::json jsonObject = abilityInfo;
4485545fdf9bSopenharmony_ci            std::string results = jsonObject.dump(Constants::DUMP_INDENT);
4486545fdf9bSopenharmony_ci            resultReceiver_.append(results);
4487545fdf9bSopenharmony_ci        }
4488545fdf9bSopenharmony_ci        resultReceiver_.append("\n");
4489545fdf9bSopenharmony_ci    }
4490545fdf9bSopenharmony_ci    return result;
4491545fdf9bSopenharmony_ci}
4492545fdf9bSopenharmony_ci
4493545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsGetDirByBundleNameAndAppIndex()
4494545fdf9bSopenharmony_ci{
4495545fdf9bSopenharmony_ci    APP_LOGI("RunAsGetDirByBundleNameAndAppIndex start");
4496545fdf9bSopenharmony_ci    std::string commandName = "getDirByBundleNameAndAppIndex";
4497545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
4498545fdf9bSopenharmony_ci    int32_t counter = 0;
4499545fdf9bSopenharmony_ci    std::string name = "";
4500545fdf9bSopenharmony_ci    std::string bundleName = "";
4501545fdf9bSopenharmony_ci    int32_t appIndex = 0;
4502545fdf9bSopenharmony_ci    while (true) {
4503545fdf9bSopenharmony_ci        counter++;
4504545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_GET_DIR.c_str(),
4505545fdf9bSopenharmony_ci            LONG_OPTIONS_GET_DIR, nullptr);
4506545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4507545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4508545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4509545fdf9bSopenharmony_ci        }
4510545fdf9bSopenharmony_ci        if (option == -1) {
4511545fdf9bSopenharmony_ci            // When scanning the first argument
4512545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4513545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool getDirByBundleNameAndAppIndex with no option.");
4514545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_GET_DIR_BY_BUNDLENAME_AND_APP_INDEX);
4515545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4516545fdf9bSopenharmony_ci            }
4517545fdf9bSopenharmony_ci            break;
4518545fdf9bSopenharmony_ci        }
4519545fdf9bSopenharmony_ci        int temp = 0;
4520545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
4521545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
4522545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
4523545fdf9bSopenharmony_ci        appIndex = option == 'a' ? temp : appIndex;
4524545fdf9bSopenharmony_ci    }
4525545fdf9bSopenharmony_ci    APP_LOGI("bundleName: %{public}s, appIndex: %{public}d", bundleName.c_str(), appIndex);
4526545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4527545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_GET_DIR_BY_BUNDLENAME_AND_APP_INDEX);
4528545fdf9bSopenharmony_ci    } else {
4529545fdf9bSopenharmony_ci        std::string dataDir = "";
4530545fdf9bSopenharmony_ci        BundleMgrClient client;
4531545fdf9bSopenharmony_ci        result = client.GetDirByBundleNameAndAppIndex(bundleName, appIndex, dataDir);
4532545fdf9bSopenharmony_ci        if (result == ERR_OK) {
4533545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_DIR_OK);
4534545fdf9bSopenharmony_ci            resultReceiver_.append(dataDir + "\n");
4535545fdf9bSopenharmony_ci        } else if (result == ERR_BUNDLE_MANAGER_GET_DIR_INVALID_APP_INDEX) {
4536545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_DIR_NG + "Please enter a valid appIndex\n");
4537545fdf9bSopenharmony_ci        } else {
4538545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_GET_DIR_NG + "errCode is "+ std::to_string(result) + "\n");
4539545fdf9bSopenharmony_ci        }
4540545fdf9bSopenharmony_ci    }
4541545fdf9bSopenharmony_ci    return result;
4542545fdf9bSopenharmony_ci}
4543545fdf9bSopenharmony_ci
4544545fdf9bSopenharmony_ciErrCode BundleTestTool::RunAsIsBundleInstalled()
4545545fdf9bSopenharmony_ci{
4546545fdf9bSopenharmony_ci    APP_LOGI("RunAsIsBundleInstalled start");
4547545fdf9bSopenharmony_ci    std::string commandName = "isBundleInstalled";
4548545fdf9bSopenharmony_ci    int32_t result = OHOS::ERR_OK;
4549545fdf9bSopenharmony_ci    int32_t counter = 0;
4550545fdf9bSopenharmony_ci    std::string name = "";
4551545fdf9bSopenharmony_ci    std::string bundleName = "";
4552545fdf9bSopenharmony_ci    int32_t userId = BundleCommandCommon::GetCurrentUserId(Constants::UNSPECIFIED_USERID);
4553545fdf9bSopenharmony_ci    int32_t appIndex = 0;
4554545fdf9bSopenharmony_ci    while (true) {
4555545fdf9bSopenharmony_ci        counter++;
4556545fdf9bSopenharmony_ci        int32_t option = getopt_long(argc_, argv_, SHORT_OPTIONS_IS_BUNDLE_INSTALLED.c_str(),
4557545fdf9bSopenharmony_ci            LONG_OPTIONS_IS_BUNDLE_INSTALLED, nullptr);
4558545fdf9bSopenharmony_ci        APP_LOGD("option: %{public}d, optopt: %{public}d, optind: %{public}d", option, optopt, optind);
4559545fdf9bSopenharmony_ci        if (optind < 0 || optind > argc_) {
4560545fdf9bSopenharmony_ci            return OHOS::ERR_INVALID_VALUE;
4561545fdf9bSopenharmony_ci        }
4562545fdf9bSopenharmony_ci        if (option == -1) {
4563545fdf9bSopenharmony_ci            // When scanning the first argument
4564545fdf9bSopenharmony_ci            if ((counter == 1) && (strcmp(argv_[optind], cmd_.c_str()) == 0)) {
4565545fdf9bSopenharmony_ci                APP_LOGD("bundle_test_tool isBundleInstalled with no option.");
4566545fdf9bSopenharmony_ci                resultReceiver_.append(HELP_MSG_IS_BUNDLE_INSTALLED);
4567545fdf9bSopenharmony_ci                return OHOS::ERR_INVALID_VALUE;
4568545fdf9bSopenharmony_ci            }
4569545fdf9bSopenharmony_ci            break;
4570545fdf9bSopenharmony_ci        }
4571545fdf9bSopenharmony_ci        int temp = 0;
4572545fdf9bSopenharmony_ci        result = !CheckGetStringCorrectOption(option, commandName, temp, name)
4573545fdf9bSopenharmony_ci            ? OHOS::ERR_INVALID_VALUE : result;
4574545fdf9bSopenharmony_ci        bundleName = option == 'n' ? name : bundleName;
4575545fdf9bSopenharmony_ci        userId = option == 'u' ? temp : userId;
4576545fdf9bSopenharmony_ci        appIndex = option == 'a' ? temp : appIndex;
4577545fdf9bSopenharmony_ci    }
4578545fdf9bSopenharmony_ci    APP_LOGI("bundleName: %{public}s, appIndex: %{public}d, userId: %{public}d", bundleName.c_str(), appIndex, userId);
4579545fdf9bSopenharmony_ci    if (result != OHOS::ERR_OK) {
4580545fdf9bSopenharmony_ci        resultReceiver_.append(HELP_MSG_IS_BUNDLE_INSTALLED);
4581545fdf9bSopenharmony_ci    } else {
4582545fdf9bSopenharmony_ci        bool isBundleInstalled = false;
4583545fdf9bSopenharmony_ci        result = bundleMgrProxy_->IsBundleInstalled(bundleName, userId, appIndex, isBundleInstalled);
4584545fdf9bSopenharmony_ci        if (result == ERR_OK) {
4585545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_IS_BUNDLE_INSTALLED_OK);
4586545fdf9bSopenharmony_ci            resultReceiver_.append("isBundleInstalled: ");
4587545fdf9bSopenharmony_ci            resultReceiver_.append(isBundleInstalled ? "true\n" : "false\n");
4588545fdf9bSopenharmony_ci        } else {
4589545fdf9bSopenharmony_ci            resultReceiver_.append(STRING_IS_BUNDLE_INSTALLED_NG + "errCode is "+ std::to_string(result) + "\n");
4590545fdf9bSopenharmony_ci        }
4591545fdf9bSopenharmony_ci    }
4592545fdf9bSopenharmony_ci    return result;
4593545fdf9bSopenharmony_ci}
4594545fdf9bSopenharmony_ci} // AppExecFwk
4595545fdf9bSopenharmony_ci} // OHOS