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