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