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_MemFill_With_Success 25 * @testcase.desc : test TA call TEE_MemFill to fill buffer with char assigned in TA 26 * @testcase.expect : return TEEC_SUCCESS, buffer is filled match expect 27 */ 28 TEE_TEST(TeeTCF2Test, TEE_MemFill_With_Success, Function | MediumTest | Level0) 29 { 30 TEEC_Result ret; 31 TestMemData value = { 0 }; 32 char outBuf[TESTSIZE + 1] = { 0 }; 33 34 value.oldSize = TESTSIZE; 35 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemFill, &value, outBuf); 36 ASSERT_EQ(ret, TEEC_SUCCESS); 37 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 38 ASSERT_STREQ(outBuf, EXPECTBUFFER_A); 39 } 40 41 /** 42 * @testcase.name : TEE_MemFill_With_BufferIsNull 43 * @testcase.desc : test TA call TEE_MemFill while buffer is null 44 * @testcase.expect : return TEEC_SUCCESS, buffer is not filled and is 0 45 */ 46 TEE_TEST(TeeTCF2Test, TEE_MemFill_With_BufferIsNull, Function | MediumTest | Level0) 47 { 48 TEEC_Result ret; 49 TestMemData value = { 0 }; 50 char outBuf[TESTSIZE] = { 0 }; 51 uint32_t i; 52 53 value.oldSize = TESTSIZE; 54 value.caseId = INPUT_ISNULL; 55 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemFill, &value, outBuf); 56 ASSERT_EQ(ret, TEEC_SUCCESS); 57 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 58 for (i = 0; i < TESTSIZE; i++) { 59 ASSERT_EQ(outBuf[i], 0); 60 } 61 } 62 63 /** 64 * @testcase.name : TEE_MemFill_With_SizeIsZero 65 * @testcase.desc : test TA call TEE_MemFill while size is zero 66 * @testcase.expect : return TEEC_SUCCESS, buffer is not filled and is 0 67 */ 68 TEE_TEST(TeeTCF2Test, TEE_MemFill_With_SizeIsZero, Function | MediumTest | Level0) 69 { 70 TEEC_Result ret; 71 TestMemData value = { 0 }; 72 char outBuf[TESTSIZE] = { 0 }; 73 uint32_t i; 74 75 value.oldSize = TESTSIZE; 76 value.caseId = OUTPUTBUFFERSIZE_ISZERO; 77 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemFill, &value, outBuf); 78 ASSERT_EQ(ret, TEEC_SUCCESS); 79 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 80 for (i = 0; i < TESTSIZE; i++) { 81 ASSERT_EQ(outBuf[i], 0); 82 } 83 }