• 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_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 }