blob: b987bf6ca7d0d8b7d1efcb3144a59fc3003596ff [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <string.h>
15#include <stdio.h>
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +080016#include <pthread.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020017
18#include <adbg.h>
19#include <xtest_test.h>
20#include <xtest_helpers.h>
21
22#include <tee_client_api.h>
23#include <ta_storage.h>
24#include <tee_api_defines.h>
Jerome Forissier0e99d6a2016-07-25 14:21:43 +020025#include <tee_api_defines_extensions.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020026#include <tee_api_types.h>
Jerome Forissiere3688342015-09-24 10:45:17 -070027#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +020028#include <TTA_DS_protocol.h>
29#endif
Jerome Forissier0e99d6a2016-07-25 14:21:43 +020030#include <util.h>
31
32static uint32_t storage_ids[] = {
33 TEE_STORAGE_PRIVATE,
34#ifdef CFG_REE_FS
35 TEE_STORAGE_PRIVATE_REE,
36#endif
37#ifdef CFG_RPMB_FS
38 TEE_STORAGE_PRIVATE_RPMB,
39#endif
40};
Pascal Brandc639ac82015-07-02 08:53:34 +020041
42static uint8_t file_00[] = {
43 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
44 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
45 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
46 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E
47};
48
49static uint8_t file_01[] = {
50 0x01, 0x00
51};
52
53static uint8_t file_02[] = {
54 0x02, 0x11, 0x02
55};
56
57static uint8_t file_03[] = {
58 0x03, 0x13, 0x03
59};
60
Pascal Brandeb84c442016-04-19 17:49:49 +020061static uint8_t file_04[] = {
62 0x00, 0x01, 0x02
63};
64
Pascal Brandc639ac82015-07-02 08:53:34 +020065static uint8_t data_00[] = {
66 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
67 0x00, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
68 0x00, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
69 0x00, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x00
70};
71
72static uint8_t data_01[] = {
73 0x01, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
74 0x01, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
75 0x01, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
76 0x01, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x01
77};
78
Jens Wiklanderaba31ba2017-02-15 15:24:06 +010079static uint32_t fs_id_for_tee_storage_private(void)
80{
81#if defined(CFG_REE_FS)
82 return TEE_STORAGE_PRIVATE_REE;
83#elif defined(CFG_RPMB_FS)
84 return TEE_STORAGE_PRIVATE_RPMB;
Jens Wiklanderaba31ba2017-02-15 15:24:06 +010085#endif
86}
87
88static uint32_t real_id_for(uint32_t id)
89{
90 if (id == TEE_STORAGE_PRIVATE)
91 return fs_id_for_tee_storage_private();
92 return id;
93}
94
95static bool storage_is(uint32_t id1, uint32_t id2)
96{
97 return (real_id_for(id1) == real_id_for(id2));
98}
99
Pascal Brandc639ac82015-07-02 08:53:34 +0200100static TEEC_Result fs_open(TEEC_Session *sess, void *id, uint32_t id_size,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200101 uint32_t flags, uint32_t *obj, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200102{
Aijun Sun473d9072015-08-06 15:24:49 +0800103 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200104 TEEC_Result res;
105 uint32_t org;
106
107 op.params[0].tmpref.buffer = id;
108 op.params[0].tmpref.size = id_size;
109 op.params[1].value.a = flags;
110 op.params[1].value.b = 0;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200111 op.params[2].value.a = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200112
113 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200114 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
Pascal Brandc639ac82015-07-02 08:53:34 +0200115 TEEC_NONE);
116
117 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org);
118
119 if (res == TEEC_SUCCESS)
120 *obj = op.params[1].value.b;
121
122 return res;
123}
124
125static TEEC_Result fs_create(TEEC_Session *sess, void *id, uint32_t id_size,
126 uint32_t flags, uint32_t attr, void *data,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200127 uint32_t data_size, uint32_t *obj,
128 uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200129{
Aijun Sun473d9072015-08-06 15:24:49 +0800130 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200131 TEEC_Result res;
132 uint32_t org;
133
134 op.params[0].tmpref.buffer = id;
135 op.params[0].tmpref.size = id_size;
136 op.params[1].value.a = flags;
137 op.params[1].value.b = 0;
138 op.params[2].value.a = attr;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200139 op.params[2].value.b = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200140 op.params[3].tmpref.buffer = data;
141 op.params[3].tmpref.size = data_size;
142
143 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
144 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
145 TEEC_MEMREF_TEMP_INPUT);
146
147 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE, &op, &org);
148
149 if (res == TEEC_SUCCESS)
150 *obj = op.params[1].value.b;
151
152 return res;
153}
154
Pascal Brandeb84c442016-04-19 17:49:49 +0200155static TEEC_Result fs_create_overwrite(TEEC_Session *sess, void *id,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200156 uint32_t id_size, uint32_t storage_id)
Pascal Brandeb84c442016-04-19 17:49:49 +0200157{
158 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
159 TEEC_Result res;
160 uint32_t org;
161
162 op.params[0].tmpref.buffer = id;
163 op.params[0].tmpref.size = id_size;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200164 op.params[1].value.a = storage_id;
Pascal Brandeb84c442016-04-19 17:49:49 +0200165
166 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200167 TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brandeb84c442016-04-19 17:49:49 +0200168 TEEC_NONE);
169
170 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE_OVERWRITE, &op, &org);
171
172 return res;
173}
174
Pascal Brandc639ac82015-07-02 08:53:34 +0200175static TEEC_Result fs_close(TEEC_Session *sess, uint32_t obj)
176{
Aijun Sun473d9072015-08-06 15:24:49 +0800177 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200178 uint32_t org;
179
180 op.params[0].value.a = obj;
181
182 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
183 TEEC_NONE, TEEC_NONE);
184
185 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CLOSE, &op, &org);
186}
187
188static TEEC_Result fs_read(TEEC_Session *sess, uint32_t obj, void *data,
189 uint32_t data_size, uint32_t *count)
190{
191 TEEC_Result res;
Aijun Sun473d9072015-08-06 15:24:49 +0800192 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200193 uint32_t org;
194
195 op.params[0].tmpref.buffer = data;
196 op.params[0].tmpref.size = data_size;
197 op.params[1].value.a = obj;
198 op.params[1].value.b = 0;
199
200 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
201 TEEC_VALUE_INOUT, TEEC_NONE,
202 TEEC_NONE);
203
204 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_READ, &op, &org);
205
206 if (res == TEEC_SUCCESS)
207 *count = op.params[1].value.b;
208
209 return res;
210}
211
212static TEEC_Result fs_write(TEEC_Session *sess, uint32_t obj, void *data,
213 uint32_t data_size)
214{
Aijun Sun473d9072015-08-06 15:24:49 +0800215 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200216 uint32_t org;
217
218 op.params[0].tmpref.buffer = data;
219 op.params[0].tmpref.size = data_size;
220 op.params[1].value.a = obj;
221 op.params[1].value.b = 0;
222
223 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
224 TEEC_VALUE_INPUT, TEEC_NONE,
225 TEEC_NONE);
226
227 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_WRITE, &op, &org);
228}
229
230static TEEC_Result fs_seek(TEEC_Session *sess, uint32_t obj, int32_t offset,
231 int32_t whence)
232{
Aijun Sun473d9072015-08-06 15:24:49 +0800233 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200234 uint32_t org;
235
236 op.params[0].value.a = obj;
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +0200237 op.params[0].value.b = *(uint32_t *)&offset;
Pascal Brandc639ac82015-07-02 08:53:34 +0200238 op.params[1].value.a = whence;
239
240 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INOUT,
241 TEEC_NONE, TEEC_NONE);
242
243 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_SEEK, &op, &org);
244}
245
246static TEEC_Result fs_unlink(TEEC_Session *sess, uint32_t obj)
247{
Aijun Sun473d9072015-08-06 15:24:49 +0800248 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200249 uint32_t org;
250
251 op.params[0].value.a = obj;
252
253 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
254 TEEC_NONE, TEEC_NONE);
255
256 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_UNLINK, &op, &org);
257}
258
259static TEEC_Result fs_trunc(TEEC_Session *sess, uint32_t obj, uint32_t len)
260{
Aijun Sun473d9072015-08-06 15:24:49 +0800261 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200262 uint32_t org;
263
264 op.params[0].value.a = obj;
265 op.params[0].value.b = len;
266
267 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
268 TEEC_NONE, TEEC_NONE);
269
270 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_TRUNC, &op, &org);
271}
272
273static TEEC_Result fs_rename(TEEC_Session *sess, uint32_t obj, void *id,
274 uint32_t id_size)
275{
Aijun Sun473d9072015-08-06 15:24:49 +0800276 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200277 uint32_t org;
278
279 op.params[0].value.a = obj;
280 op.params[1].tmpref.buffer = id;
281 op.params[1].tmpref.size = id_size;
282
283 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
284 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
285 TEEC_NONE);
286
287 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RENAME, &op, &org);
288}
289
290static TEEC_Result fs_alloc_enum(TEEC_Session *sess, uint32_t *e)
291{
292 TEEC_Result res;
Aijun Sun473d9072015-08-06 15:24:49 +0800293 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200294 uint32_t org;
295
296 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE,
297 TEEC_NONE, TEEC_NONE);
298
299 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_ENUM, &op, &org);
300
301 if (res == TEEC_SUCCESS)
302 *e = op.params[0].value.a;
303
304 return res;
305}
306
Jerome Forissier5d969d82017-03-21 10:01:04 +0100307static TEEC_Result fs_reset_enum(TEEC_Session *sess, uint32_t e)
308{
309 TEEC_Result res;
310 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
311 uint32_t org;
312
313 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
314 TEEC_NONE, TEEC_NONE);
315
316 op.params[0].value.a = e;
317 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESET_ENUM, &op, &org);
318
319 return res;
320}
321
Pascal Brandc639ac82015-07-02 08:53:34 +0200322static TEEC_Result fs_free_enum(TEEC_Session *sess, uint32_t e)
323{
Aijun Sun473d9072015-08-06 15:24:49 +0800324 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200325 uint32_t org;
326
327 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
328 TEEC_NONE);
329
330 op.params[0].value.a = e;
331
332 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_ENUM, &op, &org);
333}
334
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200335static TEEC_Result fs_start_enum(TEEC_Session *sess, uint32_t e,
336 uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200337{
Aijun Sun473d9072015-08-06 15:24:49 +0800338 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200339 uint32_t org;
340
341 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
342 TEEC_NONE, TEEC_NONE);
343
344 op.params[0].value.a = e;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200345 op.params[0].value.b = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200346
347 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_START_ENUM, &op, &org);
348}
349
350static TEEC_Result fs_next_enum(TEEC_Session *sess, uint32_t e, void *obj_info,
351 size_t info_size, void *id, uint32_t id_size)
352{
Aijun Sun473d9072015-08-06 15:24:49 +0800353 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200354 uint32_t org;
355
Pascal Brandc603e0d2016-04-25 12:37:18 +0200356 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brandc639ac82015-07-02 08:53:34 +0200357 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
Pascal Brandc603e0d2016-04-25 12:37:18 +0200358 if (obj_info && info_size)
359 op.paramTypes |= (TEEC_MEMREF_TEMP_OUTPUT << 4);
Pascal Brandc639ac82015-07-02 08:53:34 +0200360
361 op.params[0].value.a = e;
362 op.params[1].tmpref.buffer = obj_info;
363 op.params[1].tmpref.size = info_size;
364 op.params[2].tmpref.buffer = id;
365 op.params[2].tmpref.size = id_size;
366
367 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_NEXT_ENUM, &op, &org);
368}
369
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +0200370static TEEC_Result fs_restrict_usage(TEEC_Session *sess, uint32_t obj,
371 uint32_t obj_usage)
372{
373 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
374 uint32_t org;
375
376 op.params[0].value.a = obj;
377 op.params[0].value.b = obj_usage;
378
379 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
380 TEEC_NONE, TEEC_NONE);
381
382 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESTRICT_USAGE,
383 &op, &org);
384}
385
386static TEEC_Result fs_alloc_obj(TEEC_Session *sess, uint32_t obj_type,
387 uint32_t max_key_size, uint32_t *obj)
388{
389 TEEC_Result res;
390 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
391 uint32_t org;
392
393 op.params[0].value.a = obj_type;
394 op.params[0].value.b = max_key_size;
395
396 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
397 TEEC_NONE, TEEC_NONE);
398
399 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_OBJ, &op, &org);
400 *obj = op.params[1].value.a;
401 return res;
402}
403
404static TEEC_Result fs_free_obj(TEEC_Session *sess, uint32_t obj)
405{
406 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
407 uint32_t org;
408
409 op.params[0].value.a = obj;
410
411 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
412 TEEC_NONE, TEEC_NONE);
413
414 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_OBJ, &op, &org);
415}
416
417static TEEC_Result fs_reset_obj(TEEC_Session *sess, uint32_t obj)
418{
419 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
420 uint32_t org;
421
422 op.params[0].value.a = obj;
423
424 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
425 TEEC_NONE, TEEC_NONE);
426
427 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESET_OBJ, &op, &org);
428}
429
Guanchao Liang31a9cbf2016-12-20 00:35:26 +0800430static TEEC_Result fs_get_obj_info(TEEC_Session *sess, uint32_t obj,
431 void *obj_info, size_t info_size)
432{
433 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
434 uint32_t org;
435
436 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
437 TEEC_MEMREF_TEMP_OUTPUT,
438 TEEC_NONE, TEEC_NONE);
439
440 op.params[0].value.a = obj;
441 op.params[1].tmpref.buffer = obj_info;
442 op.params[1].tmpref.size = info_size;
443
444 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_GET_OBJ_INFO, &op, &org);
445}
446
James Kung98c0ba12015-09-09 15:51:59 +0800447/* trunc */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200448static void test_truncate_file_length(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800449{
450 TEEC_Session sess;
451 uint32_t obj;
452 uint8_t out[10] = { 0 };
453 uint32_t count;
454 uint32_t orig;
455
456 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
457 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
458 return;
459
460 /* create */
461 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
462 fs_create(&sess, file_01, sizeof(file_01),
463 TEE_DATA_FLAG_ACCESS_WRITE |
464 TEE_DATA_FLAG_ACCESS_READ |
465 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200466 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800467 goto exit;
468
469 /* trunc */
470 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 10)))
471 goto exit;
472
473 /* seek */
474 if (!ADBG_EXPECT_TEEC_SUCCESS(
475 c, fs_seek(&sess, obj, 5, TEE_DATA_SEEK_SET)))
476 goto exit;
477
478 /* verify */
479 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
480 goto exit;
481
482 /* check buffer */
483 (void)ADBG_EXPECT_BUFFER(c, &data_00[5], 5, out, count);
484
485 /* clean */
486 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
487 goto exit;
488
489exit:
490 TEEC_CloseSession(&sess);
491}
492
493/* extend */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200494static void test_extend_file_length(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800495{
496 TEEC_Session sess;
497 uint32_t obj;
498 uint8_t out[10] = { 0 };
499 uint8_t expect[10] = { 0 };
500 uint32_t count;
501 uint32_t orig;
502
503 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
504 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
505 return;
506
507 /* create */
508 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
509 fs_create(&sess, file_01, sizeof(file_01),
510 TEE_DATA_FLAG_ACCESS_WRITE |
511 TEE_DATA_FLAG_ACCESS_READ |
512 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200513 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800514 goto exit;
515
516 /* extend */
517 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 40)))
518 goto exit;
519
520 /* seek */
521 if (!ADBG_EXPECT_TEEC_SUCCESS(
522 c, fs_seek(&sess, obj, 30, TEE_DATA_SEEK_SET)))
523 goto exit;
524
525 /* verify */
526 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
527 goto exit;
528
529 /* check buffer */
530 expect[0] = data_00[30];
531 expect[1] = data_00[31];
532 (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count);
533
534 /* clean */
535 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
536 goto exit;
537
538exit:
539 TEEC_CloseSession(&sess);
540}
541
542/* file hole */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200543static void test_file_hole(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800544{
545 TEEC_Session sess;
546 uint32_t obj;
547 uint8_t out[10] = { 0 };
548 uint8_t expect[10] = { 0 };
549 uint32_t count;
550 uint32_t orig;
551
552 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
553 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
554 return;
555
556 /* create */
557 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
558 fs_create(&sess, file_01, sizeof(file_01),
559 TEE_DATA_FLAG_ACCESS_WRITE |
560 TEE_DATA_FLAG_ACCESS_READ |
561 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200562 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800563 goto exit;
564
565 /* seek */
566 if (!ADBG_EXPECT_TEEC_SUCCESS(
567 c, fs_seek(&sess, obj, 80, TEE_DATA_SEEK_SET)))
568 goto exit;
569
570 /* write */
571 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00,
572 sizeof(data_00))))
573 goto exit;
574
575 /* seek */
576 if (!ADBG_EXPECT_TEEC_SUCCESS(
577 c, fs_seek(&sess, obj, 74, TEE_DATA_SEEK_SET)))
578 goto exit;
579
580 /* verify */
581 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
582 goto exit;
583
584 /* check buffer */
585 expect[6] = data_00[0];
586 expect[7] = data_00[1];
587 expect[8] = data_00[2];
588 expect[9] = data_00[3];
589 (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count);
590
591 /* clean */
592 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
593 goto exit;
594
595exit:
596 TEEC_CloseSession(&sess);
597}
598
Jerome Forissiere3688342015-09-24 10:45:17 -0700599#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +0200600static TEEC_Result ds_seek_obj_inv_handle(TEEC_Session *sess)
601{
602 TEEC_Operation op;
603 uint32_t org;
604
605 op.paramTypes = TEEC_PARAM_TYPES(
606 TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
607
608 op.params[0].value.a = CASE_DATA_OBJECT_NOT_PERSISTENT;
609
610 return TEEC_InvokeCommand(
611 sess, CMD_SeekObjectData_panic, &op, &org);
612}
613
Pascal Brand8a74e362015-09-10 12:41:52 +0200614static TEEC_Result ds_seek_gp(
615 TEEC_Session *sess, TEE_Whence wh, uint32_t wh_off, uint32_t set_off,
616 void *in, size_t in_size, void *out, size_t out_size)
617{
618 TEEC_Operation op;
619 uint32_t org;
620
621 op.paramTypes = TEEC_PARAM_TYPES(
622 TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT,
623 TEEC_MEMREF_TEMP_OUTPUT);
624
625 op.params[0].value.a = wh;
626 op.params[0].value.b = wh_off;
627 op.params[1].value.a = set_off;
628 op.params[2].tmpref.buffer = in;
629 op.params[2].tmpref.size = in_size;
630 op.params[3].tmpref.buffer = out;
631 op.params[3].tmpref.size = out_size;
632
633 return TEEC_InvokeCommand(sess, CMD_SeekWriteReadObjectData, &op, &org);
634}
635
636static TEEC_Result ds_init_object_and_attributes(TEEC_Session *sess,
637 uint32_t obj_type, uint32_t obj_size, const void *attr_meta,
638 size_t attr_meta_len, const void *attr_data, size_t attr_data_len,
639 uint32_t option)
640{
641 TEEC_Operation op;
642 uint32_t org;
643
644 op.paramTypes = TEEC_PARAM_TYPES(
645 TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT,
646 TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT);
647
648 op.params[0].value.a = obj_type;
649 op.params[0].value.b = obj_size;
650 op.params[1].tmpref.buffer = (void *)attr_meta;
651 op.params[1].tmpref.size = attr_meta_len;
652 op.params[2].tmpref.buffer = (void *)attr_data;
653 op.params[2].tmpref.size = attr_data_len;
654 op.params[3].value.a = option;
655
656 return TEEC_InvokeCommand(sess, CMD_InitObjectAndAttributes, &op, &org);
657}
658
659static TEEC_Result ds_rename_access_conflict(TEEC_Session *sess)
660{
661 TEEC_Operation op;
662 uint32_t org;
663
664 op.paramTypes = TEEC_PARAM_TYPES(
665 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
666
667 return TEEC_InvokeCommand(
668 sess, CMD_RenamePersistentObject_AccessConflict, &op, &org);
669}
670
671static TEEC_Result ds_start_enum_no_item(TEEC_Session *sess)
672{
673 TEEC_Operation op;
674 uint32_t org;
675 TEEC_Result res;
676
677 op.paramTypes = TEEC_PARAM_TYPES(
678 TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
679
680 res = TEEC_InvokeCommand(
681 sess, CMD_StartNGetPersistentObjectEnumerator_itemNotFound, &op, &org);
682
683 if (res != TEEC_SUCCESS)
684 return res;
685
686 if (op.params[0].value.a != 0 || op.params[0].value.b != 0)
687 return TEEC_ERROR_GENERIC;
688
689 return res;
690}
691
692static TEEC_Result ds_rename_success(TEEC_Session *sess)
693{
694 TEEC_Operation op;
695 uint32_t org;
696
697 op.paramTypes = TEEC_PARAM_TYPES(
698 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
699
700 return TEEC_InvokeCommand(
701 sess, CMD_RenamePersistentObject_Success, &op, &org);
702}
703
704static TEEC_Result ds_null_close_free_reset(TEEC_Session *sess)
705{
706 TEEC_Operation op;
707 uint32_t org;
708
709 op.paramTypes = TEEC_PARAM_TYPES(
710 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
711
712 return TEEC_InvokeCommand(
713 sess, CMD_CloseFreeAndResetObjectSuccessHandleNull, &op, &org);
714}
715#endif
716
Pascal Brandc639ac82015-07-02 08:53:34 +0200717/* create */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200718static void xtest_tee_test_6001_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200719{
720 TEEC_Session sess;
721 uint32_t obj;
722 uint32_t orig;
723
724 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
725 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
726 return;
727
728 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
729 fs_create(&sess, file_00, sizeof(file_00),
730 TEE_DATA_FLAG_ACCESS_WRITE |
731 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200732 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200733 goto exit;
734
735 /* clean */
736 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
737 goto exit;
738
739exit:
740 TEEC_CloseSession(&sess);
741}
742
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200743#define DEFINE_TEST_MULTIPLE_STORAGE_IDS(test_name) \
744static void test_name(ADBG_Case_t *c) \
745{ \
746 size_t i; \
747 \
748 for (i = 0; i < ARRAY_SIZE(storage_ids); i++) { \
749 Do_ADBG_BeginSubCase(c, "Storage id: %08x", storage_ids[i]); \
750 test_name##_single(c, storage_ids[i]); \
751 Do_ADBG_EndSubCase(c, "Storage id: %08x", storage_ids[i]); \
752 } \
753}
754
755DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6001)
756
Pascal Brandc639ac82015-07-02 08:53:34 +0200757/* open */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200758static void xtest_tee_test_6002_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200759{
760 TEEC_Session sess;
761 uint32_t obj;
762 uint32_t orig;
763
764 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
765 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
766 return;
767
768 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
769 fs_create(&sess, file_01, sizeof(file_01),
770 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200771 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200772 goto exit;
773
774 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
775 goto exit;
776
777 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
778 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200779 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200780 goto exit;
781
782 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
783 goto exit;
784
785 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
786 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200787 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200788 goto exit;
789
790 /* clean */
791 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
792 goto exit;
793
794exit:
795 TEEC_CloseSession(&sess);
796}
797
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200798DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6002)
799
Pascal Brandc639ac82015-07-02 08:53:34 +0200800/* read */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200801static void xtest_tee_test_6003_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200802{
803 TEEC_Session sess;
804 uint32_t obj;
805 uint8_t out[10] = { 0 };
806 uint32_t count;
807 uint32_t orig;
808
809 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
810 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
811 return;
812
813 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
814 fs_create(&sess, file_02, sizeof(file_02),
815 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200816 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200817 goto exit;
818
819 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
820 goto exit;
821
822 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
823 fs_open(&sess, file_02, sizeof(file_02),
824 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200825 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200826 goto exit;
827
828 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
829 goto exit;
830
831 (void)ADBG_EXPECT_BUFFER(c, data_01, 10, out, count);
832
833 /* clean */
834 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
835 goto exit;
836
837exit:
838 TEEC_CloseSession(&sess);
839}
840
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200841DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6003)
842
Pascal Brandc639ac82015-07-02 08:53:34 +0200843/* write */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200844static void xtest_tee_test_6004_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200845{
846 TEEC_Session sess;
847 uint32_t obj;
848 uint8_t out[10] = { 0 };
849 uint32_t count;
850 uint32_t orig;
851
852 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
853 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
854 return;
855
856 /* create */
857 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
858 fs_create(&sess, file_02, sizeof(file_02),
859 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200860 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200861 goto exit;
862
863 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
864 goto exit;
865
866 /* write new data */
867 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
868 fs_open(&sess, file_02, sizeof(file_02),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200869 TEE_DATA_FLAG_ACCESS_WRITE, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200870 goto exit;
871
872 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
873 fs_write(&sess, obj, data_00, sizeof(data_00))))
874 goto exit;
875
876 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
877 goto exit;
878
879 /* verify */
880 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
881 fs_open(&sess, file_02, sizeof(file_02),
882 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200883 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200884 goto exit;
885
886 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
887 goto exit;
888
889 (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count);
890
891 /* clean */
892 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
893 goto exit;
894
895exit:
896 TEEC_CloseSession(&sess);
897}
898
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200899DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6004)
900
Pascal Brandc639ac82015-07-02 08:53:34 +0200901/* seek */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200902static void xtest_tee_test_6005_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200903{
904 TEEC_Session sess;
905 uint32_t obj;
906 uint8_t out[10] = { 0 };
907 uint32_t count;
908 uint32_t orig;
909
910 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
911 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
912 return;
913
914 /* create */
915 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
916 fs_create(&sess, file_01, sizeof(file_01),
917 TEE_DATA_FLAG_ACCESS_WRITE |
918 TEE_DATA_FLAG_ACCESS_READ |
919 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200920 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200921 goto exit;
922
923 /* seek */
924 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
925 fs_seek(&sess, obj, 10, TEE_DATA_SEEK_SET)))
926 goto exit;
927
928 /* verify */
929 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
930 goto exit;
931
932 (void)ADBG_EXPECT_BUFFER(c, &data_00[10], 10, out, count);
933
934 /* clean */
935 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
936 goto exit;
937
938exit:
939 TEEC_CloseSession(&sess);
940}
941
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200942DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6005)
943
Pascal Brandc639ac82015-07-02 08:53:34 +0200944/* unlink */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200945static void xtest_tee_test_6006_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200946{
947 TEEC_Session sess;
948 uint32_t obj;
949 uint32_t orig;
950
951 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
952 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
953 return;
954
955 /* create */
956 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
957 fs_create(&sess, file_01, sizeof(file_01),
958 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200959 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200960 goto exit;
961
962 /* del & close */
963 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
964 goto exit;
965
966 /* check result */
967 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
968 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200969 TEE_DATA_FLAG_ACCESS_READ, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200970 goto exit;
971
972exit:
973 TEEC_CloseSession(&sess);
974}
975
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200976DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6006)
977
978static void xtest_tee_test_6007_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200979{
James Kung98c0ba12015-09-09 15:51:59 +0800980 Do_ADBG_BeginSubCase(c, "Test truncate file length");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200981 test_truncate_file_length(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800982 Do_ADBG_EndSubCase(c, "Test truncate file length");
Pascal Brandc639ac82015-07-02 08:53:34 +0200983
James Kung98c0ba12015-09-09 15:51:59 +0800984 Do_ADBG_BeginSubCase(c, "Test extend file length");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200985 test_extend_file_length(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800986 Do_ADBG_EndSubCase(c, "Test extend file length");
Pascal Brandc639ac82015-07-02 08:53:34 +0200987
James Kung98c0ba12015-09-09 15:51:59 +0800988 Do_ADBG_BeginSubCase(c, "Test file hole");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200989 test_file_hole(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800990 Do_ADBG_EndSubCase(c, "Test file hole");
Pascal Brandc639ac82015-07-02 08:53:34 +0200991}
992
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200993DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6007)
994
995static void xtest_tee_test_6008_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200996{
997 TEEC_Session sess;
998 uint32_t obj;
999 uint8_t out[10] = { 0 };
1000 uint32_t count;
1001 uint32_t orig;
1002
1003 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1004 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1005 return;
1006
1007 /* create */
1008 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1009 fs_create(&sess, file_02, sizeof(file_02),
1010 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001011 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001012 goto exit;
1013
1014 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1015 goto exit;
1016
1017 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1018 fs_open(&sess, file_02, sizeof(file_02),
1019 TEE_DATA_FLAG_ACCESS_WRITE |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001020 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001021 goto exit;
1022
1023 /* write new data */
1024 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1025 fs_write(&sess, obj, data_00, sizeof(data_00))))
1026 goto exit;
1027
1028 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1029 fs_rename(&sess, obj, file_03, sizeof(file_03))))
1030 goto exit;
1031
1032 /* close */
1033 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1034 goto exit;
1035
1036 /* verify */
1037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1038 fs_open(&sess, file_03, sizeof(file_03),
1039 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001040 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001041 goto exit;
1042
1043 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
1044 goto exit;
1045
1046 /* check buffer */
1047 (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count);
1048
1049 /* clean */
1050 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1051 goto exit;
1052
1053exit:
1054 TEEC_CloseSession(&sess);
1055}
1056
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001057DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6008)
1058
1059static void xtest_tee_test_6009_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +02001060{
1061 TEEC_Session sess;
1062 uint32_t obj0;
1063 uint32_t obj1;
1064 uint32_t obj2;
1065 uint32_t e = 0;
1066 uint8_t info[200];
1067 uint8_t id[200];
1068 uint32_t orig;
1069
1070 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1071 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1072 return;
1073
1074 /* create file 00 */
1075 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1076 fs_create(&sess, file_00, sizeof(file_00),
1077 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001078 sizeof(data_01), &obj0, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001079 goto exit;
1080
1081 /* create file 01 */
1082 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1083 fs_create(&sess, file_01, sizeof(file_01),
1084 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001085 sizeof(data_01), &obj1, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001086 goto exit;
1087
1088 /* create file 02 */
1089 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1090 fs_create(&sess, file_02, sizeof(file_02),
1091 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001092 sizeof(data_01), &obj2, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001093 goto exit;
1094
1095 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj0)))
1096 goto exit;
1097
1098 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj1)))
1099 goto exit;
1100
1101 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj2)))
1102 goto exit;
1103
1104 /* iterate */
1105 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e)))
1106 goto exit;
1107
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001108 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_start_enum(&sess, e, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001109 goto exit;
1110
1111 /* get 00 */
1112 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1113 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1114 goto exit;
1115
1116 /* get 01 */
1117 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Pascal Brandc603e0d2016-04-25 12:37:18 +02001118 fs_next_enum(&sess, e, NULL, 0, id, sizeof(id))))
Pascal Brandc639ac82015-07-02 08:53:34 +02001119 goto exit;
1120
1121 /* get 02 */
1122 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1123 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1124 goto exit;
1125
1126 /* we should not have more files */
1127 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
1128 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1129 goto exit;
1130
1131 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e)))
1132 goto exit;
1133
1134 /* clean */
1135 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1136 fs_open(&sess, file_00, sizeof(file_00),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001137 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj0, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001138 goto exit;
1139
1140 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj0)))
1141 goto exit;
1142
1143 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1144 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001145 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj1, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001146 goto exit;
1147
1148 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj1)))
1149 goto exit;
1150
1151 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1152 fs_open(&sess, file_02, sizeof(file_02),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001153 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001154 goto exit;
1155
1156 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj2)))
1157 goto exit;
1158
1159exit:
1160 TEEC_CloseSession(&sess);
1161}
1162
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001163DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6009)
1164
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001165static void xtest_tee_test_6010_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand8a74e362015-09-10 12:41:52 +02001166{
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001167 TEEC_Session sess;
1168 uint32_t orig;
1169 uint32_t o1;
1170 uint32_t o2;
1171 uint32_t e;
1172 uint32_t f;
1173 uint8_t data[1024];
1174 uint8_t out[1024];
1175 uint32_t n;
Pascal Brand30844922015-09-17 12:12:42 +02001176
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001177 for (n = 0; n < ARRAY_SIZE(data); n++)
1178 data[n] = n;
Pascal Brand8a74e362015-09-10 12:41:52 +02001179
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001180 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1181 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1182 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001183
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001184 Do_ADBG_BeginSubCase(c, "CreatePersistentObject AccessConflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001185
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001186 o1 = TEE_HANDLE_NULL;
1187 o2 = TEE_HANDLE_NULL;
1188 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1189 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1190 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
Pascal Brand8a74e362015-09-10 12:41:52 +02001191
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001192 ADBG_EXPECT_TEEC_SUCCESS(c,
1193 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1194 sizeof(data), &o1, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001195
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001196 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE;
1197 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ACCESS_CONFLICT,
1198 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1199 sizeof(data), &o2, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001200
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001201 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1202 if (o2)
1203 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2));
Pascal Brand8a74e362015-09-10 12:41:52 +02001204
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001205 Do_ADBG_EndSubCase(c, "CreatePersistentObject AccessConflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001206
Pascal Brand8a74e362015-09-10 12:41:52 +02001207
Pascal Brand8a74e362015-09-10 12:41:52 +02001208
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001209 Do_ADBG_BeginSubCase(c, "RestrictObjectUsage Panic");
1210 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1211 fs_restrict_usage(&sess, 0xffffbad0, 0xffffffff));
1212 Do_ADBG_EndSubCase(c, "RestrictObjectUsage Panic");
Pascal Brand8a74e362015-09-10 12:41:52 +02001213
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001214 TEEC_CloseSession(&sess);
1215 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1216 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1217 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001218
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001219 Do_ADBG_BeginSubCase(c, "SeekObjectData BadHandle");
1220 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1221 fs_seek(&sess, 0xffffbad0, 5, TEE_DATA_SEEK_SET));
1222 Do_ADBG_EndSubCase(c, "SeekObjectData BadHandle");
Pascal Brand8a74e362015-09-10 12:41:52 +02001223
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001224 TEEC_CloseSession(&sess);
1225 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1226 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1227 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001228
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001229 Do_ADBG_BeginSubCase(c, "SeekObjectData NotPersist");
1230 o1 = 0;
1231 ADBG_EXPECT_TEEC_SUCCESS(c,
1232 fs_alloc_obj(&sess, TEE_TYPE_AES, 256, &o1));
1233 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1234 fs_seek(&sess, o1, 5, TEE_DATA_SEEK_SET));
1235 Do_ADBG_EndSubCase(c, "SeekObjectData NotPersist");
Pascal Brand8a74e362015-09-10 12:41:52 +02001236
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001237 TEEC_CloseSession(&sess);
1238 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1239 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1240 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001241
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001242 Do_ADBG_BeginSubCase(c, "SeekWriteRead");
1243 o1 = 0;
1244 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1245 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1246 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1247 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1248 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1249 sizeof(data), &o1, storage_id)))
1250 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001251
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001252 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1253 fs_seek(&sess, o1, 2, TEE_DATA_SEEK_SET)))
1254 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001255
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001256 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1257 fs_seek(&sess, o1, 0, TEE_DATA_SEEK_END)))
1258 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001259
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001260 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1261 fs_write(&sess, o1, data, sizeof(data))))
1262 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001263
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001264 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1265 fs_seek(&sess, o1, sizeof(data), TEE_DATA_SEEK_SET)))
1266 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001267
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001268 memset(out, 0xab, sizeof(out));
1269 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1270 fs_read(&sess, o1, out, sizeof(out), &n)))
1271 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001272
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001273 ADBG_EXPECT_BUFFER(c, data, sizeof(data), out, n);
Pascal Brand8a74e362015-09-10 12:41:52 +02001274
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001275 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jens Wiklander3a6892e2016-09-14 15:53:52 +02001276 fs_seek(&sess, o1, 10, TEE_DATA_SEEK_END)))
1277 goto seek_write_read_out;
1278
1279 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1280 fs_read(&sess, o1, out, sizeof(out), &n)))
1281 goto seek_write_read_out;
1282 ADBG_EXPECT_COMPARE_UNSIGNED(c, n, ==, 0);
1283
1284 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001285 fs_seek(&sess, o1, -(int32_t)sizeof(data) / 2,
1286 TEE_DATA_SEEK_END)))
1287 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001288
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001289 memset(out, 0xab, sizeof(out) / 2);
1290 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1291 fs_read(&sess, o1, out, sizeof(out) / 2, &n)))
1292 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001293
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001294 ADBG_EXPECT_BUFFER(c,
1295 data + sizeof(data) / 2, sizeof(data) / 2,
1296 out + sizeof(data) / 2, n);
Pascal Brand8a74e362015-09-10 12:41:52 +02001297
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001298seek_write_read_out:
1299 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1300 Do_ADBG_EndSubCase(c, "SeekWriteRead");
Pascal Brand8a74e362015-09-10 12:41:52 +02001301
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001302 Do_ADBG_BeginSubCase(c, "Rename Access Conflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001303
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001304 o1 = TEE_HANDLE_NULL;
1305 o2 = TEE_HANDLE_NULL;
1306 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1307 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1308 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1309 ADBG_EXPECT_TEEC_SUCCESS(c,
1310 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1311 sizeof(data), &o1, storage_id));
1312 ADBG_EXPECT_TEEC_SUCCESS(c,
1313 fs_create(&sess, file_01, sizeof(file_01), f, 0, data,
1314 sizeof(data) / 2, &o2, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001315
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001316 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ACCESS_CONFLICT,
1317 fs_rename(&sess, o2, file_00, sizeof(file_00)));
Pascal Brand8a74e362015-09-10 12:41:52 +02001318
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001319 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1320 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2));
1321
1322 Do_ADBG_EndSubCase(c, "Rename Access Conflict");
1323
Jerome Forissier5d969d82017-03-21 10:01:04 +01001324 Do_ADBG_BeginSubCase(c, "AllocPersistentObjectEnumerator + "
1325 "ResetPersistentObjectEnumerator");
1326 e = TEE_HANDLE_NULL;
1327 ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e));
1328 ADBG_EXPECT_TEEC_SUCCESS(c, fs_reset_enum(&sess, e));
1329 Do_ADBG_EndSubCase(c, "AllocPersistentObjectEnumerator + "
1330 "ResetPersistentObjectEnumerator");
1331
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001332 Do_ADBG_BeginSubCase(c, "StartPersistentObjectEnumerator ItemNotFound");
1333 e = TEE_HANDLE_NULL;
1334 ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e));
1335 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND,
1336 fs_next_enum(&sess, e, NULL, 0, out, sizeof(out)));
1337 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND,
1338 fs_start_enum(&sess, e, storage_id));
1339 ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e));
1340 Do_ADBG_EndSubCase(c, "StartPersistentObjectEnumerator ItemNotFound");
1341
1342 Do_ADBG_BeginSubCase(c, "RenamePersistent ReadWrite");
1343 o1 = TEE_HANDLE_NULL;
1344 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1345 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1346 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1347 ADBG_EXPECT_TEEC_SUCCESS(c,
1348 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1349 sizeof(data), &o1, storage_id));
1350 ADBG_EXPECT_TEEC_SUCCESS(c,
1351 fs_rename(&sess, o1, file_01, sizeof(file_01)));
1352 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1353 Do_ADBG_EndSubCase(c, "RenamePersistent ReadWrite");
1354
1355 Do_ADBG_BeginSubCase(c, "Close Free Reset Null");
1356 ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, TEE_HANDLE_NULL));
1357 ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_obj(&sess, TEE_HANDLE_NULL));
1358 ADBG_EXPECT_TEEC_SUCCESS(c, fs_reset_obj(&sess, TEE_HANDLE_NULL));
1359 Do_ADBG_EndSubCase(c, "Close Free Reset Null");
1360
1361 TEEC_CloseSession(&sess);
Pascal Brand8a74e362015-09-10 12:41:52 +02001362}
1363
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001364DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6010)
1365
1366#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +02001367static void xtest_tee_test_6011(ADBG_Case_t *c)
1368{
1369 TEEC_Session sess;
1370 uint32_t orig;
1371 /*
1372 * Test data from
1373 * Invoke_InitObjectAndAttributes_TEE_TYPE_AES_success_attribute_
1374 * TEE_ATTR_SECRET_VALUE_correct_size (9d-9a-91)
1375 */
1376 static const uint8_t attr_meta[] = {
13770xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
13780x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
13790x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
13800x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1381 };
1382 static const uint8_t attr_data[] = {
13830x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,
13840x81,0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,0x2d,0x98,0x10,0xa3,0x09,0x14,
13850xdf,0xf4,
1386 };
1387
1388 if (!ADBG_EXPECT_TEEC_SUCCESS(
1389 c, xtest_teec_open_session(
1390 &sess, &gp_tta_ds_uuid, NULL, &orig)))
1391 return;
1392
1393 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ds_init_object_and_attributes(&sess,
1394 0xa0000010, 0x100, attr_meta, sizeof(attr_meta), attr_data,
1395 sizeof(attr_data), 0)))
1396 goto exit;
1397
1398exit:
1399 TEEC_CloseSession(&sess);
1400}
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001401#endif /*WITH_GP_TESTS*/
Pascal Brand8a74e362015-09-10 12:41:52 +02001402
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001403static void xtest_tee_test_6012_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandeb84c442016-04-19 17:49:49 +02001404{
1405 TEEC_Session sess;
1406 uint32_t orig;
1407 uint32_t obj;
1408
1409 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1410 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1411 return;
1412
1413 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001414 fs_create_overwrite(&sess, file_04, sizeof(file_04), storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001415 goto exit;
1416
1417 TEEC_CloseSession(&sess);
1418
1419 /* re-create the same */
1420 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1421 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1422 return;
1423
1424 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001425 fs_create_overwrite(&sess, file_04, sizeof(file_04),
1426 storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001427 goto exit;
1428
1429 /*
1430 * recreate it with an object, and remove it so that xtest 6009
1431 * can be replayed
1432 */
1433 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1434 fs_create(&sess, file_04, sizeof(file_04),
1435 TEE_DATA_FLAG_ACCESS_WRITE |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001436 TEE_DATA_FLAG_ACCESS_WRITE_META |
1437 TEE_DATA_FLAG_OVERWRITE, 0, NULL, 0, &obj,
1438 storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001439 goto exit;
1440
1441 /* clean */
1442 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1443 goto exit;
1444
1445exit:
1446 TEEC_CloseSession(&sess);
1447}
1448
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001449DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6012)
1450
1451static void xtest_tee_test_6013_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand90f23352016-05-19 15:15:47 +02001452{
1453 TEEC_Session sess;
1454 uint32_t orig;
1455 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
1456
1457 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1458 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1459 return;
1460
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001461 op.params[0].value.a = storage_id;
1462 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brand90f23352016-05-19 15:15:47 +02001463 TEEC_NONE, TEEC_NONE);
1464
1465 ADBG_EXPECT_TEEC_SUCCESS(c,
1466 TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_KEY_IN_PERSISTENT,
1467 &op, &orig));
1468
1469 TEEC_CloseSession(&sess);
1470}
1471
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001472DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6013)
1473
1474static void xtest_tee_test_6014_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand29ee18f2016-05-23 14:13:56 +02001475{
1476 TEEC_Session sess;
1477 uint32_t orig;
1478 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
1479
1480 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1481 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1482 return;
1483
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001484 op.params[0].value.a = storage_id;
1485 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brand29ee18f2016-05-23 14:13:56 +02001486 TEEC_NONE, TEEC_NONE);
1487
1488 ADBG_EXPECT_TEEC_SUCCESS(c,
1489 TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_LOOP, &op, &orig));
1490
1491 TEEC_CloseSession(&sess);
1492}
1493
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001494DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6014)
1495
Jerome Forissiere3854162016-08-12 12:40:12 +02001496static void xtest_tee_test_6015_single(ADBG_Case_t *c, uint32_t storage_id)
1497{
1498 TEEC_Session sess;
1499 TEEC_Session sess2;
1500 uint32_t orig;
1501 uint32_t obj;
1502 uint32_t obj2;
Jerome Forissiere3854162016-08-12 12:40:12 +02001503
1504 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1505 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1506 return;
1507
1508 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1509 xtest_teec_open_session(&sess2, &storage2_ta_uuid, NULL,
1510 &orig)))
1511 goto exit2;
1512
1513 /* TA #1 creates a persistent object */
1514 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1515 fs_create(&sess, file_01, sizeof(file_01),
1516 TEE_DATA_FLAG_ACCESS_WRITE |
1517 TEE_DATA_FLAG_ACCESS_READ |
1518 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
1519 sizeof(data_00), &obj, storage_id)))
1520 goto exit;
1521
1522 /* TA #2 tries to open the object created by TA #1 */
1523 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
1524 fs_open(&sess2, file_01, sizeof(file_01),
1525 TEE_DATA_FLAG_ACCESS_READ, &obj2, storage_id)))
1526 goto clean;
1527
Jerome Forissiere3854162016-08-12 12:40:12 +02001528clean:
1529 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj));
1530exit:
1531 TEEC_CloseSession(&sess2);
1532exit2:
1533 TEEC_CloseSession(&sess);
1534}
1535
1536DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6015)
1537
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001538
1539struct test_6016_thread_arg {
1540 ADBG_Case_t *case_t;
1541 uint32_t storage_id;
Jerome Forissier54cfbef2016-08-31 18:34:31 +02001542 char file_name[8];
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001543 TEEC_Session session;
1544};
1545
1546static void *test_6016_thread(void *arg)
1547{
1548 struct test_6016_thread_arg *a = arg;
1549 TEEC_Session sess = a->session;
1550 uint32_t obj;
1551 uint8_t out[10] = { 0 };
1552 uint32_t count;
1553
1554 /* create */
1555 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1556 fs_create(&sess, a->file_name, sizeof(a->file_name),
1557 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
1558 sizeof(data_01), &obj, a->storage_id)))
1559 goto exit;
1560
1561 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj)))
1562 goto exit;
1563
1564 /* write new data */
1565 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1566 fs_open(&sess, a->file_name, sizeof(a->file_name),
1567 TEE_DATA_FLAG_ACCESS_WRITE, &obj, a->storage_id)))
1568 goto exit;
1569
1570 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1571 fs_write(&sess, obj, data_00, sizeof(data_00))))
1572 goto exit;
1573
1574 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj)))
1575 goto exit;
1576
1577 /* verify */
1578 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1579 fs_open(&sess, a->file_name, sizeof(a->file_name),
1580 TEE_DATA_FLAG_ACCESS_READ |
1581 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, a->storage_id)))
1582 goto exit;
1583
1584 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1585 fs_read(&sess, obj, out, 10, &count)))
1586 goto exit;
1587
1588 (void)ADBG_EXPECT_BUFFER(a->case_t, data_00, 10, out, count);
1589
1590 /* clean */
1591 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_unlink(&sess, obj)))
1592 goto exit;
1593
1594exit:
1595 return NULL;
1596}
1597
1598
1599#define NUM_THREADS 4
1600static void xtest_tee_test_6016_loop(ADBG_Case_t *c, uint32_t storage_id)
1601{
1602 size_t num_threads = NUM_THREADS;
1603 struct test_6016_thread_arg arg[num_threads];
1604 pthread_t thr[num_threads];
1605 uint32_t orig;
1606 size_t i;
1607 size_t n = 0;
1608 size_t m;
1609
1610 memset(arg, 0, sizeof(arg));
1611
1612 for (m = 0; m < num_threads; m++)
1613 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1614 xtest_teec_open_session(&arg[m].session,
1615 &storage_ta_uuid, NULL, &orig)))
1616 goto out;
1617
1618 for (n = 0; n < num_threads; n++) {
1619 arg[n].case_t = c;
1620 arg[n].storage_id = storage_id;
Jerome Forissiercb10f832016-09-01 14:53:05 +02001621 snprintf(arg[n].file_name, sizeof(arg[n].file_name),
Jens Wiklander2b1c11d2016-09-16 14:58:41 +02001622 "file_%zu", n);
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001623 if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL,
1624 test_6016_thread, arg + n)))
1625 goto out;
1626 }
1627
1628out:
1629 for (i = 0; i < n; i++)
1630 ADBG_EXPECT(c, 0, pthread_join(thr[i], NULL));
1631 for (i = 0; i < m; i++)
1632 TEEC_CloseSession(&arg[i].session);
1633}
1634
1635/* concurency */
1636static void xtest_tee_test_6016_single(ADBG_Case_t *c, uint32_t storage_id)
1637{
1638 int i;
1639 int loops = 8;
1640
1641 Do_ADBG_Log(" threads: %d, loops: %d", NUM_THREADS, loops);
1642 for (i = 0; i < loops; i++)
1643 xtest_tee_test_6016_loop(c, storage_id);
1644}
1645
Jerome Forissierefd71d32016-09-13 15:09:33 +02001646DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6016)
Jerome Forissier327672c2016-09-01 18:34:11 +02001647
Guanchao Liang31a9cbf2016-12-20 00:35:26 +08001648static void xtest_tee_test_6017_single(ADBG_Case_t *c, uint32_t storage_id)
1649{
1650 TEEC_Session sess;
1651 TEE_ObjectInfo obj_info1;
1652 TEE_ObjectInfo obj_info2;
1653 uint32_t obj;
1654 uint32_t orig;
1655
1656 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1657 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1658 return;
1659
1660 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1661 fs_create(&sess, file_01, sizeof(file_01),
1662 TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL,
1663 0, &obj, storage_id)))
1664 goto exit;
1665
1666 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1667 fs_write(&sess, obj, data_00, sizeof(data_00))))
1668 goto exit;
1669
1670 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1671 fs_get_obj_info(&sess, obj, &obj_info1,
1672 sizeof(TEE_ObjectInfo))))
1673 goto exit;
1674
1675 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1676 goto exit;
1677
1678 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1679 fs_open(&sess, file_01, sizeof(file_01),
1680 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
1681 goto exit;
1682
1683 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1684 fs_get_obj_info(&sess, obj, &obj_info2,
1685 sizeof(TEE_ObjectInfo))))
1686 goto exit;
1687
1688 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1689 obj_info1.dataSize, ==, obj_info2.dataSize))
1690 goto exit;
1691
1692 /* clean */
1693 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1694 goto exit;
1695
1696exit:
1697 TEEC_CloseSession(&sess);
1698}
1699
1700DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6017)
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001701
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001702static void xtest_tee_test_6018_single(ADBG_Case_t *c, uint32_t storage_id)
1703{
1704 TEEC_Session sess;
1705 TEE_ObjectInfo obj_info1;
1706 TEE_ObjectInfo obj_info2;
1707 uint32_t obj;
1708 uint32_t orig;
1709 uint8_t block[32 * 1024];
1710 size_t num_blocks;
1711 size_t block_size;
1712 size_t n;
1713
1714 if (storage_is(storage_id, TEE_STORAGE_PRIVATE_RPMB)) {
1715 /* RPMB FS is a bit resource constrained */
Jens Wiklander20949ea2017-05-17 17:47:58 +02001716 num_blocks = 10;
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001717 block_size = 1024;
1718 } else {
Jens Wiklander5f86daa2017-05-30 16:37:19 +02001719 num_blocks = 20;
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001720 block_size = sizeof(block);
1721 }
1722
1723 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1724 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1725 return;
1726
1727 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1728 fs_create(&sess, file_01, sizeof(file_01),
1729 TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL,
1730 0, &obj, storage_id)))
1731 goto exit;
1732
1733 for (n = 0; n < num_blocks; n++) {
1734 memset(block, n, block_size);
1735
1736 Do_ADBG_Log("writing %zu", n);
1737 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1738 fs_write(&sess, obj, block, block_size)))
1739 goto exit;
1740 }
1741
1742 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1743 fs_get_obj_info(&sess, obj, &obj_info1,
1744 sizeof(TEE_ObjectInfo))))
1745 goto exit;
1746
1747 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1748 obj_info1.dataSize, ==, block_size * num_blocks))
1749 goto exit;
1750
1751 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1752 goto exit;
1753
1754 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1755 fs_open(&sess, file_01, sizeof(file_01),
1756 TEE_DATA_FLAG_ACCESS_READ |
1757 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
1758 goto exit;
1759
1760 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1761 fs_get_obj_info(&sess, obj, &obj_info2,
1762 sizeof(TEE_ObjectInfo))))
1763 goto exit;
1764
1765 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1766 obj_info1.dataSize, ==, obj_info2.dataSize))
1767 goto exit;
1768
1769 for (n = 0; n < num_blocks; n++) {
1770 uint8_t br[block_size];
1771 uint32_t count;
1772
1773 memset(block, n, block_size);
1774
1775 Do_ADBG_Log("reading %zu", n);
1776 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1777 fs_read(&sess, obj, br, sizeof(br), &count)))
1778 goto exit;
1779 if (!ADBG_EXPECT_BUFFER(c, block, block_size, br, count))
1780 goto exit;
1781 }
1782
1783 /* clean */
1784 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1785 goto exit;
1786
1787exit:
1788 TEEC_CloseSession(&sess);
1789}
1790
1791DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6018)
1792
Jens Wiklander74abfe32017-01-03 14:17:47 +01001793ADBG_CASE_DEFINE(regression, 6001, xtest_tee_test_6001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001794 "Test TEE_CreatePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001795ADBG_CASE_DEFINE(regression, 6002, xtest_tee_test_6002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001796 "Test TEE_OpenPersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001797ADBG_CASE_DEFINE(regression, 6003, xtest_tee_test_6003,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001798 "Test TEE_ReadObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001799ADBG_CASE_DEFINE(regression, 6004, xtest_tee_test_6004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001800 "Test TEE_WriteObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001801ADBG_CASE_DEFINE(regression, 6005, xtest_tee_test_6005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001802 "Test TEE_SeekObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001803ADBG_CASE_DEFINE(regression, 6006, xtest_tee_test_6006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001804 "Test TEE_CloseAndDeletePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001805ADBG_CASE_DEFINE(regression, 6007, xtest_tee_test_6007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001806 "Test TEE_TruncateObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001807ADBG_CASE_DEFINE(regression, 6008, xtest_tee_test_6008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001808 "Test TEE_RenamePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001809ADBG_CASE_DEFINE(regression, 6009, xtest_tee_test_6009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001810 "Test TEE Internal API Persistent Object Enumeration Functions");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001811ADBG_CASE_DEFINE(regression, 6010, xtest_tee_test_6010, "Test Storage");
Pascal Brand8a74e362015-09-10 12:41:52 +02001812
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001813#ifdef WITH_GP_TESTS
Jens Wiklander74abfe32017-01-03 14:17:47 +01001814ADBG_CASE_DEFINE(regression, 6011, xtest_tee_test_6011,
1815 "Test TEE GP TTA DS init objects");
Pascal Brand8a74e362015-09-10 12:41:52 +02001816#endif
Pascal Brandeb84c442016-04-19 17:49:49 +02001817
Jens Wiklander74abfe32017-01-03 14:17:47 +01001818ADBG_CASE_DEFINE(regression, 6012, xtest_tee_test_6012,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001819 "Test TEE GP TTA DS init objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001820ADBG_CASE_DEFINE(regression, 6013, xtest_tee_test_6013,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001821 "Key usage in Persistent objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001822ADBG_CASE_DEFINE(regression, 6014, xtest_tee_test_6014,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001823 "Loop on Persistent objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001824ADBG_CASE_DEFINE(regression, 6015, xtest_tee_test_6015, "Storage isolation");
1825ADBG_CASE_DEFINE(regression, 6016, xtest_tee_test_6016, "Storage concurency");
1826ADBG_CASE_DEFINE(regression, 6017, xtest_tee_test_6017,
Guanchao Liang31a9cbf2016-12-20 00:35:26 +08001827 "Test Persistent objects info");
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001828ADBG_CASE_DEFINE(regression, 6018, xtest_tee_test_6018, "Large object");