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_MemMove_With_Success 25 * @testcase.desc : test TA call TEE_MemMove to move buffer from src to dest 26 * @testcase.expect : return TEEC_SUCCESS, dest buffer is same as src buffer 27 */ 28 TEE_TEST(TeeTCF2Test, TEE_MemMove_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_MemMove, &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_MemMove_With_SrcBufferIsNull 43 * @testcase.desc : test TA call TEE_MemMove to move buffer while srcbuffer is null 44 * @testcase.expect : return TEEC_SUCCESS, dest buffer is not same as src buffer 45 */ 46 TEE_TEST(TeeTCF2Test, TEE_MemMove_With_SrcBufferIsNull, Function | MediumTest | Level0) 47 { 48 TEEC_Result ret; 49 TestMemData value = { 0 }; 50 char outBuf[TESTSIZE + 1] = { 0 }; 51 52 value.oldSize = TESTSIZE; 53 value.caseId = INPUT_ISNULL; 54 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemMove, &value, outBuf); 55 ASSERT_EQ(ret, TEEC_SUCCESS); 56 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 57 ASSERT_STREQ(outBuf, EXPECTBUFFER_B); 58 } 59 60 /** 61 * @testcase.name : TEE_MemMove_With_DestBufferIsNull 62 * @testcase.desc : test TA call TEE_MemMove to move buffer while destbuffer is null 63 * @testcase.expect : return TEEC_SUCCESS, dest buffer is not same as src buffer 64 */ 65 TEE_TEST(TeeTCF2Test, TEE_MemMove_With_DestBufferIsNull, Function | MediumTest | Level0) 66 { 67 TEEC_Result ret; 68 TestMemData value = { 0 }; 69 char outBuf[TESTSIZE + 1] = { 0 }; 70 71 value.oldSize = TESTSIZE; 72 value.caseId = OUTPUT_ISNULL; 73 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemMove, &value, outBuf); 74 ASSERT_EQ(ret, TEEC_SUCCESS); 75 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 76 ASSERT_STREQ(outBuf, EXPECTBUFFER_B); 77 } 78 79 /** 80 * @testcase.name : TEE_MemMove_With_SizeIsZero 81 * @testcase.desc : test TA call TEE_MemMove to move buffer while size is zero 82 * @testcase.expect : return TEEC_SUCCESS, dest buffer is not same as src buffer 83 */ 84 TEE_TEST(TeeTCF2Test, TEE_MemMove_With_SizeIsZero, Function | MediumTest | Level0) 85 { 86 TEEC_Result ret; 87 TestMemData value = { 0 }; 88 char outBuf[TESTSIZE + 1] = { 0 }; 89 90 value.oldSize = TESTSIZE; 91 value.caseId = OUTPUTBUFFERSIZE_ISZERO; 92 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemMove, &value, outBuf); 93 ASSERT_EQ(ret, TEEC_SUCCESS); 94 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 95 ASSERT_STREQ(outBuf, EXPECTBUFFER_B); 96 } 97 98 /** 99 * @testcase.name : TEE_MemMove_With_DestIsSameAsSrc 100 * @testcase.desc : test TA call TEE_MemMove to move buffer while destbuffer addr is same as srcbuffer addr 101 * @testcase.expect : return TEEC_SUCCESS, dest buffer is not same as src buffer 102 */ 103 TEE_TEST(TeeTCF2Test, TEE_MemMove_With_DestIsSameAsSrc, Function | MediumTest | Level0) 104 { 105 TEEC_Result ret; 106 TestMemData value = { 0 }; 107 char outBuf[TESTSIZE + 1] = { 0 }; 108 109 value.oldSize = TESTSIZE; 110 value.caseId = DESTANDSRC_ISSAME; 111 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemMove, &value, outBuf); 112 ASSERT_EQ(ret, TEEC_SUCCESS); 113 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 114 ASSERT_STREQ(outBuf, EXPECTBUFFER_B); 115 } 116 117 /** 118 * @testcase.name : TEE_MemMove_With_Overlap 119 * @testcase.desc : test TA call TEE_MemMove to move buffer while src buffer and dest buffer is overlap 120 * @testcase.expect : return TEEC_SUCCESS, dest buffer is same as src buffer 121 */ 122 TEE_TEST(TeeTCF2Test, TEE_MemMove_With_Overlap, Function | MediumTest | Level0) 123 { 124 TEEC_Result ret; 125 TestMemData value = { 0 }; 126 char outBuf[TESTSIZE + 1] = { 0 }; 127 128 value.oldSize = TESTSIZE; 129 value.caseId = DESTANDSRC_OVERLAP; 130 ret = Invoke_MemMove_Or_Fill(GetSession(), CMD_TEE_MemMove, &value, outBuf); 131 ASSERT_EQ(ret, TEEC_SUCCESS); 132 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 133 ASSERT_STREQ(outBuf, EXPECTBUFFER_OVERLAP); 134 }