1 /*
2 * Copyright (c) 2024 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 ListInit(&clientList);
64 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_WIFI, false);
65 EXPECT_EQ(ret, SOFTBUS_OK);
66 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
67 EXPECT_EQ(ret, SOFTBUS_OK);
68
69 uint64_t time = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BLE);
70 EXPECT_EQ(time, 0);
71 time = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_WIFI);
72 EXPECT_NE(time, 0);
73 DestroySessionKeyList(&clientList);
74 }
75
76 /*
77 * @tc.name: SESSIONKEY_USE_TIME_TEST_002
78 * @tc.desc: GetLatestSessionKey test
79 * @tc.type: FUNC
80 * @tc.require:
81 */
82 HWTEST_F(AuthSessionKeyTest, SESSIONKEY_USE_TIME_TEST_002, TestSize.Level1)
83 {
84 SessionKeyList clientList = { 0 };
85 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
86 ListInit(&clientList);
87 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_WIFI, false);
88 EXPECT_EQ(ret, SOFTBUS_OK);
89 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
90 EXPECT_EQ(ret, SOFTBUS_OK);
91 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
92 EXPECT_EQ(ret, SOFTBUS_OK);
93 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
94 EXPECT_EQ(ret, SOFTBUS_OK);
95
96 int32_t index = -1;
97 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BR, &index, &sessionKey);
98 EXPECT_NE(ret, SOFTBUS_OK);
99 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
100 EXPECT_EQ(ret, SOFTBUS_OK);
101 EXPECT_TRUE(index == SESSIONKEY_INDEX);
102 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
103 EXPECT_EQ(ret, SOFTBUS_OK);
104 EXPECT_EQ(index, SESSIONKEY_INDEX2);
105 DestroySessionKeyList(&clientList);
106 }
107
108 /*
109 * @tc.name: SESSIONKEY_USE_TIME_TEST_003
110 * @tc.desc: sessionkey item useTime test
111 * @tc.type: FUNC
112 * @tc.require:
113 */
114 HWTEST_F(AuthSessionKeyTest, SESSIONKEY_USE_TIME_TEST_003, TestSize.Level1)
115 {
116 SessionKeyList clientList = { 0 };
117 SessionKeyList serverList = { 0 };
118 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
119 ListInit(&clientList);
120 ListInit(&serverList);
121 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
122 EXPECT_EQ(ret, SOFTBUS_OK);
123 SoftBusSleepMs(100);
124 ret = AddSessionKey(&serverList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
125 EXPECT_EQ(ret, SOFTBUS_OK);
126 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
127 EXPECT_EQ(ret, SOFTBUS_OK);
128 ret = SetSessionKeyAvailable(&serverList, SESSIONKEY_INDEX);
129 EXPECT_EQ(ret, SOFTBUS_OK);
130 SoftBusSleepMs(100);
131 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_BR);
132 EXPECT_EQ(ret, SOFTBUS_OK);
133
134 uint64_t clientTime = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BR);
135 uint64_t serverTime = GetLatestAvailableSessionKeyTime(&serverList, AUTH_LINK_TYPE_BLE);
136 EXPECT_LE(serverTime, clientTime);
137 clientTime = GetLatestAvailableSessionKeyTime(&clientList, AUTH_LINK_TYPE_BLE);
138 EXPECT_GE(serverTime, clientTime);
139 DestroySessionKeyList(&clientList);
140 DestroySessionKeyList(&serverList);
141 }
142
143 /*
144 * @tc.name: UPDATE_LATEST_USE_TIME_TEST_001
145 * @tc.desc: UpdateLatestUseTime test
146 * @tc.type: FUNC
147 * @tc.require:
148 */
149 HWTEST_F(AuthSessionKeyTest, UPDATE_LATEST_USE_TIME_TEST_001, TestSize.Level1)
150 {
151 SessionKeyList clientList = { 0 };
152 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
153 ListInit(&clientList);
154 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
155 EXPECT_EQ(ret, SOFTBUS_OK);
156 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
157 EXPECT_EQ(ret, SOFTBUS_OK);
158 SoftBusSleepMs(100);
159 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
160 EXPECT_EQ(ret, SOFTBUS_OK);
161 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
162 EXPECT_EQ(ret, SOFTBUS_OK);
163 SoftBusSleepMs(100);
164 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_WIFI);
165 EXPECT_EQ(ret, SOFTBUS_OK);
166 SoftBusSleepMs(100);
167 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX2, AUTH_LINK_TYPE_WIFI);
168 EXPECT_EQ(ret, SOFTBUS_OK);
169
170 int32_t index = 0;
171 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
172 EXPECT_EQ(index, SESSIONKEY_INDEX2);
173 RemoveSessionkeyByIndex(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_BLE);
174 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
175 EXPECT_EQ(index, SESSIONKEY_INDEX2);
176 DestroySessionKeyList(&clientList);
177 }
178
179 /*
180 * @tc.name: UPDATE_LATEST_USE_TIME_TEST_002
181 * @tc.desc: UpdateLatestUseTime test
182 * @tc.type: FUNC
183 * @tc.require:
184 */
185 HWTEST_F(AuthSessionKeyTest, UPDATE_LATEST_USE_TIME_TEST_002, TestSize.Level1)
186 {
187 SessionKeyList clientList = { 0 };
188 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
189 ListInit(&clientList);
190 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, false);
191 EXPECT_EQ(ret, SOFTBUS_OK);
192 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX);
193 EXPECT_EQ(ret, SOFTBUS_OK);
194 SoftBusSleepMs(100);
195 ret = AddSessionKey(&clientList, SESSIONKEY_INDEX2, &sessionKey, AUTH_LINK_TYPE_BLE, false);
196 EXPECT_EQ(ret, SOFTBUS_OK);
197 ret = SetSessionKeyAvailable(&clientList, SESSIONKEY_INDEX2);
198 EXPECT_EQ(ret, SOFTBUS_OK);
199 SoftBusSleepMs(100);
200 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX2, AUTH_LINK_TYPE_WIFI);
201 EXPECT_EQ(ret, SOFTBUS_OK);
202 SoftBusSleepMs(100);
203 ret = SetSessionKeyAuthLinkType(&clientList, SESSIONKEY_INDEX, AUTH_LINK_TYPE_WIFI);
204 EXPECT_EQ(ret, SOFTBUS_OK);
205
206 int32_t index = 0;
207 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_WIFI, &index, &sessionKey);
208 EXPECT_EQ(index, SESSIONKEY_INDEX);
209 ClearSessionkeyByAuthLinkType(0, &clientList, AUTH_LINK_TYPE_WIFI);
210 ret = GetLatestSessionKey(&clientList, AUTH_LINK_TYPE_BLE, &index, &sessionKey);
211 EXPECT_EQ(index, SESSIONKEY_INDEX2);
212 DestroySessionKeyList(&clientList);
213 }
214
215 /*
216 * @tc.name: OLD_SESSION_KEY_TEST_001
217 * @tc.desc: CheckSessionKeyListHasOldKey and ClearOldKey test
218 * @tc.type: FUNC
219 * @tc.require:
220 */
221 HWTEST_F(AuthSessionKeyTest, OLD_SESSION_KEY_TEST_001, TestSize.Level1)
222 {
223 SessionKeyList clientList = { 0 };
224 SessionKey sessionKey = { { 0 }, SESSIONKEY_LEN };
225 ListInit(&clientList);
226 int32_t ret = AddSessionKey(&clientList, SESSIONKEY_INDEX, &sessionKey, AUTH_LINK_TYPE_BLE, true);
227 EXPECT_EQ(ret, SOFTBUS_OK);
228 EXPECT_EQ(CheckSessionKeyListHasOldKey(&clientList, AUTH_LINK_TYPE_BLE), true);
229 EXPECT_EQ(ClearOldKey(&clientList, AUTH_LINK_TYPE_BLE), SOFTBUS_OK);
230 EXPECT_EQ(CheckSessionKeyListHasOldKey(&clientList, AUTH_LINK_TYPE_BLE), false);
231 DestroySessionKeyList(&clientList);
232 }
233 } // namespace OHOS
234
235