• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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