• 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 <common_test.h>
14 #include <gtest/gtest.h>
15 #include <securec.h>
16 #include <tee_client_api.h>
17 #include <tee_client_type.h>
18 #include <test_defines.h>
19 #include <test_log.h>
20 #include <test_tcf_cmdid.h>
21 
22 using namespace testing::ext;
23 /**
24  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_TESTU64
25  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 to get value of  SMC_TA_TESTU64
26  * @testcase.expect    : return TEEC_SUCCESS
27 */
28 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_TESTU64, Function | MediumTest | Level0)
29 {
30     TEEC_Result ret;
31     int rc;
32     TestData value = { 0 };
33     value.cmd = CMD_TEE_GetPropertyAsU64;
34     value.propSet = TEE_PROPSET_CURRENT_TA;
35     rc = memcpy_s(value.inBuffer, BIG_SIZE, SMC_TA_TESTU64, sizeof(SMC_TA_TESTU64));
36     ASSERT_EQ(rc, 0);
37     value.inBufferLen = sizeof(SMC_TA_TESTU64);
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_EQ(atoll(value.outBuffer), VALUE_PREDEFINED_U64);
43     ASSERT_EQ(value.outBufferLen, strlen(value.outBuffer) + 1);
44 }
45 
46 /**
47  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_NameIsNull
48  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 for name is null
49  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
50 */
51 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameIsNull, Function | MediumTest | Level0)
52 {
53     TEEC_Result ret;
54 
55     TestData value = { 0 };
56     value.cmd = CMD_TEE_GetPropertyAsU64;
57     value.caseId = INPUT_ISNULL;
58     value.propSet = TEE_PROPSET_CURRENT_TA;
59 
60     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
61     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
62     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
63 }
64 
65 /**
66  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_NameIsZero
67  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 for name value is zero
68  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
69 */
70 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameIsZero, Function | MediumTest | Level0)
71 {
72     TEEC_Result ret;
73 
74     TestData value = { 0 };
75     value.cmd = CMD_TEE_GetPropertyAsU64;
76     value.propSet = TEE_PROPSET_CURRENT_TA;
77 
78     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
79     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
80     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
81 }
82 
83 /**
84  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_ValueIsNull
85  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 for value is null
86  * @testcase.expect    : return TEEC_ERROR_BAD_PARAMETERS
87 */
88 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_ValueIsNull, Function | MediumTest | Level0)
89 {
90     TEEC_Result ret;
91 
92     int rc;
93     TestData value = { 0 };
94     value.cmd = CMD_TEE_GetPropertyAsU64;
95     value.caseId = OUTPUT_ISNULL;
96     value.propSet = TEE_PROPSET_CURRENT_TA;
97     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_DATASIZE, sizeof(GPD_TA_DATASIZE));
98     ASSERT_EQ(rc, 0);
99     value.inBufferLen = sizeof(GPD_TA_DATASIZE);
100 
101     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
102     ASSERT_EQ(ret, TEEC_ERROR_BAD_PARAMETERS);
103     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
104 }
105 
106 /**
107  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_NameNotFound
108  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 while Name Not Found
109  * @testcase.expect    : return TEEC_ERROR_ITEM_NOT_FOUND
110 */
111 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameNotFound, Function | MediumTest | Level0)
112 {
113     TEEC_Result ret;
114 
115     int rc;
116     TestData value = { 0 };
117     value.cmd = CMD_TEE_GetPropertyAsU64;
118     value.propSet = TEE_PROPSET_CURRENT_TA;
119     rc = memcpy_s(value.inBuffer, BIG_SIZE, PROPERTY_NAME_UNKNOWN, sizeof(PROPERTY_NAME_UNKNOWN));
120     ASSERT_EQ(rc, 0);
121     value.inBufferLen = sizeof(PROPERTY_NAME_UNKNOWN);
122 
123     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
124     ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND);
125     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
126 }
127 
128 /**
129  * @testcase.name      : TEE_GetPropertyAsU64_WithoutEnum_NameNotU64
130  * @testcase.desc      : test TA call TEE_GetPropertyAsU64 while Name type is not U64
131  * @testcase.expect    : return TEEC_ERROR_BAD_FORMAT
132 */
133 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameNotU64, Function | MediumTest | Level0)
134 {
135     TEEC_Result ret;
136 
137     int rc;
138     TestData value = { 0 };
139     value.cmd = CMD_TEE_GetPropertyAsU64;
140     value.propSet = TEE_PROPSET_CURRENT_TA;
141     rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_DESCRIPTION, sizeof(GPD_TA_DESCRIPTION));
142     ASSERT_EQ(rc, 0);
143     value.inBufferLen = sizeof(GPD_TA_DESCRIPTION);
144 
145     ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value);
146     ASSERT_EQ(ret, TEEC_ERROR_BAD_FORMAT);
147     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
148 }
149