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 
SetTestCaseNative(TokenInfoParams * infoInstance)76 void UsbCommonTest::SetTestCaseNative(TokenInfoParams *infoInstance)
77 {
78     uint64_t tokenId = GetAccessTokenId(infoInstance);
79     int ret = SetSelfTokenID(tokenId);
80     if (ret == 0) {
81         USB_HILOGI(MODULE_USB_SERVICE, "SetSelfTokenID success %{public}d", __LINE__);
82     } else {
83         USB_HILOGE(MODULE_USB_SERVICE, "SetSelfTokenID fail %{public}d", ret);
84     }
85     ret = AccessTokenKit::ReloadNativeTokenInfo();
86     if (ret == 0) {
87         USB_HILOGI(MODULE_USB_SERVICE, "ReloadNativeTokenInfo success %{public}d", __LINE__);
88     } else {
89         USB_HILOGE(MODULE_USB_SERVICE, "ReloadNativeTokenInfo fail %{public}d", ret);
90     }
91 }
92 
GrantPermissionSysNative()93 void UsbCommonTest::GrantPermissionSysNative()
94 {
95     const char **permsInfo = new(std::nothrow)const char* [1];
96     permsInfo[0] = "ohos.permission.MANAGE_USB_CONFIG";
97     TokenInfoParams g_sysInfoInstance = {
98     .dcapsNum = 0,
99     .permsNum = 1,
100     .aclsNum = 0,
101     .dcaps = nullptr,
102     .perms = permsInfo,
103     .acls = nullptr,
104     .processName = "usb_manager_test_sys_with_perms",
105     .aplStr = "system_basic",
106     };
107     SetTestCaseNative(&g_sysInfoInstance);
108 }
109 
GrantPermissionNormalNative()110 void UsbCommonTest::GrantPermissionNormalNative()
111 {
112     TokenInfoParams g_normalInfoInstance = {
113     .dcapsNum = 0,
114     .permsNum = 0,
115     .aclsNum = 0,
116     .dcaps = nullptr,
117     .perms = nullptr,
118     .acls = nullptr,
119     .processName = "usb_manager_test_normal",
120     .aplStr = "normal",
121     };
122     SetTestCaseNative(&g_normalInfoInstance);
123 }
124 
GrantNormalPermissionNative()125 void UsbCommonTest::GrantNormalPermissionNative()
126 {
127     const char **permsInfo = new(std::nothrow)const char* [1];
128     permsInfo[0] = "ohos.permission.MANAGE_USB_CONFIG";
129     TokenInfoParams g_normalInfoInstance = {
130     .dcapsNum = 0,
131     .permsNum = 1,
132     .aclsNum = 0,
133     .dcaps = nullptr,
134     .perms = permsInfo,
135     .acls = nullptr,
136     .processName = "usb_manager_test_normal_with_perms",
137     .aplStr = "normal",
138     };
139     SetTestCaseNative(&g_normalInfoInstance);
140 }
141 
GrantSysNoPermissionNative()142 void UsbCommonTest::GrantSysNoPermissionNative()
143 {
144     TokenInfoParams g_sysInfoInstance = {
145     .dcapsNum = 0,
146     .permsNum = 0,
147     .aclsNum = 0,
148     .dcaps = nullptr,
149     .perms = nullptr,
150     .acls = nullptr,
151     .processName = "usb_manager_test_sys",
152     .aplStr = "system_basic",
153     };
154     SetTestCaseNative(&g_sysInfoInstance);
155 }
156 
AllocHapTest()157 AccessTokenID UsbCommonTest::AllocHapTest()
158 {
159     AccessTokenID tokenId = 0;
160     AccessTokenIDEx tokenIdEx = {0};
161     tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams);
162     tokenId = tokenIdEx.tokenIdExStruct.tokenID;
163     if (tokenId != 0) {
164         USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
165     } else {
166         USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
167     }
168     return tokenId;
169 }
AllocHapTestWithUserIdDiff()170 AccessTokenID UsbCommonTest::AllocHapTestWithUserIdDiff()
171 {
172     AccessTokenID tokenId = 0;
173     AccessTokenIDEx tokenIdEx = {0};
174     tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms1, g_infoManagerTestPolicyPrams);
175     tokenId = tokenIdEx.tokenIdExStruct.tokenID;
176     if (tokenId != 0) {
177         USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
178     } else {
179         USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
180     }
181     return tokenId;
182 }
AllocHapTestWithIndexDiff()183 AccessTokenID UsbCommonTest::AllocHapTestWithIndexDiff()
184 {
185     AccessTokenID tokenId = 0;
186     AccessTokenIDEx tokenIdEx = {0};
187     tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms2, g_infoManagerTestPolicyPrams);
188     tokenId = tokenIdEx.tokenIdExStruct.tokenID;
189     if (tokenId != 0) {
190         USB_HILOGI(MODULE_USB_SERVICE, "AllocHapToken success, tokenId: %{public}d", tokenId);
191     } else {
192         USB_HILOGE(MODULE_USB_SERVICE, "AllocHapToken fail,tokenId: %{public}d", tokenId);
193     }
194     return tokenId;
195 }
196 
SetSelfToken(AccessTokenID tokenId)197 void UsbCommonTest::SetSelfToken(AccessTokenID tokenId)
198 {
199     auto ret = SetSelfTokenID(tokenId);
200     if (ret == 0) {
201         USB_HILOGI(MODULE_USB_SERVICE, "SetSelfTokenID success, tokenId: %{public}d", tokenId);
202     } else {
203         USB_HILOGE(MODULE_USB_SERVICE, "SetSelfTokenID fail %{public}d, tokenId: %{public}d", ret, tokenId);
204     }
205     ret = AccessTokenKit::ReloadNativeTokenInfo();
206     if (ret == 0) {
207         USB_HILOGI(MODULE_USB_SERVICE, "ReloadNativeTokenInfo success %{public}d", __LINE__);
208     } else {
209         USB_HILOGE(MODULE_USB_SERVICE, "ReloadNativeTokenInfo fail %{public}d", ret);
210     }
211 }
212 
DeleteAllocHapToken(AccessTokenID tokenId)213 void UsbCommonTest::DeleteAllocHapToken(AccessTokenID tokenId)
214 {
215     auto ret = AccessTokenKit::DeleteToken(tokenId);
216     if (ret == 0) {
217         USB_HILOGI(MODULE_USB_SERVICE, "DeleteToken success tokenId: %{public}d", tokenId);
218     } else {
219         USB_HILOGE(MODULE_USB_SERVICE, "DeleteToken fail %{public}d, tokenId: %{public}d", ret, tokenId);
220     }
221 }
222 
SwitchErrCode(int32_t ret)223 int32_t UsbCommonTest::SwitchErrCode(int32_t ret)
224 {
225     return ret == UEC_SERVICE_NOT_SUPPORT_SWITCH_PORT ? UEC_OK : ret;
226 }
227 
228 } // namespace Common
229 } // namespace USB
230 } // namespace OHOS
231