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