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