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