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 "accesstoken_kit.h"
17 #define private public
18 #include "account_iam_callback_service.h"
19 #undef private
20 #include "account_iam_client.h"
21 #include "account_iam_client_test_callback.h"
22 #include "account_log_wrapper.h"
23 #include "test_common.h"
24 #include "token_setproc.h"
25
26 namespace OHOS {
27 namespace AccountTest {
28 namespace {
29 const int32_t TEST_USER_ID = 200;
30 const int32_t WAIT_TIME = 20;
31 }
32
33 using namespace testing;
34 using namespace testing::ext;
35 using namespace OHOS::AccountSA;
36 using namespace OHOS::Security::AccessToken;
37
38 #ifdef HAS_PIN_AUTH_PART
39 class MockIInputer : public OHOS::AccountSA::IInputer {
40 public:
~MockIInputer()41 virtual ~MockIInputer() {}
OnGetData(int32_t authSubType,std::vector<uint8_t> challenge,std::shared_ptr<IInputerData> inputerData)42 void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
43 std::shared_ptr<IInputerData> inputerData) override
44 {
45 return;
46 }
47 };
48 #endif
49
50 class AccountIAMCallbackServiceTest : public testing::Test {
51 public:
52 static void SetUpTestCase(void);
53 static void TearDownTestCase(void);
54 void SetUp(void) override;
55 void TearDown(void) override;
56 };
57
SetUpTestCase(void)58 void AccountIAMCallbackServiceTest::SetUpTestCase(void)
59 {
60 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(100, "com.ohos.settings", 0);
61 SetSelfTokenID(tokenId);
62 }
63
TearDownTestCase(void)64 void AccountIAMCallbackServiceTest::TearDownTestCase(void)
65 {}
66
SetUp(void)67 void AccountIAMCallbackServiceTest::SetUp(void) __attribute__((no_sanitize("cfi")))
68 {
69 testing::UnitTest *test = testing::UnitTest::GetInstance();
70 ASSERT_NE(test, nullptr);
71 const testing::TestInfo *testinfo = test->current_test_info();
72 ASSERT_NE(testinfo, nullptr);
73 string testCaseName = string(testinfo->name());
74 ACCOUNT_LOGI("[SetUp] %{public}s start", testCaseName.c_str());
75 }
76
TearDown(void)77 void AccountIAMCallbackServiceTest::TearDown(void)
78 {}
79
80 /**
81 * @tc.name: IDMCallbackService_OnAcquireInfo_0100
82 * @tc.desc: OnAcquireInfo with nullptr.
83 * @tc.type: FUNC
84 * @tc.require:
85 */
86 HWTEST_F(AccountIAMCallbackServiceTest, IDMCallbackService_OnAcquireInfo_0100, TestSize.Level0)
87 {
88 sptr<IDMCallbackService> wrapper = new (std::nothrow) IDMCallbackService(TEST_USER_ID, nullptr);
89 EXPECT_TRUE(wrapper->callback_ == nullptr);
90 Attributes extraInfo;
91 wrapper->OnAcquireInfo(0, 0, extraInfo);
92 }
93
94 /**
95 * @tc.name: IDMCallbackService_OnAcquireInfo_0200
96 * @tc.desc: OnAcquireInfo with not nullptr.
97 * @tc.type: FUNC
98 * @tc.require:
99 */
100 HWTEST_F(AccountIAMCallbackServiceTest, IDMCallbackService_OnAcquireInfo_0200, TestSize.Level0)
101 {
102 auto callback = std::make_shared<MockIDMCallback>();
103 EXPECT_NE(callback, nullptr);
104 EXPECT_CALL(*callback, OnAcquireInfo(_, _, _)).Times(Exactly(1));
105 auto testCallback = std::make_shared<TestIDMCallback>(callback);
106 sptr<IDMCallbackService> wrapper = new (std::nothrow) IDMCallbackService(TEST_USER_ID, testCallback);
107 EXPECT_TRUE(wrapper->callback_ != nullptr);
108 Attributes extraInfo;
109 wrapper->OnAcquireInfo(0, 0, extraInfo);
110 std::unique_lock<std::mutex> lock(testCallback->mutex);
111 testCallback->cv.wait_for(
__anond8c27aaa0202() 112 lock, std::chrono::seconds(WAIT_TIME), [lockCallback = testCallback]() { return lockCallback->isReady; });
113 }
114
115 /**
116 * @tc.name: IDMCallbackService_OnResult_0100
117 * @tc.desc: OnResult test.
118 * @tc.type: FUNC
119 * @tc.require:
120 */
121 HWTEST_F(AccountIAMCallbackServiceTest, IDMCallbackService_OnResult_0100, TestSize.Level0)
122 {
123 auto callback = std::make_shared<MockIDMCallback>();
124 EXPECT_NE(callback, nullptr);
125 EXPECT_CALL(*callback, OnResult(0, _)).Times(Exactly(1));
126 auto testCallback = std::make_shared<TestIDMCallback>(callback);
127 sptr<IDMCallbackService> wrapper = new (std::nothrow) IDMCallbackService(TEST_USER_ID, testCallback);
128 ASSERT_NE(wrapper, nullptr);
129 Attributes extraInfo;
130 wrapper->OnResult(0, extraInfo);
131 {
132 std::unique_lock<std::mutex> lock(testCallback->mutex);
133 testCallback->cv.wait_for(
__anond8c27aaa0302() 134 lock, std::chrono::seconds(WAIT_TIME), [lockCallback = testCallback]() { return lockCallback->isReady; });
135 }
136 EXPECT_CALL(*callback, OnResult(1, _)).Times(Exactly(1));
137 testCallback->isReady = false;
138 wrapper->OnResult(1, extraInfo);
139 {
140 std::unique_lock<std::mutex> lock(testCallback->mutex);
141 testCallback->cv.wait_for(
__anond8c27aaa0402() 142 lock, std::chrono::seconds(WAIT_TIME), [lockCallback = testCallback]() { return lockCallback->isReady; });
143 }
144 wrapper->callback_ = nullptr;
145 wrapper->OnResult(0, extraInfo);
146 }
147
148 /**
149 * @tc.name: GetCredInfoCallbackService_OnCredentialInfo_0100
150 * @tc.desc: OnCredentialInfo with nullptr.
151 * @tc.type: FUNC
152 * @tc.require:
153 */
154 HWTEST_F(AccountIAMCallbackServiceTest, GetCredInfoCallbackService_OnCredentialInfo_0100, TestSize.Level0)
155 {
156 sptr<GetCredInfoCallbackService> wrapper = new (std::nothrow) GetCredInfoCallbackService(nullptr);
157 EXPECT_TRUE(wrapper->callback_ == nullptr);
158 std::vector<CredentialInfo> infoList;
159 wrapper->OnCredentialInfo(infoList);
160 }
161
162 /**
163 * @tc.name: GetSetPropCallbackService_OnResult_0100
164 * @tc.desc: OnResult with nullptr.
165 * @tc.type: FUNC
166 * @tc.require:
167 */
168 HWTEST_F(AccountIAMCallbackServiceTest, GetSetPropCallbackService_OnResult_0100, TestSize.Level0)
169 {
170 sptr<GetSetPropCallbackService> wrapper = new (std::nothrow) GetSetPropCallbackService(nullptr);
171 EXPECT_TRUE(wrapper->callback_ == nullptr);
172 Attributes extraInfo;
173 wrapper->OnResult(0, extraInfo);
174 }
175
176 /**
177 * @tc.name: DomainAuthCallbackAdapter_OnResult_0100
178 * @tc.desc: test OnResult.
179 * @tc.type: FUNC
180 * @tc.require:
181 */
182 HWTEST_F(AccountIAMCallbackServiceTest, DomainAuthCallbackAdapter_OnResult_0100, TestSize.Level0)
183 {
184 std::shared_ptr<DomainAuthCallbackAdapter> domainAuthCallbackAdapter =
185 std::make_shared<DomainAuthCallbackAdapter>(nullptr);
186 Parcel emptyParcel;
187 domainAuthCallbackAdapter->OnResult(0, emptyParcel);
188 std::string cmd = "hilog -x | grep 'AccountIAMFwk'";
189 std::string cmdRes = RunCommand(cmd);
190 ASSERT_TRUE(cmdRes.find("callback is nullptr") != std::string::npos);
191 }
192
193 #ifdef HAS_PIN_AUTH_PART
194 /**
195 * @tc.name: DomainCredentialRecipient_OnSetData_0100
196 * @tc.desc: test OnSetData.
197 * @tc.type: FUNC
198 * @tc.require:
199 */
200 HWTEST_F(AccountIAMCallbackServiceTest, DomainCredentialRecipient_OnSetData_0100, TestSize.Level0)
201 {
202 auto domainCredentialRecipient = new (std::nothrow) DomainCredentialRecipient(100, nullptr);
203 std::vector<uint8_t> data = {1, 2, 3, 4};
204 domainCredentialRecipient->OnSetData(0, data);
205 EXPECT_EQ(domainCredentialRecipient->idmCallback_, nullptr);
206 }
207 #endif
208 } // namespace AccountTest
209 } // namespace OHOS