1 /*
2 * Copyright (c) 2022 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 <gtest/gtest.h>
17
18 #include "ISessionService.h"
19 #include "permission_entry.h"
20 #include "softbus_errcode.h"
21 #include "softbus_permission.h"
22
23 using namespace testing::ext;
24
25 namespace OHOS {
26 using Communication::SoftBus::ISessionService;
27
28 int g_permUid = 0;
29 int g_permPid = 0;
30 std::string g_permSessionName;
31
32 class TransDynamicPermissionTest : public testing::Test {
33 public:
TransDynamicPermissionTest()34 TransDynamicPermissionTest()
35 {}
~TransDynamicPermissionTest()36 ~TransDynamicPermissionTest()
37 {}
38 static void SetUpTestCase(void);
39 static void TearDownTestCase(void);
SetUp()40 void SetUp() override
41 {}
TearDown()42 void TearDown() override
43 {}
44 };
45
SetUpTestCase(void)46 void TransDynamicPermissionTest::SetUpTestCase(void)
47 {
48 g_permUid = (int)getuid();
49 ASSERT_TRUE(g_permUid >= 0);
50 g_permPid = (int)getpid();
51 ASSERT_TRUE(g_permPid > 0);
52 g_permSessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(g_permPid);
53 ASSERT_EQ(TransPermissionInit(), SOFTBUS_OK);
54 }
55
TearDownTestCase(void)56 void TransDynamicPermissionTest::TearDownTestCase(void)
57 {}
58
59 /**
60 * @tc.name: DynamicPermissionTest001
61 * @tc.desc: Grant dynamic permission, use invalid params.
62 * @tc.type: FUNC
63 * @tc.require:
64 */
65 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest001, TestSize.Level0)
66 {
67 std::shared_ptr<ISessionService> softbusManager = ISessionService::GetInstance();
68 ASSERT_NE(softbusManager, nullptr);
69
70 int ret = softbusManager->GrantPermission(g_permUid, g_permPid, g_permSessionName);
71 ASSERT_NE(ret, SOFTBUS_OK);
72 }
73
74 /**
75 * @tc.name: DynamicPermissionTest002
76 * @tc.desc: Remove dynamic permission, use invalid params.
77 * @tc.type: FUNC
78 * @tc.require:
79 */
80 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest002, TestSize.Level0)
81 {
82 std::shared_ptr<ISessionService> softbusManager = ISessionService::GetInstance();
83 ASSERT_NE(softbusManager, nullptr);
84
85 int ret = softbusManager->RemovePermission(g_permSessionName);
86 ASSERT_NE(ret, SOFTBUS_OK);
87 }
88
89 /**
90 * @tc.name: DynamicPermissionTest003
91 * @tc.desc: AddDynamicPermission success.
92 * @tc.type: FUNC
93 * @tc.require:
94 */
95 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest003, TestSize.Level0)
96 {
97 int ret = AddDynamicPermission(g_permUid, g_permPid, g_permSessionName.c_str());
98 ASSERT_EQ(ret, SOFTBUS_OK);
99 }
100
101 /**
102 * @tc.name: DynamicPermissionTest004
103 * @tc.desc: DeleteDynamicPermission success.
104 * @tc.type: FUNC
105 * @tc.require:
106 */
107 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest004, TestSize.Level0)
108 {
109 int ret = DeleteDynamicPermission(g_permSessionName.c_str());
110 ASSERT_EQ(ret, SOFTBUS_OK);
111 }
112
113 /**
114 * @tc.name: DynamicPermissionTest005
115 * @tc.desc: Dynamic permission reach the upper limit.
116 * @tc.type: FUNC
117 * @tc.require:
118 */
119 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest005, TestSize.Level0)
120 {
121 int testPid = 10000;
122 int ret = 0;
123 int expectRet = SOFTBUS_OK;
124 int testNum = 99;
125
126 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(g_permPid);
127 ret = AddDynamicPermission(g_permUid, g_permPid, sessionName.c_str());
128 ASSERT_EQ(ret, SOFTBUS_OK);
129
130 for (int i = 0; i < testNum; i++) {
131 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
132 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
133 ASSERT_EQ(ret, expectRet);
134 testPid++;
135 }
136
137 expectRet = SOFTBUS_NO_ENOUGH_DATA;
138 for (int i = 0; i < testNum; i++) {
139 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
140 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
141 ASSERT_EQ(ret, expectRet);
142 }
143
144 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(g_permPid);
145 ret = DeleteDynamicPermission(sessionName.c_str());
146 ASSERT_EQ(ret, SOFTBUS_OK);
147
148 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
149 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
150 ASSERT_EQ(ret, SOFTBUS_OK);
151
152 ret = DeleteDynamicPermission(sessionName.c_str());
153 ASSERT_EQ(ret, SOFTBUS_OK);
154 testPid--;
155 for (int i = 0; i < testNum; i++) {
156 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
157 testPid--;
158 ret = DeleteDynamicPermission(sessionName.c_str());
159 ASSERT_EQ(ret, SOFTBUS_OK) << sessionName;
160 }
161 }
162
163 /**
164 * @tc.name: DynamicPermissionTest006
165 * @tc.desc: Check trans open permission.
166 * @tc.type: FUNC
167 * @tc.require:
168 */
169 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest006, TestSize.Level0)
170 {
171 int testPid = 10000;
172 int ret = 0;
173 int testNum = 100;
174
175 for (int i = 0; i < testNum; i++) {
176 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
177 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
178 ASSERT_NE(ret, SOFTBUS_OK);
179 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
180 ASSERT_EQ(ret, SOFTBUS_OK);
181
182 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
183 ASSERT_EQ(ret, SOFTBUS_OK) << "sessionName: " << sessionName.c_str();
184 ret = CheckTransSecLevel(sessionName.c_str(), sessionName.c_str());
185 ASSERT_EQ(ret, SOFTBUS_OK);
186
187 testPid++;
188 }
189 testPid--;
190 for (int i = 0; i < testNum; i++) {
191 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
192 ret = DeleteDynamicPermission(sessionName.c_str());
193 ASSERT_EQ(ret, SOFTBUS_OK);
194
195 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
196 ASSERT_NE(ret, SOFTBUS_OK);
197
198 testPid--;
199 }
200 }
201
202 /**
203 * @tc.name: DynamicPermissionTest007
204 * @tc.desc: Repeated call AddDynamicPermission and DeleteDynamicPermission.
205 * @tc.type: FUNC
206 * @tc.require:
207 */
208 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest007, TestSize.Level0)
209 {
210 int testPid = 17258;
211 int ret = 0;
212 int testNum = 100;
213 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
214
215 for (int i = 0; i < testNum; i++) {
216 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
217 ASSERT_NE(ret, SOFTBUS_OK);
218 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
219 ASSERT_EQ(ret, SOFTBUS_OK);
220
221 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
222 ASSERT_EQ(ret, SOFTBUS_OK) << "sessionName: " << sessionName.c_str();
223 ret = CheckTransSecLevel(sessionName.c_str(), sessionName.c_str());
224 ASSERT_EQ(ret, SOFTBUS_OK);
225
226 ret = DeleteDynamicPermission(sessionName.c_str());
227 ASSERT_EQ(ret, SOFTBUS_OK);
228
229 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
230 ASSERT_NE(ret, SOFTBUS_OK);
231 }
232 }
233 } // namespace OHOS
234