1 /*
2  * Copyright (c) 2024 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 "asset_system_api_test.h"
17 
18 #include <cstring>
19 #include <gtest/gtest.h>
20 
21 #include "nativetoken_kit.h"
22 #include "token_setproc.h"
23 
24 #include "asset_system_api.h"
25 #include "asset_system_type.h"
26 #include "asset_test_common.h"
27 
28 using namespace testing::ext;
29 namespace UnitTest::AssetSystemApiTest {
GrantSelfPermission()30 int GrantSelfPermission()
31 {
32     const char *permissions[] = {
33         "ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS"
34     };
35     NativeTokenInfoParams info = {
36         .dcapsNum = 0,
37         .permsNum = 1,
38         .aclsNum = 0,
39         .dcaps = nullptr,
40         .perms = permissions,
41         .acls = nullptr,
42         .processName = "asset_bin_test",
43         .aplStr = "system_basic",
44     };
45     uint64_t tokenId = GetAccessTokenId(&info);
46     return SetSelfTokenID(tokenId);
47 }
48 
49 class AssetSystemApiTest : public testing::Test {
50 public:
51     static void SetUpTestCase(void);
52 
53     static void TearDownTestCase(void);
54 
55     void SetUp(void);
56 
57     void TearDown(void);
58 };
59 
SetUpTestCase(void)60 void AssetSystemApiTest::SetUpTestCase(void)
61 {
62     ASSERT_EQ(0, GrantSelfPermission());
63 }
64 
TearDownTestCase(void)65 void AssetSystemApiTest::TearDownTestCase(void)
66 {
67 }
68 
SetUp(void)69 void AssetSystemApiTest::SetUp(void)
70 {
71 }
72 
TearDown(void)73 void AssetSystemApiTest::TearDown(void)
74 {
75 }
76 
77 /**
78  * @tc.name: AssetSystemApiTest.AssetSystemApiTest001
79  * @tc.desc: Test asset func AssetAdd specific user id, expect SUCCESS
80  * @tc.type: FUNC
81  * @tc.result:0
82  */
83 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest001, TestSize.Level0)
84 {
85     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
86     AssetAttr attr[] = {
87         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
88         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
89         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
90         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
91         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
92         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
93         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
94         { .tag = SEC_ASSET_TAG_CONFLICT_RESOLUTION, .value.u32 = SEC_ASSET_CONFLICT_OVERWRITE },
95         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, .value.blob = funcName },
96         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, .value.blob = funcName },
97         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, .value.blob = funcName },
98         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, .value.blob = funcName },
99         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, .value.blob = funcName },
100         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, .value.blob = funcName },
101         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, .value.blob = funcName },
102         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4, .value.blob = funcName },
103         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, .value.blob = funcName },
104         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, .value.blob = funcName },
105         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, .value.blob = funcName },
106         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, .value.blob = funcName }
107     };
108     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetAdd(attr, ARRAY_SIZE(attr)));
109     AssetResultSet resultSet = { 0 };
110     ASSERT_EQ(SEC_ASSET_SUCCESS, QueryByAliasSdk(__func__, &resultSet));
111     ASSERT_EQ(1, resultSet.count);
112     AssetResult result = resultSet.results[0];
113     ASSERT_TRUE(CheckMatchAttrResultSdk(attr, ARRAY_SIZE(attr), &result));
114     AssetFreeResultSet(&resultSet);
115     ASSERT_EQ(SEC_ASSET_SUCCESS, RemoveByAliasSdk(__func__));
116 }
117 
118 /**
119  * @tc.name: AssetSystemApiTest.AssetSystemApiTest002
120  * @tc.desc: Test asset func AssetQuery specific user id, expect SUCCESS
121  * @tc.type: FUNC
122  * @tc.result:0
123  */
124 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest002, TestSize.Level0)
125 {
126     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
127     AssetAttr addAttr[] = {
128         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
129         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
130         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
131         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
132     };
133     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetAdd(addAttr, ARRAY_SIZE(addAttr)));
134 
135     AssetResultSet resultSet = { 0 };
136     AssetAttr queryAttr[] = {
137         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
138         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
139         { .tag = SEC_ASSET_TAG_RETURN_TYPE, .value.u32 = SEC_ASSET_RETURN_ALL }
140     };
141     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetQuery(queryAttr, ARRAY_SIZE(queryAttr), &resultSet));
142     ASSERT_EQ(1, resultSet.count);
143 
144     AssetFreeResultSet(&resultSet);
145     ASSERT_EQ(SEC_ASSET_SUCCESS, RemoveByAliasSdk(__func__));
146 }
147 
148 /**
149  * @tc.name: AssetSystemApiTest.AssetSystemApiTest003
150  * @tc.desc: Test asset func AssetRemove, expect SUCCESS
151  * @tc.type: FUNC
152  * @tc.result:0
153  */
154 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest003, TestSize.Level0)
155 {
156     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
157     AssetAttr attr[] = {
158         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
159         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
160         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
161         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
162         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
163         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
164         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
165         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, .value.blob = funcName },
166         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, .value.blob = funcName },
167         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, .value.blob = funcName },
168         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, .value.blob = funcName },
169         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, .value.blob = funcName },
170         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, .value.blob = funcName },
171         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, .value.blob = funcName },
172         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4, .value.blob = funcName },
173         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, .value.blob = funcName },
174         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, .value.blob = funcName },
175         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, .value.blob = funcName },
176         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, .value.blob = funcName }
177     };
178     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetAdd(attr, ARRAY_SIZE(attr)));
179     AssetAttr attr2[] = {
180         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
181         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
182         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
183         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
184         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
185         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
186         { .tag = SEC_ASSET_TAG_IS_PERSISTENT, .value.boolean = false },
187         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_1, .value.blob = funcName },
188         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_2, .value.blob = funcName },
189         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_3, .value.blob = funcName },
190         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_4, .value.blob = funcName },
191         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_1, .value.blob = funcName },
192         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_2, .value.blob = funcName },
193         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_3, .value.blob = funcName },
194         { .tag = SEC_ASSET_TAG_DATA_LABEL_NORMAL_LOCAL_4, .value.blob = funcName },
195         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_1, .value.blob = funcName },
196         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_2, .value.blob = funcName },
197         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_3, .value.blob = funcName },
198         { .tag = SEC_ASSET_TAG_DATA_LABEL_CRITICAL_4, .value.blob = funcName }
199     };
200     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetRemove(attr2, ARRAY_SIZE(attr2)));
201 }
202 
203 /**
204  * @tc.name: AssetSystemApiTest.AssetSystemApiTest004
205  * @tc.desc: Test asset func AssetPreQuery, AssetPostQuery expect SUCCESS
206  * @tc.type: FUNC
207  * @tc.result:0
208  */
209 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest004, TestSize.Level0)
210 {
211     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
212     AssetAttr attr[] = {
213         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
214         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
215         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
216         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
217         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_ANY }
218     };
219     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetAdd(attr, ARRAY_SIZE(attr)));
220 
221     AssetBlob challenge = { 0 };
222     AssetAttr attr2[] = {
223         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
224         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID }
225     };
226     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetPreQuery(attr2, ARRAY_SIZE(attr2), &challenge));
227 
228     AssetAttr attr3[] = {
229         { .tag = SEC_ASSET_TAG_AUTH_CHALLENGE, .value.blob = challenge },
230         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID }
231     };
232     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetPostQuery(attr3, ARRAY_SIZE(attr3)));
233 
234     AssetAttr attr4[] = {
235         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
236         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID }
237     };
238     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetRemove(attr4, ARRAY_SIZE(attr4)));
239 }
240 
241 /**
242  * @tc.name: AssetSystemApiTest.AssetSystemApiTest005
243  * @tc.desc: Test asset func AssetUpdate expect SUCCESS
244  * @tc.type: FUNC
245  * @tc.result:0
246  */
247 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest005, TestSize.Level0)
248 {
249     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
250     AssetAttr attr[] = {
251         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
252         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
253         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
254         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
255         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_ANY }
256     };
257     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetAdd(attr, ARRAY_SIZE(attr)));
258 
259     AssetAttr queryAttr[] = {
260         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
261         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = SPECIFIC_USER_ID },
262     };
263     const char *secretNew = "secret_new";
264     AssetAttr updateAttr[] = {
265         { .tag = SEC_ASSET_TAG_SECRET, .value.blob =
266             { .size = strlen(secretNew), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(secretNew)) } }
267     };
268     ASSERT_EQ(SEC_ASSET_SUCCESS, AssetUpdate(queryAttr, ARRAY_SIZE(queryAttr), updateAttr, ARRAY_SIZE(updateAttr)));
269 
270     ASSERT_EQ(SEC_ASSET_SUCCESS, RemoveByAliasSdk(__func__));
271 }
272 
273 /**
274  * @tc.name: AssetSystemApiTest.AssetSystemApiTest006
275  * @tc.desc: Test asset func AssetAdd expect FAIL
276  * @tc.type: FUNC
277  * @tc.result:0
278  */
279 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest006, TestSize.Level0)
280 {
281     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
282     AssetAttr attr[] = {
283         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
284         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
285         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 },
286         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
287         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_ANY }
288     };
289     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetAdd(attr, ARRAY_SIZE(attr)));
290     AssetAttr attr2[] = {
291         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
292         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
293         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 },
294         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
295         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_ANY }
296     };
297     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetAdd(attr2, ARRAY_SIZE(attr2)));
298 }
299 
300 /**
301  * @tc.name: AssetSystemApiTest.AssetSystemApiTest007
302  * @tc.desc: Test asset func AssetQuery expect FAIL
303  * @tc.type: FUNC
304  * @tc.result:0
305  */
306 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest007, TestSize.Level0)
307 {
308     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
309     AssetResultSet resultSet = { 0 };
310     AssetAttr queryAttr[] = {
311         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
312         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 },
313         { .tag = SEC_ASSET_TAG_RETURN_TYPE, .value.u32 = SEC_ASSET_RETURN_ALL }
314     };
315     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetQuery(queryAttr, ARRAY_SIZE(queryAttr), &resultSet));
316     AssetAttr queryAttr2[] = {
317         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
318         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 },
319         { .tag = SEC_ASSET_TAG_RETURN_TYPE, .value.u32 = SEC_ASSET_RETURN_ALL }
320     };
321     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetQuery(queryAttr2, ARRAY_SIZE(queryAttr2), &resultSet));
322 }
323 
324 /**
325  * @tc.name: AssetSystemApiTest.AssetSystemApiTest008
326  * @tc.desc: Test asset func AssetRemove expect FAIL
327  * @tc.type: FUNC
328  * @tc.result:0
329  */
330 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest008, TestSize.Level0)
331 {
332     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
333     AssetAttr attr[] = {
334         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
335         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
336         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
337         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 },
338         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
339         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
340         { .tag = SEC_ASSET_TAG_IS_PERSISTENT, .value.boolean = false }
341     };
342     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetRemove(attr, ARRAY_SIZE(attr)));
343     AssetAttr attr2[] = {
344         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
345         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
346         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
347         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 },
348         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
349         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
350         { .tag = SEC_ASSET_TAG_IS_PERSISTENT, .value.boolean = false }
351     };
352     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetRemove(attr2, ARRAY_SIZE(attr2)));
353 }
354 
355 /**
356  * @tc.name: AssetSystemApiTest.AssetSystemApiTest009
357  * @tc.desc: Test asset func AssetPreQuery expect FAIL
358  * @tc.type: FUNC
359  * @tc.result:0
360  */
361 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest009, TestSize.Level0)
362 {
363     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
364     AssetBlob challenge = { 0 };
365     AssetAttr attr[] = {
366         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
367         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 }
368     };
369     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPreQuery(attr, ARRAY_SIZE(attr), &challenge));
370     AssetAttr attr2[] = {
371         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
372         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 }
373     };
374     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPreQuery(attr2, ARRAY_SIZE(attr2), &challenge));
375 }
376 
377 /**
378  * @tc.name: AssetSystemApiTest.AssetSystemApiTest010
379  * @tc.desc: Test asset func AssetPostQuery expect FAIL
380  * @tc.type: FUNC
381  * @tc.result:0
382  */
383 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest010, TestSize.Level0)
384 {
385     AssetBlob challenge = { 0 };
386     AssetAttr attr[] = {
387         { .tag = SEC_ASSET_TAG_AUTH_CHALLENGE, .value.blob = challenge },
388         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 }
389     };
390     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPostQuery(attr, ARRAY_SIZE(attr)));
391     AssetAttr attr2[] = {
392         { .tag = SEC_ASSET_TAG_AUTH_CHALLENGE, .value.blob = challenge },
393         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 }
394     };
395     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPostQuery(attr2, ARRAY_SIZE(attr2)));
396 }
397 
398 /**
399  * @tc.name: AssetSystemApiTest.AssetSystemApiTest011
400  * @tc.desc: Test asset func AssetAdd expect FAIL
401  * @tc.type: FUNC
402  * @tc.result:0
403  */
404 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest011, TestSize.Level0)
405 {
406     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
407     AssetAttr attr[] = {
408         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
409         { .tag = SEC_ASSET_TAG_SECRET, .value.blob = funcName },
410         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID },
411         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
412         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_ANY }
413     };
414     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetAdd(attr, ARRAY_SIZE(attr)));
415 }
416 
417 /**
418  * @tc.name: AssetSystemApiTest.AssetSystemApiTest012
419  * @tc.desc: Test asset func AssetQuery expect FAIL
420  * @tc.type: FUNC
421  * @tc.result:0
422  */
423 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest012, TestSize.Level0)
424 {
425     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
426     AssetResultSet resultSet = { 0 };
427     AssetAttr queryAttr[] = {
428         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
429         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID },
430         { .tag = SEC_ASSET_TAG_RETURN_TYPE, .value.u32 = SEC_ASSET_RETURN_ALL }
431     };
432     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetQuery(queryAttr, ARRAY_SIZE(queryAttr), &resultSet));
433 }
434 
435 /**
436  * @tc.name: AssetSystemApiTest.AssetSystemApiTest013
437  * @tc.desc: Test asset func AssetRemove expect FAIL
438  * @tc.type: FUNC
439  * @tc.result:0
440  */
441 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest013, TestSize.Level0)
442 {
443     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
444     AssetAttr attr[] = {
445         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
446         { .tag = SEC_ASSET_TAG_ACCESSIBILITY, .value.u32 = SEC_ASSET_ACCESSIBILITY_DEVICE_UNLOCKED },
447         { .tag = SEC_ASSET_TAG_REQUIRE_PASSWORD_SET, .value.boolean = false },
448         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID },
449         { .tag = SEC_ASSET_TAG_AUTH_TYPE, .value.u32 = SEC_ASSET_AUTH_TYPE_NONE },
450         { .tag = SEC_ASSET_TAG_SYNC_TYPE, .value.u32 = SEC_ASSET_SYNC_TYPE_NEVER },
451         { .tag = SEC_ASSET_TAG_IS_PERSISTENT, .value.boolean = false }
452     };
453     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetRemove(attr, ARRAY_SIZE(attr)));
454 }
455 
456 /**
457  * @tc.name: AssetSystemApiTest.AssetSystemApiTest014
458  * @tc.desc: Test asset func AssetPreQuery expect FAIL
459  * @tc.type: FUNC
460  * @tc.result:0
461  */
462 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest014, TestSize.Level0)
463 {
464     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
465     AssetBlob challenge = { 0 };
466     AssetAttr attr[] = {
467         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
468         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID }
469     };
470     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPreQuery(attr, ARRAY_SIZE(attr), &challenge));
471 }
472 
473 /**
474  * @tc.name: AssetSystemApiTest.AssetSystemApiTest015
475  * @tc.desc: Test asset func AssetPostQuery expect FAIL
476  * @tc.type: FUNC
477  * @tc.result:0
478  */
479 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest015, TestSize.Level0)
480 {
481     AssetBlob challenge = { 0 };
482     AssetAttr attr[] = {
483         { .tag = SEC_ASSET_TAG_AUTH_CHALLENGE, .value.blob = challenge },
484         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID }
485     };
486     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT, AssetPostQuery(attr, ARRAY_SIZE(attr)));
487 }
488 
489 /**
490  * @tc.name: AssetSystemApiTest.AssetSystemApiTest016
491  * @tc.desc: Test asset func AssetUpdate expect FAIL
492  * @tc.type: FUNC
493  * @tc.result:0
494  */
495 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest016, TestSize.Level0)
496 {
497     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
498     AssetAttr queryAttr[] = {
499         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
500         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = NOT_FOUND_USER_ID },
501     };
502     const char *secretNew = "secret_new";
503     AssetAttr updateAttr[] = {
504         { .tag = SEC_ASSET_TAG_SECRET, .value.blob =
505             { .size = strlen(secretNew), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(secretNew)) } }
506     };
507     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT,
508         AssetUpdate(queryAttr, ARRAY_SIZE(queryAttr), updateAttr, ARRAY_SIZE(updateAttr)));
509 }
510 
511 /**
512  * @tc.name: AssetSystemApiTest.AssetSystemApiTest017
513  * @tc.desc: Test asset func AssetUpdate expect FAIL
514  * @tc.type: FUNC
515  * @tc.result:0
516  */
517 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest017, TestSize.Level0)
518 {
519     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
520     AssetAttr queryAttr[] = {
521         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
522         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = 0 },
523     };
524     const char *secretNew = "secret_new";
525     AssetAttr updateAttr[] = {
526         { .tag = SEC_ASSET_TAG_SECRET, .value.blob =
527             { .size = strlen(secretNew), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(secretNew)) } }
528     };
529     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT,
530         AssetUpdate(queryAttr, ARRAY_SIZE(queryAttr), updateAttr, ARRAY_SIZE(updateAttr)));
531 }
532 
533 /**
534  * @tc.name: AssetSystemApiTest.AssetSystemApiTest018
535  * @tc.desc: Test asset func AssetUpdate expect FAIL
536  * @tc.type: FUNC
537  * @tc.result:0
538  */
539 HWTEST_F(AssetSystemApiTest, AssetSystemApiTest018, TestSize.Level0)
540 {
541     AssetBlob funcName = { .size = strlen(__func__), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(__func__)) };
542     AssetAttr queryAttr[] = {
543         { .tag = SEC_ASSET_TAG_ALIAS, .value.blob = funcName },
544         { .tag = SEC_ASSET_TAG_USER_ID, .value.u32 = -1 },
545     };
546     const char *secretNew = "secret_new";
547     AssetAttr updateAttr[] = {
548         { .tag = SEC_ASSET_TAG_SECRET, .value.blob =
549             { .size = strlen(secretNew), .data = reinterpret_cast<uint8_t*>(const_cast<char*>(secretNew)) } }
550     };
551     ASSERT_EQ(SEC_ASSET_INVALID_ARGUMENT,
552         AssetUpdate(queryAttr, ARRAY_SIZE(queryAttr), updateAttr, ARRAY_SIZE(updateAttr)));
553 }
554 }