1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 17 #include <stdio.h> 18 #include "gtest/gtest.h" 19 20 #include "devattest_interface.h" 21 22 #define DEVATTEST_INIT -2 23 #define DEVATTEST_SUCCESS 0 24 25 using namespace std; 26 using namespace testing::ext; 27 28 typedef enum { 29 SOFTWARE_RESULT_VERSIONID, 30 SOFTWARE_RESULT_PATCHLEVEL, 31 SOFTWARE_RESULT_ROOTHASH, 32 SOFTWARE_RESULT_PCID, 33 SOFTWARE_RESULT_RESERVE, 34 } SOFTWARE_RESULT_DETAIL_TYPE; 35 36 class DeviceAttestQuerryTest : public testing::Test { 37 public: AttestStatusNumberValid(int32_t attestStatusNumber)38 bool AttestStatusNumberValid(int32_t attestStatusNumber) 39 { 40 if (attestStatusNumber < DEVATTEST_INIT || attestStatusNumber > DEVATTEST_SUCCESS) { 41 return false; 42 } 43 return true; 44 } 45 AttestStatusValid(AttestResultInfo attestResultInfo)46 ::testing::AssertionResult AttestStatusValid(AttestResultInfo attestResultInfo) 47 { 48 bool result = true; 49 string failString; 50 if (!AttestStatusNumberValid(attestResultInfo.authResult)) { 51 failString += string(" authResult is ") + to_string(attestResultInfo.authResult); 52 result = false; 53 } 54 if (!AttestStatusNumberValid(attestResultInfo.softwareResult)) { 55 failString += string(" softwareResult is ") + to_string(attestResultInfo.softwareResult); 56 result = false; 57 } 58 if (!AttestStatusNumberValid(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_VERSIONID])) { 59 failString += string(" versionResult is ") + to_string(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_VERSIONID]); 60 result = false; 61 } 62 if (!AttestStatusNumberValid(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_PATCHLEVEL])) { 63 failString += string(" patchResult is ") + to_string(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_PATCHLEVEL]); 64 result = false; 65 } 66 if (!AttestStatusNumberValid(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_ROOTHASH])) { 67 failString += string(" roothashResult is ") + to_string(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_ROOTHASH]); 68 result = false; 69 } 70 if (!AttestStatusNumberValid(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_PCID])) { 71 failString += string(" pcidResult is ") + to_string(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_PCID]); 72 result = false; 73 } 74 if (!AttestStatusNumberValid(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_RESERVE])) { 75 failString += string(" reserveResult is ") + to_string(attestResultInfo.softwareResultDetail[SOFTWARE_RESULT_RESERVE]); 76 result = false; 77 } 78 if (attestResultInfo.authResult == DEVATTEST_SUCCESS) { 79 if (attestResultInfo.ticketLength <= 0) { 80 failString += string(" ticketLength is ") + to_string(attestResultInfo.ticketLength); 81 result = false; 82 } 83 if (attestResultInfo.ticket == "") { 84 failString += string(" ticket is empty"); 85 result = false; 86 } 87 } 88 if (result) { 89 return ::testing::AssertionSuccess(); 90 } else { 91 return ::testing::AssertionFailure() << failString.c_str(); 92 } 93 } 94 protected: SetUpTestCase(void)95 static void SetUpTestCase(void) {} TearDownTestCase(void)96 static void TearDownTestCase(void) {} SetUp()97 virtual void SetUp() {} TearDown()98 virtual void TearDown() {} 99 }; 100 101 /** 102 * @tc.number : Sub_Device_Attest_Test_0200 103 * @tc.name : HiLog::Warn parameter legal test (Cortex-A, C) 104 * @tc.desc : [C- SOFTWARE -0200] 105 */ 106 HWTEST_F(DeviceAttestQuerryTest, subDeviceAttestTest0200, Function | MediumTest | Level1) 107 { 108 int32_t ret = DEVATTEST_SUCCESS; 109 AttestResultInfo attestResultInfo = { 0 }; 110 attestResultInfo.ticket = NULL; 111 printf("[CLIENT MAIN] query.\n"); 112 ret = GetAttestStatus(&attestResultInfo); 113 EXPECT_EQ(ret, DEVATTEST_SUCCESS); 114 EXPECT_EQ(AttestStatusValid(attestResultInfo), true); 115 } 116 117 /** 118 * @tc.number : Sub_Device_Attest_Test_0300 119 * @tc.name : HiLog::Warn parameter legal test (Cortex-A, C) 120 * @tc.desc : [C- SOFTWARE -0200] 121 */ 122 HWTEST_F(DeviceAttestQuerryTest, subDeviceAttestTest0300, Function | MediumTest | Level1) 123 { 124 int32_t ret = DEVATTEST_SUCCESS; 125 ret = StartDevAttestTask(); 126 printf("[CLIENT MAIN] StartDevAttestTask ret:%d.\n", ret); 127 EXPECT_EQ(ret, DEVATTEST_SUCCESS); 128 AttestResultInfo attestResultInfo = { 0 }; 129 attestResultInfo.ticket = NULL; 130 printf("[CLIENT MAIN] query.\n"); 131 ret = GetAttestStatus(&attestResultInfo); 132 printf("[CLIENT MAIN] wrong. ret:%d\n", ret); 133 #ifdef __LINUX__ 134 EXPECT_EQ(ret, DEVATTEST_SUCCESS); 135 #else 136 EXPECT_FALSE(ret == DEVATTEST_SUCCESS); 137 #endif 138 } 139 140