1 /*
2  * Copyright (c) 2022-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 "gtest/gtest.h"
17 
18 #include "iam_logger.h"
19 #include "iam_ptr.h"
20 
21 #include "fingerprint_auth_driver_hdi.h"
22 #include "mock_fingerprint_auth_interface_adapter.h"
23 #include "mock_iall_in_one_executor.h"
24 #include "mock_ifingerprint_auth_interface.h"
25 
26 #define LOG_TAG "FINGERPRINT_AUTH_SA"
27 
28 using namespace testing;
29 using namespace testing::ext;
30 using namespace OHOS::UserIam::Common;
31 
32 namespace OHOS {
33 namespace UserIam {
34 namespace FingerprintAuth {
35 class FingerprintAuthDriverHdiUnitTest : public testing::Test {
36 public:
37     static void SetUpTestCase();
38     static void TearDownTestCase();
39     void SetUp();
40     void TearDown();
41 };
42 
SetUpTestCase()43 void FingerprintAuthDriverHdiUnitTest::SetUpTestCase()
44 {
45 }
46 
TearDownTestCase()47 void FingerprintAuthDriverHdiUnitTest::TearDownTestCase()
48 {
49 }
50 
SetUp()51 void FingerprintAuthDriverHdiUnitTest::SetUp()
52 {
53 }
54 
TearDown()55 void FingerprintAuthDriverHdiUnitTest::TearDown()
56 {
57 }
58 
59 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_001, TestSize.Level0)
60 {
61     FingerprintAuthDriverHdi driverHdi(nullptr);
62     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
63     driverHdi.GetExecutorList(executorList);
64     EXPECT_TRUE(executorList.size() == 0);
65 }
66 
67 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_002, TestSize.Level0)
68 {
69     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
70     ASSERT_TRUE(adapter != nullptr);
71     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(nullptr));
72 
73     FingerprintAuthDriverHdi driverHdi(adapter);
74     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
75     driverHdi.GetExecutorList(executorList);
76     EXPECT_TRUE(executorList.size() == 0);
77 }
78 
79 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_003, TestSize.Level0)
80 {
81     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
82     ASSERT_TRUE(interface != nullptr);
83     EXPECT_CALL(*interface, GetExecutorList(_)).Times(Exactly(1));
84 
85     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
86     ASSERT_TRUE(adapter != nullptr);
87     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
88 
89     FingerprintAuthDriverHdi driverHdi(adapter);
90     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
91     driverHdi.GetExecutorList(executorList);
92     EXPECT_TRUE(executorList.size() == 0);
93 }
94 
95 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_004, TestSize.Level0)
96 {
97     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
98     ASSERT_TRUE(interface != nullptr);
99     EXPECT_CALL(*interface, GetExecutorList(_))
100         .Times(Exactly(1))
__anon2055601d0102(std::vector<sptr<IAllInOneExecutor>> &list) 101         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) { return static_cast<int32_t>(HDF_FAILURE); });
102 
103     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
104     ASSERT_TRUE(adapter != nullptr);
105     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
106 
107     FingerprintAuthDriverHdi driverHdi(adapter);
108     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
109     driverHdi.GetExecutorList(executorList);
110     EXPECT_TRUE(executorList.size() == 0);
111 }
112 
113 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_005, TestSize.Level0)
114 {
115     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
116     ASSERT_TRUE(interface != nullptr);
117     EXPECT_CALL(*interface, GetExecutorList(_))
118         .Times(Exactly(1))
__anon2055601d0202(std::vector<sptr<IAllInOneExecutor>> &list) 119         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) { return static_cast<int32_t>(HDF_SUCCESS); });
120 
121     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
122     ASSERT_TRUE(adapter != nullptr);
123     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
124 
125     FingerprintAuthDriverHdi driverHdi(adapter);
126     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
127     driverHdi.GetExecutorList(executorList);
128     EXPECT_TRUE(executorList.size() == 0);
129 }
130 
131 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_006, TestSize.Level0)
132 {
133     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
134     ASSERT_TRUE(interface != nullptr);
135     EXPECT_CALL(*interface, GetExecutorList(_))
136         .Times(Exactly(1))
__anon2055601d0302(std::vector<sptr<IAllInOneExecutor>> &list) 137         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) {
138             auto executor = sptr<IAllInOneExecutor>(new (std::nothrow) MockIAllInOneExecutor());
139             EXPECT_TRUE(executor != nullptr);
140             list.push_back(executor);
141             return static_cast<int32_t>(HDF_SUCCESS);
142         });
143 
144     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
145     ASSERT_TRUE(adapter != nullptr);
146     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
147 
148     FingerprintAuthDriverHdi driverHdi(adapter);
149     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
150     driverHdi.GetExecutorList(executorList);
151     EXPECT_TRUE(executorList.size() == 1);
152 }
153 
154 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_007, TestSize.Level0)
155 {
156     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
157     ASSERT_TRUE(interface != nullptr);
158     EXPECT_CALL(*interface, GetExecutorList(_))
159         .Times(Exactly(1))
__anon2055601d0402(std::vector<sptr<IAllInOneExecutor>> &list) 160         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) {
161             list.push_back(sptr<IAllInOneExecutor>(nullptr));
162             auto executor = sptr<IAllInOneExecutor>(new (std::nothrow) MockIAllInOneExecutor());
163             EXPECT_TRUE(executor != nullptr);
164             list.push_back(executor);
165             list.push_back(sptr<IAllInOneExecutor>(nullptr));
166             executor = sptr<IAllInOneExecutor>(new (std::nothrow) MockIAllInOneExecutor());
167             EXPECT_TRUE(executor != nullptr);
168             list.push_back(executor);
169             return static_cast<int32_t>(HDF_SUCCESS);
170         });
171 
172     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
173     ASSERT_TRUE(adapter != nullptr);
174     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
175 
176     FingerprintAuthDriverHdi driverHdi(adapter);
177     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
178     driverHdi.GetExecutorList(executorList);
179     EXPECT_TRUE(executorList.size() == 2);
180 }
181 
182 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_GetExecutorListTest_008, TestSize.Level0)
183 {
184     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
185     ASSERT_TRUE(interface != nullptr);
186     EXPECT_CALL(*interface, GetExecutorList(_))
187         .Times(Exactly(1))
__anon2055601d0502(std::vector<sptr<IAllInOneExecutor>> &list) 188         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) {
189             auto executor = sptr<IAllInOneExecutor>(new (std::nothrow) MockIAllInOneExecutor());
190             EXPECT_TRUE(executor != nullptr);
191             list.push_back(executor);
192             return static_cast<int32_t>(HDF_FAILURE);
193         });
194 
195     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
196     ASSERT_TRUE(adapter != nullptr);
197     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
198 
199     FingerprintAuthDriverHdi driverHdi(adapter);
200     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
201     driverHdi.GetExecutorList(executorList);
202     EXPECT_TRUE(executorList.size() == 0);
203 }
204 
205 HWTEST_F(FingerprintAuthDriverHdiUnitTest, FingerprintAuthDriverHdi_OnHdiDisconnectTest_001, TestSize.Level0)
206 {
207     sptr<MockIFingerprintAuthInterface> interface(new (std::nothrow) MockIFingerprintAuthInterface());
208     ASSERT_TRUE(interface != nullptr);
209     EXPECT_CALL(*interface, GetExecutorList(_))
210         .Times(Exactly(1))
__anon2055601d0602(std::vector<sptr<IAllInOneExecutor>> &list) 211         .WillOnce([](std::vector<sptr<IAllInOneExecutor>> &list) {
212             auto executor = sptr<IAllInOneExecutor>(new (std::nothrow) MockIAllInOneExecutor());
213             EXPECT_TRUE(executor != nullptr);
214             list.push_back(executor);
215             return static_cast<int32_t>(HDF_SUCCESS);
216         });
217 
218     auto adapter = MakeShared<MockFingerprintAuthInterfaceAdapter>();
219     ASSERT_TRUE(adapter != nullptr);
220     EXPECT_CALL(*adapter, Get()).Times(Exactly(1)).WillOnce(Return(interface));
221 
222     FingerprintAuthDriverHdi driverHdi(adapter);
223     std::vector<std::shared_ptr<UserAuth::IAuthExecutorHdi>> executorList;
224     driverHdi.GetExecutorList(executorList);
225     EXPECT_TRUE(executorList.size() == 1);
226     driverHdi.OnHdiDisconnect();
227 }
228 } // namespace FingerprintAuth
229 } // namespace UserIam
230 } // namespace OHOS
231