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