1 /*
2 * Copyright (c) 2025 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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18 #include "access_token_mock.h"
19 #include "meta_data_manager_mock.h"
20 #include "permit_delegate.h"
21 #include "metadata/store_meta_data.h"
22 #include "metadata/appid_meta_data.h"
23
24 namespace OHOS::DistributedData {
25 using namespace OHOS::Security::AccessToken;
26 using namespace std;
27 using namespace testing;
28 using ActiveParam = DistributedDB::ActivationCheckParam;
29 using CheckParam = DistributedDB::PermissionCheckParam;
30 class PermitDelegateMockTest : public testing::Test {
31 public:
32 static void SetUpTestCase(void);
33 static void TearDownTestCase(void);
34 void SetUp();
35 void TearDown();
36 public:
37 static inline shared_ptr<AccessTokenKitMock> accessTokenKitMock = nullptr;
38 static inline shared_ptr<MetaDataManagerMock> metaDataMgrMock = nullptr;
39 };
40
SetUpTestCase(void)41 void PermitDelegateMockTest::SetUpTestCase(void)
42 {
43 accessTokenKitMock = make_shared<AccessTokenKitMock>();
44 BAccessTokenKit::accessTokenkit = accessTokenKitMock;
45 metaDataMgrMock = make_shared<MetaDataManagerMock>();
46 BMetaDataManager::metaDataManager = metaDataMgrMock;
47 }
48
TearDownTestCase(void)49 void PermitDelegateMockTest::TearDownTestCase(void)
50 {
51 BAccessTokenKit::accessTokenkit = nullptr;
52 accessTokenKitMock = nullptr;
53 BMetaDataManager::metaDataManager = nullptr;
54 metaDataMgrMock = nullptr;
55 }
56
SetUp(void)57 void PermitDelegateMockTest::SetUp(void)
58 {}
59
TearDown(void)60 void PermitDelegateMockTest::TearDown(void)
61 {}
62
63 /**
64 * @tc.name: SyncActivate001
65 * @tc.desc: sync Activate.
66 * @tc.type: FUNC
67 * @tc.require:
68 * @tc.author: caozhijun
69 */
70 HWTEST_F(PermitDelegateMockTest, SyncActivate001, testing::ext::TestSize.Level0)
71 {
72 ActiveParam activeParam = {
73 .userId = "activeparam",
74 .appId = "appid",
75 .storeId = "storeid",
76 .subUserId = "subactiveparam",
77 .instanceId = 1
78 };
79 PermitDelegate::GetInstance().Init();
80 bool result = PermitDelegate::GetInstance().SyncActivate(activeParam);
81 EXPECT_FALSE(result);
82 }
83
84
85 /**
86 * @tc.name: SyncActivate002
87 * @tc.desc: sync Activate.
88 * @tc.type: FUNC
89 * @tc.require:
90 * @tc.author: caozhijun
91 */
92 HWTEST_F(PermitDelegateMockTest, SyncActivate002, testing::ext::TestSize.Level0)
93 {
94 ActiveParam activeParam = {
95 .userId = "1",
96 .appId = "",
97 .storeId = "",
98 .subUserId = "subuserid",
99 .instanceId = 0
100 };
101 EXPECT_CALL(*accessTokenKitMock, GetTokenTypeFlag(_)).Times(AnyNumber());
102 bool result = PermitDelegate::GetInstance().SyncActivate(activeParam);
103 EXPECT_FALSE(result);
104 }
105
106 /**
107 * @tc.name: VerifyPermission_001
108 * @tc.desc: verify permission.
109 * @tc.type: FUNC
110 * @tc.require:
111 * @tc.author: caozhijun
112 */
113 HWTEST_F(PermitDelegateMockTest, VerifyPermission_001, testing::ext::TestSize.Level0)
114 {
115 std::string permission = "";
116 uint32_t tokenId = 1;
117 bool result = PermitDelegate::GetInstance().VerifyPermission(permission, tokenId);
118 EXPECT_TRUE(result);
119 }
120
121 /**
122 * @tc.name: VerifyPermission_002
123 * @tc.desc: verify permission.
124 * @tc.type: FUNC
125 * @tc.require:
126 * @tc.author: caozhijun
127 */
128 HWTEST_F(PermitDelegateMockTest, VerifyPermission_002, testing::ext::TestSize.Level0)
129 {
130 std::string permission = "premmit002";
131 uint32_t tokenId = 1;
132 EXPECT_CALL(*accessTokenKitMock, VerifyAccessToken(_, _))
133 .WillOnce(Return(PermissionState::PERMISSION_GRANTED));
134 bool result = PermitDelegate::GetInstance().VerifyPermission(permission, tokenId);
135 EXPECT_TRUE(result);
136 }
137
138 /**
139 * @tc.name: VerifyPermission_003
140 * @tc.desc: verify permission.
141 * @tc.type: FUNC
142 * @tc.require:
143 * @tc.author: caozhijun
144 */
145 HWTEST_F(PermitDelegateMockTest, VerifyPermission_003, testing::ext::TestSize.Level0)
146 {
147 std::string permission = "premmit003";
148 uint32_t tokenId = 0;
149 EXPECT_CALL(*accessTokenKitMock, VerifyAccessToken(_, _))
150 .WillOnce(Return(PermissionState::PERMISSION_DENIED));
151 bool result = PermitDelegate::GetInstance().VerifyPermission(permission, tokenId);
152 EXPECT_FALSE(result);
153 }
154
155 /**
156 * @tc.name: VerifyPermission001
157 * @tc.desc: verify permission.
158 * @tc.type: OVERRIDE FUNC
159 * @tc.require:
160 * @tc.author: caozhijun
161 */
162 HWTEST_F(PermitDelegateMockTest, VerifyPermission001, testing::ext::TestSize.Level0)
163 {
164 bool result = PermitDelegate::GetInstance().appId2BundleNameMap_.Insert("Permission001", "");
165 ASSERT_TRUE(result);
166 AppIDMetaData appMeta("permitdelegatemocktestId", "com.permitdelegatetest.app");
167 EXPECT_CALL(*metaDataMgrMock, LoadMeta(_, _, _)).WillOnce(DoAll(SetArgReferee<1>(appMeta), Return(true)));
168 CheckParam checkParam = {
169 .appId = "permitdelegatemocktestId",
170 .userId = "userid",
171 .storeId = "storeid",
172 .deviceId = "deviceid",
173 .instanceId = 1
174 };
175 uint8_t flag = 1;
176 EXPECT_CALL(*metaDataMgrMock, LoadMeta(_, _, false)).WillOnce(Return(false));
177 result = PermitDelegate::GetInstance().VerifyPermission(checkParam, flag);
178 EXPECT_FALSE(result);
179 }
180
181 /**
182 * @tc.name: VerifyPermission002
183 * @tc.desc: verify permission.
184 * @tc.type: OVERRIDE FUNC
185 * @tc.require:
186 * @tc.author: caozhijun
187 */
188 HWTEST_F(PermitDelegateMockTest, VerifyPermission002, testing::ext::TestSize.Level0)
189 {
190 std::string key = "Permission002";
191 std::string value = "com.permitDelegateUnitTest.app";
192 PermitDelegate::GetInstance().appId2BundleNameMap_.Insert(key, value);
193 auto ret = PermitDelegate::GetInstance().appId2BundleNameMap_.Find(key);
194 ASSERT_TRUE(ret.second == value);
195 CheckParam checkParam = {
196 .appId = "permitdelegatemocktestId2",
197 .userId = "userid2",
198 .storeId = "storeid2",
199 .deviceId = "deviceid2",
200 .instanceId = 0
201 };
202 uint8_t flag = 1;
203 EXPECT_CALL(*metaDataMgrMock, LoadMeta(_, _, _)).WillRepeatedly(Return(true));
204 EXPECT_CALL(*accessTokenKitMock, VerifyAccessToken(_, _))
205 .WillOnce(Return(PermissionState::PERMISSION_GRANTED));
206 bool result = PermitDelegate::GetInstance().VerifyPermission(checkParam, flag);
207 EXPECT_TRUE(result);
208 }
209 }