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