• 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_Set_And_GetInstanceData_With_Success
25  * @testcase.desc      : test TA call TEE_SetInstanceData and TEE_GetInstanceData to use instance data
26  * @testcase.expect    : return TEEC_SUCCESS
27  */
28 TEE_TEST(TeeTCF2Test, TEE_Set_And_GetInstanceData_With_Success, Function | MediumTest | Level0)
29 {
30     TEEC_Result ret;
31     uint32_t origin;
32     char inBuf[] = { 'T', 'E', 'E', 'A', '\0', };
33     char outBuf[BIG_SIZE] = { 0 };
34     uint32_t caseId = 0;
35     uint32_t outLen = sizeof(outBuf);
36 
37     ret = Invoke_SetInstanceData(GetSession(), CMD_TEE_SetInstanceData, inBuf, caseId, &origin);
38     ASSERT_EQ(ret, TEEC_SUCCESS);
39     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
40 
41     ret = Invoke_GetInstanceData(GetSession(), CMD_TEE_GetInstanceData, outBuf, &outLen, &origin);
42     ASSERT_EQ(ret, TEEC_SUCCESS);
43     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
44     ASSERT_STREQ(inBuf, outBuf);
45     ASSERT_EQ(outLen, strlen(inBuf) + 1);
46 }
47 
48 /**
49  * @testcase.name      : TEE_Set_And_GetInstanceData_With_InstanceDataIsNull
50  * @testcase.desc      : test TA call TEE_SetInstanceData and TEE_GetInstanceData to use instance data is null
51  * @testcase.expect    : return TEEC_SUCCESS
52  */
53 TEE_TEST(TeeTCF2Test, TEE_Set_And_GetInstanceData_With_InstanceDataIsNull, Function | MediumTest | Level0)
54 {
55     TEEC_Result ret;
56     uint32_t origin;
57     char inBuf[] = { 'T', 'E', 'E', 'A', '\0', };
58     char outBuf[BIG_SIZE] = { 0 };
59     uint32_t caseId = INPUT_ISNULL;
60     uint32_t outLen = sizeof(outBuf);
61 
62     ret = Invoke_SetInstanceData(GetSession(), CMD_TEE_SetInstanceData, inBuf, caseId, &origin);
63     ASSERT_EQ(ret, TEEC_SUCCESS);
64     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
65 
66     ret = Invoke_GetInstanceData(GetSession(), CMD_TEE_GetInstanceData, outBuf, &outLen, &origin);
67     ASSERT_EQ(ret, TEEC_ERROR_GENERIC);
68     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
69 }
70 
71 /**
72  * @testcase.name      : TEE_Set_And_GetInstanceData_With_GetSizeTooShort
73  * @testcase.desc      : test TA call TEE_SetInstanceData and TEE_GetInstanceData to use instancedata while get size
74  * too short
75  * @testcase.expect    : return TEEC_SUCCESS
76  */
77 TEE_TEST(TeeTCF2Test, TEE_Set_And_GetInstanceData_With_GetSizeTooShort, Function | MediumTest | Level0)
78 {
79     TEEC_Result ret;
80     uint32_t origin;
81     char inBuf[] = { 'T', 'E', 'E', 'A', '\0', };
82     char outBuf[BIG_SIZE] = { 0 };
83     uint32_t caseId = 0;
84     uint32_t outLen = strlen(inBuf) - 1;
85 
86     ret = Invoke_SetInstanceData(GetSession(), CMD_TEE_SetInstanceData, inBuf, caseId, &origin);
87     ASSERT_EQ(ret, TEEC_SUCCESS);
88     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
89 
90     ret = Invoke_GetInstanceData(GetSession(), CMD_TEE_GetInstanceData, outBuf, &outLen, &origin);
91     ASSERT_EQ(ret, TEEC_ERROR_SHORT_BUFFER);
92     ASSERT_EQ(origin, TEEC_ORIGIN_TRUSTED_APP);
93     ASSERT_EQ(outLen, strlen(inBuf) + 1);
94 }
95