1 /*
2 * Copyright (c) 2024-2025 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 <cinttypes>
17 #include <gtest/gtest.h>
18 #include <securec.h>
19 #include <sys/time.h>
20
21 #include "auth_common.h"
22 #include "auth_session_key.h"
23 #include "softbus_adapter_mem.h"
24
25 namespace OHOS {
26 using namespace testing::ext;
27 constexpr uint32_t SESSIONKEY_LEN = 32;
28 constexpr int32_t SESSIONKEY_INDEX = 1;
29 constexpr int32_t SESSIONKEY_INDEX2 = 2;
30
31 class AuthSessionKeyTest : public testing::Test {
32 public:
33 static void SetUpTestCase();
34 static void TearDownTestCase();
35 void SetUp();
36 void TearDown();
37 };
38
SetUpTestCase()39 void AuthSessionKeyTest::SetUpTestCase()
40 {
41 AuthCommonInit();
42 }
43
TearDownTestCase()44 void AuthSessionKeyTest::TearDownTestCase()
45 {
46 AuthCommonDeinit();
47 }
48
SetUp()49 void AuthSessionKeyTest::SetUp() { }
50
TearDown()51 void AuthSessionKeyTest::TearDown() { }
52
53 /*
54 * @tc.name: SESSIONKEY_USE_TIME_TEST_001
55 * @tc.desc: sessionkey item useTime test
56 * @tc.type: FUNC
57 * @tc.require:
58 */
59 HWTEST_F(AuthSessionKeyTest, SESSIONKEY_USE_TIME_TEST_001, TestSize.Level1)
60 {
61 SessionKeyList clientList = { 0 };
62 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
63 int32_t type = 0;
64 ListInit(&clientList);
65 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_MAX, false);
66 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
67 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AuthLinkType(type), false);
68 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
69 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_WIFI, false);
70 EXPECT_EQ(ret, SOFTBUS_OK);
71 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
72 EXPECT_EQ(ret, SOFTBUS_OK);
73
74 uint64_t time = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BLE);
75 EXPECT_EQ(time, 0);
76 time = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_WIFI);
77 EXPECT_NE(time, 0);
78 DestroySessionKeyList(&clientList);
79 }
80
81 /*
82 * @tc.name: SESSIONKEY_USE_TIME_TEST_002
83 * @tc.desc: GetLatestSessionKey test
84 * @tc.type: FUNC
85 * @tc.require:
86 */
87 HWTEST_F(AuthSessionKeyTest, SESSIONKEY_USE_TIME_TEST_002, TestSize.Level1)
88 {
89 SessionKeyList clientList = { 0 };
90 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
91 ListInit(&clientList);
92 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_WIFI, false);
93 EXPECT_EQ(ret, SOFTBUS_OK);
94 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
95 EXPECT_EQ(ret, SOFTBUS_OK);
96 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
97 EXPECT_EQ(ret, SOFTBUS_OK);
98 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
99 EXPECT_EQ(ret, SOFTBUS_OK);
100
101 int32_t index = -1;
102 int32_t type = 0;
103 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_MAX, &index, &sessionKey);
104 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
105 ret = GetLatestSessionKey(&clientList, AuthLinkType(type), &index, &sessionKey);
106 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
107 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BR, &index, &sessionKey);
108 EXPECT_NE(ret, SOFTBUS_OK);
109 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
110 EXPECT_EQ(ret, SOFTBUS_OK);
111 EXPECT_TRUE(index == SESSIONKEY_INDEX);
112 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
113 EXPECT_EQ(ret, SOFTBUS_OK);
114 EXPECT_EQ(index, SESSIONKEY_INDEX2);
115 DestroySessionKeyList(&clientList);
116 }
117
118 /*
119 * @tc.name: SESSIONKEY_USE_TIME_TEST_003
120 * @tc.desc: sessionkey item useTime test
121 * @tc.type: FUNC
122 * @tc.require:
123 */
124 HWTEST_F(AuthSessionKeyTest, SESSIONKEY_USE_TIME_TEST_003, TestSize.Level1)
125 {
126 SessionKeyList clientList = { 0 };
127 SessionKeyList serverList = { 0 };
128 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
129 ListInit(&clientList);
130 ListInit(&serverList);
131 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
132 EXPECT_EQ(ret, SOFTBUS_OK);
133 SoftBusSleepMs(100);
134 ret = AddSessionKey(&serverList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
135 EXPECT_EQ(ret, SOFTBUS_OK);
136 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
137 EXPECT_EQ(ret, SOFTBUS_OK);
138 ret = SetSessionKeyAvailable(&serverList, SESSIONKEY_INDEX);
139 EXPECT_EQ(ret, SOFTBUS_OK);
140 SoftBusSleepMs(100);
141
142 int32_t type = 0;
143 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_MAX);
144 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
145 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AuthLinkType(type));
146 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
147 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_BR);
148 EXPECT_EQ(ret, SOFTBUS_OK);
149
150 uint64_t clientTime = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BR);
151 uint64_t serverTime = GetLatestAvailableSessionKeyTime(&serverList, AUTH_LINK_TYPE_BLE);
152 EXPECT_LE(serverTime, clientTime);
153 clientTime = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BLE);
154 EXPECT_GE(serverTime, clientTime);
155 DestroySessionKeyList(&clientList);
156 DestroySessionKeyList(&serverList);
157 }
158
159 /*
160 * @tc.name: UPDATE_LATEST_USE_TIME_TEST_001
161 * @tc.desc: UpdateLatestUseTime test
162 * @tc.type: FUNC
163 * @tc.require:
164 */
165 HWTEST_F(AuthSessionKeyTest, UPDATE_LATEST_USE_TIME_TEST_001, TestSize.Level1)
166 {
167 SessionKeyList clientList = { 0 };
168 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
169 ListInit(&clientList);
170 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
171 EXPECT_EQ(ret, SOFTBUS_OK);
172 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
173 EXPECT_EQ(ret, SOFTBUS_OK);
174 SoftBusSleepMs(100);
175 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
176 EXPECT_EQ(ret, SOFTBUS_OK);
177 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
178 EXPECT_EQ(ret, SOFTBUS_OK);
179 SoftBusSleepMs(100);
180 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_WIFI);
181 EXPECT_EQ(ret, SOFTBUS_OK);
182 SoftBusSleepMs(100);
183 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX2, AUTH_LINK_TYPE_WIFI);
184 EXPECT_EQ(ret, SOFTBUS_OK);
185
186 int32_t index = 0;
187 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
188 EXPECT_EQ(index, SESSIONKEY_INDEX2);
189 RemoveSessionkeyByIndex(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_BLE);
190 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
191 EXPECT_EQ(index, SESSIONKEY_INDEX2);
192 DestroySessionKeyList(&clientList);
193 }
194
195 /*
196 * @tc.name: UPDATE_LATEST_USE_TIME_TEST_002
197 * @tc.desc: UpdateLatestUseTime test
198 * @tc.type: FUNC
199 * @tc.require:
200 */
201 HWTEST_F(AuthSessionKeyTest, UPDATE_LATEST_USE_TIME_TEST_002, TestSize.Level1)
202 {
203 SessionKeyList clientList = { 0 };
204 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
205 ListInit(&clientList);
206 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
207 EXPECT_EQ(ret, SOFTBUS_OK);
208 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
209 EXPECT_EQ(ret, SOFTBUS_OK);
210 SoftBusSleepMs(100);
211 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
212 EXPECT_EQ(ret, SOFTBUS_OK);
213 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
214 EXPECT_EQ(ret, SOFTBUS_OK);
215 SoftBusSleepMs(100);
216 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX2, AUTH_LINK_TYPE_WIFI);
217 EXPECT_EQ(ret, SOFTBUS_OK);
218 SoftBusSleepMs(100);
219 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_WIFI);
220 EXPECT_EQ(ret, SOFTBUS_OK);
221
222 int32_t index = 0;
223 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
224 EXPECT_EQ(index, SESSIONKEY_INDEX);
225 ClearSessionkeyByAuthLinkType(0, &clientList, AUTH_LINK_TYPE_WIFI);
226 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
227 EXPECT_EQ(index, SESSIONKEY_INDEX2);
228 DestroySessionKeyList(&clientList);
229 }
230
231 /*
232 * @tc.name: OLD_SESSION_KEY_TEST_001
233 * @tc.desc: CheckSessionKeyListHasOldKey and ClearOldKey test
234 * @tc.type: FUNC
235 * @tc.require:
236 */
237 HWTEST_F(AuthSessionKeyTest, OLD_SESSION_KEY_TEST_001, TestSize.Level1)
238 {
239 SessionKeyList clientList = { 0 };
240 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
241 ListInit(&clientList);
242 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, true);
243 EXPECT_EQ(ret, SOFTBUS_OK);
244 EXPECT_EQ(CheckSessionKeyListHasOldKey(&clientList, AUTH_LINK_TYPE_BLE), true);
245 EXPECT_EQ(ClearOldKey(&clientList, AUTH_LINK_TYPE_BLE), SOFTBUS_OK);
246 EXPECT_EQ(CheckSessionKeyListHasOldKey(&clientList, AUTH_LINK_TYPE_BLE), false);
247 DestroySessionKeyList(&clientList);
248 }
249 } // namespace OHOS
250