1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef APPSPAWN_TEST_CMD_H 16 #define APPSPAWN_TEST_CMD_H 17 18 #include <cstdint> 19 #include <cstdio> 20 #include <cstdlib> 21 #include <string> 22 #include <vector> 23 24 #include "appspawn.h" 25 #include "appspawn_msg.h" 26 #include "appspawn_utils.h" 27 #include "cJSON.h" 28 #include "json_utils.h" 29 #include "securec.h" 30 #include "thread_manager.h" 31 32 typedef struct TagThreadContext { 33 } ThreadContext; 34 35 namespace OHOS { 36 namespace AppSpawnModuleTest { 37 class AppSpawnTestCommander : public ThreadContext { 38 public: AppSpawnTestCommander()39 AppSpawnTestCommander() 40 { 41 exit_ = 0; 42 appSpawn_ = 1; 43 dumpFlags = 0; 44 msgType_ = MAX_TYPE_INVALID; 45 terminatePid_ = 0; 46 } AppSpawnTestCommander(int serverType)47 explicit AppSpawnTestCommander(int serverType) 48 { 49 exit_ = 0; 50 appSpawn_ = serverType; 51 dumpFlags = 0; 52 msgType_ = MAX_TYPE_INVALID; 53 terminatePid_ = 0; 54 } ~AppSpawnTestCommander()55 ~AppSpawnTestCommander() 56 { 57 if (ptyFd_ != -1) { 58 (void)close(ptyFd_); 59 ptyFd_ = -1; 60 } 61 if (appInfoConfig_) { 62 cJSON_Delete(appInfoConfig_); 63 appInfoConfig_ = nullptr; 64 } 65 } 66 67 int ProcessArgs(int argc, char *const argv[]); 68 int Run(); 69 70 int CreateOtherMsg(AppSpawnReqMsgHandle &reqHandle, pid_t pid); 71 int CreateMsg(AppSpawnReqMsgHandle &reqHandle, const char *defaultConfig, 72 uint32_t defMsgType = MAX_TYPE_INVALID); 73 int StartSendMsg(); 74 int SendMsg(); GetClientHandle()75 AppSpawnClientHandle GetClientHandle() 76 { 77 return clientHandle_; 78 } 79 80 private: 81 std::vector<std::string> split(const std::string &str, const std::string &pattern); 82 int InitPtyInterface(); 83 int ProcessInputCmd(std::string &cmd); 84 int AddExtTlv(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 85 int BuildMsgFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 86 int AddBundleInfoFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 87 int AddDacInfoFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 88 int AddInternetPermissionInfoFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 89 int AddAccessTokenFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 90 int AddDomainInfoFromJson(const cJSON *appInfoConfig, AppSpawnReqMsgHandle reqHandle); 91 uint32_t GetUint32ArrayFromJson(const cJSON *json, const char *name, uint32_t dataArray[], uint32_t maxCount); ConvertTo(const ThreadContext * context)92 static AppSpawnTestCommander *ConvertTo(const ThreadContext *context) 93 { 94 return const_cast<AppSpawnTestCommander *>(reinterpret_cast<const AppSpawnTestCommander *>(context)); 95 } 96 static void TaskExecutorProc(ThreadTaskHandle handle, const ThreadContext *context); 97 static void SendTaskFinish(ThreadTaskHandle handle, const ThreadContext *context); 98 static void InputThread(ThreadTaskHandle handle, const ThreadContext *context); 99 static void DumpThread(ThreadTaskHandle handle, const ThreadContext *context); 100 101 int ptyFd_{-1}; 102 uint32_t dumpFlags : 1; 103 uint32_t exit_ : 1; 104 uint32_t appSpawn_ : 2; 105 uint32_t msgType_; 106 pid_t terminatePid_; 107 uint32_t threadCount_{1}; 108 std::string ptyName_{}; 109 std::string testFileName_{}; 110 std::string processName_{}; 111 cJSON *appInfoConfig_{nullptr}; 112 AppSpawnClientHandle clientHandle_{nullptr}; 113 ThreadMgr threadMgr_{nullptr}; 114 ThreadTaskHandle inputHandle_{0}; 115 ThreadTaskHandle dumpHandle_{0}; 116 }; 117 } // namespace AppSpawnModuleTest 118 } // namespace OHOS 119 #endif // APPSPAWN_TEST_CMD_H