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 <cinttypes>
17 #include <cstdio>
18 
19 #include <gtest/gtest.h>
20 #include "ipc_skeleton.h"
21 #include "mmi_log.h"
22 #include "proto.h"
23 #include "tokenid_kit.h"
24 
25 #include "define_multimodal.h"
26 #include "permission_helper.h"
27 #include "uds_server.h"
28 
29 namespace OHOS {
30 namespace MMI {
31 namespace {
32 using namespace testing::ext;
33 const std::string INPUT_MONITORING = "ohos.permission.INPUT_MONITORING";
34 const std::string INPUT_INTERCEPTOR = "ohos.permission.INTERCEPT_INPUT_EVENT";
35 const std::string INPUT_DISPATCHCONTROL = "ohos.permission.INPUT_CONTROL_DISPATCHING";
36 } // namespace
37 
38 class PermissionHelperTest : public testing::Test {
39 public:
SetUpTestCase(void)40     static void SetUpTestCase(void) {}
TearDownTestCase(void)41     static void TearDownTestCase(void) {}
42 };
43 
44 /**
45  * @tc.name: PermissionHelperTest_GetTokenType
46  * @tc.desc: Test GetTokenType
47  * @tc.type: FUNC
48  * @tc.require:
49  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_GetTokenType, TestSize.Level1)50 HWTEST_F(PermissionHelperTest, PermissionHelperTest_GetTokenType, TestSize.Level1)
51 {
52     CALL_TEST_DEBUG;
53     uint32_t tokenId = 1;
54     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
55     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
56     int32_t result1 = PER_HELPER->GetTokenType();
57     EXPECT_EQ(result1, 2);
58 
59     tokenId = 2;
60     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
61     int32_t result2 = PER_HELPER->GetTokenType();
62     EXPECT_EQ(result2, 2);
63 
64     tokenId = 3;
65     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
66     int32_t result3 = PER_HELPER->GetTokenType();
67     EXPECT_EQ(result3, 2);
68 
69     tokenId = 4;
70     tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
71     int32_t result4 = PER_HELPER->GetTokenType();
72     EXPECT_EQ(result4, 2);
73 }
74 
75 /**
76  * @tc.name: PermissionHelperTest_CheckDispatchControl_01
77  * @tc.desc: Test CheckDispatchControl
78  * @tc.type: FUNC
79  * @tc.require:
80  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckDispatchControl_01, TestSize.Level1)81 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckDispatchControl_01, TestSize.Level1)
82 {
83     CALL_TEST_DEBUG;
84     uint32_t tokenId = 1;
85     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
86     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
87     bool result1 = PER_HELPER->CheckDispatchControl();
88     EXPECT_TRUE(result1);
89 
90     tokenId = 1;
91     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
92     bool result2 = PER_HELPER->CheckDispatchControl();
93     EXPECT_TRUE(result2);
94 
95     tokenId = 3;
96     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
97     bool result3 = PER_HELPER->CheckDispatchControl();
98     EXPECT_TRUE(result3);
99 
100     tokenId = 4;
101     tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
102     bool result4 = PER_HELPER->CheckDispatchControl();
103     EXPECT_TRUE(result4);
104 }
105 
106 /**
107  * @tc.name: PermissionHelperTest_CheckHapPermission_01
108  * @tc.desc: Test CheckHapPermission
109  * @tc.type: FUNC
110  * @tc.require:
111  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_01, TestSize.Level1)112 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_01, TestSize.Level1)
113 {
114     CALL_TEST_DEBUG;
115     uint32_t tokenId = 3;
116     std::string permissionCode = "access";
117     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
118     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
119     bool result = PER_HELPER->CheckHapPermission(tokenId, permissionCode);
120     ASSERT_FALSE(result);
121 }
122 
123 /**
124  * @tc.name: PermissionHelperTest_CheckHapPermission_02
125  * @tc.desc: Test CheckHapPermission
126  * @tc.type: FUNC
127  * @tc.require:
128  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_02, TestSize.Level1)129 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_02, TestSize.Level1)
130 {
131     CALL_TEST_DEBUG;
132     uint32_t tokenId = 2;
133     std::string permissionCode = "access";
134     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
135     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
136     bool result = PER_HELPER->CheckHapPermission(tokenId, permissionCode);
137     ASSERT_FALSE(result);
138 }
139 
140 /**
141  * @tc.name: PermissionHelperTest_CheckHapPermission_03
142  * @tc.desc: Test CheckHapPermission
143  * @tc.type: FUNC
144  * @tc.require:
145  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_03, TestSize.Level1)146 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_03, TestSize.Level1)
147 {
148     CALL_TEST_DEBUG;
149     uint32_t tokenId = 6;
150     std::string permissionCode = "access";
151     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
152     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
153     bool result = PER_HELPER->CheckHapPermission(tokenId, permissionCode);
154     ASSERT_FALSE(result);
155 }
156 
157 /**
158  * @tc.name: PermissionHelperTest_CheckHapPermission_04
159  * @tc.desc: Test CheckHapPermission
160  * @tc.type: FUNC
161  * @tc.require:
162  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_04, TestSize.Level1)163 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_04, TestSize.Level1)
164 {
165     CALL_TEST_DEBUG;
166     uint32_t tokenId = 5;
167     std::string permissionCode = "access denied";
168     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
169     tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
170     bool result = PER_HELPER->CheckHapPermission(tokenId, permissionCode);
171     ASSERT_FALSE(result);
172 }
173 
174 /**
175  * @tc.name: PermissionHelperTest_CheckHapPermission_06
176  * @tc.desc: Test CheckHapPermission
177  * @tc.type: FUNC
178  * @tc.require:
179  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_06, TestSize.Level1)180 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_06, TestSize.Level1)
181 {
182     CALL_TEST_DEBUG;
183     uint32_t tokenId = 3;
184     std::string permissionCode = "access";
185     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
186     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
187     bool result = PER_HELPER->CheckHapPermission(permissionCode);
188     ASSERT_TRUE(result);
189 }
190 
191 /**
192  * @tc.name: PermissionHelperTest_CheckHapPermission_07
193  * @tc.desc: Test CheckHapPermission
194  * @tc.type: FUNC
195  * @tc.require:
196  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_07, TestSize.Level1)197 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_07, TestSize.Level1)
198 {
199     CALL_TEST_DEBUG;
200     uint32_t tokenId = 2;
201     std::string permissionCode = "access";
202     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
203     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
204 
205     int32_t ret = OHOS::Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenId, permissionCode);
206     ret = OHOS::Security::AccessToken::PERMISSION_GRANTED;
207     bool result = PER_HELPER->CheckHapPermission(permissionCode);
208     ASSERT_TRUE(result);
209 }
210 
211 /**
212  * @tc.name: PermissionHelperTest_CheckHapPermission_08
213  * @tc.desc: Test CheckHapPermission
214  * @tc.type: FUNC
215  * @tc.require:
216  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_08, TestSize.Level1)217 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckHapPermission_08, TestSize.Level1)
218 {
219     CALL_TEST_DEBUG;
220     uint32_t tokenId = 3;
221     std::string permissionCode = "access";
222     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
223     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
224     bool result = PER_HELPER->CheckHapPermission(permissionCode);
225     ASSERT_TRUE(result);
226 }
227 
228 /**
229  * @tc.name: PermissionHelperTest_VerifySystemApp_01
230  * @tc.desc: Test VerifySystemApp
231  * @tc.type: FUNC
232  * @tc.require:
233  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_VerifySystemApp_01, TestSize.Level1)234 HWTEST_F(PermissionHelperTest, PermissionHelperTest_VerifySystemApp_01, TestSize.Level1)
235 {
236     CALL_TEST_DEBUG;
237     uint32_t callerToken = 3;
238     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
239     tokenType = OHOS::Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE;
240     bool result = PER_HELPER->VerifySystemApp();
241     EXPECT_TRUE(result);
242 }
243 
244 /**
245  * @tc.name: PermissionHelperTest_VerifySystemApp_02
246  * @tc.desc: Test VerifySystemApp
247  * @tc.type: FUNC
248  * @tc.require:
249  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_VerifySystemApp_02, TestSize.Level1)250 HWTEST_F(PermissionHelperTest, PermissionHelperTest_VerifySystemApp_02, TestSize.Level1)
251 {
252     CALL_TEST_DEBUG;
253     uint32_t callerToken = 5;
254     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
255     tokenType = OHOS::Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL;
256     bool result = PER_HELPER->VerifySystemApp();
257     EXPECT_TRUE(result);
258 }
259 
260 /**
261  * @tc.name: PermissionHelperTest_CheckMonitor
262  * @tc.desc: Test CheckMonitor
263  * @tc.type: FUNC
264  * @tc.require:
265  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckMonitor, TestSize.Level1)266 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckMonitor, TestSize.Level1)
267 {
268     CALL_TEST_DEBUG;
269     uint32_t tokenId = 1;
270     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
271     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
272     bool result1 = PER_HELPER->CheckMonitor();
273     EXPECT_TRUE(result1);
274 
275     tokenId = 2;
276     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
277     bool result2 = PER_HELPER->CheckMonitor();
278     EXPECT_TRUE(result2);
279 
280     tokenId = 3;
281     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
282     bool result3 = PER_HELPER->CheckMonitor();
283     EXPECT_TRUE(result3);
284 
285     tokenId = 4;
286     tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
287     bool result4 = PER_HELPER->CheckMonitor();
288     EXPECT_TRUE(result4);
289 }
290 
291 /**
292  * @tc.name: PermissionHelperTest_CheckInterceptor
293  * @tc.desc: Test CheckInterceptor
294  * @tc.type: FUNC
295  * @tc.require:
296  */
HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckInterceptor, TestSize.Level1)297 HWTEST_F(PermissionHelperTest, PermissionHelperTest_CheckInterceptor, TestSize.Level1)
298 {
299     CALL_TEST_DEBUG;
300     uint32_t tokenId = 1;
301     auto tokenType = OHOS::Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
302     tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
303     bool result1 = PER_HELPER->CheckInterceptor();
304     EXPECT_TRUE(result1);
305 
306     tokenId = 2;
307     tokenType = OHOS::Security::AccessToken::TOKEN_NATIVE;
308     bool result2 = PER_HELPER->CheckInterceptor();
309     EXPECT_TRUE(result2);
310 
311     tokenId = 3;
312     tokenType = OHOS::Security::AccessToken::TOKEN_SHELL;
313     bool result3 = PER_HELPER->CheckInterceptor();
314     EXPECT_TRUE(result3);
315 
316     tokenId = 4;
317     tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
318     bool result4 = PER_HELPER->CheckInterceptor();
319     EXPECT_TRUE(result4);
320 }
321 } // namespace MMI
322 } // namespace OHOS