1 /*
2 * Copyright (c) 2022-2023 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 "usb_common_test.h"
17 #include "usb_errors.h"
18 #include "hilog_wrapper.h"
19
20 using namespace OHOS::Security::AccessToken;
21
22 namespace OHOS {
23 namespace USB {
24 namespace Common {
25
26 PermissionDef g_infoManagerTestPermDef = {
27 .permissionName = "",
28 .bundleName = "accesstoken_test",
29 .grantMode = 1,
30 .label = "label",
31 .labelId = 1,
32 .description = "test usb service hap",
33 .descriptionId = 1,
34 .availableLevel = APL_NORMAL
35 };
36
37 PermissionStateFull g_infoManagerTestState = {
38 .grantFlags = {1},
39 .grantStatus = {PermissionState::PERMISSION_GRANTED},
40 .isGeneral = true,
41 .permissionName = "",
42 .resDeviceID = {"local"}
43 };
44
45 HapPolicyParams g_infoManagerTestPolicyPrams = {
46 .apl = APL_NORMAL,
47 .domain = "test.domain",
48 .permList = {g_infoManagerTestPermDef},
49 .permStateList = {g_infoManagerTestState}
50 };
51
52 HapInfoParams g_infoManagerTestInfoParms = {
53 .bundleName = "usb_service_test_hap",
54 .userID = 1,
55 .instIndex = 0,
56 .appIDDesc = "usb service test hap",
57 .isSystemApp = false
58 };
59
60 HapInfoParams g_infoManagerTestInfoParms1 = {
61 .bundleName = "usb_service_test_hap",
62 .userID = 2,
63 .instIndex = 0,
64 .appIDDesc = "usb service test hap",
65 .isSystemApp = false
66 };
67
68 HapInfoParams g_infoManagerTestInfoParms2 = {
69 .bundleName = "usb_service_test_hap",
70 .userID = 1,
71 .instIndex = 1,
72 .appIDDesc = "usb service test hap",
73 .isSystemApp = false
74 };
75
76 HapInfoParams g_infoManagerTestInfoParms3 = {
77 .bundleName = "usb_service_test_hap",
78 .userID = 1,
79 .instIndex = 0,
80 .appIDDesc = "usb service test hap",
81 .isSystemApp = true
82 };
83
SetTestCaseNative(TokenInfoParams * infoInstance)84 void UsbCommonTest::SetTestCaseNative(TokenInfoParams *infoInstance)
85 {
86 uint64_t tokenId = GetAccessTokenId(infoInstance);
87 int ret = SetSelfTokenID(tokenId);
88 if (ret == 0) {
89 USB_HILOGI(MODULE_USB_SERVICE, "SetSelfTokenID success %{public}d", __LINE__);
90 } else {
91 USB_HILOGE(MODULE_USB_SERVICE, "SetSelfTokenID fail %{public}d", ret);
92 }
93 ret = AccessTokenKit::ReloadNativeTokenInfo();
94 if (ret == 0) {
95 USB_HILOGI(MODULE_USB_SERVICE, "ReloadNativeTokenInfo success %{public}d", __LINE__);
96 } else {
97 USB_HILOGE(MODULE_USB_SERVICE, "ReloadNativeTokenInfo fail %{public}d", ret);
98 }
99 }
100
GrantPermissionSysNative()101 void UsbCommonTest::GrantPermissionSysNative()
102 {
103 const char **permsInfo = new(std::nothrow)const char* [1];
104 permsInfo[0] = "ohos.permission.MANAGE_USB_CONFIG";
105 TokenInfoParams g_sysInfoInstance = {
106 .dcapsNum = 0,
107 .permsNum = 1,
108 .aclsNum = 0,
109 .dcaps = nullptr,
110 .perms = permsInfo,
111 .acls = nullptr,
112 .processName = "usb_manager_test_sys_with_perms",
113 .aplStr = "system_basic",
114 };
115 SetTestCaseNative(&g_sysInfoInstance);
116 }
117
GrantPermissionNormalNative()118 void UsbCommonTest::GrantPermissionNormalNative()
119 {
120 TokenInfoParams g_normalInfoInstance = {
121 .dcapsNum = 0,
122 .permsNum = 0,
123 .aclsNum = 0,
124 .dcaps = nullptr,
125 .perms = nullptr,
126 .acls = nullptr,
127 .processName = "usb_manager_test_normal",
128 .aplStr = "normal",
129 };
130 SetTestCaseNative(&g_normalInfoInstance);
131 }
132
GrantNormalPermissionNative()133 void UsbCommonTest::GrantNormalPermissionNative()
134 {
135 const char **permsInfo = new(std::nothrow)const char* [1];
136 permsInfo[0] = "ohos.permission.MANAGE_USB_CONFIG";
137 TokenInfoParams g_normalInfoInstance = {
138 .dcapsNum = 0,
139 .permsNum = 1,
140 .aclsNum = 0,
141 .dcaps = nullptr,
142 .perms = permsInfo,
143 .acls = nullptr,
144 .processName = "usb_manager_test_normal_with_perms",
145 .aplStr = "normal",
146 };
147 SetTestCaseNative(&g_normalInfoInstance);
148 }
149
GrantSysNoPermissionNative()150 void UsbCommonTest::GrantSysNoPermissionNative()
151 {
152 TokenInfoParams g_sysInfoInstance = {
153 .dcapsNum = 0,
154 .permsNum = 0,
155 .aclsNum = 0,
156 .dcaps = nullptr,
157 .perms = nullptr,
158 .acls = nullptr,
159 .processName = "usb_manager_test_sys",
160 .aplStr = "system_basic",
161 };
162 SetTestCaseNative(&g_sysInfoInstance);
163 }
164
AllocHapTest()165 AccessTokenID UsbCommonTest::AllocHapTest()
166 {
167 AccessTokenID tokenId = 0;
168 AccessTokenIDEx tokenIdEx = {0};
169 tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams);
170 tokenId = tokenIdEx.tokenIdExStruct.tokenID;
171 if (tokenId != 0) {
172 USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
173 } else {
174 USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
175 }
176 return tokenId;
177 }
178
AllocSystemHapTest()179 AccessTokenID UsbCommonTest::AllocSystemHapTest()
180 {
181 AccessTokenID tokenId = 0;
182 AccessTokenIDEx tokenIdEx = {0};
183 tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms3, g_infoManagerTestPolicyPrams);
184 tokenId = tokenIdEx.tokenIdExStruct.tokenID;
185 if (tokenId != 0) {
186 USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
187 } else {
188 USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
189 }
190 return tokenId;
191 }
192
AllocHapTestWithUserIdDiff()193 AccessTokenID UsbCommonTest::AllocHapTestWithUserIdDiff()
194 {
195 AccessTokenID tokenId = 0;
196 AccessTokenIDEx tokenIdEx = {0};
197 tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms1, g_infoManagerTestPolicyPrams);
198 tokenId = tokenIdEx.tokenIdExStruct.tokenID;
199 if (tokenId != 0) {
200 USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
201 } else {
202 USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
203 }
204 return tokenId;
205 }
AllocHapTestWithIndexDiff()206 AccessTokenID UsbCommonTest::AllocHapTestWithIndexDiff()
207 {
208 AccessTokenID tokenId = 0;
209 AccessTokenIDEx tokenIdEx = {0};
210 tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms2, g_infoManagerTestPolicyPrams);
211 tokenId = tokenIdEx.tokenIdExStruct.tokenID;
212 if (tokenId != 0) {
213 USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
214 } else {
215 USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
216 }
217 return tokenId;
218 }
219
SetSelfToken(AccessTokenID tokenId)220 void UsbCommonTest::SetSelfToken(AccessTokenID tokenId)
221 {
222 auto ret = SetSelfTokenID(tokenId);
223 if (ret == 0) {
224 USB_HILOGI(MODULE_USB_SERVICE, "SetSelfTokenID success, tokenId: %{public}d", tokenId);
225 } else {
226 USB_HILOGE(MODULE_USB_SERVICE, "SetSelfTokenID fail %{public}d, tokenId: %{public}d", ret, tokenId);
227 }
228 ret = AccessTokenKit::ReloadNativeTokenInfo();
229 if (ret == 0) {
230 USB_HILOGI(MODULE_USB_SERVICE, "ReloadNativeTokenInfo success %{public}d", __LINE__);
231 } else {
232 USB_HILOGE(MODULE_USB_SERVICE, "ReloadNativeTokenInfo fail %{public}d", ret);
233 }
234 }
235
DeleteAllocHapToken(AccessTokenID tokenId)236 void UsbCommonTest::DeleteAllocHapToken(AccessTokenID tokenId)
237 {
238 auto ret = AccessTokenKit::DeleteToken(tokenId);
239 if (ret == 0) {
240 USB_HILOGI(MODULE_USB_SERVICE, "DeleteToken success tokenId: %{public}d", tokenId);
241 } else {
242 USB_HILOGE(MODULE_USB_SERVICE, "DeleteToken fail %{public}d, tokenId: %{public}d", ret, tokenId);
243 }
244 }
245
SwitchErrCode(int32_t ret)246 int32_t UsbCommonTest::SwitchErrCode(int32_t ret)
247 {
248 return ret == UEC_SERVICE_NOT_SUPPORT_SWITCH_PORT ? UEC_OK : ret;
249 }
250
251 } // namespace Common
252 } // namespace USB
253 } // namespace OHOS
254