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