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 TransPermissionDeinit();
59 }
60
61 /**
62 * @tc.name: DynamicPermissionTest001
63 * @tc.desc: Grant dynamic permission, use invalid params.
64 * @tc.type: FUNC
65 * @tc.require:
66 */
67 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest001, TestSize.Level0)
68 {
69 std::shared_ptr<ISessionService> softbusManager = ISessionService::GetInstance();
70 ASSERT_NE(softbusManager, nullptr);
71
72 int ret = softbusManager->GrantPermission(g_permUid, g_permPid, g_permSessionName);
73 ASSERT_NE(ret, SOFTBUS_OK);
74 }
75
76 /**
77 * @tc.name: DynamicPermissionTest002
78 * @tc.desc: Remove dynamic permission, use invalid params.
79 * @tc.type: FUNC
80 * @tc.require:
81 */
82 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest002, TestSize.Level0)
83 {
84 std::shared_ptr<ISessionService> softbusManager = ISessionService::GetInstance();
85 ASSERT_NE(softbusManager, nullptr);
86
87 int ret = softbusManager->RemovePermission(g_permSessionName);
88 ASSERT_NE(ret, SOFTBUS_OK);
89 }
90
91 /**
92 * @tc.name: DynamicPermissionTest003
93 * @tc.desc: AddDynamicPermission success.
94 * @tc.type: FUNC
95 * @tc.require:
96 */
97 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest003, TestSize.Level0)
98 {
99 int ret = AddDynamicPermission(g_permUid, g_permPid, g_permSessionName.c_str());
100 ASSERT_EQ(ret, SOFTBUS_OK);
101 }
102
103 /**
104 * @tc.name: DynamicPermissionTest004
105 * @tc.desc: DeleteDynamicPermission success.
106 * @tc.type: FUNC
107 * @tc.require:
108 */
109 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest004, TestSize.Level0)
110 {
111 int ret = DeleteDynamicPermission(g_permSessionName.c_str());
112 ASSERT_EQ(ret, SOFTBUS_OK);
113 }
114
115 /**
116 * @tc.name: DynamicPermissionTest005
117 * @tc.desc: Dynamic permission reach the upper limit.
118 * @tc.type: FUNC
119 * @tc.require:
120 */
121 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest005, TestSize.Level0)
122 {
123 int testPid = 10000;
124 int ret = 0;
125 int expectRet = SOFTBUS_OK;
126 int testNum = 99;
127
128 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(g_permPid);
129 ret = AddDynamicPermission(g_permUid, g_permPid, sessionName.c_str());
130 ASSERT_EQ(ret, SOFTBUS_OK);
131
132 for (int i = 0; i < testNum; i++) {
133 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
134 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
135 ASSERT_EQ(ret, expectRet);
136 testPid++;
137 }
138
139 expectRet = SOFTBUS_NO_ENOUGH_DATA;
140 for (int i = 0; i < testNum; i++) {
141 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
142 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
143 ASSERT_EQ(ret, expectRet);
144 }
145
146 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(g_permPid);
147 ret = DeleteDynamicPermission(sessionName.c_str());
148 ASSERT_EQ(ret, SOFTBUS_OK);
149
150 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
151 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
152 ASSERT_EQ(ret, SOFTBUS_OK);
153
154 ret = DeleteDynamicPermission(sessionName.c_str());
155 ASSERT_EQ(ret, SOFTBUS_OK);
156 testPid--;
157 for (int i = 0; i < testNum; i++) {
158 sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
159 testPid--;
160 ret = DeleteDynamicPermission(sessionName.c_str());
161 ASSERT_EQ(ret, SOFTBUS_OK) << sessionName;
162 }
163 }
164
165 /**
166 * @tc.name: DynamicPermissionTest006
167 * @tc.desc: Check trans open permission.
168 * @tc.type: FUNC
169 * @tc.require:
170 */
171 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest006, TestSize.Level0)
172 {
173 int testPid = 10000;
174 int ret = 0;
175 int testNum = 100;
176
177 for (int i = 0; i < testNum; i++) {
178 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
179 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
180 ASSERT_NE(ret, SOFTBUS_OK);
181 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
182 ASSERT_EQ(ret, SOFTBUS_OK);
183
184 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
185 ASSERT_EQ(ret, SOFTBUS_OK) << "sessionName: " << sessionName.c_str();
186 ret = CheckTransSecLevel(sessionName.c_str(), sessionName.c_str());
187 ASSERT_EQ(ret, SOFTBUS_OK);
188
189 testPid++;
190 }
191 testPid--;
192 for (int i = 0; i < testNum; i++) {
193 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
194 ret = DeleteDynamicPermission(sessionName.c_str());
195 ASSERT_EQ(ret, SOFTBUS_OK);
196
197 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
198 ASSERT_NE(ret, SOFTBUS_OK);
199
200 testPid--;
201 }
202 }
203
204 /**
205 * @tc.name: DynamicPermissionTest007
206 * @tc.desc: Repeated call AddDynamicPermission and DeleteDynamicPermission.
207 * @tc.type: FUNC
208 * @tc.require:
209 */
210 HWTEST_F(TransDynamicPermissionTest, DynamicPermissionTest007, TestSize.Level0)
211 {
212 int testPid = 17258;
213 int ret = 0;
214 int testNum = 100;
215 std::string sessionName = "DBinder" + std::to_string(g_permUid) + std::string("_") + std::to_string(testPid);
216
217 for (int i = 0; i < testNum; i++) {
218 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
219 ASSERT_NE(ret, SOFTBUS_OK);
220 ret = AddDynamicPermission(g_permUid, testPid, sessionName.c_str());
221 ASSERT_EQ(ret, SOFTBUS_OK);
222
223 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
224 ASSERT_EQ(ret, SOFTBUS_OK) << "sessionName: " << sessionName.c_str();
225 ret = CheckTransSecLevel(sessionName.c_str(), sessionName.c_str());
226 ASSERT_EQ(ret, SOFTBUS_OK);
227
228 ret = DeleteDynamicPermission(sessionName.c_str());
229 ASSERT_EQ(ret, SOFTBUS_OK);
230
231 ret = CheckTransPermission(g_permUid, testPid, "DBinderBus", sessionName.c_str(), ACTION_OPEN);
232 ASSERT_NE(ret, SOFTBUS_OK);
233 }
234 }
235 } // namespace OHOS