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