• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  * http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 
13 #include <gtest/gtest.h>
14 #include <test_defines.h>
15 #include <common_test.h>
16 #include <securec.h>
17 #include <tee_client_api.h>
18 #include <tee_client_type.h>
19 #include <test_log.h>
20 #include <test_tcf_cmdid.h>
21 
22 using namespace testing::ext;
23 /**
24  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TA_APPID
25  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TA_APPID
26  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
27  */
28 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TA_APPID, Function | MediumTest | Level0)
29 {
30     TEEC_Result ret;
31     int rc;
32     TestData value = { 0 };
33     value.cmd = CMD_TEE_GetPropertyAsString;
34     value.propSet = TEE_PROPSET_CURRENT_TA;
35     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
36     ASSERT_EQ(rc, 0);
37     value.inBufferLen = sizeof(GPD_TA_APPID);
38 
39     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
40     ASSERT_EQ(ret, TEEC_SUCCESS);
41     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
42     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_UUID);
43     ASSERT_EQ(value.outBufferLen, BIG_SIZE);
44 }
45 
46 /**
47  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TA_SERVICENAME
48  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TA_SERVICENAME
49  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND, can not get value
50  */
51 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TA_SERVICENAME, Function | MediumTest | Level0)
52 {
53     TEEC_Result ret;
54     int rc;
55     TestData value = { 0 };
56     value.cmd = CMD_TEE_GetPropertyAsString;
57     value.propSet = TEE_PROPSET_CURRENT_TA;
58     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_SERVICENAME, sizeof(GPD_TA_SERVICENAME));
59     ASSERT_EQ(rc, 0);
60     value.inBufferLen = sizeof(GPD_TA_SERVICENAME);
61 
62     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
63     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
64     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
65 }
66 
67 /**
68  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_CLIENT_IDENTITY
69  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_CLIENT_IDENTITY
70  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
71  */
72 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_CLIENT_IDENTITY, Function | MediumTest | Level0)
73 {
74     TEEC_Result ret;
75     int rc;
76     TestData value = { 0 };
77     value.cmd = CMD_TEE_GetPropertyAsString;
78     value.propSet = TEE_PROPSET_CURRENT_CLIENT;
79     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_CLIENT_IDENTITY, sizeof(GPD_CLIENT_IDENTITY));
80     ASSERT_EQ(rc, 0);
81     value.inBufferLen = sizeof(GPD_CLIENT_IDENTITY);
82 
83     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
84     ASSERT_EQ(ret, TEEC_SUCCESS);
85     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
86     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_CLIENT_IDENTITY);
87 }
88 
89 /**
90  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_CLIENT_IDENTITY_PropsetIsWrong
91  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_CLIENT_IDENTITY, Propset is wrong
92  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND, can not get value
93  */
94 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_CLIENT_IDENTITY_PropsetIsWrong,
95     Function | MediumTest | Level0)
96 {
97     TEEC_Result ret;
98     int rc;
99     TestData value = { 0 };
100     value.cmd = CMD_TEE_GetPropertyAsString;
101     value.propSet = TEE_PROPSET_CURRENT_TA;
102     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_CLIENT_IDENTITY, sizeof(GPD_CLIENT_IDENTITY));
103     ASSERT_EQ(rc, 0);
104     value.inBufferLen = sizeof(GPD_CLIENT_IDENTITY);
105 
106     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
107     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
108     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
109 }
110 
111 /**
112  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TA_VERSION
113  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TA_VERSION
114  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
115  */
116 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TA_VERSION, Function | MediumTest | Level0)
117 {
118     TEEC_Result ret;
119     int rc;
120     TestData value = { 0 };
121     value.cmd = CMD_TEE_GetPropertyAsString;
122     value.propSet = TEE_PROPSET_CURRENT_TA;
123     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_VERSION, sizeof(GPD_TA_VERSION));
124     ASSERT_EQ(rc, 0);
125     value.inBufferLen = sizeof(GPD_TA_VERSION);
126 
127     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
128     ASSERT_EQ(ret, TEEC_SUCCESS);
129     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
130     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_TA_VERSION);
131 }
132 
133 /**
134  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TA_DESCRIPTION
135  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TA_DESCRIPTION
136  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
137  */
138 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TA_DESCRIPTION, Function | MediumTest | Level0)
139 {
140     TEEC_Result ret;
141     int rc;
142 
143     TestData value = { 0 };
144     value.cmd = CMD_TEE_GetPropertyAsString;
145     value.propSet = TEE_PROPSET_CURRENT_TA;
146     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_DESCRIPTION, sizeof(GPD_TA_DESCRIPTION));
147     ASSERT_EQ(rc, 0);
148     value.inBufferLen = sizeof(GPD_TA_DESCRIPTION);
149 
150     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
151     ASSERT_EQ(ret, TEEC_SUCCESS);
152     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
153     ASSERT_STREQ(value.outBuffer, VALUE_PREDEFINED_TA_DESCRIPTION);
154 }
155 
156 /**
157  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_APIVERSION
158  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_APIVERSION
159  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
160  */
161 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_APIVERSION, Function | MediumTest | Level0)
162 {
163     TEEC_Result ret;
164     int rc;
165 
166     TestData value = { 0 };
167     value.cmd = CMD_TEE_GetPropertyAsString;
168     value.propSet = TEE_PROPSET_IMPLEMENTATION;
169     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_APIVERSION, sizeof(GPD_TEE_APIVERSION));
170     ASSERT_EQ(rc, 0);
171     value.inBufferLen = sizeof(GPD_TEE_APIVERSION);
172 
173     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
174     ASSERT_EQ(ret, TEEC_SUCCESS);
175     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
176     ASSERT_STREQ(value.outBuffer, TEE_API_VERSION);
177 }
178 
179 /**
180  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_DESCRIPTION
181  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_DESCRIPTION
182  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
183  */
184 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_DESCRIPTION, Function | MediumTest | Level0)
185 {
186     TEEC_Result ret;
187     int rc;
188 
189     TestData value = { 0 };
190     value.cmd = CMD_TEE_GetPropertyAsString;
191     value.propSet = TEE_PROPSET_IMPLEMENTATION;
192     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_DESCRIPTION, sizeof(GPD_TEE_DESCRIPTION));
193     ASSERT_EQ(rc, 0);
194     value.inBufferLen = sizeof(GPD_TEE_DESCRIPTION);
195 
196     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
197     ASSERT_EQ(ret, TEEC_SUCCESS);
198     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
199     ASSERT_STREQ(value.outBuffer, TEE_BUILD_VER);
200 }
201 
202 /**
203  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_IMP_VERSION
204  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_TRUSTEDOS_IMP_VERSION
205  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
206  */
207 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_IMP_VERSION, Function | MediumTest | Level0)
208 {
209     TEEC_Result ret;
210     int rc;
211 
212     TestData value = { 0 };
213     value.cmd = CMD_TEE_GetPropertyAsString;
214     value.propSet = TEE_PROPSET_IMPLEMENTATION;
215     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_TRUSTEDOS_IMP_VERSION, sizeof(GPD_TEE_TRUSTEDOS_IMP_VERSION));
216     ASSERT_EQ(rc, 0);
217     value.inBufferLen = sizeof(GPD_TEE_TRUSTEDOS_IMP_VERSION);
218 
219     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
220     ASSERT_EQ(ret, TEEC_SUCCESS);
221     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
222     ASSERT_STREQ(value.outBuffer, TEE_IMP_VERSION);
223 }
224 
225 /**
226  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION
227  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION
228  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
229  */
230 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION,
231     Function | MediumTest | Level0)
232 {
233     TEEC_Result ret;
234     int rc;
235 
236     TestData value = { 0 };
237     value.cmd = CMD_TEE_GetPropertyAsString;
238     value.propSet = TEE_PROPSET_IMPLEMENTATION;
239     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION,
240         sizeof(GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION));
241     ASSERT_EQ(rc, 0);
242     value.inBufferLen = sizeof(GPD_TEE_TRUSTEDOS_IMP_BINARYVERSION);
243 
244     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
245     ASSERT_EQ(ret, TEEC_SUCCESS);
246     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
247     ASSERT_STREQ(value.outBuffer, TEE_IMP_VERSION);
248 }
249 
250 /**
251  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_IMP_VERSION
252  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_FIRMWARE_IMP_VERSION
253  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
254  */
255 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_IMP_VERSION, Function | MediumTest | Level0)
256 {
257     TEEC_Result ret;
258     int rc;
259 
260     TestData value = { 0 };
261     value.cmd = CMD_TEE_GetPropertyAsString;
262     value.propSet = TEE_PROPSET_IMPLEMENTATION;
263     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_FIRMWARE_IMP_VERSION, sizeof(GPD_TEE_FIRMWARE_IMP_VERSION));
264     ASSERT_EQ(rc, 0);
265     value.inBufferLen = sizeof(GPD_TEE_FIRMWARE_IMP_VERSION);
266 
267     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
268     ASSERT_EQ(ret, TEEC_SUCCESS);
269     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
270     ASSERT_STREQ(value.outBuffer, TEE_FIRMWARE_IMP_VERSION);
271 }
272 
273 /**
274  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_IMP_BINARYVERSION
275  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_FIRMWARE_IMP_BINARYVERSION
276  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
277  */
278 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_IMP_BINARYVERSION,
279     Function | MediumTest | Level0)
280 {
281     TEEC_Result ret;
282     int rc;
283 
284     TestData value = { 0 };
285     value.cmd = CMD_TEE_GetPropertyAsString;
286     value.propSet = TEE_PROPSET_IMPLEMENTATION;
287     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_FIRMWARE_IMP_BINARYVERSION,
288         sizeof(GPD_TEE_FIRMWARE_IMP_BINARYVERSION));
289     ASSERT_EQ(rc, 0);
290     value.inBufferLen = sizeof(GPD_TEE_FIRMWARE_IMP_BINARYVERSION);
291 
292     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
293     ASSERT_EQ(ret, TEEC_SUCCESS);
294     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
295     ASSERT_STREQ(value.outBuffer, TEE_FIRMWARE_IMP_VERSION);
296 }
297 
298 /**
299  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_MANUFACTURER
300  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_TRUSTEDOS_MANUFACTURER
301  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
302  */
303 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_TRUSTEDOS_MANUFACTURER, Function | MediumTest | Level0)
304 {
305     TEEC_Result ret;
306     int rc;
307 
308     TestData value = { 0 };
309     value.cmd = CMD_TEE_GetPropertyAsString;
310     value.propSet = TEE_PROPSET_IMPLEMENTATION;
311     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_TRUSTEDOS_MANUFACTURER, sizeof(GPD_TEE_TRUSTEDOS_MANUFACTURER));
312     ASSERT_EQ(rc, 0);
313     value.inBufferLen = sizeof(GPD_TEE_TRUSTEDOS_MANUFACTURER);
314 
315     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
316     ASSERT_EQ(ret, TEEC_SUCCESS);
317     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
318     ASSERT_STREQ(value.outBuffer, TEE_MANUFACTURER);
319 }
320 
321 /**
322  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_MANUFACTURER
323  * @testcase.desc      : test TA call TEE_GetPropertyAsString to get value of GPD_TEE_FIRMWARE_MANUFACTURER
324  * @testcase.expect    : return TEEC_SUCCESS, get value is correct
325  */
326 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_GPD_TEE_FIRMWARE_MANUFACTURER, Function | MediumTest | Level0)
327 {
328     TEEC_Result ret;
329     int rc;
330 
331     TestData value = { 0 };
332     value.cmd = CMD_TEE_GetPropertyAsString;
333     value.propSet = TEE_PROPSET_IMPLEMENTATION;
334     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TEE_FIRMWARE_MANUFACTURER, sizeof(GPD_TEE_FIRMWARE_MANUFACTURER));
335     ASSERT_EQ(rc, 0);
336     value.inBufferLen = sizeof(GPD_TEE_FIRMWARE_MANUFACTURER);
337 
338     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
339     ASSERT_EQ(ret, TEEC_SUCCESS);
340     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
341     ASSERT_STREQ(value.outBuffer, TEE_FIRMWARE_MANUFACTURER);
342 }
343 
344 /**
345  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_PropsetIsZero
346  * @testcase.desc      : test TA call TEE_GetPropertyAsString while Propset Is Zero
347  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
348  */
349 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_PropsetIsZero, Function | MediumTest | Level0)
350 {
351     TEEC_Result ret;
352     int rc;
353 
354     TestData value = { 0 };
355     value.cmd = CMD_TEE_GetPropertyAsString;
356     value.propSet = TEE_PROPSET_ZERO;
357     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
358     ASSERT_EQ(rc, 0);
359     value.inBufferLen = sizeof(GPD_TA_APPID);
360     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
361     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
362     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
363 }
364 
365 /**
366  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_NameIsNULL
367  * @testcase.desc      : test TA call TEE_GetPropertyAsString while name is null
368  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
369  */
370 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_NameIsNULL, Function | MediumTest | Level0)
371 {
372     TEEC_Result ret;
373 
374     TestData value = { 0 };
375     value.cmd = CMD_TEE_GetPropertyAsString;
376     value.caseId = INPUT_ISNULL;
377     value.propSet = TEE_PROPSET_CURRENT_TA;
378     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
379     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
380     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
381 }
382 
383 /**
384  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_NameIsZero
385  * @testcase.desc      : test TA call TEE_GetPropertyAsString while name value is zero
386  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
387  */
388 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_NameIsZero, Function | MediumTest | Level0)
389 {
390     TEEC_Result ret;
391 
392     TestData value = { 0 };
393     value.cmd = CMD_TEE_GetPropertyAsString;
394     value.propSet = TEE_PROPSET_CURRENT_TA;
395     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
396     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
397     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
398 }
399 
400 /**
401  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_ValueBufferIsNULL
402  * @testcase.desc      : test TA call TEE_GetPropertyAsString while value buffer is null
403  * @testcase.expect    : return TEEC_ERROR_SHORT_BUFFER
404  */
405 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_ValueBufferIsNULL, Function | MediumTest | Level0)
406 {
407     TEEC_Result ret;
408     int rc;
409 
410     TestData value = { 0 };
411     value.cmd = CMD_TEE_GetPropertyAsString;
412     value.caseId = OUTPUT_ISNULL;
413     value.propSet = TEE_PROPSET_CURRENT_TA;
414     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
415     ASSERT_EQ(rc, 0);
416     value.inBufferLen = sizeof(GPD_TA_APPID);
417     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
418     ASSERT_EQ(ret, TEEC_ERROR_SHORT_BUFFER);
419     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
420 }
421 
422 /**
423  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_ValueBufferSizeIsNULL
424  * @testcase.desc      : test TA call TEE_GetPropertyAsString while value buffer size is null
425  * @testcase.expect    : return TEEC_ERROR_SHORT_BUFFER
426  */
427 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_ValueBufferSizeIsNULL, Function | MediumTest | Level0)
428 {
429     TEEC_Result ret;
430     int rc;
431 
432     TestData value = { 0 };
433     value.cmd = CMD_TEE_GetPropertyAsString;
434     value.caseId = OUTPUTBUFFERSIZE_ISNULL;
435     value.propSet = TEE_PROPSET_CURRENT_TA;
436     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
437     ASSERT_EQ(rc, 0);
438     value.inBufferLen = sizeof(GPD_TA_APPID);
439     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
440     ASSERT_EQ(ret, TEEC_ERROR_SHORT_BUFFER);
441     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
442 }
443 
444 /**
445  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_ValueBufferSizeIsZero
446  * @testcase.desc      : test TA call TEE_GetPropertyAsString while value buffer size is zero
447  * @testcase.expect    : return TEEC_ERROR_SHORT_BUFFER
448  */
449 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_ValueBufferSizeIsZero, Function | MediumTest | Level0)
450 {
451     TEEC_Result ret;
452     int rc;
453 
454     TestData value = { 0 };
455     value.cmd = CMD_TEE_GetPropertyAsString;
456     value.caseId = OUTPUTBUFFERSIZE_ISZERO;
457     value.propSet = TEE_PROPSET_CURRENT_TA;
458     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
459     ASSERT_EQ(rc, 0);
460     value.inBufferLen = sizeof(GPD_TA_APPID);
461 
462     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
463     ASSERT_EQ(ret, TEEC_ERROR_SHORT_BUFFER);
464     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
465 }
466 
467 /**
468  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_NameNotFound
469  * @testcase.desc      : test TA call TEE_GetPropertyAsString while Name Not Found
470  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
471  */
472 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_NameNotFound, Function | MediumTest | Level0)
473 {
474     TEEC_Result ret;
475     int rc;
476 
477     TestData value = { 0 };
478     value.cmd = CMD_TEE_GetPropertyAsString;
479     value.propSet = TEE_PROPSET_CURRENT_TA;
480     rc = memcpy_s(value.inBuffer, BIG_SIZE, PROPERTY_NAME_UNKNOWN, sizeof(PROPERTY_NAME_UNKNOWN));
481     ASSERT_EQ(rc, 0);
482     value.inBufferLen = sizeof(PROPERTY_NAME_UNKNOWN);
483 
484     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
485     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
486     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
487 }
488 
489 /**
490  * @testcase.name      : TEE_GetPropertyAsString_WithoutEnum_BufferTooShort
491  * @testcase.desc      : test TA call TEE_GetPropertyAsString while out buffer is too short
492  * @testcase.expect    : return TEEC_ERROR_SHORT_BUFFER
493  */
494 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsString_WithoutEnum_BufferTooShort, Function | MediumTest | Level0)
495 {
496     TEEC_Result ret;
497     int rc;
498 
499     TestData value = { 0 };
500     value.cmd = CMD_TEE_GetPropertyAsString;
501     value.caseId = OUTPUTBUFFERSIZE_TOOSHORT;
502     value.propSet = TEE_PROPSET_CURRENT_TA;
503     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_APPID, sizeof(GPD_TA_APPID));
504     ASSERT_EQ(rc, 0);
505     value.inBufferLen = sizeof(GPD_TA_APPID);
506 
507     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
508     ASSERT_EQ(ret, TEEC_ERROR_SHORT_BUFFER);
509     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
510 }