1 /*
2 * Copyright (C) 2023 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 "account_related_group_auth_dir_test.h"
17 #include <cinttypes>
18 #include <unistd.h>
19 #include <gtest/gtest.h>
20
21 using namespace std;
22 using namespace testing::ext;
23
24 namespace {
25 // Beginning for account_related_group_auth.c test.
26 class AccountRelatedGroupAuthTest : public testing::Test {
27 public:
28 static void SetUpTestCase();
29 static void TearDownTestCase();
30 void SetUp();
31 void TearDown();
32 };
33
SetUpTestCase()34 void AccountRelatedGroupAuthTest::SetUpTestCase() {}
35
TearDownTestCase()36 void AccountRelatedGroupAuthTest::TearDownTestCase() {}
37
SetUp()38 void AccountRelatedGroupAuthTest::SetUp()
39 {
40 int ret = InitDeviceAuthService();
41 EXPECT_EQ(ret, HC_SUCCESS);
42 }
43
TearDown()44 void AccountRelatedGroupAuthTest::TearDown()
45 {
46 DestroyDeviceAuthService();
47 }
48
49 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest001, TestSize.Level0)
50 {
51 AccountRelatedGroupAuth *groupAuth = (AccountRelatedGroupAuth *)GetAccountRelatedGroupAuth();
52 ASSERT_NE(groupAuth, nullptr);
53 CJson *param = CreateJson();
54 if (param == nullptr) {
55 return;
56 }
57 QueryGroupParams queryParams;
58 GroupEntryVec vec = CreateGroupEntryVec();
59 (void)groupAuth->getAccountCandidateGroup(0, param, &queryParams, &vec); // For unit test.
60
61 int32_t ret = AddStringToJson(param, FIELD_USER_ID, "unit_test"); // For unit test.
62 EXPECT_EQ(ret, HC_SUCCESS);
63 (void)groupAuth->getAccountCandidateGroup(0, param, &queryParams, &vec); // For unit test.
64 EXPECT_EQ(ret, HC_SUCCESS);
65 FreeJson(param);
66
67 ClearGroupEntryVec(&vec);
68 // Identical group branch can not be dealed.
69 }
70
OnTransmitTrue(int64_t requestId,const uint8_t * data,uint32_t dataLen)71 static bool OnTransmitTrue(int64_t requestId, const uint8_t *data, uint32_t dataLen)
72 {
73 (void)requestId;
74 (void)data;
75 (void)dataLen;
76 return true;
77 }
78
OnTransmitFalse(int64_t requestId,const uint8_t * data,uint32_t dataLen)79 static bool OnTransmitFalse(int64_t requestId, const uint8_t *data, uint32_t dataLen)
80 {
81 (void)requestId;
82 (void)data;
83 (void)dataLen;
84 return false;
85 }
86
OnSessionKeyReturned(int64_t requestId,const uint8_t * sessionKey,uint32_t sessionKeyLen)87 static void OnSessionKeyReturned(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen)
88 {
89 (void)requestId;
90 (void)sessionKey;
91 (void)sessionKeyLen;
92 }
93
OnFinish(int64_t requestId,int operationCode,const char * returnData)94 static void OnFinish(int64_t requestId, int operationCode, const char *returnData)
95 {
96 (void)requestId;
97 (void)operationCode;
98 (void)returnData;
99 }
100
OnError(int64_t requestId,int operationCode,int errorCode,const char * errorReturn)101 static void OnError(int64_t requestId, int operationCode, int errorCode, const char *errorReturn)
102 {
103 (void)requestId;
104 (void)operationCode;
105 (void)errorCode;
106 (void)errorReturn;
107 }
108
OnRequest(int64_t requestId,int operationCode,const char * reqParams)109 static char *OnRequest(int64_t requestId, int operationCode, const char *reqParams)
110 {
111 (void)requestId;
112 (void)operationCode;
113 (void)reqParams;
114 return nullptr;
115 }
116
117 static DeviceAuthCallback g_deviceAuthCallBack = {
118 .onTransmit = OnTransmitTrue,
119 .onSessionKeyReturned = OnSessionKeyReturned,
120 .onFinish = OnFinish,
121 .onError = OnError,
122 .onRequest = OnRequest
123 };
124
125 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest002, TestSize.Level0)
126 {
127 CJson *authParam = CreateJson();
128 if (authParam == nullptr) {
129 return;
130 }
131 CJson *out = CreateJson();
132 if (out == nullptr) {
133 FreeJson(authParam);
134 return;
135 }
136 int32_t ret = HC_SUCCESS;
137 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
138
139 CJson *sendToPeer = CreateJson();
140 if (out == nullptr) {
141 FreeJson(authParam);
142 FreeJson(out);
143 return;
144 }
145 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
146 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
147
148 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
149 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
150 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
151
152 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
153 FreeJson(sendToPeer);
154 FreeJson(out);
155 FreeJson(authParam);
156 EXPECT_EQ(ret, HC_SUCCESS);
157 }
158
159 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0021, TestSize.Level0)
160 {
161 int32_t ret = HC_SUCCESS;
162 CJson *authParam = CreateJson();
163 if (authParam == nullptr) {
164 return;
165 }
166 CJson *out = CreateJson();
167 if (out == nullptr) {
168 FreeJson(authParam);
169 return;
170 }
171 CJson *sendToPeer = CreateJson();
172 if (sendToPeer == nullptr) {
173 FreeJson(authParam);
174 FreeJson(out);
175 return;
176 }
177 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
178
179 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
180 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
181
182 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
183 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
184 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
185
186 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
187
188 g_deviceAuthCallBack.onTransmit = OnTransmitFalse;
189 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
190 FreeJson(sendToPeer);
191 FreeJson(out);
192 FreeJson(authParam);
193 EXPECT_EQ(ret, HC_SUCCESS);
194 }
195
196 // OnAccountFinish -> ReturnSessionKey success branch.
197 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0022, TestSize.Level0)
198 {
199 int32_t ret = HC_SUCCESS;
200 CJson *authParam = CreateJson();
201 if (authParam == nullptr) {
202 return;
203 }
204 CJson *out = CreateJson();
205 if (out == nullptr) {
206 FreeJson(authParam);
207 return;
208 }
209 CJson *sendToPeer = CreateJson();
210 if (sendToPeer == nullptr) {
211 FreeJson(authParam);
212 FreeJson(out);
213 return;
214 }
215
216 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
217 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
218 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
219
220 (void)AddIntToJson(authParam, FIELD_KEY_LENGTH, 2); // For unit test.
221 uint8_t sessionKeyTest[2] = { 0x31, 0x32 }; // For unit test.
222 (void)AddByteToJson(out, FIELD_SESSION_KEY, sessionKeyTest, sizeof(sessionKeyTest));
223 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
224 FreeJson(sendToPeer);
225 FreeJson(out);
226 FreeJson(authParam);
227 EXPECT_EQ(ret, HC_SUCCESS);
228 }
229
230 // OnAccountFinish -> AddTrustedDeviceForAccount success failed.
231 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0023, TestSize.Level0)
232 {
233 int32_t ret = HC_SUCCESS;
234 CJson *authParam = CreateJson();
235 CJson *out = CreateJson();
236 CJson *sendToPeer = CreateJson();
237
238 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
239 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
240 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
241
242 (void)AddIntToJson(authParam, FIELD_KEY_LENGTH, 2); // For unit test.
243 uint8_t sessionKeyTest[2] = { 0x31, 0x32 }; // For unit test.
244 (void)AddByteToJson(out, FIELD_SESSION_KEY, sessionKeyTest, sizeof(sessionKeyTest));
245
246 (void)AddIntToJson(authParam, FIELD_OS_ACCOUNT_ID, 0);
247 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
248
249 (void)AddStringToJson(authParam, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
250 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
251
252 (void)AddStringToJson(authParam, FIELD_GROUP_ID, "GROUP_ID"); // For unit test.
253 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
254
255 CJson *sendToSelf = CreateJson();
256
257 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
258 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
259
260 (void)AddIntToJson(sendToSelf, FIELD_CREDENTIAL_TYPE, 2);
261 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
262 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
263
264 (void)AddStringToJson(sendToSelf, FIELD_DEV_ID, "DEV_ID"); // For unit test.
265 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
266 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
267
268 (void)AddStringToJson(sendToSelf, FIELD_USER_ID, "USER_ID"); // For unit test.
269 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
270 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
271
272 FreeJson(sendToSelf);
273 FreeJson(out);
274 FreeJson(sendToPeer);
275 FreeJson(authParam);
276 EXPECT_EQ(ret, HC_SUCCESS);
277 }
278
279 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest004, TestSize.Level0)
280 {
281 int32_t ret = HC_SUCCESS;
282 TrustedGroupEntry *entry = CreateGroupEntry();
283 if (entry == nullptr) {
284 return;
285 }
286 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
287 if (localAuthInfo == nullptr) {
288 DestroyGroupEntry(entry);
289 return;
290 }
291 CJson *paramsData = CreateJson();
292 if (paramsData == nullptr) {
293 DestroyGroupEntry(entry);
294 DestroyDeviceEntry(localAuthInfo);
295 return;
296 }
297
298 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry, localAuthInfo, paramsData); // For unit test.
299
300 FreeJson(paramsData);
301 EXPECT_EQ(ret, HC_SUCCESS);
302 DestroyGroupEntry(entry);
303 DestroyDeviceEntry(localAuthInfo);
304 }
305
306 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0041, TestSize.Level0)
307 {
308 int32_t ret = HC_SUCCESS;
309 TrustedGroupEntry *entry = CreateGroupEntry();
310 if (entry == nullptr) {
311 return;
312 }
313 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
314 if (localAuthInfo == nullptr) {
315 DestroyGroupEntry(entry);
316 return;
317 }
318 CJson *paramsData = CreateJson();
319 if (paramsData == nullptr) {
320 DestroyGroupEntry(entry);
321 DestroyDeviceEntry(localAuthInfo);
322 return;
323 }
324
325 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
326 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
327 localAuthInfo, paramsData); // For unit test.
328
329 FreeJson(paramsData);
330 EXPECT_EQ(ret, HC_SUCCESS);
331 DestroyGroupEntry(entry);
332 DestroyDeviceEntry(localAuthInfo);
333 }
334
335 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0042, TestSize.Level0)
336 {
337 TrustedGroupEntry *entry = CreateGroupEntry();
338 if (entry == nullptr) {
339 return;
340 }
341 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
342 if (localAuthInfo == nullptr) {
343 DestroyGroupEntry(entry);
344 return;
345 }
346 CJson *paramsData = CreateJson();
347 if (paramsData == nullptr) {
348 DestroyGroupEntry(entry);
349 DestroyDeviceEntry(localAuthInfo);
350 return;
351 }
352 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
353
354 entry->userId = CreateString();
355 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
356 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
357 localAuthInfo, paramsData); // For unit test.
358 EXPECT_EQ(ret, HC_SUCCESS);
359
360 FreeJson(paramsData);
361 DestroyGroupEntry(entry);
362 DestroyDeviceEntry(localAuthInfo);
363 }
364
365 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0043, TestSize.Level0)
366 {
367 TrustedGroupEntry *entry = CreateGroupEntry();
368 if (entry == nullptr) {
369 return;
370 }
371 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
372 if (localAuthInfo == nullptr) {
373 DestroyGroupEntry(entry);
374 return;
375 }
376 CJson *paramsData = CreateJson();
377 if (paramsData == nullptr) {
378 DestroyGroupEntry(entry);
379 DestroyDeviceEntry(localAuthInfo);
380 return;
381 }
382 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
383 entry->userId = CreateString();
384 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
385
386 entry->id = CreateString();
387 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
388 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
389 localAuthInfo, paramsData); // For unit test.
390 EXPECT_EQ(ret, HC_SUCCESS);
391
392 FreeJson(paramsData);
393 DestroyGroupEntry(entry);
394 DestroyDeviceEntry(localAuthInfo);
395 }
396
397 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest00431, TestSize.Level0)
398 {
399 TrustedGroupEntry *entry = CreateGroupEntry();
400 if (entry == nullptr) {
401 return;
402 }
403 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
404 if (localAuthInfo == nullptr) {
405 DestroyGroupEntry(entry);
406 return;
407 }
408 CJson *paramsData = CreateJson();
409 if (paramsData == nullptr) {
410 DestroyGroupEntry(entry);
411 DestroyDeviceEntry(localAuthInfo);
412 return;
413 }
414 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
415 entry->userId = CreateString();
416 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
417
418 entry->id = CreateString();
419 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
420
421 localAuthInfo->udid = CreateString();
422 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId"); // For unit test.
423 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
424 localAuthInfo, paramsData); // For unit test.
425 EXPECT_EQ(ret, HC_SUCCESS);
426
427 FreeJson(paramsData);
428 DestroyGroupEntry(entry);
429 DestroyDeviceEntry(localAuthInfo);
430 }
431
432 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0044, TestSize.Level0)
433 {
434 TrustedGroupEntry *entry = CreateGroupEntry();
435 if (entry == nullptr) {
436 return;
437 }
438 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
439 if (localAuthInfo == nullptr) {
440 DestroyGroupEntry(entry);
441 return;
442 }
443 CJson *paramsData = CreateJson();
444 if (paramsData == nullptr) {
445 DestroyGroupEntry(entry);
446 DestroyDeviceEntry(localAuthInfo);
447 return;
448 }
449 entry->userId = CreateString();
450 (void)StringSetPointer(&entry->userId, "selfUserId");
451 entry->id = CreateString();
452 (void)StringSetPointer(&entry->id, "groupId");
453
454 localAuthInfo->udid = CreateString();
455 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId");
456 localAuthInfo->udid = CreateString();
457 (void)StringSetPointer(&localAuthInfo->udid, "selfDevId");
458
459 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID");
460 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
461 localAuthInfo, paramsData); // For unit test.
462 EXPECT_EQ(ret, HC_SUCCESS);
463
464 FreeJson(paramsData);
465 DestroyGroupEntry(entry);
466 DestroyDeviceEntry(localAuthInfo);
467 }
468
469 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest007, TestSize.Level0)
470 {
471 CJson *confirmationJson = CreateJson();
472 if (confirmationJson == nullptr) {
473 return;
474 }
475 CJson *dataFromClient = CreateJson();
476 if (dataFromClient == nullptr) {
477 FreeJson(confirmationJson);
478 return;
479 }
480 int32_t ret = GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
481 EXPECT_NE(ret, HC_SUCCESS);
482 FreeJson(confirmationJson);
483 FreeJson(dataFromClient);
484 }
485
486 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0071, TestSize.Level0)
487 {
488 CJson *confirmationJson = CreateJson();
489 if (confirmationJson == nullptr) {
490 return;
491 }
492 CJson *dataFromClient = CreateJson();
493 if (dataFromClient == nullptr) {
494 FreeJson(confirmationJson);
495 return;
496 }
497
498 (void)AddStringToJson(confirmationJson, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
499 int32_t ret = GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
500 EXPECT_EQ(ret, HC_SUCCESS);
501 FreeJson(confirmationJson);
502 FreeJson(dataFromClient);
503 }
504 // Ending for account_related_group_auth.c test.
505 }