• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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