• 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 
15 #include <public_test.h>
16 #include <test_log.h>
17 #include <securec.h>
18 #include <common_test.h>
19 #include <tee_client_api.h>
20 #include <tee_client_type.h>
21 #include <session_mgr/client_session_mgr.h>
22 
23 using namespace testing::ext;
24 /**
25  * @testcase.name      : GetSystemTime
26  * @testcase.desc      : test TEE_GetSystemTime api
27  * @testcase.expect    : return TEEC_SUCCESS
28  */
29 TEE_TEST(TeeBasicTestFram, TEE_GetSystemTime, Function | MediumTest | Level0)
30 {
31     ClientSessionMgr sess;
32     uint32_t origin;
33     TEEC_UUID testId = TIME_API_UUID;
34     TEEC_Result ret = sess.Start(&testId);
35     ASSERT_EQ(ret, TEEC_SUCCESS);
36 
37     TEEC_Operation operation = {0};
38     operation.started = 1;
39     operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE);
40     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_SYSTEM_TIME, &operation, &origin);
41     ASSERT_EQ(ret, TEEC_SUCCESS);
42 #ifndef TEST_STUB
43     uint32_t time1 = operation.params[1].value.a;
44 
45     sleep(3); // wait for 3s
46     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_SYSTEM_TIME, &operation, &origin);
47     ASSERT_EQ(ret, TEEC_SUCCESS);
48 
49     uint32_t time2 = operation.params[1].value.a;
50     ASSERT_LT(time1, time2);
51 #endif
52     sess.Destroy();
53 }
54 
55 /**
56  * @testcase.name      : TeeWait
57  * @testcase.desc      : test TEE_Wait api
58  * @testcase.expect    : return TEEC_SUCCESS
59  */
60 TEE_TEST(TeeBasicTestFram, TeeWait, Function | MediumTest | Level0)
61 {
62     ClientSessionMgr sess;
63     uint32_t origin;
64     TEEC_UUID testId = TIME_API_UUID;
65     TEEC_Result ret = sess.Start(&testId);
66     ASSERT_EQ(ret, TEEC_SUCCESS);
67 
68     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_TEE_WAIT, NULL, &origin);
69 #ifndef TEST_STUB
70     ASSERT_EQ(ret, TEEC_SUCCESS);
71 #else
72     ASSERT_EQ(ret, TEEC_ERROR_NOT_SUPPORTED);
73 #endif
74     sess.Destroy();
75 }
76 
77 /**
78  * @testcase.name      : GetPersistentTime
79  * @testcase.desc      : test get persistent time
80  * @testcase.expect    : return TEEC_SUCCESS
81  */
82 TEE_TEST(TeeBasicTestFram, GetPersistentTime, Function | MediumTest | Level0)
83 {
84     ClientSessionMgr sess;
85     uint32_t origin;
86     TEEC_UUID testId = TIME_API_UUID;
87     TEEC_Result ret = sess.Start(&testId);
88     ASSERT_EQ(ret, TEEC_SUCCESS);
89 
90     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_PERSISTENT_TIME, NULL, &origin);
91 #ifndef TEST_STUB
92     ASSERT_EQ(ret, TEEC_SUCCESS);
93 #else
94     ASSERT_EQ(ret, TEEC_ERROR_NOT_SUPPORTED);
95 #endif
96     sess.Destroy();
97 }
98 
99 /**
100  * @testcase.name      : SetPersistentTime
101  * @testcase.desc      : test set persistent time
102  * @testcase.expect    : return TEEC_SUCCESS
103  */
104 TEE_TEST(TeeBasicTestFram, SetPersistentTime, Function | MediumTest | Level0)
105 {
106     ClientSessionMgr sess;
107     uint32_t origin;
108     TEEC_UUID testId = TIME_API_UUID;
109     TEEC_Result ret = sess.Start(&testId);
110     ASSERT_EQ(ret, TEEC_SUCCESS);
111 
112     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_SET_PERSISTENT_TIME, NULL, &origin);
113 #ifndef TEST_STUB
114     ASSERT_EQ(ret, TEEC_SUCCESS);
115 #else
116     ASSERT_EQ(ret, TEEC_ERROR_NOT_SUPPORTED);
117 #endif
118     sess.Destroy();
119 }
120 
121 /**
122  * @testcase.name      : TestPersistentTimeWithException
123  * @testcase.desc      : test set and get persistent time with exception
124  * @testcase.expect    : return TEEC_SUCCESS
125  */
126 TEE_TEST(TeeBasicTestFram, TestPersistentTimeWithException, Function | MediumTest | Level0)
127 {
128     ClientSessionMgr sess;
129     uint32_t origin;
130     TEEC_UUID testId = TIME_API_UUID;
131     TEEC_Result ret = sess.Start(&testId);
132     ASSERT_EQ(ret, TEEC_SUCCESS);
133 
134     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_PERSISTENT_TIME_WITH_EXCEPTION, NULL, &origin);
135 #ifndef TEST_STUB
136     ASSERT_EQ(ret, TEEC_SUCCESS);
137 #else
138     ASSERT_EQ(ret, TEEC_ERROR_NOT_SUPPORTED);
139 #endif
140     sess.Destroy();
141 }
142 
143 /**
144  * @testcase.name      : OnlyGetPersistentTime
145  * @testcase.desc      : test only get persistent time
146  * @testcase.expect    : return TEEC_SUCCESS
147  */
148 TEE_TEST(TeeBasicTestFram, OnlyGetPersistentTime, Function | MediumTest | Level0)
149 {
150     ClientSessionMgr sess;
151     uint32_t origin;
152     TEEC_UUID testId = TIME_API_UUID;
153     TEEC_Result ret = sess.Start(&testId);
154     ASSERT_EQ(ret, TEEC_SUCCESS);
155 
156     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_ONLY_GET_PERSISTENT_TIME, NULL, &origin);
157     ASSERT_EQ(ret, TEEC_SUCCESS);
158     sess.Destroy();
159 }
160 
161 /**
162  * @testcase.name      : GetReeTime
163  * @testcase.desc      : test TEE_GetREETime api
164  * @testcase.expect    : return TEEC_SUCCESS
165  */
166 TEE_TEST(TeeBasicTestFram, GetReeTime, Function | MediumTest | Level0)
167 {
168     ClientSessionMgr sess;
169     uint32_t origin;
170     TEEC_UUID testId = TIME_API_UUID;
171     TEEC_Result ret = sess.Start(&testId);
172     ASSERT_EQ(ret, TEEC_SUCCESS);
173 
174     TEEC_Operation operation = {0};
175     operation.started = 1;
176     operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE);
177     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_REE_TIME, &operation, &origin);
178     ASSERT_EQ(ret, TEEC_SUCCESS);
179 #ifndef TEST_STUB
180     uint32_t time1 = operation.params[1].value.a;
181 
182     sleep(3); // wait for 3s
183     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_REE_TIME, &operation, &origin);
184     ASSERT_EQ(ret, TEEC_SUCCESS);
185 
186     uint32_t time2 = operation.params[1].value.a;
187 
188     ASSERT_LT(time1, time2);
189 #endif
190     sess.Destroy();
191 }
192 
193 /**
194  * @testcase.name      : GetSecureRtcTime
195  * @testcase.desc      : test tee_get_secure_rtc_time api
196  * @testcase.expect    : return TEEC_SUCCESS
197  */
198 TEE_TEST(TeeBasicTestFram, GetSecureRtcTime, Function | MediumTest | Level0)
199 {
200     ClientSessionMgr sess;
201     uint32_t origin;
202     TEEC_UUID testId = TIME_API_UUID;
203     TEEC_Result ret = sess.Start(&testId);
204     ASSERT_EQ(ret, TEEC_SUCCESS);
205     uint32_t time = 0;
206 
207     TEEC_Operation operation = {0};
208     operation.started = 1;
209     operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE);
210     operation.params[1].value.a = 0;
211     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_GET_SECURE_RTC_TIME, &operation, &origin);
212     ASSERT_EQ(ret, TEEC_SUCCESS);
213     time = operation.params[1].value.a;
214 #ifndef TEST_STUB
215     ASSERT_LT(0, time);
216 #endif
217 
218     sess.Destroy();
219 }
220 
221 /**
222  * @testcase.name      : CreateDestoryExpireRemainTimer
223  * @testcase.desc      : test tee_ext_create_timer, tee_ext_destory_timer, tee_ext_get_timer_expire,
224  *                       tee_ext_get_timer_remain api
225  * @testcase.expect    : return TEEC_SUCCESS
226  */
227 TEE_TEST(TeeBasicTestFram, CreateDestoryExpireRemainTimer, Function | MediumTest | Level0)
228 {
229     ClientSessionMgr sess;
230     uint32_t origin;
231     TEEC_UUID testId = TIME_API_UUID;
232     TEEC_Result ret = sess.Start(&testId);
233     ASSERT_EQ(ret, TEEC_SUCCESS);
234 
235     TEEC_Operation operation = { 0 };
236     operation.started = 1;
237     operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_VALUE_INOUT, TEEC_NONE, TEEC_NONE);
238     operation.params[1].value.a = 0;
239     operation.params[1].value.b = 3;
240     ret = TEEC_InvokeCommand(&sess.session, CMD_ID_TEST_OPERATE_TIMER, &operation, &origin);
241 #ifndef TEST_STUB
242     ASSERT_EQ(ret, TEEC_SUCCESS);
243     ASSERT_EQ(operation.params[1].value.a, 3);
244     ASSERT_EQ(operation.params[1].value.b, 2); // get remain time
245 #else
246     ASSERT_EQ(ret, TEEC_ERROR_NOT_SUPPORTED);
247 #endif
248 
249     sess.Destroy();
250 }