14dfc7d99Sopenharmony_ci/* 24dfc7d99Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 34dfc7d99Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44dfc7d99Sopenharmony_ci * you may not use this file except in compliance with the License. 54dfc7d99Sopenharmony_ci * You may obtain a copy of the License at 64dfc7d99Sopenharmony_ci * 74dfc7d99Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84dfc7d99Sopenharmony_ci * 94dfc7d99Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104dfc7d99Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114dfc7d99Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124dfc7d99Sopenharmony_ci * See the License for the specific language governing permissions and 134dfc7d99Sopenharmony_ci * limitations under the License. 144dfc7d99Sopenharmony_ci */ 154dfc7d99Sopenharmony_ci#include <cstdint> 164dfc7d99Sopenharmony_ci#include <cstring> 174dfc7d99Sopenharmony_ci#include <iostream> 184dfc7d99Sopenharmony_ci#include <unordered_map> 194dfc7d99Sopenharmony_ci#include <unistd.h> 204dfc7d99Sopenharmony_ci#include "accesstoken_kit.h" 214dfc7d99Sopenharmony_ci#include "ipc_skeleton.h" 224dfc7d99Sopenharmony_ci#include "nativetoken_kit.h" 234dfc7d99Sopenharmony_ci#include "res_sched_client.h" 244dfc7d99Sopenharmony_ci#include "token_setproc.h" 254dfc7d99Sopenharmony_ci 264dfc7d99Sopenharmony_ciconst static int32_t PARAMETERS_NUM_MIN = 2; 274dfc7d99Sopenharmony_ciconst static int32_t PARAMETERS_NUM_MIN_KILL_PROCESS = 4; 284dfc7d99Sopenharmony_ciconst static int32_t PARAMETERS_NUM_KILL_PROCESS_PROCESSNAME = 5; 294dfc7d99Sopenharmony_ciconst static int32_t PARAMETERS_NUM_REPORT_DATA = 6; 304dfc7d99Sopenharmony_ciconst static int32_t PARAMETERS_NUM_REQUEST_TEST = 5; 314dfc7d99Sopenharmony_ciconst static int32_t PID_INDEX = 3; 324dfc7d99Sopenharmony_ciconst static int32_t RES_TYPE_INDEX = 4; 334dfc7d99Sopenharmony_ciconst static int32_t UID_INDEX = 2; 344dfc7d99Sopenharmony_ciconst static int32_t VALUE_INDEX = 5; 354dfc7d99Sopenharmony_ciconst static int32_t REQUEST_COUNT_INDEX = 2; 364dfc7d99Sopenharmony_ciconst static int32_t REQUEST_TIME_INDEX = 3; 374dfc7d99Sopenharmony_ciconst static int32_t REQUEST_UID_INDEX = 4; 384dfc7d99Sopenharmony_ciconst static int32_t DEFAULT_TYPE = 1; 394dfc7d99Sopenharmony_ciconst static int32_t DEFAULT_VALUE = 1; 404dfc7d99Sopenharmony_ci 414dfc7d99Sopenharmony_cistatic void MockProcess(int32_t uid) 424dfc7d99Sopenharmony_ci{ 434dfc7d99Sopenharmony_ci static const char *perms[] = { 444dfc7d99Sopenharmony_ci "ohos.permission.DISTRIBUTED_DATASYNC", 454dfc7d99Sopenharmony_ci "ohos.permission.REPORT_RESOURCE_SCHEDULE_EVENT" 464dfc7d99Sopenharmony_ci }; 474dfc7d99Sopenharmony_ci uint64_t tokenId; 484dfc7d99Sopenharmony_ci NativeTokenInfoParams infoInstance = { 494dfc7d99Sopenharmony_ci .dcapsNum = 0, 504dfc7d99Sopenharmony_ci .permsNum = sizeof(perms) / sizeof(perms[0]), 514dfc7d99Sopenharmony_ci .aclsNum = 0, 524dfc7d99Sopenharmony_ci .dcaps = nullptr, 534dfc7d99Sopenharmony_ci .perms = perms, 544dfc7d99Sopenharmony_ci .acls = nullptr, 554dfc7d99Sopenharmony_ci .processName = "samgr", 564dfc7d99Sopenharmony_ci .aplStr = "system_core", 574dfc7d99Sopenharmony_ci }; 584dfc7d99Sopenharmony_ci tokenId = GetAccessTokenId(&infoInstance); 594dfc7d99Sopenharmony_ci SetSelfTokenID(tokenId); 604dfc7d99Sopenharmony_ci setuid(uid); 614dfc7d99Sopenharmony_ci OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 624dfc7d99Sopenharmony_ci} 634dfc7d99Sopenharmony_ci 644dfc7d99Sopenharmony_cistatic int64_t GetNowTime() 654dfc7d99Sopenharmony_ci{ 664dfc7d99Sopenharmony_ci time_t now; 674dfc7d99Sopenharmony_ci (void)time(&now); 684dfc7d99Sopenharmony_ci if (static_cast<int64_t>(now) < 0) { 694dfc7d99Sopenharmony_ci std::cout << "Get now time error " << std::endl; 704dfc7d99Sopenharmony_ci return 0; 714dfc7d99Sopenharmony_ci } 724dfc7d99Sopenharmony_ci auto tarEndTimePoint = std::chrono::system_clock::from_time_t(now); 734dfc7d99Sopenharmony_ci auto tarDuration = std::chrono::duration_cast<std::chrono::microseconds>(tarEndTimePoint.time_since_epoch()); 744dfc7d99Sopenharmony_ci int64_t tarDate = tarDuration.count(); 754dfc7d99Sopenharmony_ci if (tarDate < 0) { 764dfc7d99Sopenharmony_ci std::cout << "tarDuration is less than 0 " << std::endl; 774dfc7d99Sopenharmony_ci return -1; 784dfc7d99Sopenharmony_ci } 794dfc7d99Sopenharmony_ci return static_cast<int64_t>(tarDate); 804dfc7d99Sopenharmony_ci} 814dfc7d99Sopenharmony_ci 824dfc7d99Sopenharmony_cistatic void KillProcess(int32_t argc, char *argv[]) 834dfc7d99Sopenharmony_ci{ 844dfc7d99Sopenharmony_ci if (argc < PARAMETERS_NUM_MIN_KILL_PROCESS) { 854dfc7d99Sopenharmony_ci return; 864dfc7d99Sopenharmony_ci } 874dfc7d99Sopenharmony_ci int32_t uid = atoi(argv[PARAMETERS_NUM_MIN]); 884dfc7d99Sopenharmony_ci MockProcess(uid); 894dfc7d99Sopenharmony_ci std::unordered_map<std::string, std::string> mapPayload; 904dfc7d99Sopenharmony_ci mapPayload["pid"] = argv[PARAMETERS_NUM_MIN_KILL_PROCESS - 1]; 914dfc7d99Sopenharmony_ci if (argc >= PARAMETERS_NUM_KILL_PROCESS_PROCESSNAME) { 924dfc7d99Sopenharmony_ci mapPayload["processName"] = argv[PARAMETERS_NUM_KILL_PROCESS_PROCESSNAME - 1]; 934dfc7d99Sopenharmony_ci } 944dfc7d99Sopenharmony_ci int32_t res = OHOS::ResourceSchedule::ResSchedClient::GetInstance().KillProcess(mapPayload); 954dfc7d99Sopenharmony_ci std::cout << "kill result:" << res << std::endl; 964dfc7d99Sopenharmony_ci} 974dfc7d99Sopenharmony_ci 984dfc7d99Sopenharmony_cistatic void ReportData(int32_t argc, char *argv[]) 994dfc7d99Sopenharmony_ci{ 1004dfc7d99Sopenharmony_ci if (argc != PARAMETERS_NUM_REPORT_DATA) { 1014dfc7d99Sopenharmony_ci return; 1024dfc7d99Sopenharmony_ci } 1034dfc7d99Sopenharmony_ci int32_t uid = atoi(argv[UID_INDEX]); 1044dfc7d99Sopenharmony_ci MockProcess(uid); 1054dfc7d99Sopenharmony_ci int32_t pid = atoi(argv[PID_INDEX]); 1064dfc7d99Sopenharmony_ci int32_t resType = atoi(argv[RES_TYPE_INDEX]); 1074dfc7d99Sopenharmony_ci int32_t value = atoi(argv[VALUE_INDEX]); 1084dfc7d99Sopenharmony_ci std::unordered_map<std::string, std::string> mapPayload; 1094dfc7d99Sopenharmony_ci mapPayload["uid"] = uid; 1104dfc7d99Sopenharmony_ci mapPayload["pid"] = pid; 1114dfc7d99Sopenharmony_ci OHOS::ResourceSchedule::ResSchedClient::GetInstance().ReportData(resType, value, mapPayload); 1124dfc7d99Sopenharmony_ci std::cout << "success passing on pid = " << pid << std::endl; 1134dfc7d99Sopenharmony_ci} 1144dfc7d99Sopenharmony_ci 1154dfc7d99Sopenharmony_cistatic void RequestTest(int32_t argc, char *argv[]) 1164dfc7d99Sopenharmony_ci{ 1174dfc7d99Sopenharmony_ci if (argc != PARAMETERS_NUM_REQUEST_TEST) { 1184dfc7d99Sopenharmony_ci return; 1194dfc7d99Sopenharmony_ci } 1204dfc7d99Sopenharmony_ci int32_t requestCount = atoi(argv[REQUEST_COUNT_INDEX]); 1214dfc7d99Sopenharmony_ci int32_t requestTime = atoi(argv[REQUEST_TIME_INDEX]); 1224dfc7d99Sopenharmony_ci int32_t uid = atoi(argv[REQUEST_UID_INDEX]); 1234dfc7d99Sopenharmony_ci MockProcess(uid); 1244dfc7d99Sopenharmony_ci std::unordered_map<std::string, std::string> mapPayload; 1254dfc7d99Sopenharmony_ci int64_t startTime = GetNowTime(); 1264dfc7d99Sopenharmony_ci int32_t count = 0; 1274dfc7d99Sopenharmony_ci while (count < requestCount && GetNowTime() -startTime < requestTime) { 1284dfc7d99Sopenharmony_ci count++; 1294dfc7d99Sopenharmony_ci OHOS::ResourceSchedule::ResSchedClient::GetInstance().ReportData(DEFAULT_TYPE, DEFAULT_VALUE, mapPayload); 1304dfc7d99Sopenharmony_ci } 1314dfc7d99Sopenharmony_ci std::cout << "success RequestTest " << uid << std::endl; 1324dfc7d99Sopenharmony_ci} 1334dfc7d99Sopenharmony_ci 1344dfc7d99Sopenharmony_ciint32_t main(int32_t argc, char *argv[]) 1354dfc7d99Sopenharmony_ci{ 1364dfc7d99Sopenharmony_ci if (!(argc >= PARAMETERS_NUM_MIN && argv)) { 1374dfc7d99Sopenharmony_ci std::cout << "error parameters"; 1384dfc7d99Sopenharmony_ci return 0; 1394dfc7d99Sopenharmony_ci } 1404dfc7d99Sopenharmony_ci char* function = argv[1]; 1414dfc7d99Sopenharmony_ci if (strcmp(function, "KillProcess") == 0) { 1424dfc7d99Sopenharmony_ci KillProcess(argc, argv); 1434dfc7d99Sopenharmony_ci } else if (strcmp(function, "ReportData") == 0) { 1444dfc7d99Sopenharmony_ci ReportData(argc, argv); 1454dfc7d99Sopenharmony_ci } else if (strcmp(function, "RequestTest") == 0) { 1464dfc7d99Sopenharmony_ci RequestTest(argc, argv); 1474dfc7d99Sopenharmony_ci } else { 1484dfc7d99Sopenharmony_ci std::cout << "error parameters"; 1494dfc7d99Sopenharmony_ci } 1504dfc7d99Sopenharmony_ci return 0; 1514dfc7d99Sopenharmony_ci}