• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "get_native_token_info_test.h"
17 #include "gtest/gtest.h"
18 #include <thread>
19 #include <unistd.h>
20 
21 #include "access_token.h"
22 #include "access_token_error.h"
23 #include "accesstoken_common_log.h"
24 #include "iaccess_token_manager.h"
25 #include "permission_grant_info.h"
26 #include "permission_state_change_info_parcel.h"
27 #include "string_ex.h"
28 #include "test_common.h"
29 #include "tokenid_kit.h"
30 #include "token_setproc.h"
31 
32 using namespace testing::ext;
33 namespace OHOS {
34 namespace Security {
35 namespace AccessToken {
36 namespace {
37 static uint64_t g_selfTokenId = 0;
38 static const std::string TEST_BUNDLE_NAME = "ohos";
39 static const int TEST_USER_ID = 0;
40 static int32_t g_selfUid;
41 };
42 
SetUpTestCase()43 void GetNativeTokenInfoTest::SetUpTestCase()
44 {
45     g_selfTokenId = GetSelfTokenID();
46     TestCommon::SetTestEvironment(g_selfTokenId);
47 
48     // clean up test cases
49     AccessTokenIDEx tokenIdEx = TestCommon::GetHapTokenIdFromBundle(TEST_USER_ID, TEST_BUNDLE_NAME, 0);
50     TestCommon::DeleteTestHapToken(tokenIdEx.tokenIdExStruct.tokenID);
51 }
52 
TearDownTestCase()53 void GetNativeTokenInfoTest::TearDownTestCase()
54 {
55     AccessTokenIDEx tokenIdEx = TestCommon::GetHapTokenIdFromBundle(TEST_USER_ID, TEST_BUNDLE_NAME, 0);
56     TestCommon::DeleteTestHapToken(tokenIdEx.tokenIdExStruct.tokenID);
57 
58     SetSelfTokenID(g_selfTokenId);
59     TestCommon::ResetTestEvironment();
60 }
61 
SetUp()62 void GetNativeTokenInfoTest::SetUp()
63 {
64     LOGI(ATM_DOMAIN, ATM_TAG, "SetUp ok.");
65 
66     setuid(0);
67     HapInfoParams info = {
68         .userID = TEST_USER_ID,
69         .bundleName = TEST_BUNDLE_NAME,
70         .instIndex = 0,
71         .appIDDesc = "appIDDesc",
72         .apiVersion = 8
73     };
74 
75     HapPolicyParams policy = {
76         .apl = APL_NORMAL,
77         .domain = "domain"
78     };
79     AccessTokenIDEx tokenIdEx = {0};
80     ASSERT_EQ(RET_SUCCESS, TestCommon::AllocTestHapToken(info, policy, tokenIdEx));
81     ASSERT_NE(tokenIdEx.tokenIdExStruct.tokenID, INVALID_TOKENID);
82 }
83 
TearDown()84 void GetNativeTokenInfoTest::TearDown()
85 {
86     AccessTokenIDEx tokenIdEx = TestCommon::GetHapTokenIdFromBundle(TEST_USER_ID, TEST_BUNDLE_NAME, 0);
87     TestCommon::DeleteTestHapToken(tokenIdEx.tokenIdExStruct.tokenID);
88 }
89 
90 /**
91  * @tc.name: GetNativeTokenInfoAbnormalTest001
92  * @tc.desc: cannot get native token with invalid tokenID(0).
93  * @tc.type: FUNC
94  * @tc.require: Issue Number
95  */
96 HWTEST_F(GetNativeTokenInfoTest, GeTokenInfoAbnormalTest001, TestSize.Level0)
97 {
98     LOGI(ATM_DOMAIN, ATM_TAG, "GeTokenInfoAbnormalTest001");
99     AccessTokenID tokenID = 0;
100     NativeTokenInfo nativeInfo;
101     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetNativeTokenInfo(tokenID, nativeInfo));
102 
103     HapTokenInfo hapInfo;
104     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetHapTokenInfo(tokenID, hapInfo));
105 }
106 
107 /**
108  * @tc.name: GetTokenInfoAbnormalTest002
109  * @tc.desc: 1. cannot get native token with invalid tokenID(hap); 1. cannot get hap token with invalid tokenID(native)
110  * @tc.type: FUNC
111  * @tc.require: Issue Number
112  */
113 HWTEST_F(GetNativeTokenInfoTest, GetTokenInfoAbnormalTest002, TestSize.Level0)
114 {
115     LOGI(ATM_DOMAIN, ATM_TAG, "GetNativeTokenInfoAbnormalTest002");
116     MockNativeToken mock("accesstoken_service");
117 
118     AccessTokenIDEx tokenIdEx = TestCommon::GetHapTokenIdFromBundle(TEST_USER_ID, TEST_BUNDLE_NAME, 0);
119     AccessTokenID tokenHap = tokenIdEx.tokenIdExStruct.tokenID;
120     ASSERT_NE(INVALID_TOKENID, tokenHap);
121     AccessTokenID tokenNative = AccessTokenKit::GetNativeTokenId("token_sync_service");
122     ASSERT_NE(INVALID_TOKENID, tokenNative);
123 
124     NativeTokenInfo nativeInfo;
125     HapTokenInfo hapInfo;
126     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetNativeTokenInfo(tokenHap, nativeInfo));
127     ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GetHapTokenInfo(tokenHap, hapInfo));
128 
129 
130     ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GetNativeTokenInfo(tokenNative, nativeInfo));
131     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetHapTokenInfo(tokenNative, hapInfo));
132 }
133 
134 /**
135  * @tc.name: GetTokenInfoAbnormalTest003
136  * @tc.desc: GetNativeTokenInfo with no permission
137  * @tc.type: FUNC
138  * @tc.require:
139  */
140 HWTEST_F(GetNativeTokenInfoTest, GetTokenInfoAbnormalTest003, TestSize.Level0)
141 {
142     LOGI(ATM_DOMAIN, ATM_TAG, "GetNativeTokenInfoAbnormalTest002");
143     g_selfUid = getuid();
144     setuid(1234); // 1234: UID
145 
146     AccessTokenID tokenId = 805920561; //805920561 is a native tokenId.
147     NativeTokenInfo tokenInfo;
148     ASSERT_EQ(AccessTokenError::ERR_PERMISSION_DENIED, AccessTokenKit::GetNativeTokenInfo(tokenId, tokenInfo));
149 
150     HapTokenInfo hapInfo;
151     ASSERT_EQ(AccessTokenError::ERR_PERMISSION_DENIED, AccessTokenKit::GetNativeTokenInfo(tokenId, tokenInfo));
152 
153     setuid(g_selfUid);
154 }
155 
156 /**
157  * @tc.name: GetNativeTokenInfoFuncTest001
158  * @tc.desc: Get token info success.
159  * @tc.type: FUNC
160  * @tc.require: Issue Number
161  */
162 HWTEST_F(GetNativeTokenInfoTest, GetNativeTokenInfoFuncTest001, TestSize.Level0)
163 {
164     LOGI(ATM_DOMAIN, ATM_TAG, "GetNativeTokenInfoFuncTest001");
165     MockNativeToken mock("accesstoken_service");
166     AccessTokenIDEx tokenIdEx = TestCommon::GetHapTokenIdFromBundle(TEST_USER_ID, TEST_BUNDLE_NAME, 0);
167     AccessTokenID tokenHap = tokenIdEx.tokenIdExStruct.tokenID;
168     ASSERT_NE(INVALID_TOKENID, tokenHap);
169 
170     AccessTokenID tokenNative = AccessTokenKit::GetNativeTokenId("token_sync_service");
171     ASSERT_NE(INVALID_TOKENID, tokenNative);
172 
173     NativeTokenInfo nativeInfo;
174     HapTokenInfo hapInfo;
175 
176     ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GetHapTokenInfo(tokenHap, hapInfo));
177     ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GetNativeTokenInfo(tokenNative, nativeInfo));
178 
179 
180     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetNativeTokenInfo(tokenHap, nativeInfo));
181     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID, AccessTokenKit::GetHapTokenInfo(tokenNative, hapInfo));
182 }
183 } // namespace AccessToken
184 } // namespace Security
185 } // namespace OHOS