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