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
HWTEST_F(InputerGetDataStubTest, InputerGetDataStubTestOnGetData001, TestSize.Level0)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
HWTEST_F(InputerGetDataStubTest, InputerGetDataStubTestOnGetData002, TestSize.Level0)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
HWTEST_F(InputerGetDataStubTest, OnRemoteRequestTest001, TestSize.Level0)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 MockInputerGetDataService service;
130 EXPECT_CALL(service, OnGetData(_)).Times(1);
131 ON_CALL(service, OnGetData)
132 .WillByDefault(
133 [&testAuthSubType, &testAlgoVersion, &testMode, &testErrorCode](
134 const InputerGetDataParam &getDataParam) {
135 EXPECT_EQ(getDataParam.authSubType, testAuthSubType);
136 EXPECT_THAT(getDataParam.algoParameter, ElementsAre(1, 2, 3, 4, 5));
137 EXPECT_THAT(getDataParam.challenge, ElementsAre(2, 3, 4, 5, 6));
138 EXPECT_EQ(getDataParam.algoVersion, testAlgoVersion);
139 EXPECT_EQ(getDataParam.mode, testMode);
140 if (getDataParam.inputerSetData != nullptr) {
141 getDataParam.inputerSetData->OnSetData(
142 getDataParam.authSubType, getDataParam.algoParameter, testErrorCode);
143 }
144 }
145 );
146 sptr<MockInputerSetData> tempInputerSetData(new (std::nothrow) MockInputerSetData());
147 EXPECT_NE(tempInputerSetData, nullptr);
148 EXPECT_CALL(*tempInputerSetData, OnSetData(_, _, _)).Times(1);
149 MessageParcel data;
150 MessageParcel reply;
151 EXPECT_TRUE(data.WriteInterfaceToken(InputerGetData::GetDescriptor()));
152 EXPECT_TRUE(data.WriteInt32(testMode));
153 EXPECT_TRUE(data.WriteInt32(testAuthSubType));
154 EXPECT_TRUE(data.WriteUint32(testAlgoVersion));
155 EXPECT_TRUE(data.WriteUInt8Vector(testSalt));
156 EXPECT_TRUE(data.WriteUInt8Vector(testChallenge));
157 EXPECT_TRUE(data.WriteInt32(userId));
158 EXPECT_TRUE(data.WriteString(complexityReg));
159 EXPECT_TRUE(data.WriteInt32(authIntent));
160 ASSERT_NE(tempInputerSetData->AsObject(), nullptr);
161 EXPECT_TRUE(data.WriteRemoteObject(tempInputerSetData->AsObject()));
162 uint32_t code = 1;
163 MessageOption option(MessageOption::TF_SYNC);
164 EXPECT_EQ(service.OnRemoteRequest(code, data, reply, option), 0);
165 }
166
HWTEST_F(InputerGetDataStubTest, OnGetDataStubTest001, TestSize.Level0)167 HWTEST_F(InputerGetDataStubTest, OnGetDataStubTest001, TestSize.Level0)
168 {
169 int32_t testAuthSubType = 10000;
170 std::vector<uint8_t> testSalt = {1, 2, 3, 4, 5};
171 std::vector<uint8_t> testChallenge = {2, 3, 4, 5, 6};
172 GetDataMode testMode = GET_DATA_MODE_ALL_IN_ONE_PIN_AUTH;
173 int32_t testErrorCode = 0;
174
175 MockInputerGetDataService service;
176 GetMockInputerGetDataService(&service, &testErrorCode);
177
178 sptr<MockInputerSetData> tempInputerSetData(new (std::nothrow) MockInputerSetData());
179 EXPECT_NE(tempInputerSetData, nullptr);
180
181 MessageParcel data;
182 MessageParcel reply;
183 EXPECT_TRUE(data.WriteInterfaceToken(InputerGetData::GetDescriptor()));
184 EXPECT_NO_THROW(service.OnGetDataStub(data, reply));
185
186 MessageParcel data1;
187 EXPECT_TRUE(data1.WriteInt32(testMode));
188 EXPECT_TRUE(data1.WriteInterfaceToken(InputerGetData::GetDescriptor()));
189 EXPECT_NO_THROW(service.OnGetDataStub(data1, reply));
190
191 MessageParcel data2;
192 EXPECT_TRUE(data2.WriteInt32(testMode));
193 EXPECT_TRUE(data2.WriteInt32(testAuthSubType));
194 EXPECT_TRUE(data2.WriteInterfaceToken(InputerGetData::GetDescriptor()));
195 EXPECT_NO_THROW(service.OnGetDataStub(data2, reply));
196
197 MessageParcel data3;
198 EXPECT_TRUE(data3.WriteInt32(testMode));
199 EXPECT_TRUE(data3.WriteInt32(testAuthSubType));
200 EXPECT_TRUE(data3.WriteUInt8Vector(testSalt));
201 EXPECT_TRUE(data3.WriteInterfaceToken(InputerGetData::GetDescriptor()));
202 EXPECT_NO_THROW(service.OnGetDataStub(data3, reply));
203
204 MessageParcel data4;
205 EXPECT_TRUE(data4.WriteInt32(testMode));
206 EXPECT_TRUE(data4.WriteInt32(testAuthSubType));
207 EXPECT_TRUE(data4.WriteUInt8Vector(testSalt));
208 EXPECT_TRUE(data4.WriteUInt8Vector(testChallenge));
209 EXPECT_TRUE(data4.WriteInterfaceToken(InputerGetData::GetDescriptor()));
210 EXPECT_NO_THROW(service.OnGetDataStub(data4, reply));
211
212 MessageParcel data5;
213 EXPECT_TRUE(data5.WriteInt32(testMode));
214 EXPECT_TRUE(data5.WriteInt32(testAuthSubType));
215 EXPECT_TRUE(data5.WriteUInt8Vector(testSalt));
216 EXPECT_TRUE(data5.WriteUInt8Vector(testChallenge));
217 EXPECT_TRUE(data5.WriteRemoteObject(tempInputerSetData->AsObject()));
218 EXPECT_NO_THROW(service.OnGetDataStub(data5, reply));
219 }
220 } // namespace PinAuth
221 } // namespace UserIam
222 } // namespace OHOS
223