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 if (authParam == nullptr) {
236 return;
237 }
238 CJson *out = CreateJson();
239 if (out == nullptr) {
240 FreeJson(authParam);
241 return;
242 }
243 CJson *sendToPeer = CreateJson();
244 if (sendToPeer == nullptr) {
245 FreeJson(authParam);
246 FreeJson(out);
247 return;
248 }
249
250 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
251 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
252 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
253
254 (void)AddIntToJson(authParam, FIELD_KEY_LENGTH, 2); // For unit test.
255 uint8_t sessionKeyTest[2] = { 0x31, 0x32 }; // For unit test.
256 (void)AddByteToJson(out, FIELD_SESSION_KEY, sessionKeyTest, sizeof(sessionKeyTest));
257
258 (void)AddIntToJson(authParam, FIELD_OS_ACCOUNT_ID, 0);
259 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
260
261 (void)AddStringToJson(authParam, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
262 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
263
264 (void)AddStringToJson(authParam, FIELD_GROUP_ID, "GROUP_ID"); // For unit test.
265 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
266
267 CJson *sendToSelf = CreateJson();
268 if (sendToPeer == nullptr) {
269 FreeJson(authParam);
270 FreeJson(out);
271 FreeJson(sendToPeer);
272 return;
273 }
274
275 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
276 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
277
278 (void)AddIntToJson(sendToSelf, FIELD_CREDENTIAL_TYPE, 2);
279 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
280 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
281
282 (void)AddStringToJson(sendToSelf, FIELD_DEV_ID, "DEV_ID"); // For unit test.
283 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
284 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
285
286 (void)AddStringToJson(sendToSelf, FIELD_USER_ID, "USER_ID"); // For unit test.
287 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
288 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
289
290 FreeJson(sendToSelf);
291 FreeJson(out);
292 FreeJson(sendToPeer);
293 FreeJson(authParam);
294 EXPECT_EQ(ret, HC_SUCCESS);
295 }
296
297 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest004, TestSize.Level0)
298 {
299 int32_t ret = HC_SUCCESS;
300 TrustedGroupEntry *entry = CreateGroupEntry();
301 if (entry == nullptr) {
302 return;
303 }
304 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
305 if (localAuthInfo == nullptr) {
306 DestroyGroupEntry(entry);
307 return;
308 }
309 CJson *paramsData = CreateJson();
310 if (paramsData == nullptr) {
311 DestroyGroupEntry(entry);
312 DestroyDeviceEntry(localAuthInfo);
313 return;
314 }
315
316 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry, localAuthInfo, paramsData); // For unit test.
317
318 FreeJson(paramsData);
319 EXPECT_EQ(ret, HC_SUCCESS);
320 DestroyGroupEntry(entry);
321 DestroyDeviceEntry(localAuthInfo);
322 }
323
324 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0041, TestSize.Level0)
325 {
326 int32_t ret = HC_SUCCESS;
327 TrustedGroupEntry *entry = CreateGroupEntry();
328 if (entry == nullptr) {
329 return;
330 }
331 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
332 if (localAuthInfo == nullptr) {
333 DestroyGroupEntry(entry);
334 return;
335 }
336 CJson *paramsData = CreateJson();
337 if (paramsData == nullptr) {
338 DestroyGroupEntry(entry);
339 DestroyDeviceEntry(localAuthInfo);
340 return;
341 }
342
343 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
344 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
345 localAuthInfo, paramsData); // For unit test.
346
347 FreeJson(paramsData);
348 EXPECT_EQ(ret, HC_SUCCESS);
349 DestroyGroupEntry(entry);
350 DestroyDeviceEntry(localAuthInfo);
351 }
352
353 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0042, TestSize.Level0)
354 {
355 TrustedGroupEntry *entry = CreateGroupEntry();
356 if (entry == nullptr) {
357 return;
358 }
359 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
360 if (localAuthInfo == nullptr) {
361 DestroyGroupEntry(entry);
362 return;
363 }
364 CJson *paramsData = CreateJson();
365 if (paramsData == nullptr) {
366 DestroyGroupEntry(entry);
367 DestroyDeviceEntry(localAuthInfo);
368 return;
369 }
370 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
371
372 entry->userId = CreateString();
373 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
374 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
375 localAuthInfo, paramsData); // For unit test.
376 EXPECT_EQ(ret, HC_SUCCESS);
377
378 FreeJson(paramsData);
379 DestroyGroupEntry(entry);
380 DestroyDeviceEntry(localAuthInfo);
381 }
382
383 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0043, TestSize.Level0)
384 {
385 TrustedGroupEntry *entry = CreateGroupEntry();
386 if (entry == nullptr) {
387 return;
388 }
389 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
390 if (localAuthInfo == nullptr) {
391 DestroyGroupEntry(entry);
392 return;
393 }
394 CJson *paramsData = CreateJson();
395 if (paramsData == nullptr) {
396 DestroyGroupEntry(entry);
397 DestroyDeviceEntry(localAuthInfo);
398 return;
399 }
400 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
401 entry->userId = CreateString();
402 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
403
404 entry->id = CreateString();
405 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
406 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
407 localAuthInfo, paramsData); // For unit test.
408 EXPECT_EQ(ret, HC_SUCCESS);
409
410 FreeJson(paramsData);
411 DestroyGroupEntry(entry);
412 DestroyDeviceEntry(localAuthInfo);
413 }
414
415 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest00431, TestSize.Level0)
416 {
417 TrustedGroupEntry *entry = CreateGroupEntry();
418 if (entry == nullptr) {
419 return;
420 }
421 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
422 if (localAuthInfo == nullptr) {
423 DestroyGroupEntry(entry);
424 return;
425 }
426 CJson *paramsData = CreateJson();
427 if (paramsData == nullptr) {
428 DestroyGroupEntry(entry);
429 DestroyDeviceEntry(localAuthInfo);
430 return;
431 }
432 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
433 entry->userId = CreateString();
434 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
435
436 entry->id = CreateString();
437 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
438
439 localAuthInfo->udid = CreateString();
440 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId"); // For unit test.
441 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
442 localAuthInfo, paramsData); // For unit test.
443 EXPECT_EQ(ret, HC_SUCCESS);
444
445 FreeJson(paramsData);
446 DestroyGroupEntry(entry);
447 DestroyDeviceEntry(localAuthInfo);
448 }
449
450 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0044, TestSize.Level0)
451 {
452 TrustedGroupEntry *entry = CreateGroupEntry();
453 if (entry == nullptr) {
454 return;
455 }
456 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
457 if (localAuthInfo == nullptr) {
458 DestroyGroupEntry(entry);
459 return;
460 }
461 CJson *paramsData = CreateJson();
462 if (paramsData == nullptr) {
463 DestroyGroupEntry(entry);
464 DestroyDeviceEntry(localAuthInfo);
465 return;
466 }
467 entry->userId = CreateString();
468 (void)StringSetPointer(&entry->userId, "selfUserId");
469 entry->id = CreateString();
470 (void)StringSetPointer(&entry->id, "groupId");
471
472 localAuthInfo->udid = CreateString();
473 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId");
474 localAuthInfo->udid = CreateString();
475 (void)StringSetPointer(&localAuthInfo->udid, "selfDevId");
476
477 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID");
478 int32_t ret = GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
479 localAuthInfo, paramsData); // For unit test.
480 EXPECT_EQ(ret, HC_SUCCESS);
481
482 FreeJson(paramsData);
483 DestroyGroupEntry(entry);
484 DestroyDeviceEntry(localAuthInfo);
485 }
486
487 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest007, TestSize.Level0)
488 {
489 CJson *confirmationJson = CreateJson();
490 if (confirmationJson == nullptr) {
491 return;
492 }
493 CJson *dataFromClient = CreateJson();
494 if (dataFromClient == nullptr) {
495 FreeJson(confirmationJson);
496 return;
497 }
498 int32_t ret = GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
499 EXPECT_NE(ret, HC_SUCCESS);
500 FreeJson(confirmationJson);
501 FreeJson(dataFromClient);
502 }
503
504 HWTEST_F(AccountRelatedGroupAuthTest, AccountRelatedGroupAuthTest0071, TestSize.Level0)
505 {
506 CJson *confirmationJson = CreateJson();
507 if (confirmationJson == nullptr) {
508 return;
509 }
510 CJson *dataFromClient = CreateJson();
511 if (dataFromClient == nullptr) {
512 FreeJson(confirmationJson);
513 return;
514 }
515
516 (void)AddStringToJson(confirmationJson, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
517 int32_t ret = GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
518 EXPECT_EQ(ret, HC_SUCCESS);
519 FreeJson(confirmationJson);
520 FreeJson(dataFromClient);
521 }
522 // Ending for account_related_group_auth.c test.
523 }