1 /*
2  * Copyright (c) 2022 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 <gmock/gmock.h>
17 #include "account_iam_client.h"
18 #include "account_log_wrapper.h"
19 
20 namespace OHOS {
21 namespace AccountTest {
22 namespace {
23 constexpr int32_t TEST_USER_ID = 200;
24 constexpr uint64_t TEST_CONTEXT_ID = 122;
25 constexpr uint64_t TEST_CREDENTIAL_ID = 0;
26 const std::vector<uint8_t> TEST_CHALLENGE = {1, 2, 3, 4};
27 }
28 
29 using namespace testing;
30 using namespace testing::ext;
31 using namespace OHOS::AccountSA;
32 using namespace OHOS::UserIam::UserAuth;
33 
34 class AccountIAMProxyMockTest : public testing::Test {
35 public:
36     static void SetUpTestCase(void);
37     static void TearDownTestCase(void);
38     void SetUp(void) override;
39     void TearDown(void) override;
40 };
41 
SetUpTestCase(void)42 void AccountIAMProxyMockTest::SetUpTestCase(void)
43 {}
44 
TearDownTestCase(void)45 void AccountIAMProxyMockTest::TearDownTestCase(void)
46 {}
47 
SetUp(void)48 void AccountIAMProxyMockTest::SetUp(void) __attribute__((no_sanitize("cfi")))
49 {
50     testing::UnitTest *test = testing::UnitTest::GetInstance();
51     ASSERT_NE(test, nullptr);
52     const testing::TestInfo *testinfo = test->current_test_info();
53     ASSERT_NE(testinfo, nullptr);
54     string testCaseName = string(testinfo->name());
55     ACCOUNT_LOGI("[SetUp] %{public}s start", testCaseName.c_str());
56 }
57 
TearDown(void)58 void AccountIAMProxyMockTest::TearDown(void)
59 {}
60 
61 class IDMCallbackMockTest final : public AccountSA::IDMCallback {
62 public:
OnResult(int32_t result,const AccountSA::Attributes & extraInfo)63     void OnResult(int32_t result, const AccountSA::Attributes &extraInfo)
64     {
65         result_ = result;
66     }
OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)67     void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) {}
68     int32_t result_;
69 };
70 
71 class GetSetPropCallbackMockTest final : public AccountSA::GetSetPropCallback {
72 public:
OnResult(int32_t result,const AccountSA::Attributes & extraInfo)73     void OnResult(int32_t result, const AccountSA::Attributes &extraInfo)
74     {
75         result_ = result;
76     }
77     int32_t result_;
78 };
79 
80 class PreRemoteAuthCallbackMockTest final : public AccountSA::PreRemoteAuthCallback {
81 public:
OnResult(int32_t result)82     void OnResult(int32_t result) override
83     {
84         result_ = result;
85     }
86     int32_t result_;
87 };
88 
89 /**
90  * @tc.name: AccountIAMClient_OpenSession_0100
91  * @tc.desc: Test func with proxy is nullptr.
92  * @tc.type: FUNC
93  * @tc.require: issueI5N90O
94  */
95 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_OpenSession_0100, TestSize.Level0)
96 {
97     std::vector<uint8_t> challenge;
98     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, AccountIAMClient::GetInstance().OpenSession(TEST_USER_ID, challenge));
99 }
100 
101 /**
102  * @tc.name: AccountIAMClient_CloseSession_0100
103  * @tc.desc: Test func with proxy is nullptr.
104  * @tc.type: FUNC
105  * @tc.require: issueI5N90O
106  */
107 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_CloseSession_0100, TestSize.Level0)
108 {
109     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, AccountIAMClient::GetInstance().CloseSession(TEST_USER_ID));
110 }
111 
112 /**
113  * @tc.name: AccountIAMClient_AddCredential_0100
114  * @tc.desc: Test func with proxy is nullptr.
115  * @tc.type: FUNC
116  * @tc.require: issueI5N90O
117  */
118 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_AddCredential_0100, TestSize.Level0)
119 {
120     CredentialParameters testPara = {};
121     auto testCallback = std::make_shared<IDMCallbackMockTest>();
122     ASSERT_NE(testCallback, nullptr);
123     AccountIAMClient::GetInstance().AddCredential(TEST_USER_ID, testPara, testCallback);
124     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
125 }
126 
127 /**
128  * @tc.name: AccountIAMClient_UpdateCredential_0100
129  * @tc.desc: Test func with proxy is nullptr.
130  * @tc.type: FUNC
131  * @tc.require: issueI5N90O
132  */
133 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_UpdateCredential_0100, TestSize.Level0)
134 {
135     CredentialParameters testPara = {};
136     auto testCallback = std::make_shared<IDMCallbackMockTest>();
137     ASSERT_NE(testCallback, nullptr);
138     AccountIAMClient::GetInstance().UpdateCredential(TEST_USER_ID, testPara, testCallback);
139     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
140 }
141 
142 /**
143  * @tc.name: AccountIAMClient_Cancel_0100
144  * @tc.desc: Test func with proxy is nullptr.
145  * @tc.type: FUNC
146  * @tc.require: issueI5N90O
147  */
148 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_Cancel_0100, TestSize.Level0)
149 {
150     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, AccountIAMClient::GetInstance().Cancel(TEST_USER_ID));
151 }
152 
153 /**
154  * @tc.name: AccountIAMClient_DelCred_0100
155  * @tc.desc: Test func with proxy is nullptr.
156  * @tc.type: FUNC
157  * @tc.require: issueI5N90O
158  */
159 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_DelCred_0100, TestSize.Level0)
160 {
161     uint64_t testCredentialId = 111;
162     std::vector<uint8_t> testAuthToken = {1, 2, 3, 4};
163     auto testCallback = std::make_shared<IDMCallbackMockTest>();
164     ASSERT_NE(testCallback, nullptr);
165     AccountIAMClient::GetInstance().DelCred(TEST_USER_ID, testCredentialId, testAuthToken, testCallback);
166     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
167 }
168 
169 /**
170  * @tc.name: AccountIAMClient_DelUser_0100
171  * @tc.desc: Test func with proxy is nullptr.
172  * @tc.type: FUNC
173  * @tc.require: issueI5N90O
174  */
175 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_DelUser_0100, TestSize.Level0)
176 {
177     std::vector<uint8_t> testAuthToken = {1, 2, 3, 4};
178     auto testCallback = std::make_shared<IDMCallbackMockTest>();
179     ASSERT_NE(testCallback, nullptr);
180     AccountIAMClient::GetInstance().DelUser(TEST_USER_ID, testAuthToken, testCallback);
181     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
182 }
183 
184 /**
185  * @tc.name: AccountIAMClient_GetCredentialInfo_0100
186  * @tc.desc: Test func with proxy is nullptr.
187  * @tc.type: FUNC
188  * @tc.require: issueI5N90O
189  */
190 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_GetCredentialInfo_0100, TestSize.Level0)
191 {
192     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY,
193         AccountIAMClient::GetInstance().GetCredentialInfo(TEST_USER_ID, AuthType::PIN, nullptr));
194 }
195 
196 /**
197  * @tc.name: AccountIAMClient_AuthUser_0100
198  * @tc.desc: Test func with proxy is nullptr.
199  * @tc.type: FUNC
200  * @tc.require: issueI5N90O
201  */
202 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_AuthUser_0100, TestSize.Level0)
203 {
204     SetPropertyRequest testRequest = {};
205     auto testCallback = std::make_shared<IDMCallbackMockTest>();
206     ASSERT_NE(testCallback, nullptr);
207     AuthOptions authOptions;
208     authOptions.accountId = TEST_USER_ID;
209     ASSERT_EQ(static_cast<uint64_t>(0), AccountIAMClient::GetInstance().AuthUser(
210         authOptions, TEST_CHALLENGE, AuthType::PIN, AuthTrustLevel::ATL1, testCallback));
211 }
212 
213 /**
214  * @tc.name: AccountIAMClient_CancelAuth_0100
215  * @tc.desc: Test func with proxy is nullptr.
216  * @tc.type: FUNC
217  * @tc.require: issueI5N90O
218  */
219 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_CancelAuth_0100, TestSize.Level0)
220 {
221     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, AccountIAMClient::GetInstance().CancelAuth(TEST_CONTEXT_ID));
222 }
223 
224 /**
225  * @tc.name: AccountIAMClient_GetAvailableStatus_0100
226  * @tc.desc: Test func with proxy is nullptr.
227  * @tc.type: FUNC
228  * @tc.require: issueI5N90O
229  */
230 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_GetAvailableStatus_0100, TestSize.Level0)
231 {
232     int32_t status;
233     int32_t ret = AccountIAMClient::GetInstance().GetAvailableStatus(AuthType::FACE, AuthTrustLevel::ATL1, status);
234     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, ret);
235 }
236 
237 /**
238  * @tc.name: AccountIAMClient_GetProperty_0100
239  * @tc.desc: Test func with proxy is nullptr.
240  * @tc.type: FUNC
241  * @tc.require: issueI5N90O
242  */
243 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_GetProperty_0100, TestSize.Level0)
244 {
245     GetPropertyRequest testRequest = {};
246     auto testCallback = std::make_shared<GetSetPropCallbackMockTest>();
247     ASSERT_NE(testCallback, nullptr);
248     AccountIAMClient::GetInstance().GetProperty(TEST_USER_ID, testRequest, testCallback);
249     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
250 }
251 
252 /**
253  * @tc.name: AccountIAMClient_GetPropertyById_0100
254  * @tc.desc: Test GetPropertyByCredentialId func with proxy is nullptr.
255  * @tc.type: FUNC
256  * @tc.require:
257  */
258 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_GetPropertyById_0100, TestSize.Level0)
259 {
260     auto testCallback = std::make_shared<GetSetPropCallbackMockTest>();
261     ASSERT_NE(testCallback, nullptr);
262     std::vector<Attributes::AttributeKey> keys { Attributes::AttributeKey::ATTR_PIN_SUB_TYPE };
263     AccountIAMClient::GetInstance().GetPropertyByCredentialId(TEST_CREDENTIAL_ID, keys, testCallback);
264     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
265 }
266 
267 /**
268  * @tc.name: AccountIAMClient_SetProperty_0100
269  * @tc.desc: Test func with proxy is nullptr.
270  * @tc.type: FUNC
271  * @tc.require: issueI5N90O
272  */
273 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_SetProperty_0100, TestSize.Level0)
274 {
275     SetPropertyRequest testRequest = {};
276     auto testCallback = std::make_shared<GetSetPropCallbackMockTest>();
277     ASSERT_NE(testCallback, nullptr);
278     AccountIAMClient::GetInstance().SetProperty(TEST_USER_ID, testRequest, testCallback);
279     ASSERT_EQ(ERR_ACCOUNT_COMMON_GET_PROXY, testCallback->result_);
280 }
281 
282 /**
283  * @tc.name: AccountIAMClient_GetAccountState_0100
284  * @tc.desc: Test func with proxy is nullptr.
285  * @tc.type: FUNC
286  * @tc.require: issueI5N90O
287  */
288 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_GetAccountState_0100, TestSize.Level0)
289 {
290     EXPECT_EQ(IDLE, AccountIAMClient::GetInstance().GetAccountState(TEST_USER_ID));
291 }
292 
293 /**
294  * @tc.name: AccountIAMClient_PrepareRemoteAuth_0100
295  * @tc.desc: Test func PrepareRemoteAuth.
296  * @tc.type: FUNC
297  * @tc.require:
298  */
299 HWTEST_F(AccountIAMProxyMockTest, AccountIAMClient_PrepareRemoteAuth_0100, TestSize.Level0)
300 {
301     auto testCallback = std::make_shared<PreRemoteAuthCallbackMockTest>();
302     ASSERT_NE(testCallback, nullptr);
303     AccountIAMClient::GetInstance().PrepareRemoteAuth("testString", testCallback);
304     EXPECT_NE(testCallback->result_, 0);
305 }
306 }  // namespace AccountTest
307 }  // namespace OHOS