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_GetPropertyAsU64_WithoutEnum_TESTU64 25 * @testcase.desc : test TA call TEE_GetPropertyAsU64 to get value of SMC_TA_TESTU64 26 * @testcase.expect : return TEEC_SUCCESS 27 */ 28 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_TESTU64, Function | MediumTest | Level0) 29 { 30 TEEC_Result ret; 31 int rc; 32 TestData value = { 0 }; 33 value.cmd = CMD_TEE_GetPropertyAsU64; 34 value.propSet = TEE_PROPSET_CURRENT_TA; 35 rc = memcpy_s(value.inBuffer, BIG_SIZE, SMC_TA_TESTU64, sizeof(SMC_TA_TESTU64)); 36 ASSERT_EQ(rc, 0); 37 value.inBufferLen = sizeof(SMC_TA_TESTU64); 38 39 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 40 ASSERT_EQ(ret, TEEC_SUCCESS); 41 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 42 ASSERT_EQ(atoll(value.outBuffer), VALUE_PREDEFINED_U64); 43 ASSERT_EQ(value.outBufferLen, strlen(value.outBuffer) + 1); 44 } 45 46 /** 47 * @testcase.name : TEE_GetPropertyAsU64_WithoutEnum_NameIsNull 48 * @testcase.desc : test TA call TEE_GetPropertyAsU64 for name is null 49 * @testcase.expect : return TEEC_ERROR_ITEM_NOT_FOUND 50 */ 51 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameIsNull, Function | MediumTest | Level0) 52 { 53 TEEC_Result ret; 54 55 TestData value = { 0 }; 56 value.cmd = CMD_TEE_GetPropertyAsU64; 57 value.caseId = INPUT_ISNULL; 58 value.propSet = TEE_PROPSET_CURRENT_TA; 59 60 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 61 ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND); 62 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 63 } 64 65 /** 66 * @testcase.name : TEE_GetPropertyAsU64_WithoutEnum_NameIsZero 67 * @testcase.desc : test TA call TEE_GetPropertyAsU64 for name value is zero 68 * @testcase.expect : return TEEC_ERROR_ITEM_NOT_FOUND 69 */ 70 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameIsZero, Function | MediumTest | Level0) 71 { 72 TEEC_Result ret; 73 74 TestData value = { 0 }; 75 value.cmd = CMD_TEE_GetPropertyAsU64; 76 value.propSet = TEE_PROPSET_CURRENT_TA; 77 78 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 79 ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND); 80 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 81 } 82 83 /** 84 * @testcase.name : TEE_GetPropertyAsU64_WithoutEnum_ValueIsNull 85 * @testcase.desc : test TA call TEE_GetPropertyAsU64 for value is null 86 * @testcase.expect : return TEEC_ERROR_BAD_PARAMETERS 87 */ 88 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_ValueIsNull, Function | MediumTest | Level0) 89 { 90 TEEC_Result ret; 91 92 int rc; 93 TestData value = { 0 }; 94 value.cmd = CMD_TEE_GetPropertyAsU64; 95 value.caseId = OUTPUT_ISNULL; 96 value.propSet = TEE_PROPSET_CURRENT_TA; 97 rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_DATASIZE, sizeof(GPD_TA_DATASIZE)); 98 ASSERT_EQ(rc, 0); 99 value.inBufferLen = sizeof(GPD_TA_DATASIZE); 100 101 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 102 ASSERT_EQ(ret, TEEC_ERROR_BAD_PARAMETERS); 103 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 104 } 105 106 /** 107 * @testcase.name : TEE_GetPropertyAsU64_WithoutEnum_NameNotFound 108 * @testcase.desc : test TA call TEE_GetPropertyAsU64 while Name Not Found 109 * @testcase.expect : return TEEC_ERROR_ITEM_NOT_FOUND 110 */ 111 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameNotFound, Function | MediumTest | Level0) 112 { 113 TEEC_Result ret; 114 115 int rc; 116 TestData value = { 0 }; 117 value.cmd = CMD_TEE_GetPropertyAsU64; 118 value.propSet = TEE_PROPSET_CURRENT_TA; 119 rc = memcpy_s(value.inBuffer, BIG_SIZE, PROPERTY_NAME_UNKNOWN, sizeof(PROPERTY_NAME_UNKNOWN)); 120 ASSERT_EQ(rc, 0); 121 value.inBufferLen = sizeof(PROPERTY_NAME_UNKNOWN); 122 123 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 124 ASSERT_EQ(ret, TEEC_ERROR_ITEM_NOT_FOUND); 125 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 126 } 127 128 /** 129 * @testcase.name : TEE_GetPropertyAsU64_WithoutEnum_NameNotU64 130 * @testcase.desc : test TA call TEE_GetPropertyAsU64 while Name type is not U64 131 * @testcase.expect : return TEEC_ERROR_BAD_FORMAT 132 */ 133 TEE_TEST(TeeTCF1Test, TEE_GetPropertyAsU64_WithoutEnum_NameNotU64, Function | MediumTest | Level0) 134 { 135 TEEC_Result ret; 136 137 int rc; 138 TestData value = { 0 }; 139 value.cmd = CMD_TEE_GetPropertyAsU64; 140 value.propSet = TEE_PROPSET_CURRENT_TA; 141 rc = memcpy_s(value.inBuffer, BIG_SIZE, GPD_TA_DESCRIPTION, sizeof(GPD_TA_DESCRIPTION)); 142 ASSERT_EQ(rc, 0); 143 value.inBufferLen = sizeof(GPD_TA_DESCRIPTION); 144 145 ret = Invoke_GetPropertyAsX(GetContext(), GetSession(), &value); 146 ASSERT_EQ(ret, TEEC_ERROR_BAD_FORMAT); 147 ASSERT_EQ(value.origin, TEEC_ORIGIN_TRUSTED_APP); 148 } 149