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 16#include "appspawn.h" 17#include "appspawn_utils.h" 18#include "securec.h" 19#include "appspawn_server.h" 20 21#include <gtest/gtest.h> 22 23using namespace testing; 24using namespace testing::ext; 25 26namespace OHOS { 27namespace AppSpawn { 28class AppSpawnClientTest : public testing::Test { 29public: 30 static void SetUpTestCase() {} 31 static void TearDownTestCase() {} 32 void SetUp() {} 33 void TearDown() {} 34}; 35 36static AppSpawnReqMsgHandle CreateMsg(AppSpawnClientHandle handle, const char *bundleName, RunMode mode) 37{ 38 AppSpawnReqMsgHandle reqHandle = 0; 39 int ret = AppSpawnReqMsgCreate(MSG_APP_SPAWN, bundleName, &reqHandle); 40 APPSPAWN_CHECK(ret == 0, return 0, "Failed to create req %{public}s", bundleName); 41 do { 42 ret = AppSpawnReqMsgSetBundleInfo(reqHandle, 0, bundleName); 43 APPSPAWN_CHECK(ret == 0, break, "Failed to create req %{public}s", bundleName); 44 45 AppDacInfo dacInfo = {}; 46 dacInfo.uid = 20010029; // 20010029 test data 47 dacInfo.gid = 20010029; // 20010029 test data 48 dacInfo.gidCount = 2; // 2 count 49 dacInfo.gidTable[0] = 20010029; // 20010029 test data 50 dacInfo.gidTable[1] = 20010029 + 1; // 20010029 test data 51 (void)strcpy_s(dacInfo.userName, sizeof(dacInfo.userName), "test-app-name"); 52 ret = AppSpawnReqMsgSetAppDacInfo(reqHandle, &dacInfo); 53 APPSPAWN_CHECK(ret == 0, break, "Failed to add dac %{public}s", APPSPAWN_SERVER_NAME); 54 55 AppSpawnReqMsgSetAppFlag(reqHandle, static_cast<AppFlagsIndex>(10)); // 10 test 56 if (mode == MODE_FOR_NATIVE_SPAWN) { 57 AppSpawnReqMsgSetAppFlag(reqHandle, static_cast<AppFlagsIndex>(23)); // 23 APP_FLAGS_ISOLATED_SANDBOX_TYPE 58 AppSpawnReqMsgSetAppFlag(reqHandle, static_cast<AppFlagsIndex>(26)); // 26 APP_FLAGS_ISOLATED_NETWORK 59 } 60 61 const char *apl = "normal"; 62 ret = AppSpawnReqMsgSetAppDomainInfo(reqHandle, 1, apl); 63 APPSPAWN_CHECK(ret == 0, break, "Failed to add domain %{public}s", APPSPAWN_SERVER_NAME); 64 65 ret = AppSpawnReqMsgSetAppAccessToken(reqHandle, 12345678); // 12345678 66 APPSPAWN_CHECK(ret == 0, break, "Failed to add access token %{public}s", APPSPAWN_SERVER_NAME); 67 68 static const char *permissions[] = { 69 "ohos.permission.READ_IMAGEVIDEO", 70 "ohos.permission.FILE_CROSS_APP", 71 "ohos.permission.ACTIVATE_THEME_PACKAGE", 72 "ohos.permission.GET_WALLPAPER", 73 }; 74 size_t count = sizeof(permissions) / sizeof(permissions[0]); 75 for (size_t i = 0; i < count; i++) { 76 ret = AppSpawnReqMsgAddPermission(reqHandle, permissions[i]); 77 APPSPAWN_CHECK(ret == 0, break, "Failed to create req %{public}s", bundleName); 78 } 79 return reqHandle; 80 } while (0); 81 AppSpawnReqMsgFree(reqHandle); 82 return INVALID_REQ_HANDLE; 83} 84 85static AppSpawnClientHandle CreateClient(const char *serviceName) 86{ 87 AppSpawnClientHandle clientHandle = NULL; 88 int ret = AppSpawnClientInit(serviceName, &clientHandle); 89 APPSPAWN_CHECK(ret == 0, return nullptr, "Failed to create client %{public}s", serviceName); 90 return clientHandle; 91} 92 93HWTEST_F(AppSpawnClientTest, AppSpawn_Client_test001, TestSize.Level0) 94{ 95 AppSpawnClientHandle clientHandle = CreateClient(APPSPAWN_SERVER_NAME); 96 ASSERT_EQ(clientHandle != NULL, 1); 97 AppSpawnReqMsgHandle reqHandle = CreateMsg(clientHandle, "ohos.samples.clock", MODE_FOR_APP_SPAWN); 98 ASSERT_EQ(reqHandle != INVALID_REQ_HANDLE, 1); 99 100 AppSpawnResult result = {}; 101 int ret = AppSpawnClientSendMsg(clientHandle, reqHandle, &result); 102 if (ret == 0 && result.pid > 0) { 103 kill(result.pid, SIGKILL); 104 } 105 AppSpawnClientDestroy(clientHandle); 106} 107 108HWTEST_F(AppSpawnClientTest, AppSpawn_Client_test002, TestSize.Level0) 109{ 110 AppSpawnClientHandle clientHandle = CreateClient(NATIVESPAWN_SERVER_NAME); 111 ASSERT_EQ(clientHandle != NULL, 1); 112 AppSpawnReqMsgHandle reqHandle = CreateMsg(clientHandle, "ohos.samples.clock", MODE_FOR_NATIVE_SPAWN); 113 ASSERT_EQ(reqHandle != INVALID_REQ_HANDLE, 1); 114 115 AppSpawnResult result = {}; 116 int ret = AppSpawnClientSendMsg(clientHandle, reqHandle, &result); 117 if (ret == 0 && result.pid > 0) { 118 kill(result.pid, SIGKILL); 119 } 120 AppSpawnClientDestroy(clientHandle); 121} 122 123} // namespace AppSpawn 124} // namespace OHOS 125