• 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 <cinttypes>
17 #include <unistd.h>
18 #include <gtest/gtest.h>
19 
20 #include "common_defs.h"
21 #include "device_auth.h"
22 #include "device_auth_defines.h"
23 #include "hc_log.h"
24 #include "json_utils.h"
25 #include "securec.h"
26 #include "../../../../../services/authenticators/src/account_related/creds_manager/asy_token_manager.c"
27 
28 using namespace std;
29 using namespace testing::ext;
30 
31 namespace {
32 class AsyTokenManagerTest : public testing::Test {
33 public:
34     static void SetUpTestCase();
35     static void TearDownTestCase();
36     void SetUp();
37     void TearDown();
38 };
39 
SetUpTestCase()40 void AsyTokenManagerTest::SetUpTestCase() {}
41 
TearDownTestCase()42 void AsyTokenManagerTest::TearDownTestCase() {}
43 
SetUp()44 void AsyTokenManagerTest::SetUp()
45 {
46     int ret = InitDeviceAuthService();
47     EXPECT_EQ(ret, HC_SUCCESS);
48 }
49 
TearDown()50 void AsyTokenManagerTest::TearDown()
51 {
52     DestroyDeviceAuthService();
53 }
54 
55 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest001, TestSize.Level0)
56 {
57     InitTokenManager();
58     int32_t ret = GetAccountAuthTokenManager()->addToken(DEFAULT_OS_ACCOUNT, OP_BIND, nullptr);
59     EXPECT_NE(ret, HC_SUCCESS);
60 
61     CJson *in = CreateJson();
62     do {
63         if (in == nullptr) {
64             break;
65         }
66         ret = GetAccountAuthTokenManager()->addToken(DEFAULT_OS_ACCOUNT, OP_BIND, in);
67         EXPECT_NE(ret, HC_SUCCESS);
68 
69         ret = GetAccountAuthTokenManager()->addToken(DEFAULT_OS_ACCOUNT, OP_BIND, in);
70         EXPECT_NE(ret, HC_SUCCESS);
71 
72         if (AddStringToJson(in, FIELD_USER_ID, "test_id") != HC_SUCCESS) { // For unit test.
73             break;
74         }
75         ret = GetAccountAuthTokenManager()->addToken(DEFAULT_OS_ACCOUNT, OP_BIND, in);
76         EXPECT_NE(ret, HC_SUCCESS);
77     } while (0);
78     FreeJson(in);
79 }
80 
81 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest002, TestSize.Level0)
82 {
83     InitTokenManager();
84     int32_t ret;
85     AccountToken accountToken;
86     do {
87         ret = GetAccountAuthTokenManager()->getToken(DEFAULT_OS_ACCOUNT, nullptr, nullptr, nullptr);
88         EXPECT_NE(ret, HC_SUCCESS);
89 
90         ret = GetAccountAuthTokenManager()->getToken(DEFAULT_OS_ACCOUNT, &accountToken, nullptr, nullptr);
91         EXPECT_NE(ret, HC_SUCCESS);
92 
93         ret = GetAccountAuthTokenManager()->getToken(DEFAULT_OS_ACCOUNT, &accountToken, "userId", nullptr); // For unit test.
94         EXPECT_NE(ret, HC_SUCCESS);
95     } while (0);
96 }
97 
98 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest003, TestSize.Level0)
99 {
100     InitTokenManager();
101     int32_t ret;
102 
103     do {
104         ret = GetAccountAuthTokenManager()->deleteToken(DEFAULT_OS_ACCOUNT, nullptr, nullptr);
105         EXPECT_NE(ret, HC_SUCCESS);
106 
107         ret = GetAccountAuthTokenManager()->deleteToken(DEFAULT_OS_ACCOUNT, "userId", nullptr); // For unit test.
108         EXPECT_NE(ret, HC_SUCCESS);
109 
110         ret = GetAccountAuthTokenManager()->deleteToken(DEFAULT_OS_ACCOUNT, "userId", "deviceId"); // For unit test.
111         EXPECT_NE(ret, HC_SUCCESS);
112     } while (0);
113 }
114 
115 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest004, TestSize.Level0)
116 {
117     InitTokenManager();
118     int32_t ret;
119 
120     do {
121         ret = GetAccountAuthTokenManager()->getAlgVersion(DEFAULT_OS_ACCOUNT, nullptr, nullptr);
122         EXPECT_NE(ret, HC_SUCCESS);
123 
124         ret = GetAccountAuthTokenManager()->getAlgVersion(DEFAULT_OS_ACCOUNT, "userId", nullptr); // For unit test.
125         EXPECT_NE(ret, HC_SUCCESS);
126 
127         ret = GetAccountAuthTokenManager()->getAlgVersion(DEFAULT_OS_ACCOUNT, "userId", "deviceId"); // For unit test.
128         EXPECT_NE(ret, HC_SUCCESS);
129     } while (0);
130 }
131 
132 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest005, TestSize.Level0)
133 {
134     InitTokenManager();
135     int32_t ret;
136 
137     CJson *in = CreateJson();
138     do {
139         if (in == nullptr) {
140             break;
141         }
142         ret = GetAccountAuthTokenManager()->getRegisterProof(nullptr, nullptr);
143         EXPECT_NE(ret, HC_SUCCESS);
144 
145         ret = GetAccountAuthTokenManager()->getRegisterProof(in, nullptr);
146         EXPECT_NE(ret, HC_SUCCESS);
147 
148         if (AddStringToJson(in, FIELD_USER_ID, "userId")) { // For unit test.
149             break;
150         }
151         ret = GetAccountAuthTokenManager()->getRegisterProof(in, nullptr);
152         EXPECT_NE(ret, HC_SUCCESS);
153 
154         if (AddStringToJson(in, FIELD_VERSION, "version")) { // For unit test.
155             break;
156         }
157         ret = GetAccountAuthTokenManager()->getRegisterProof(in, nullptr);
158         EXPECT_NE(ret, HC_SUCCESS);
159     } while (0);
160     FreeJson(in);
161 }
162 
163 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest006, TestSize.Level0)
164 {
165     int32_t ret;
166     AccountTokenVec vec = CreateAccountTokenVec();
167     CJson *in = CreateJson();
168     AccountToken accountToken;
169     (void)memset_s(&accountToken, sizeof(accountToken), 0, sizeof(accountToken));
170     do {
171         if (in == nullptr) {
172             break;
173         }
174         ret = GenerateTokenFromJson(nullptr, &accountToken);
175         ret = CreateTokensFromJson(nullptr, nullptr);
176         ret = ReadTokensFromFile(DEFAULT_OS_ACCOUNT, nullptr);
177         ret = ReadTokensFromFile(DEFAULT_OS_ACCOUNT, &vec);
178         ret = WriteTokensJsonToFile(DEFAULT_OS_ACCOUNT, nullptr);
179         ret = WriteTokensJsonToFile(DEFAULT_OS_ACCOUNT, in);
180         ret = GenerateJsonFromToken(&accountToken, nullptr);
181         ret = GenerateServerPkAlias(nullptr, nullptr);
182         if (AddStringToJson(in, FIELD_USER_ID, "user_id_test") != HC_SUCCESS) { // For unit test.
183             break;
184         }
185         ret = GenerateServerPkAlias(in, nullptr);
186 
187         EXPECT_NE(ret, HC_SUCCESS);
188     } while (0);
189     ClearAccountTokenVec(&vec);
190     FreeJson(in);
191 }
192 
193 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest007, TestSize.Level0)
194 {
195     int32_t ret = HC_SUCCESS;
196     CJson *in = CreateJson();
197     CJson *obj = CreateJson();
198     AccountTokenVec vec = CreateAccountTokenVec();
199     do {
200         if (in == nullptr || obj == nullptr) {
201             break;
202         }
203         (void)ImportServerPk(nullptr, nullptr, nullptr, P256);
204         (void)VerifyPkInfoSignature(nullptr, in, nullptr, nullptr, P256);
205         (void)DoImportServerPkAndVerify(nullptr, nullptr, nullptr, nullptr);
206         (void)VerifySignature(nullptr);
207         (void)SaveOsAccountTokenDb(DEFAULT_OS_ACCOUNT);
208         (void)QueryTokenPtrIfMatch(&vec, nullptr, nullptr);
209         (void)QueryTokenPtrIfMatch(&vec, "userId",nullptr); // For unit test.
210         (void)QueryTokenPtrIfMatch(&vec, "userId", "deviceId"); // For unit test.
211         (void)GetAccountToken(DEFAULT_OS_ACCOUNT, "userId", "deviceId"); // For unit test.
212         (void)DeleteTokenInner(DEFAULT_OS_ACCOUNT, "userId", "deviceId", &vec); // For unit test.
213     } while (0);
214     FreeJson(obj);
215     FreeJson(in);
216     ClearAccountTokenVec(&vec);
217     EXPECT_EQ(ret, HC_SUCCESS);
218 }
219 
220 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest0071, TestSize.Level0)
221 {
222     int32_t ret = HC_SUCCESS;
223     CJson *in = CreateJson();
224     CJson *obj = CreateJson();
225     AccountTokenVec vec = CreateAccountTokenVec();
226     AccountToken accountToken;
227     do {
228         if (in == nullptr || obj == nullptr) {
229             break;
230         }
231         (void)AddTokenInner(DEFAULT_OS_ACCOUNT, &accountToken);
232         (void)DoExportPkAndCompare(nullptr, nullptr, nullptr, nullptr);
233         (void)CheckDevicePk(nullptr);
234         if (AddObjToJson(in, FIELD_PK_INFO, obj) != HC_SUCCESS) {
235             break;
236         }
237         (void)CheckDevicePk(in);
238         (void)CheckUserId(nullptr, nullptr);
239         (void)CheckUserId(nullptr, in);
240         (void)CheckCredValidity(IMPORT_SELF_CREDENTIAL, nullptr);
241         if (AddStringToJson(in, FIELD_USER_ID, "userId") != HC_SUCCESS) { // For unit test.
242             break;
243         }
244         (void)CheckCredValidity(IMPORT_SELF_CREDENTIAL, in);
245     } while (0);
246     FreeJson(obj);
247     FreeJson(in);
248     ClearAccountTokenVec(&vec);
249     EXPECT_EQ(ret, HC_SUCCESS);
250 }
251 
252 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest008, TestSize.Level0)
253 {
254     int32_t ret = HC_SUCCESS;
255     CJson *in = CreateJson();
256     do {
257         if (in == nullptr) {
258             break;
259         }
260         (void)DoGenerateAndExportPk(nullptr, nullptr, nullptr, nullptr);
261         (void)GetRegisterProof(nullptr, nullptr);
262         if (AddStringToJson(in, FIELD_USER_ID, "userId") != HC_SUCCESS) { // For unit test.
263             break;
264         }
265         (void)GetRegisterProof(nullptr, in);
266         if (AddStringToJson(in, FIELD_VERSION, "version") != HC_SUCCESS) { // For unit test.
267             break;
268         }
269         (void)GetRegisterProof(nullptr, in);
270         EXPECT_EQ(ret, HC_SUCCESS);
271     } while (0);
272     FreeJson(in);
273 }
274 
275 HWTEST_F(AsyTokenManagerTest, AsyTokenManagerTest009, TestSize.Level0)
276 {
277     int32_t ret = HC_SUCCESS;
278 
279     do {
280         (void)LoadOsAccountTokenDb(DEFAULT_OS_ACCOUNT);
281         (void)DestroyAccountToken(nullptr);
282     } while (0);
283 
284     EXPECT_EQ(ret, HC_SUCCESS);
285 }
286 }