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