• 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_MemCompare_With_Same
25  * @testcase.desc      : test TA call TEE_MemCompare to compare buffer1 and buffer2
26  * @testcase.expect    : return TEEC_SUCCESS
27  */
28 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_Same, Function | MediumTest | Level0)
29 {
30     TEEC_Result ret;
31     uint32_t i;
32     TestMemData value = { 0 };
33     char buf1[TESTSIZE] = { 0 };
34     char buf2[TESTSIZE] = { 0 };
35 
36     value.oldSize = TESTSIZE;
37     for (i = 0; i < TESTSIZE; i++) {
38         buf1[i] = (char)'A';
39         buf2[i] = (char)'A';
40     }
41     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
42     ASSERT_EQ(ret, TEEC_SUCCESS);
43     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
44 }
45 
46 /**
47  * @testcase.name      : TEE_MemCompare_With_Buffer1LessBuffer2
48  * @testcase.desc      : test TA call TEE_MemCompare to compare buffer1 and buffer2, buffer1 < buffer2
49  * @testcase.expect    : return -1
50  */
51 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_Buffer1LessBuffer2, Function | MediumTest | Level0)
52 {
53     TEEC_Result ret;
54     uint32_t i;
55     TestMemData value = { 0 };
56     char buf1[TESTSIZE] = { 0 };
57     char buf2[TESTSIZE] = { 0 };
58 
59     value.oldSize = TESTSIZE;
60     for (i = 0; i < TESTSIZE - 1; i++) {
61         buf1[i] = (char)'A';
62         buf2[i] = (char)'A';
63     }
64     buf1[TESTSIZE - 1] = (char)'A';
65     buf2[TESTSIZE - 1] = (char)'B';
66 
67     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
68     ASSERT_EQ(ret, -1);
69     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
70 }
71 
72 /**
73  * @testcase.name      : TEE_MemCompare_With_Buffer1GreaterBuffer2
74  * @testcase.desc      : test TA call TEE_MemCompare to compare buffer1 and buffer2, buffer1 > buffer2
75  * @testcase.expect    : return -1
76  */
77 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_Buffer1GreaterBuffer2, Function | MediumTest | Level0)
78 {
79     TEEC_Result ret;
80     uint32_t i;
81     TestMemData value = { 0 };
82     char buf1[TESTSIZE] = { 0 };
83     char buf2[TESTSIZE] = { 0 };
84 
85     value.oldSize = TESTSIZE;
86     for (i = 0; i < TESTSIZE - 1; i++) {
87         buf1[i] = (char)'A';
88         buf2[i] = (char)'A';
89     }
90     buf1[TESTSIZE - 1] = (char)'B';
91     buf2[TESTSIZE - 1] = (char)'A';
92 
93     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
94     ASSERT_EQ(ret, 1);
95     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
96 }
97 
98 /**
99  * @testcase.name      : TEE_MemCompare_With_Buffer1IsNull
100  * @testcase.desc      : test TA call TEE_MemCompare compare while buffer1 is null
101  * @testcase.expect    : return TEEC_SUCCESS
102  */
103 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_Buffer1IsNull, Function | MediumTest | Level0)
104 {
105     TEEC_Result ret;
106     uint32_t i;
107     TestMemData value = { 0 };
108     char buf1[TESTSIZE] = { 0 };
109     char buf2[TESTSIZE] = { 0 };
110 
111     value.oldSize = TESTSIZE;
112     for (i = 0; i < TESTSIZE; i++) {
113         buf1[i] = (char)'A';
114         buf2[i] = (char)'A';
115     }
116     value.caseId = INPUT_ISNULL;
117     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
118     ASSERT_EQ(ret, -1);
119     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
120 }
121 
122 /**
123  * @testcase.name      : TEE_MemCompare_With_Buffer2IsNull
124  * @testcase.desc      : test TA call TEE_MemCompare compare while buffer2 is null
125  * @testcase.expect    : return TEEC_SUCCESS
126  */
127 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_Buffer2IsNull, Function | MediumTest | Level0)
128 {
129     TEEC_Result ret;
130     uint32_t i;
131     TestMemData value = { 0 };
132     char buf1[TESTSIZE] = { 0 };
133     char buf2[TESTSIZE] = { 0 };
134 
135     value.oldSize = TESTSIZE;
136     for (i = 0; i < TESTSIZE; i++) {
137         buf1[i] = (char)'A';
138         buf2[i] = (char)'A';
139     }
140     value.caseId = OUTPUT_ISNULL;
141     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
142     ASSERT_EQ(ret, 1);
143     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
144 }
145 
146 /**
147  * @testcase.name      : TEE_MemCompare_With_SizeIsZero
148  * @testcase.desc      : test TA call TEE_MemCompare compare while size is zero
149  * @testcase.expect    : return TEEC_SUCCESS
150  */
151 TEE_TEST(TeeTCF2Test, TEE_MemCompare_With_SizeIsZero, Function | MediumTest | Level0)
152 {
153     TEEC_Result ret;
154     uint32_t i;
155     TestMemData value = { 0 };
156     char buf1[TESTSIZE] = { 0 };
157     char buf2[TESTSIZE] = { 0 };
158 
159     value.oldSize = 0;
160     for (i = 0; i < TESTSIZE; i++) {
161         buf1[i] = (char)'A';
162         buf2[i] = (char)'B';
163     }
164 
165     ret = Invoke_MemCompare(GetSession(), CMD_TEE_MemCompare, &value, buf1, buf2);
166     ASSERT_EQ(ret, 0);
167     ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP);
168 }
169