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 <gtest/gtest.h>
17 #include "accessibility_common_helper.h"
18 #include "accessibility_mt_helper.h"
19 #include "accessible_ability_channel.h"
20 #include "accessible_ability_connection.h"
21 #include "accessible_ability_manager_service.h"
22 #include "iservice_registry.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace Accessibility {
29 namespace {
30 constexpr uint8_t TEST_NUM_2 = 2;
31 } // namespace
32 class AAMSServerTest : public testing::Test {
33 public:
AAMSServerTest()34 AAMSServerTest()
35 {}
~AAMSServerTest()36 ~AAMSServerTest()
37 {}
38
39 sptr<AccessibleAbilityChannel> aastub_ = nullptr;
40 sptr<AccessibleAbilityChannel> aacs_ = nullptr;
41
42 int32_t tempData_ = 0;
43 static void SetUpTestCase(void);
44 static void TearDownTestCase(void);
45 void SetUp();
46 void AddConnection();
47 void TearDown();
48 void WritefileAll(const char* fname, const char* data) const;
49 };
50
SetUpTestCase(void)51 void AAMSServerTest::SetUpTestCase(void)
52 {
53 Singleton<AccessibleAbilityManagerService>::GetInstance().OnStart();
54 AccessibilityCommonHelper::GetInstance().WaitForServicePublish();
55 Singleton<AccessibleAbilityManagerService>::GetInstance().SwitchedUser(AccessibilityHelper::accountId_);
56 GTEST_LOG_(INFO) << "AccessibleAbilityManagerService is published";
57 }
58
TearDownTestCase(void)59 void AAMSServerTest::TearDownTestCase(void)
60 {
61 Singleton<AccessibleAbilityManagerService>::GetInstance().OnStop();
62 }
63
SetUp()64 void AAMSServerTest::SetUp()
65 {
66 GTEST_LOG_(INFO) << "AAMSServerTest ModuleTest SetUp";
67
68 // Add an ability connection client
69 AccessibilityAbilityInitParams initParams;
70 std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
71 abilityInfo->SetCapabilityValues(CAPABILITY_KEY_EVENT_OBSERVER);
72 AppExecFwk::ElementName elementName("deviceId", "bundleName", "name");
73 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
74 accountData->AddInstalledAbility(*abilityInfo);
75 sleep(TEST_NUM_2);
76 sptr<AccessibleAbilityConnection> connection =
77 new AccessibleAbilityConnection(accountData->GetAccountId(), 0, *abilityInfo);
78 aastub_ = new AccessibleAbilityChannel(accountData->GetAccountId(), abilityInfo->GetId());
79 connection->OnAbilityConnectDoneSync(elementName, aastub_);
80 }
81
TearDown()82 void AAMSServerTest::TearDown()
83 {
84 GTEST_LOG_(INFO) << "AAMSServerTest ModuleTest TearDown";
85 aastub_ = nullptr;
86 }
87
WritefileAll(const char * fname,const char * data) const88 void AAMSServerTest::WritefileAll(const char* fname, const char* data) const
89 {
90 FILE* fp = nullptr;
91 if (!(fp = fopen(fname, "w"))) {
92 printf("open file %s fail \n", fname);
93 return;
94 }
95
96 (void)fprintf(fp, "%s", data);
97 (void)fclose(fp);
98 }
99
100 /**
101 * @tc.number: AAMS_moduletest_SendEvent_001
102 * @tc.name: SendEvent
103 * @tc.desc: Test function SendEvent aams send event to accessibility,and check the parm of event.
104 *
105 */
106 HWTEST_F(AAMSServerTest, SendEvent_001, TestSize.Level1)
107 {
108 GTEST_LOG_(INFO) << "AAMSServerTestSendEvent_001 start";
109 // make an event
110 AccessibilityEventInfo eventInfo;
111 eventInfo.SetEventType(EventType::TYPE_WINDOW_UPDATE);
112 // aams send event
113 Singleton<AccessibleAbilityManagerService>::GetInstance().SendEvent(eventInfo);
114 sleep(1);
115 // check aa proxy
116 EXPECT_EQ(AccessibilityHelper::GetInstance().GetTestEventType(), int(EventType::TYPE_WINDOW_UPDATE));
117 GTEST_LOG_(INFO) << "AAMSServerTestSendEvent_001 end";
118 }
119
120 /**
121 * @tc.number: AAMS_moduletest_GetAbilityList_001
122 * @tc.name: GetAbilityList
123 * @tc.desc: Test function GetAbilityList
124 * The func with Illegal parameter 1
125 */
126 HWTEST_F(AAMSServerTest, GetAbilityList_001, TestSize.Level1)
127 {
128 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_001 start";
129 std::vector<OHOS::Accessibility::AccessibilityAbilityInfo> infos;
130 auto &aams = Singleton<AccessibleAbilityManagerService>::GetInstance();
131 auto ret = aams.GetAbilityList(0, AbilityStateType::ABILITY_STATE_ENABLE, infos);
132 EXPECT_EQ(RET_OK, ret);
133 EXPECT_EQ(infos.size(), 0);
134
135 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_001 end";
136 }
137
138 /**
139 * @tc.number: AAMS_moduletest_GetAbilityList_002
140 * @tc.name: GetAbilityList
141 * @tc.desc: Test function GetAbilityList
142 * Get Enable Ability list.
143 */
144 HWTEST_F(AAMSServerTest, GetAbilityList_002, TestSize.Level1)
145 {
146 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_002 start";
147 std::vector<OHOS::Accessibility::AccessibilityAbilityInfo> infos;
148 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAbilityList(
149 AccessibilityAbilityTypes::ACCESSIBILITY_ABILITY_TYPE_SPOKEN, AbilityStateType::ABILITY_STATE_ENABLE, infos);
150 EXPECT_EQ(infos.size(), 0);
151 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_002 end";
152 }
153
154 /**
155 * @tc.number: AAMS_moduletest_GetAbilityList_003
156 * @tc.name: GetAbilityList
157 * @tc.desc: Test function GetAbilityList
158 * Get Disable Ability list with 2 installed ability accessibility and a connected accessibility ability.
159 */
160 HWTEST_F(AAMSServerTest, GetAbilityList_003, TestSize.Level1)
161 {
162 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_003 start";
163 AccessibilityAbilityInitParams initParams;
164 std::shared_ptr<AccessibilityAbilityInfo> installAbilityInfo =
165 std::make_shared<AccessibilityAbilityInfo>(initParams);
166 installAbilityInfo->SetAccessibilityAbilityType(AccessibilityAbilityTypes::ACCESSIBILITY_ABILITY_TYPE_ALL);
167 installAbilityInfo->SetPackageName("123");
168 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
169
170 // add install ability dummy
171 EXPECT_EQ(1, (int)accountData->GetInstalledAbilities().size());
172 accountData->AddInstalledAbility(*installAbilityInfo);
173 EXPECT_EQ(2, (int)accountData->GetInstalledAbilities().size());
174
175 // ABILITY_STATE_DISABLE
176 int32_t stateType = AbilityStateType::ABILITY_STATE_DISABLE;
177 std::vector<OHOS::Accessibility::AccessibilityAbilityInfo> infos;
178 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAbilityList(
179 AccessibilityAbilityTypes::ACCESSIBILITY_ABILITY_TYPE_SPOKEN, stateType, infos);
180 EXPECT_EQ(infos.size(), 1);
181 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_003 end";
182 }
183
184 /**
185 * @tc.number: AAMS_moduletest_GetAbilityList_004
186 * @tc.name: GetAbilityList
187 * @tc.desc: Test function GetAbilityList
188 * Get Disabled Ability list.
189 */
190 HWTEST_F(AAMSServerTest, GetAbilityList_004, TestSize.Level1)
191 {
192 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_004 start";
193 int32_t stateType = AbilityStateType::ABILITY_STATE_DISABLE;
194 std::vector<OHOS::Accessibility::AccessibilityAbilityInfo> infos;
195 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAbilityList(
196 AccessibilityAbilityTypes::ACCESSIBILITY_ABILITY_TYPE_SPOKEN, stateType, infos);
197 EXPECT_EQ(infos.size(), 1);
198 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_004 end";
199 }
200
201 /**
202 * @tc.number: AAMS_moduletest_GetAbilityList_005
203 * @tc.name: GetAbilityList
204 * @tc.desc: Test function GetAbilityList
205 * Get Installed ability
206 */
207 HWTEST_F(AAMSServerTest, GetAbilityList_005, TestSize.Level1)
208 {
209 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_005 start";
210 std::vector<OHOS::Accessibility::AccessibilityAbilityInfo> infos;
211 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAbilityList(
212 AccessibilityAbilityTypes::ACCESSIBILITY_ABILITY_TYPE_SPOKEN,
213 AbilityStateType::ABILITY_STATE_INSTALLED, infos);
214 EXPECT_EQ(infos.size(), 1);
215 GTEST_LOG_(INFO) << "AAMSServerTestGetAbilityList_005 end";
216 }
217
218 /**
219 * @tc.number: AAMS_moduletest_RegisterElementOperator_001
220 * @tc.name: RegisterElementOperator
221 * @tc.desc: Test function RegisterElementOperator
222 * Register a ElementOperator and check account data and event detail.
223 */
224 HWTEST_F(AAMSServerTest, RegisterElementOperator_001, TestSize.Level1)
225 {
226 GTEST_LOG_(INFO) << "AAMSServerTestRegisterElementOperator_001 start";
227
228 auto &aams = Singleton<AccessibleAbilityManagerService>::GetInstance();
229 auto accountData = aams.GetCurrentAccountData();
230 auto map = accountData->GetAsacConnections();
231 EXPECT_EQ(int(map.size()), 0);
232 EXPECT_EQ(RET_OK, aams.RegisterElementOperator(0, nullptr, true));
233 sleep(1);
234 GTEST_LOG_(INFO) << "RegisterElementOperator OK";
235 map = accountData->GetAsacConnections();
236 EXPECT_EQ(int(map.size()), 1);
237
238 aams.DeregisterElementOperator(0);
239 GTEST_LOG_(INFO) << "AAMSServerTestRegisterElementOperator_001 end";
240 }
241
242 /**
243 * @tc.number: AAMS_moduletest_DeregisterElementOperator_001
244 * @tc.name: DeregisterElementOperator
245 * @tc.desc: Test function DeregisterElementOperator
246 * Deregister a ElementOperator and check account data and event detail.
247 */
248 HWTEST_F(AAMSServerTest, DeregisterElementOperator_001, TestSize.Level1)
249 {
250 GTEST_LOG_(INFO) << "AAMSServerTestDeregisterElementOperator_001 start";
251 auto &aams = Singleton<AccessibleAbilityManagerService>::GetInstance();
252 auto accountData = aams.GetCurrentAccountData();
253 auto map = accountData->GetAsacConnections();
254 EXPECT_EQ(int(map.size()), 1);
255
256 aams.RegisterElementOperator(0, nullptr, true);
257 sleep(1);
258 map = accountData->GetAsacConnections();
259 EXPECT_EQ(int(map.size()), 1);
260
261 // wrong windowId
262 aams.DeregisterElementOperator(1);
263 sleep(1);
264 map = accountData->GetAsacConnections();
265 EXPECT_EQ(int(map.size()), 1);
266
267 // true windowId
268 aams.DeregisterElementOperator(0);
269 sleep(1);
270 map = accountData->GetAsacConnections();
271 EXPECT_EQ(int(map.size()), 1);
272 GTEST_LOG_(INFO) << "AAMSServerTestDeregisterElementOperator_001 end";
273 }
274 } // namespace Accessibility
275 } // namespace OHOS