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