• 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 #include "devattest_client_test.h"
17 
18 #include "devattest_client.h"
19 #include "devattest_service_proxy.h"
20 
21 using namespace testing::ext;
22 using namespace OHOS;
23 using namespace OHOS::DevAttest;
24 
25 namespace OHOS {
26 constexpr int ATTEST_SET_OPTION = 0;
27 constexpr int ATTEST_GET_OPTION = 1;
28 constexpr int ATTEST_TEST_ZERO_NUM = 0;
29 constexpr int ATTEST_TEST_FAILED_NUM1 = -3;
30 constexpr int ATTEST_TEST_FAILED_NUM2 = 1;
31 const std::string ATTEST_TEST_TICKET_STRING = "testTicket";
32 
ActionAttestResultInfo(int option,AttestResultInfo & attestResultInfo)33 void ActionAttestResultInfo(int option, AttestResultInfo &attestResultInfo)
34 {
35     static AttestResultInfo g_attestResultInfo;
36     if (option == ATTEST_SET_OPTION) {
37         g_attestResultInfo.authResult_ = attestResultInfo.authResult_;
38         g_attestResultInfo.softwareResult_ = attestResultInfo.softwareResult_;
39         for (int i = 0; i < SOFTWARE_RESULT_DETAIL_SIZE; i++) {
40             g_attestResultInfo.softwareResultDetail_[i] = attestResultInfo.softwareResultDetail_[i];
41         }
42         g_attestResultInfo.ticketLength_ = attestResultInfo.ticketLength_;
43         g_attestResultInfo.ticket_ = attestResultInfo.ticket_;
44     } else {
45         attestResultInfo.authResult_ = g_attestResultInfo.authResult_;
46         attestResultInfo.softwareResult_ = g_attestResultInfo.softwareResult_;
47         for (int i = 0; i < SOFTWARE_RESULT_DETAIL_SIZE; i++) {
48             attestResultInfo.softwareResultDetail_[i] = g_attestResultInfo.softwareResultDetail_[i];
49         }
50         attestResultInfo.ticketLength_ = g_attestResultInfo.ticketLength_;
51         attestResultInfo.ticket_ = g_attestResultInfo.ticket_;
52     }
53 }
54 
SetAllAttestResultInfo(AttestResultInfo & attestResultInfo,int setNumber)55 void SetAllAttestResultInfo(AttestResultInfo &attestResultInfo, int setNumber)
56 {
57     attestResultInfo.authResult_ = setNumber;
58     attestResultInfo.softwareResult_ = setNumber;
59     for (int i = 0; i < SOFTWARE_RESULT_DETAIL_SIZE; i++) {
60         attestResultInfo.softwareResultDetail_[i] = setNumber;
61     }
62 }
63 
ActionReturnResult(int type,int option,int value)64 int ActionReturnResult(int type, int option, int value)
65 {
66     static int g_returnResult[ATTEST_TYPE_BUTT];
67     if (type < ATTEST_TYPE_REPLY_RESULT || type >= ATTEST_TYPE_BUTT) {
68         return DEVATTEST_FAIL;
69     }
70 
71     if (option == ATTEST_SET_OPTION) {
72         g_returnResult[type] = value;
73     } else {
74         return g_returnResult[type];
75     }
76     return DEVATTEST_SUCCESS;
77 }
78 
79 class MockIRemoteObject : public IRemoteObject {
80 public:
MockIRemoteObject()81     MockIRemoteObject() : IRemoteObject(u"mock_i_remote_object") {}
82 
~MockIRemoteObject()83     ~MockIRemoteObject() {}
84 
85     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.devattest.accessToken");
86 
GetObjectRefCount()87     int32_t GetObjectRefCount() override
88     {
89         return 0;
90     }
91 
SendRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)92     int SendRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
93     {
94         if (data.ReadInterfaceToken() != GetDescriptor()) {
95             reply.WriteInt32(DEVATTEST_FAIL);
96             return DEVATTEST_FAIL;
97         }
98 
99         if (code < DevAttest::DevAttestInterface::GET_AUTH_RESULT ||
100             code >= DevAttest::DevAttestInterface::ATTEST_INTERFACE_TYPE_BUTT) {
101             return DEVATTEST_FAIL;
102         }
103 
104         AttestResultInfo attestResultInfo;
105         ActionAttestResultInfo(ATTEST_GET_OPTION, attestResultInfo);
106         reply.WriteInt32(ActionReturnResult(ATTEST_TYPE_REPLY_RESULT, ATTEST_GET_OPTION, DEVATTEST_INIT));
107         attestResultInfo.Marshalling(reply);
108         return ActionReturnResult(ATTEST_TYPE_RETURN_RESULT, ATTEST_GET_OPTION, DEVATTEST_INIT);
109     }
110 
IsProxyObject() const111     bool IsProxyObject() const override
112     {
113         return true;
114     }
115 
CheckObjectLegality() const116     bool CheckObjectLegality() const override
117     {
118         return true;
119     }
120 
AddDeathRecipient(const sptr<DeathRecipient> & recipient)121     bool AddDeathRecipient(const sptr<DeathRecipient> &recipient) override
122     {
123         return true;
124     }
125 
RemoveDeathRecipient(const sptr<DeathRecipient> & recipient)126     bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient) override
127     {
128         return true;
129     }
130 
Marshalling(Parcel & parcel) const131     bool Marshalling(Parcel &parcel) const override
132     {
133         return true;
134     }
135 
AsInterface()136     sptr<IRemoteBroker> AsInterface() override
137     {
138         return nullptr;
139     }
140 
Dump(int fd,const std::vector<std::u16string> & args)141     int Dump(int fd, const std::vector<std::u16string> &args) override
142     {
143         return 0;
144     }
145 
GetObjectDescriptor() const146     std::u16string GetObjectDescriptor() const
147     {
148         std::u16string descriptor = std::u16string();
149         return descriptor;
150     }
151 };
152 } // namespace OHOS
153 
154 namespace OHOS {
155 namespace DevAttest {
SetUpTestCase(void)156 void DevAttestClientTest::SetUpTestCase(void)
157 {
158     // input testsuit setup step,setup invoked before all testcases
159 }
160 
TearDownTestCase(void)161 void DevAttestClientTest::TearDownTestCase(void)
162 {
163     // input testsuit teardown step,teardown invoked after all testcases
164 }
165 
SetUp(void)166 void DevAttestClientTest::SetUp(void)
167 {
168     // input testcase setup step,setup invoked before each testcases
169     AttestResultInfo attestResultInfotemp;
170     ActionAttestResultInfo(ATTEST_SET_OPTION, attestResultInfotemp);
171     (void)ActionReturnResult(ATTEST_TYPE_REPLY_RESULT, ATTEST_SET_OPTION, DEVATTEST_SUCCESS);
172     (void)ActionReturnResult(ATTEST_TYPE_RETURN_RESULT, ATTEST_SET_OPTION, DEVATTEST_SUCCESS);
173 }
174 
TearDown(void)175 void DevAttestClientTest::TearDown(void)
176 {
177     // input testcase teardown step,teardown invoked after each testcases
178 }
179 
180 /**
181  * @tc.name: GetAttestStatusProxyTest001
182  * @tc.desc: Test IPC interface returned failure.
183  * @tc.type: FUNC
184  * @tc.require: Issue I6RTOI
185  */
186 HWTEST_F(DevAttestClientTest, GetAttestStatusProxyTest001, TestSize.Level1)
187 {
188     sptr<IRemoteObject> object = new MockIRemoteObject();
189     DevAttestServiceProxy devAttestServiceProxy(object);
190 
191     AttestResultInfo attestResultInfo;
192     (void)ActionReturnResult(ATTEST_TYPE_RETURN_RESULT, ATTEST_SET_OPTION, DEVATTEST_FAIL);
193     int ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
194     ASSERT_EQ(DEVATTEST_FAIL, ret);
195 }
196 
197 /**
198  * @tc.name: GetAttestStatusProxyTest002
199  * @tc.desc: Test IPC interface returned success, but reply returned failure.
200  * @tc.type: FUNC
201  * @tc.require: Issue I6RTOI
202  */
203 HWTEST_F(DevAttestClientTest, GetAttestStatusProxyTest002, TestSize.Level1)
204 {
205     sptr<IRemoteObject> object = new MockIRemoteObject();
206     DevAttestServiceProxy devAttestServiceProxy(object);
207 
208     AttestResultInfo attestResultInfo;
209     (void)ActionReturnResult(ATTEST_TYPE_REPLY_RESULT, ATTEST_SET_OPTION, DEVATTEST_FAIL);
210     int ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
211     EXPECT_EQ(DEVATTEST_FAIL, ret);
212 
213     (void)ActionReturnResult(ATTEST_TYPE_REPLY_RESULT, ATTEST_SET_OPTION, DEVATTEST_ERR_JS_IS_NOT_SYSTEM_APP);
214     ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
215     ASSERT_EQ(DEVATTEST_ERR_JS_IS_NOT_SYSTEM_APP, ret);
216 }
217 
218 /**
219  * @tc.name: GetAttestStatusProxyTest003
220  * @tc.desc: Test ticket of AttestResultInfo is empty, if other data is successful
221  * @tc.type: FUNC
222  * @tc.require: Issue I6RTOI
223  */
224 HWTEST_F(DevAttestClientTest, GetAttestStatusProxyTest003, TestSize.Level1)
225 {
226     AttestResultInfo attestResultInfotemp;
227     SetAllAttestResultInfo(attestResultInfotemp, DEVATTEST_SUCCESS);
228     attestResultInfotemp.ticketLength_ = ATTEST_TEST_TICKET_STRING.length();
229     ActionAttestResultInfo(ATTEST_SET_OPTION, attestResultInfotemp);
230 
231     sptr<IRemoteObject> object = new MockIRemoteObject();
232     DevAttestServiceProxy devAttestServiceProxy(object);
233 
234     AttestResultInfo attestResultInfo;
235     int ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
236     EXPECT_EQ(ERR_OK, ret);
237     ASSERT_FALSE(AttestStatusValid(attestResultInfo));
238 }
239 
240 /**
241  * @tc.name: GetAttestStatusTest001
242  * @tc.desc: Test ticketLength of AttestResultInfo is zero, if other data is successful
243  * @tc.type: FUNC
244  * @tc.require: Issue I6RTOI
245  */
246 HWTEST_F(DevAttestClientTest, GetAttestStatusProxyTest004, TestSize.Level1)
247 {
248     AttestResultInfo attestResultInfotemp;
249     SetAllAttestResultInfo(attestResultInfotemp, ATTEST_TEST_FAILED_NUM1);
250     attestResultInfotemp.ticketLength_ = ATTEST_TEST_ZERO_NUM;
251     attestResultInfotemp.ticket_ = ATTEST_TEST_TICKET_STRING;
252     ActionAttestResultInfo(ATTEST_SET_OPTION, attestResultInfotemp);
253 
254     sptr<IRemoteObject> object = new MockIRemoteObject();
255     DevAttestServiceProxy devAttestServiceProxy(object);
256 
257     AttestResultInfo attestResultInfo;
258     int ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
259     EXPECT_EQ(ERR_OK, ret);
260     ASSERT_FALSE(AttestStatusValid(attestResultInfo));
261 }
262 
263 /**
264  * @tc.name: GetAttestStatusProxyTest005
265  * @tc.desc: Test authResult and softwareResult of AttestResultInfo is invaild, if other data is successful
266  * @tc.type: FUNC
267  * @tc.require: Issue I6RTOI
268  */
269 HWTEST_F(DevAttestClientTest, GetAttestStatusProxyTest005, TestSize.Level1)
270 {
271     AttestResultInfo attestResultInfotemp;
272     SetAllAttestResultInfo(attestResultInfotemp, DEVATTEST_SUCCESS);
273     attestResultInfotemp.authResult_ = ATTEST_TEST_FAILED_NUM1;
274     attestResultInfotemp.softwareResult_ = ATTEST_TEST_FAILED_NUM2;
275     attestResultInfotemp.ticketLength_ = ATTEST_TEST_TICKET_STRING.length();
276     attestResultInfotemp.ticket_ = ATTEST_TEST_TICKET_STRING;
277 
278     ActionAttestResultInfo(ATTEST_SET_OPTION, attestResultInfotemp);
279 
280     sptr<IRemoteObject> object = new MockIRemoteObject();
281     DevAttestServiceProxy devAttestServiceProxy(object);
282 
283     AttestResultInfo attestResultInfo;
284     int ret = devAttestServiceProxy.GetAttestStatus(attestResultInfo);
285     EXPECT_EQ(ERR_OK, ret);
286     ASSERT_FALSE(AttestStatusValid(attestResultInfo));
287 }
288 } // namespace DevAttest
289 } // namespace OHOS
290