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 }