1 /*
2 * Copyright (c) 2022-2024 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 "inputer_get_data_stub_test.h"
17
18 #include "message_parcel.h"
19
20 #include "iam_common_defines.h"
21 #include "mock_inputer_set_data.h"
22 #include "mock_inputer_get_data_service.h"
23
24 namespace OHOS {
25 namespace UserIam {
26 namespace PinAuth {
27 using namespace testing;
28 using namespace testing::ext;
29
SetUpTestCase()30 void InputerGetDataStubTest::SetUpTestCase()
31 {
32 }
33
TearDownTestCase()34 void InputerGetDataStubTest::TearDownTestCase()
35 {
36 }
37
SetUp()38 void InputerGetDataStubTest::SetUp()
39 {
40 }
41
TearDown()42 void InputerGetDataStubTest::TearDown()
43 {
44 }
45
46 namespace {
GetMockInputerGetDataService(MockInputerGetDataService * service,int32_t * testErrorCode)47 void GetMockInputerGetDataService(MockInputerGetDataService *service, int32_t *testErrorCode)
48 {
49 ON_CALL(*service, OnGetData)
50 .WillByDefault([&testErrorCode](const InputerGetDataParam &getDataParam) {
51 if (getDataParam.inputerSetData != nullptr) {
52 getDataParam.inputerSetData->OnSetData(
53 getDataParam.authSubType, getDataParam.algoParameter, *testErrorCode);
54 }
55 }
56 );
57 }
58 }
59
60 HWTEST_F(InputerGetDataStubTest, InputerGetDataStubTestOnGetData001, TestSize.Level0)
61 {
62 int32_t testAuthSubType = 10000;
63 std::vector<uint8_t> testSalt = {1, 2, 3, 4, 5};
64 std::vector<uint8_t> testChallenge = {2, 3, 4, 5, 6};
65 uint32_t testAlgoVersion = 0;
66 GetDataMode testMode = GET_DATA_MODE_ALL_IN_ONE_PIN_AUTH;
67
68 MockInputerGetDataService service;
69
70 sptr<MockInputerSetData> tempInputerSetData(new (std::nothrow) MockInputerSetData());
71 EXPECT_NE(tempInputerSetData, nullptr);
72
73 MessageParcel data;
74 MessageParcel reply;
75
76 EXPECT_TRUE(data.WriteInterfaceToken(InputerGetData::GetDescriptor()));
77 EXPECT_TRUE(data.WriteInt32(testMode));
78 EXPECT_TRUE(data.WriteInt32(testAuthSubType));
79 EXPECT_TRUE(data.WriteUint32(testAlgoVersion));
80 EXPECT_TRUE(data.WriteUInt8Vector(testSalt));
81 EXPECT_TRUE(data.WriteUInt8Vector(testChallenge));
82 ASSERT_NE(tempInputerSetData->AsObject(), nullptr);
83 EXPECT_TRUE(data.WriteRemoteObject(tempInputerSetData->AsObject()));
84
85 uint32_t code = InputerGetDataInterfaceCode::ON_GET_DATA;
86 MessageOption option(MessageOption::TF_SYNC);
87
88 EXPECT_EQ(service.OnRemoteRequest(code, data, reply, option), UserAuth::SUCCESS);
89 }
90
91 HWTEST_F(InputerGetDataStubTest, InputerGetDataStubTestOnGetData002, TestSize.Level0)
92 {
93 int32_t testAuthSubType = 10000;
94 std::vector<uint8_t> testSalt = {1, 2, 3, 4, 5};
95 uint32_t testAlgoVersion = 0;
96 bool testIsEnroll = false;
97
98 MockInputerGetDataService service;
99
100 sptr<InputerSetData> testInputerSetData(new (std::nothrow) MockInputerSetData());
101 EXPECT_NE(testInputerSetData, nullptr);
102
103 MessageParcel data;
104 MessageParcel reply;
105
106 EXPECT_TRUE(data.WriteInt32(testAuthSubType));
107 EXPECT_TRUE(data.WriteUInt8Vector(testSalt));
108 EXPECT_NE(testInputerSetData->AsObject(), nullptr);
109 EXPECT_TRUE(data.WriteUint32(testAlgoVersion));
110 EXPECT_TRUE(data.WriteBool(testIsEnroll));
111 EXPECT_TRUE(data.WriteRemoteObject(testInputerSetData->AsObject()));
112 uint32_t code = InputerGetDataInterfaceCode::ON_GET_DATA;
113 MessageOption option(MessageOption::TF_SYNC);
114
115 EXPECT_EQ(service.OnRemoteRequest(code, data, reply, option), UserAuth::GENERAL_ERROR);
116 }
117
118 HWTEST_F(InputerGetDataStubTest, OnRemoteRequestTest001, TestSize.Level0)
119 {
120 int32_t userId = 1;
121 int32_t authIntent = 1;
122 std::string complexityReg = "";
123 int32_t testAuthSubType = 10000;
124 std::vector<uint8_t> testSalt = {1, 2, 3, 4, 5};
125 std::vector<uint8_t> testChallenge = {2, 3, 4, 5, 6};
126 uint32_t testAlgoVersion = 0;
127 GetDataMode testMode = GET_DATA_MODE_ALL_IN_ONE_PIN_AUTH;
128 int32_t testErrorCode = 0;
129
130 MockInputerGetDataService service;
131 EXPECT_CALL(service, OnGetData(_)).Times(1);
132 ON_CALL(service, OnGetData)
133 .WillByDefault(
134 [&testAuthSubType, &testAlgoVersion, &testMode, &testErrorCode](
__anon1d3c23580302( const InputerGetDataParam &getDataParam) 135 const InputerGetDataParam &getDataParam) {
136 EXPECT_EQ(getDataParam.authSubType, testAuthSubType);
137 EXPECT_THAT(getDataParam.algoParameter, ElementsAre(1, 2, 3, 4, 5));
138 EXPECT_THAT(getDataParam.challenge, ElementsAre(2, 3, 4, 5, 6));
139 EXPECT_EQ(getDataParam.algoVersion, testAlgoVersion);
140 EXPECT_EQ(getDataParam.mode, testMode);
141 if (getDataParam.inputerSetData != nullptr) {
142 getDataParam.inputerSetData->OnSetData(
143 getDataParam.authSubType, getDataParam.algoParameter, testErrorCode);
144 }
145 }
146 );
147
148 sptr<MockInputerSetData> tempInputerSetData(new (std::nothrow) MockInputerSetData());
149 EXPECT_NE(tempInputerSetData, nullptr);
150 EXPECT_CALL(*tempInputerSetData, OnSetData(_, _, _)).Times(1);
151
152 MessageParcel data;
153 MessageParcel reply;
154
155 EXPECT_TRUE(data.WriteInterfaceToken(InputerGetData::GetDescriptor()));
156 EXPECT_TRUE(data.WriteInt32(testMode));
157 EXPECT_TRUE(data.WriteInt32(testAuthSubType));
158 EXPECT_TRUE(data.WriteUint32(testAlgoVersion));
159 EXPECT_TRUE(data.WriteUInt8Vector(testSalt));
160 EXPECT_TRUE(data.WriteUInt8Vector(testChallenge));
161 EXPECT_TRUE(data.WriteInt32(userId));
162 EXPECT_TRUE(data.WriteString(complexityReg));
163 EXPECT_TRUE(data.WriteInt32(authIntent));
164 ASSERT_NE(tempInputerSetData->AsObject(), nullptr);
165 EXPECT_TRUE(data.WriteRemoteObject(tempInputerSetData->AsObject()));
166
167 uint32_t code = 1;
168 MessageOption option(MessageOption::TF_SYNC);
169
170 EXPECT_EQ(service.OnRemoteRequest(code, data, reply, option), 0);
171 }
172
173 HWTEST_F(InputerGetDataStubTest, OnGetDataStubTest001, TestSize.Level0)
174 {
175 int32_t testAuthSubType = 10000;
176 std::vector<uint8_t> testSalt = {1, 2, 3, 4, 5};
177 std::vector<uint8_t> testChallenge = {2, 3, 4, 5, 6};
178 GetDataMode testMode = GET_DATA_MODE_ALL_IN_ONE_PIN_AUTH;
179 int32_t testErrorCode = 0;
180
181 MockInputerGetDataService service;
182 GetMockInputerGetDataService(&service, &testErrorCode);
183
184 sptr<MockInputerSetData> tempInputerSetData(new (std::nothrow) MockInputerSetData());
185 EXPECT_NE(tempInputerSetData, nullptr);
186
187 MessageParcel data;
188 MessageParcel reply;
189 EXPECT_TRUE(data.WriteInterfaceToken(InputerGetData::GetDescriptor()));
190 EXPECT_NO_THROW(service.OnGetDataStub(data, reply));
191
192 MessageParcel data1;
193 EXPECT_TRUE(data1.WriteInt32(testMode));
194 EXPECT_TRUE(data1.WriteInterfaceToken(InputerGetData::GetDescriptor()));
195 EXPECT_NO_THROW(service.OnGetDataStub(data1, reply));
196
197 MessageParcel data2;
198 EXPECT_TRUE(data2.WriteInt32(testMode));
199 EXPECT_TRUE(data2.WriteInt32(testAuthSubType));
200 EXPECT_TRUE(data2.WriteInterfaceToken(InputerGetData::GetDescriptor()));
201 EXPECT_NO_THROW(service.OnGetDataStub(data2, reply));
202
203 MessageParcel data3;
204 EXPECT_TRUE(data3.WriteInt32(testMode));
205 EXPECT_TRUE(data3.WriteInt32(testAuthSubType));
206 EXPECT_TRUE(data3.WriteUInt8Vector(testSalt));
207 EXPECT_TRUE(data3.WriteInterfaceToken(InputerGetData::GetDescriptor()));
208 EXPECT_NO_THROW(service.OnGetDataStub(data3, reply));
209
210 MessageParcel data4;
211 EXPECT_TRUE(data4.WriteInt32(testMode));
212 EXPECT_TRUE(data4.WriteInt32(testAuthSubType));
213 EXPECT_TRUE(data4.WriteUInt8Vector(testSalt));
214 EXPECT_TRUE(data4.WriteUInt8Vector(testChallenge));
215 EXPECT_TRUE(data4.WriteInterfaceToken(InputerGetData::GetDescriptor()));
216 EXPECT_NO_THROW(service.OnGetDataStub(data4, reply));
217
218 MessageParcel data5;
219 EXPECT_TRUE(data5.WriteInt32(testMode));
220 EXPECT_TRUE(data5.WriteInt32(testAuthSubType));
221 EXPECT_TRUE(data5.WriteUInt8Vector(testSalt));
222 EXPECT_TRUE(data5.WriteUInt8Vector(testChallenge));
223 EXPECT_TRUE(data5.WriteRemoteObject(tempInputerSetData->AsObject()));
224 EXPECT_NO_THROW(service.OnGetDataStub(data5, reply));
225 }
226 } // namespace PinAuth
227 } // namespace UserIam
228 } // namespace OHOS
229