1 /*
2 * Copyright (c) 2021-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
18 #define private public
19 #define protected public
20 #include "bundle_manager_helper.h"
21 #undef private
22 #undef protected
23
24 #include "common_event_constant.h"
25 #include "common_event_listener.h"
26 #include "datetime_ex.h"
27 #include "inner_common_event_manager.h"
28 #include "mock_bundle_manager.h"
29
30 using namespace testing::ext;
31 using namespace OHOS::EventFwk;
32 using namespace OHOS::AppExecFwk;
33
34 namespace {
35 const std::string EVENT = "com.ces.test.event";
36 const std::string ENTITY = "com.ces.test.entity";
37 const std::string SCHEME = "com.ces.test.scheme";
38 const std::string PERMISSION = "com.ces.test.permission";
39 const std::string DEVICEDID = "deviceId";
40 const std::string TYPE = "type";
41 const std::string BUNDLE = "BundleName";
42 const std::string ABILITY = "AbilityName";
43 constexpr uint8_t PRIORITY = 1;
44 constexpr uint8_t FLAG = 1;
45 constexpr uint8_t CODE = 1;
46 const std::string DATA = "DATA";
47
48 const std::string EVENT2 = "com.ces.test.event2";
49 const std::string ENTITY2 = "com.ces.test.entity2";
50 const std::string SCHEME2 = "com.ces.test.scheme2";
51 const std::string PERMISSION2 = "com.ces.test.permission2";
52 const std::string DEVICEDID2 = "deviceId2";
53 const std::string TYPE2 = "type2";
54 constexpr uint8_t PRIORITY2 = 2;
55 constexpr uint8_t FLAG2 = 2;
56 constexpr uint8_t CODE2 = 2;
57 const std::string DATA2 = "DATA2";
58
59 const std::string EVENT3 = "com.ces.test.event3";
60 constexpr uint8_t INNITCODE = 0;
61 constexpr uint8_t CHANGECODE = 1;
62 constexpr uint8_t CHANGECODE2 = 2;
63 const std::string EVENTCASE1 = "com.ces.test.event.case1";
64 const std::string EVENTCASE2 = "com.ces.test.event.case2";
65 const std::string EVENTCASE3 = "com.ces.test.event.case3";
66 const std::string INNITDATA = "com.ces.test.initdata";
67 const std::string CHANGEDATA = "com.ces.test.changedata";
68 const std::string CHANGEDATA2 = "com.ces.test.changedata2";
69 constexpr uid_t UID = 10;
70 constexpr uid_t UID2 = 11;
71 constexpr uint8_t STATE_INDEX1 = 1;
72 constexpr uint8_t STATE_INDEX2 = 2;
73 constexpr uint8_t STATE_INDEX3 = 3;
74 constexpr uint8_t PUBLISH_COUNT = 60;
75 constexpr uint8_t DUMP_SUBSCRIBER_COUNT_ONE = 1;
76 constexpr uint8_t DUMP_SUBSCRIBER_COUNT_TWO = 2;
77 constexpr uint8_t DUMP_STICKY_COUNT_ONE = 1;
78 constexpr uint8_t DUMP_STICKY_COUNT_TWO = 2;
79 constexpr uint8_t DUMP_PENDING_COUNT_ONE = 1;
80 constexpr uint8_t DUMP_HISTORY_COUNT_ONE = 1;
81 constexpr uint8_t DUMP_HISTORY_COUNT_TWO = 2;
82 constexpr uint8_t DUMP_HISTORY_COUNT_THREE = 3;
83 constexpr uint8_t DUMP_HISTORY_COUNT_MAX = 100;
84
85 constexpr uint8_t PID = 0;
86 constexpr uint16_t SYSTEM_UID = 1000;
87
88 static OHOS::sptr<OHOS::IRemoteObject> bundleObject = nullptr;
89 OHOS::sptr<OHOS::IRemoteObject> commonEventListener;
90 OHOS::sptr<OHOS::IRemoteObject> commonEventListener2;
91 OHOS::sptr<OHOS::IRemoteObject> commonEventListener3;
92
93 class CommonEventDumpTest : public testing::Test {
94 public:
CommonEventDumpTest()95 CommonEventDumpTest()
96 {}
~CommonEventDumpTest()97 ~CommonEventDumpTest()
98 {}
99 static void SetUpTestCase(void);
100 static void TearDownTestCase(void);
101 void SetUp();
102 void TearDown();
103 bool SubscribeCommonEvent(const std::shared_ptr<CommonEventSubscriber> &subscriber, uid_t callingUid,
104 OHOS::sptr<OHOS::IRemoteObject> &commonEventListener);
105 bool PublishCommonEvent(const CommonEventData &data, const CommonEventPublishInfo &publishInfo,
106 const std::shared_ptr<CommonEventSubscriber> &subscriber, OHOS::sptr<OHOS::IRemoteObject> &commonEventListener);
107 static bool FinishReceiver(
108 const OHOS::sptr<OHOS::IRemoteObject> &proxy, const int &code, const std::string &data, const bool &abortEvent);
109 void AsyncProcess();
110 std::shared_ptr<InnerCommonEventManager> GetInnerCommonEventManager();
111 static void DumpInfoCount(const std::vector<std::string> &state, int desSubscribersCount, int desStickyCount,
112 int desOrderedCount, int desHistoryCount);
113 void SetPublishDataByOrdered(CommonEventData &data, CommonEventPublishInfo &publishInfo);
114 void SetPublishDataByOrdered2(CommonEventData &data, CommonEventPublishInfo &publishInfo);
115 void SetPublishDataByUnordered(CommonEventData &data, CommonEventPublishInfo &publishInfo);
116 void SubscribeDoubleEvent(
117 int priority, const std::string &permission, const std::string &deviceId, CommonEventListener *&listener);
118 void PublishUnorderedEvent(
119 const std::string &event, const std::string &type,
120 const int code, const std::string &data, const std::string &permission);
121 void PublishStickyEvent(
122 const std::string &event, const std::string &type,
123 const int code, const std::string &data, const std::string &permission);
124 void PublishStickyEvent(
125 const std::string &event, const std::string &type, const int flag, const std::string &permission);
126
127 private:
128 std::shared_ptr<EventRunner> runner_;
129 static std::shared_ptr<EventHandler> handler_;
130 static std::shared_ptr<InnerCommonEventManager> innerCommonEventManager_;
131 };
132
133 class SubscriberTest : public CommonEventSubscriber {
134 public:
SubscriberTest(const CommonEventSubscribeInfo & sp,const std::shared_ptr<InnerCommonEventManager> & innerCommonEventManager=nullptr)135 explicit SubscriberTest(const CommonEventSubscribeInfo &sp,
136 const std::shared_ptr<InnerCommonEventManager> &innerCommonEventManager = nullptr)
137 : CommonEventSubscriber(sp)
138 {
139 innerCommonEventManager_ = innerCommonEventManager;
140 handler_ = std::make_shared<EventHandler>(EventRunner::Create());
141 }
142
~SubscriberTest()143 ~SubscriberTest()
144 {}
145
OnReceiveEvent(const CommonEventData & data)146 virtual void OnReceiveEvent(const CommonEventData &data)
147 {
148 std::string action = data.GetWant().GetAction();
149 if (action == EVENTCASE1) {
150 ProcessSubscriberTestCase1(data);
151 } else if (action == EVENTCASE2) {
152 ProcessSubscriberTestCase2(data);
153 } else if (action == EVENTCASE3) {
154 GTEST_LOG_(INFO) << "ProcessSubscriberTestCase3: start";
155 } else {
156 }
157 }
158
159 private:
ProcessSubscriberTestCase1(CommonEventData data)160 void ProcessSubscriberTestCase1(CommonEventData data)
161 {
162 GTEST_LOG_(INFO) << "ProcessSubscriberTestCase1: start";
163 std::shared_ptr<AsyncCommonEventResult> result = GoAsyncCommonEvent();
164 std::function<void()> asyncProcessFunc = std::bind(&SubscriberTest::AsyncProcess, this, commonEventListener);
165 handler_->PostTask(asyncProcessFunc);
166 }
ProcessSubscriberTestCase2(CommonEventData data)167 void ProcessSubscriberTestCase2(CommonEventData data)
168 {
169 GTEST_LOG_(INFO) << "ProcessSubscriberTestCase2: start";
170 std::shared_ptr<AsyncCommonEventResult> result = GoAsyncCommonEvent();
171 std::function<void()> asyncProcessFunc = std::bind(&SubscriberTest::AsyncProcess, this, commonEventListener);
172 handler_->PostTask(asyncProcessFunc);
173 }
174
AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)175 void AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)
176 {
177 EXPECT_TRUE(CommonEventDumpTest::FinishReceiver(commonEventListener, CHANGECODE, CHANGEDATA, false));
178 }
179
180 private:
181 std::shared_ptr<EventHandler> handler_;
182 std::shared_ptr<InnerCommonEventManager> innerCommonEventManager_;
183 };
184
185 class SubscriberTest2 : public CommonEventSubscriber {
186 public:
SubscriberTest2(const CommonEventSubscribeInfo & sp,const std::shared_ptr<InnerCommonEventManager> & innerCommonEventManager=nullptr)187 explicit SubscriberTest2(const CommonEventSubscribeInfo &sp,
188 const std::shared_ptr<InnerCommonEventManager> &innerCommonEventManager = nullptr)
189 : CommonEventSubscriber(sp)
190 {
191 innerCommonEventManager_ = innerCommonEventManager;
192 handler_ = std::make_shared<EventHandler>(EventRunner::Create());
193 }
194
~SubscriberTest2()195 ~SubscriberTest2()
196 {}
197
OnReceiveEvent(const CommonEventData & data)198 virtual void OnReceiveEvent(const CommonEventData &data)
199 {
200 std::string action = data.GetWant().GetAction();
201 if (action == EVENTCASE1) {
202 ProcessSubscriberTest2Case1(data);
203 } else if (action == EVENTCASE2) {
204 ProcessSubscriberTest2Case2(data);
205 } else if (action == EVENTCASE3) {
206 GTEST_LOG_(INFO) << "ProcessSubscriberTest2Case3: start";
207 } else {
208 }
209 }
210
211 private:
ProcessSubscriberTest2Case1(CommonEventData data)212 void ProcessSubscriberTest2Case1(CommonEventData data)
213 {
214 GTEST_LOG_(INFO) << "ProcessSubscriberTest2Case1: start";
215 std::shared_ptr<AsyncCommonEventResult> result = GoAsyncCommonEvent();
216 if (innerCommonEventManager_) {
217 std::vector<std::string> state;
218 innerCommonEventManager_->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
219 CommonEventDumpTest::DumpInfoCount(state,
220 DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_TWO, DUMP_PENDING_COUNT_ONE, 0);
221 }
222 std::function<void()> asyncProcessFunc = std::bind(&SubscriberTest2::AsyncProcess, this, commonEventListener2);
223 handler_->PostTask(asyncProcessFunc);
224 }
ProcessSubscriberTest2Case2(CommonEventData data)225 void ProcessSubscriberTest2Case2(CommonEventData data)
226 {
227 GTEST_LOG_(INFO) << "ProcessSubscriberTest2Case2: start";
228 std::shared_ptr<AsyncCommonEventResult> result = GoAsyncCommonEvent();
229 std::function<void()> asyncProcessFunc = std::bind(&SubscriberTest2::AsyncProcess, this, commonEventListener2);
230 handler_->PostTask(asyncProcessFunc);
231 }
232
AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)233 void AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)
234 {
235 EXPECT_TRUE(CommonEventDumpTest::FinishReceiver(commonEventListener, CHANGECODE2, CHANGEDATA2, false));
236 }
237
238 private:
239 std::shared_ptr<EventHandler> handler_;
240 std::shared_ptr<InnerCommonEventManager> innerCommonEventManager_;
241 };
242
243 class SubscriberTestLast : public CommonEventSubscriber {
244 public:
SubscriberTestLast()245 SubscriberTestLast() : CommonEventSubscriber()
246 {
247 handler_ = std::make_shared<EventHandler>(EventRunner::Create());
248 }
249
SubscriberTestLast(const CommonEventSubscribeInfo & sp)250 explicit SubscriberTestLast(const CommonEventSubscribeInfo &sp) : CommonEventSubscriber(sp)
251 {
252 handler_ = std::make_shared<EventHandler>(EventRunner::Create());
253 }
254
~SubscriberTestLast()255 ~SubscriberTestLast()
256 {}
257
OnReceiveEvent(const CommonEventData & data)258 virtual void OnReceiveEvent(const CommonEventData &data)
259 {
260 std::string action = data.GetWant().GetAction();
261 if (action == EVENTCASE1) {
262 ProcessSubscriberTestLastCase1(data);
263 } else if (action == EVENTCASE2) {
264 ProcessSubscriberTestLastCase2(data);
265 } else {
266 }
267 }
268
269 private:
ProcessSubscriberTestLastCase1(CommonEventData data)270 void ProcessSubscriberTestLastCase1(CommonEventData data)
271 {
272 GTEST_LOG_(INFO) << "ProcessSubscriberTestLastCase1: start";
273 std::shared_ptr<AsyncCommonEventResult> result = GoAsyncCommonEvent();
274 std::function<void()> asyncProcessFunc =
275 std::bind(&SubscriberTestLast::AsyncProcess, this, commonEventListener3);
276 handler_->PostTask(asyncProcessFunc);
277 }
ProcessSubscriberTestLastCase2(CommonEventData data)278 void ProcessSubscriberTestLastCase2(CommonEventData data)
279 {
280 GTEST_LOG_(INFO) << "ProcessSubscriberTestLastCase2: start";
281 }
282
AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)283 void AsyncProcess(OHOS::sptr<OHOS::IRemoteObject> commonEventListener)
284 {
285 EXPECT_TRUE(CommonEventDumpTest::FinishReceiver(commonEventListener, CHANGECODE2, CHANGEDATA2, false));
286 }
287
288 private:
289 std::shared_ptr<EventHandler> handler_;
290 };
291
292 std::shared_ptr<EventHandler> CommonEventDumpTest::handler_ = nullptr;
293 std::shared_ptr<InnerCommonEventManager> CommonEventDumpTest::innerCommonEventManager_ = nullptr;
294
SetUpTestCase(void)295 void CommonEventDumpTest::SetUpTestCase(void)
296 {
297 bundleObject = new MockBundleMgrService();
298 OHOS::DelayedSingleton<BundleManagerHelper>::GetInstance()->sptrBundleMgr_ =
299 OHOS::iface_cast<OHOS::AppExecFwk::IBundleMgr>(bundleObject);
300 }
301
TearDownTestCase(void)302 void CommonEventDumpTest::TearDownTestCase(void)
303 {}
304
SetUp(void)305 void CommonEventDumpTest::SetUp(void)
306 {
307 runner_ = EventRunner::Create(true);
308 if (!runner_) {
309 return;
310 }
311 handler_ = std::make_shared<EventHandler>(runner_);
312 innerCommonEventManager_ = std::make_shared<InnerCommonEventManager>();
313 }
314
TearDown(void)315 void CommonEventDumpTest::TearDown(void)
316 {}
317
SubscribeCommonEvent(const std::shared_ptr<CommonEventSubscriber> & subscriber,uid_t callingUid,OHOS::sptr<OHOS::IRemoteObject> & commonEventListener)318 bool CommonEventDumpTest::SubscribeCommonEvent(const std::shared_ptr<CommonEventSubscriber> &subscriber,
319 uid_t callingUid, OHOS::sptr<OHOS::IRemoteObject> &commonEventListener)
320 {
321 OHOS::sptr<IEventReceive> listener = new CommonEventListener(subscriber);
322 if (!listener) {
323 return false;
324 }
325 commonEventListener = listener->AsObject();
326 struct tm recordTime = {0};
327 if (!OHOS::GetSystemCurrentTime(&recordTime)) {
328 return false;
329 }
330 pid_t callingPid = 10;
331 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
332
333 std::string bundleName = "";
334 std::function<void()> SubscribeCommonEventFunc = std::bind(&InnerCommonEventManager::SubscribeCommonEvent,
335 innerCommonEventManager_,
336 subscriber->GetSubscribeInfo(),
337 commonEventListener,
338 recordTime,
339 callingPid,
340 callingUid,
341 tokenID,
342 bundleName);
343 return handler_->PostTask(SubscribeCommonEventFunc);
344 }
345
PublishCommonEvent(const CommonEventData & data,const CommonEventPublishInfo & publishInfo,const std::shared_ptr<CommonEventSubscriber> & subscriber,OHOS::sptr<OHOS::IRemoteObject> & commonEventListener)346 bool CommonEventDumpTest::PublishCommonEvent(const CommonEventData &data, const CommonEventPublishInfo &publishInfo,
347 const std::shared_ptr<CommonEventSubscriber> &subscriber, OHOS::sptr<OHOS::IRemoteObject> &commonEventListener)
348 {
349 if (commonEventListener == nullptr && publishInfo.IsOrdered()) {
350 OHOS::sptr<IEventReceive> listener = new CommonEventListener(subscriber);
351 if (!listener) {
352 return false;
353 }
354 commonEventListener = listener->AsObject();
355 } else if (!publishInfo.IsOrdered()) {
356 commonEventListener = nullptr;
357 }
358
359 struct tm recordTime = {0};
360 if (!OHOS::GetSystemCurrentTime(&recordTime)) {
361 return false;
362 }
363 pid_t callingPid = 20;
364 uid_t callingUid = 21;
365 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
366 int32_t userId = UNDEFINED_USER;
367 std::string bundleName = "";
368
369 std::function<void()> PublishCommonEventFunc = std::bind(&InnerCommonEventManager::PublishCommonEvent,
370 innerCommonEventManager_,
371 data,
372 publishInfo,
373 commonEventListener,
374 recordTime,
375 callingPid,
376 callingUid,
377 tokenID,
378 userId,
379 bundleName,
380 nullptr);
381 return handler_->PostTask(PublishCommonEventFunc);
382 }
383
FinishReceiver(const OHOS::sptr<OHOS::IRemoteObject> & proxy,const int & code,const std::string & data,const bool & abortEvent)384 bool CommonEventDumpTest::FinishReceiver(
385 const OHOS::sptr<OHOS::IRemoteObject> &proxy, const int &code, const std::string &data, const bool &abortEvent)
386 {
387 std::function<void()> FinishReceiverFunc =
388 std::bind(&InnerCommonEventManager::FinishReceiver, innerCommonEventManager_, proxy, code, data, abortEvent);
389 return handler_->PostTask(FinishReceiverFunc);
390 }
391
GetInnerCommonEventManager()392 std::shared_ptr<InnerCommonEventManager> CommonEventDumpTest::GetInnerCommonEventManager()
393 {
394 return innerCommonEventManager_;
395 }
396
DumpInfoCount(const std::vector<std::string> & state,int desSubscribersCount,int desStickyCount,int desPendingCount,int desHistoryCount)397 void CommonEventDumpTest::DumpInfoCount(const std::vector<std::string> &state, int desSubscribersCount,
398 int desStickyCount, int desPendingCount, int desHistoryCount)
399 {
400 int subscribersNum = 0;
401 int stickyNum = 0;
402 int pendingCount = 0;
403 int historyCount = 0;
404 bool isSubscribers = false;
405 bool isSticky = false;
406 bool isPending = false;
407 bool isHistory = false;
408 for (auto vec : state) {
409 GTEST_LOG_(INFO) << vec;
410 auto pos = vec.find("No information");
411 if (pos != string::npos) {
412 auto pos2 = vec.find("\tSubscribers:\tNo information");
413 if (pos2 != string::npos) {
414 } else {
415 continue;
416 }
417 }
418 if (!isPending && !isHistory) {
419 auto pos = vec.find("Subscribers:");
420 if (pos != string::npos) {
421 isSubscribers = true;
422 }
423 }
424 pos = vec.find("Sticky Events:");
425 if (pos != string::npos) {
426 isSubscribers = false;
427 isSticky = true;
428 }
429 pos = vec.find("Pending Events:");
430 if (pos != string::npos) {
431 isSubscribers = false;
432 isSticky = false;
433 isPending = true;
434 }
435 pos = vec.find("History Events:");
436 if (pos != string::npos) {
437 isSubscribers = false;
438 isSticky = false;
439 isPending = false;
440 isHistory = true;
441 }
442 if (isSubscribers) {
443 subscribersNum++;
444 } else if (isSticky) {
445 stickyNum++;
446 } else if (isPending) {
447 pendingCount++;
448 } else if (isHistory) {
449 historyCount++;
450 }
451 }
452
453 EXPECT_EQ(subscribersNum, desSubscribersCount);
454 EXPECT_EQ(stickyNum, desStickyCount);
455 EXPECT_EQ(pendingCount, desPendingCount);
456 EXPECT_EQ(historyCount, desHistoryCount);
457 }
458
SetPublishDataByOrdered(CommonEventData & data,CommonEventPublishInfo & publishInfo)459 void CommonEventDumpTest::SetPublishDataByOrdered(CommonEventData &data, CommonEventPublishInfo &publishInfo)
460 {
461 // make a want
462 Want want;
463 want.SetAction(EVENTCASE1);
464 want.AddEntity(ENTITY);
465 want.AddEntity(ENTITY2);
466 want.SetType(TYPE);
467 want.SetFlags(FLAG);
468
469 OHOS::AppExecFwk::ElementName element;
470 element.SetBundleName(BUNDLE);
471 element.SetAbilityName(ABILITY);
472 element.SetDeviceID(DEVICEDID);
473 want.SetElement(element);
474
475 // make common event data
476 data.SetWant(want);
477 data.SetData(INNITDATA);
478 data.SetCode(INNITCODE);
479
480 publishInfo.SetOrdered(true);
481 }
482
SetPublishDataByOrdered2(CommonEventData & data,CommonEventPublishInfo & publishInfo)483 void CommonEventDumpTest::SetPublishDataByOrdered2(CommonEventData &data, CommonEventPublishInfo &publishInfo)
484 {
485 // make a want
486 Want want;
487 want.SetAction(EVENTCASE2);
488 want.AddEntity(ENTITY);
489 want.AddEntity(ENTITY2);
490 want.SetType(TYPE);
491 want.SetFlags(FLAG);
492
493 OHOS::AppExecFwk::ElementName element;
494 element.SetBundleName(BUNDLE);
495 element.SetAbilityName(ABILITY);
496 element.SetDeviceID(DEVICEDID);
497 want.SetElement(element);
498
499 // make common event data
500 data.SetWant(want);
501 data.SetData(INNITDATA);
502 data.SetCode(INNITCODE);
503
504 publishInfo.SetOrdered(true);
505 }
506
SetPublishDataByUnordered(CommonEventData & data,CommonEventPublishInfo & publishInfo)507 void CommonEventDumpTest::SetPublishDataByUnordered(CommonEventData &data, CommonEventPublishInfo &publishInfo)
508 {
509 // make a want
510 Want want;
511 want.SetAction(EVENTCASE3);
512 want.AddEntity(ENTITY);
513 want.AddEntity(ENTITY2);
514 want.SetType(TYPE);
515 want.SetFlags(FLAG);
516
517 OHOS::AppExecFwk::ElementName element;
518 element.SetBundleName(BUNDLE);
519 element.SetAbilityName(ABILITY);
520 element.SetDeviceID(DEVICEDID);
521 want.SetElement(element);
522
523 // make common event data
524 data.SetWant(want);
525 data.SetData(INNITDATA);
526 data.SetCode(INNITCODE);
527
528 publishInfo.SetOrdered(false);
529 }
530
SubscribeDoubleEvent(int priority,const std::string & permission,const std::string & deviceId,CommonEventListener * & listener)531 void CommonEventDumpTest::SubscribeDoubleEvent(
532 int priority, const std::string &permission, const std::string &deviceId, CommonEventListener *&listener)
533 {
534 MatchingSkills matchingSkills;
535 matchingSkills.AddEvent(EVENT);
536 matchingSkills.AddEvent(EVENT2);
537 matchingSkills.AddEntity(ENTITY);
538 matchingSkills.AddEntity(ENTITY2);
539
540 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
541 subscribeInfo.SetPriority(priority);
542 subscribeInfo.SetPermission(permission);
543 subscribeInfo.SetDeviceId(deviceId);
544
545 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
546 listener = new (std::nothrow) CommonEventListener(subscriber);
547
548 struct tm curTime {0};
549 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
550 innerCommonEventManager_->SubscribeCommonEvent(
551 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
552 }
553
PublishUnorderedEvent(const std::string & event,const std::string & type,const int code,const std::string & data,const std::string & permission)554 void CommonEventDumpTest::PublishUnorderedEvent(
555 const std::string &event, const std::string &type,
556 const int code, const std::string &data, const std::string &permission)
557 {
558 Want want;
559 want.SetAction(event);
560 want.AddEntity(ENTITY);
561 want.AddEntity(ENTITY2);
562 want.SetType(type);
563
564 OHOS::AppExecFwk::ElementName element;
565 element.SetBundleName(BUNDLE);
566 element.SetAbilityName(ABILITY);
567 element.SetDeviceID(DEVICEDID);
568 want.SetElement(element);
569
570 // make common event data
571 CommonEventData eventData;
572 eventData.SetWant(want);
573 eventData.SetCode(code);
574 eventData.SetData(data);
575
576 // make publish info
577 CommonEventPublishInfo publishInfo;
578 publishInfo.SetSticky(false);
579 std::vector<std::string> permissions;
580 permissions.emplace_back(permission);
581 publishInfo.SetSubscriberPermissions(permissions);
582
583 struct tm curTime {0};
584 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
585 innerCommonEventManager_->PublishCommonEvent(
586 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
587 }
588
PublishStickyEvent(const std::string & event,const std::string & type,const int code,const std::string & data,const std::string & permission)589 void CommonEventDumpTest::PublishStickyEvent(
590 const std::string &event, const std::string &type,
591 const int code, const std::string &data, const std::string &permission)
592 {
593 Want want;
594 want.SetAction(event);
595 want.AddEntity(ENTITY);
596 want.AddEntity(ENTITY2);
597 want.SetType(type);
598
599 OHOS::AppExecFwk::ElementName element;
600 element.SetBundleName(BUNDLE);
601 element.SetAbilityName(ABILITY);
602 element.SetDeviceID(DEVICEDID);
603 want.SetElement(element);
604
605 // make common event data
606 CommonEventData eventData;
607 eventData.SetWant(want);
608 eventData.SetCode(code);
609 eventData.SetData(data);
610
611 // make publish info
612 CommonEventPublishInfo publishInfo;
613 publishInfo.SetSticky(true);
614 std::vector<std::string> permissions;
615 permissions.emplace_back(permission);
616 publishInfo.SetSubscriberPermissions(permissions);
617
618 struct tm curTime {0};
619 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
620 innerCommonEventManager_->PublishCommonEvent(
621 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
622 }
623
PublishStickyEvent(const std::string & event,const std::string & type,const int flag,const std::string & permission)624 void CommonEventDumpTest::PublishStickyEvent(
625 const std::string &event, const std::string &type, const int flag, const std::string &permission)
626 {
627 Want want;
628 want.SetAction(event);
629 want.AddEntity(ENTITY);
630 want.AddEntity(ENTITY2);
631 want.SetType(type);
632 want.SetFlags(flag);
633
634 OHOS::AppExecFwk::ElementName element;
635 element.SetBundleName(BUNDLE);
636 element.SetAbilityName(ABILITY);
637 element.SetDeviceID(DEVICEDID);
638 want.SetElement(element);
639
640 // make common event data
641 CommonEventData eventData;
642 eventData.SetWant(want);
643
644 // make publish info
645 CommonEventPublishInfo publishInfo;
646 publishInfo.SetSticky(true);
647 std::vector<std::string> permissions;
648 permissions.emplace_back(permission);
649 publishInfo.SetSubscriberPermissions(permissions);
650
651 struct tm curTime {0};
652 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
653 innerCommonEventManager_->PublishCommonEvent(
654 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
655 }
656
657 /*
658 * @tc.number: CommonEventDumpTest_0100
659 * @tc.name: test dump
660 * @tc.desc: Verify dump information after publishing unordered events
661 */
662 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0100, Function | MediumTest | Level1)
663 {
664 /* Subscribe */
665 CommonEventListener *listener = nullptr;
666 CommonEventListener *listener2 = nullptr;
667 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
668 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
669 EXPECT_NE(nullptr, listener);
670 EXPECT_NE(nullptr, listener2);
671
672 /* Publish */
673 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
674 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
675
676 usleep(50000);
677
678 std::vector<std::string> state;
679 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
680 GTEST_LOG_(INFO) << "get state size:" << state.size();
681 ASSERT_NE(state.size(), 0);
682 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, 0, 0, DUMP_HISTORY_COUNT_TWO);
683 EXPECT_EQ("Sticky Events:\tNo information", state[STATE_INDEX2]);
684
685 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
686 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
687 }
688
689 /*
690 * @tc.number: CommonEventDumpTest_0200
691 * @tc.name: test dump
692 * @tc.desc: Verify dump information after publishing sticky events
693 */
694 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0200, Function | MediumTest | Level1)
695 {
696 /* Subscribe */
697 CommonEventListener *listener = nullptr;
698 CommonEventListener *listener2 = nullptr;
699 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
700 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
701 EXPECT_NE(nullptr, listener);
702 EXPECT_NE(nullptr, listener2);
703
704 /* Publish */
705 PublishStickyEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
706 PublishStickyEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
707
708 usleep(50000);
709
710 std::vector<std::string> state;
711 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
712 GTEST_LOG_(INFO) << "get state size:" << state.size();
713 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_TWO);
714
715 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
716 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
717 }
718
719 /*
720 * @tc.number: CommonEventDumpTest_0300
721 * @tc.name: test dump
722 * @tc.desc: Verify dump information after updating sticky events
723 */
724 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0300, Function | MediumTest | Level1)
725 {
726 /* Publish */
727 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
728 PublishStickyEvent(EVENT2, TYPE2, FLAG2, PERMISSION2);
729
730 usleep(50000);
731
732 std::vector<std::string> state;
733 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
734 GTEST_LOG_(INFO) << "get state size:" << state.size();
735 ASSERT_NE(state.size(), 0);
736 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_TWO);
737 EXPECT_EQ("Subscribers:\tNo information", state[0]);
738 }
739
740 /*
741 * @tc.number: CommonEventDumpTest_0400
742 * @tc.name: test dump
743 * @tc.desc: Verify dump information after subscribing
744 */
745 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0400, Function | MediumTest | Level1)
746 {
747 /* Subscribe */
748 MatchingSkills matchingSkills;
749 matchingSkills.AddEvent(EVENT);
750 matchingSkills.AddScheme(SCHEME);
751
752 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
753 subscribeInfo.SetPriority(PRIORITY);
754 subscribeInfo.SetPermission(PERMISSION);
755 subscribeInfo.SetDeviceId(DEVICEDID);
756
757 struct tm curTime {0};
758 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
759
760 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
761 CommonEventListener *listener = new CommonEventListener(subscriber);
762 GetInnerCommonEventManager()->SubscribeCommonEvent(
763 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
764
765 usleep(50000);
766
767 std::vector<std::string> state;
768 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
769 GTEST_LOG_(INFO) << "get state size:" << state.size();
770 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
771
772 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
773 }
774
775 /*
776 * @tc.number: CommonEventDumpTest_0500
777 * @tc.name: test dump
778 * @tc.desc: Verify dump information after subscribing
779 */
780 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0500, Function | MediumTest | Level1)
781 {
782 /* Subscribe */
783 MatchingSkills matchingSkills;
784 matchingSkills.AddEvent(EVENT);
785
786 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
787 subscribeInfo.SetPriority(PRIORITY);
788 subscribeInfo.SetPermission(PERMISSION);
789 subscribeInfo.SetDeviceId(DEVICEDID);
790
791 struct tm curTime {0};
792 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
793
794 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
795 CommonEventListener *listener = new CommonEventListener(subscriber);
796 GetInnerCommonEventManager()->SubscribeCommonEvent(
797 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
798
799 usleep(50000);
800
801 std::vector<std::string> state;
802 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
803 GTEST_LOG_(INFO) << "get state size:" << state.size();
804 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
805
806 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
807 }
808
809 /*
810 * @tc.number: CommonEventDumpTest_0600
811 * @tc.name: test dump
812 * @tc.desc: Verify dump information after subscribing
813 */
814 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0600, Function | MediumTest | Level1)
815 {
816 /* Subscribe */
817 MatchingSkills matchingSkills;
818 matchingSkills.AddEvent(EVENT);
819
820 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
821 subscribeInfo.SetPermission(PERMISSION);
822 subscribeInfo.SetDeviceId(DEVICEDID);
823
824 struct tm curTime {0};
825 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
826
827 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
828 CommonEventListener *listener = new CommonEventListener(subscriber);
829 GetInnerCommonEventManager()->SubscribeCommonEvent(
830 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
831
832 usleep(50000);
833
834 std::vector<std::string> state;
835 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
836 GTEST_LOG_(INFO) << "get state size:" << state.size();
837 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
838
839 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
840 }
841
842 /*
843 * @tc.number: CommonEventDumpTest_0700
844 * @tc.name: test dump
845 * @tc.desc: Verify dump information after subscribing
846 */
847 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0700, Function | MediumTest | Level1)
848 {
849 /* Subscribe */
850 MatchingSkills matchingSkills;
851 matchingSkills.AddEvent(EVENT);
852
853 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
854 subscribeInfo.SetDeviceId(DEVICEDID);
855
856 struct tm curTime {0};
857 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
858
859 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
860 CommonEventListener *listener = new CommonEventListener(subscriber);
861 GetInnerCommonEventManager()->SubscribeCommonEvent(
862 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
863
864 usleep(50000);
865
866 std::vector<std::string> state;
867 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
868 GTEST_LOG_(INFO) << "get state size:" << state.size();
869 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
870
871 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
872 }
873
874 /*
875 * @tc.number: CommonEventDumpTest_0800
876 * @tc.name: test dump
877 * @tc.desc: Verify dump information after subscribing
878 */
879 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0800, Function | MediumTest | Level1)
880 {
881 /* Subscribe */
882 MatchingSkills matchingSkills;
883 matchingSkills.AddEvent(EVENT);
884
885 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
886
887 struct tm curTime {0};
888 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
889
890 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
891 CommonEventListener *listener = new CommonEventListener(subscriber);
892 GetInnerCommonEventManager()->SubscribeCommonEvent(
893 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
894
895 usleep(50000);
896
897 std::vector<std::string> state;
898 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
899 GTEST_LOG_(INFO) << "get state size:" << state.size();
900 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
901
902 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
903 }
904
905 /*
906 * @tc.number: CommonEventDumpTest_0900
907 * @tc.name: test dump
908 * @tc.desc: Verify dump information for unpublished event
909 */
910 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0900, Function | MediumTest | Level1)
911 {
912 /* Subscribe */
913 MatchingSkills matchingSkills;
914 matchingSkills.AddEvent(EVENT);
915
916 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
917
918 struct tm curTime {0};
919 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
920
921 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
922 CommonEventListener *listener = new CommonEventListener(subscriber);
923 GetInnerCommonEventManager()->SubscribeCommonEvent(
924 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
925
926 usleep(50000);
927
928 std::vector<std::string> state;
929 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), EVENT3, ALL_USER, state);
930 GTEST_LOG_(INFO) << "get state size:" << state.size();
931 ASSERT_NE(state.size(), 0);
932 DumpInfoCount(state, 0, 0, 0, 0);
933 EXPECT_EQ("Subscribers:\tNo information", state[0]);
934 EXPECT_EQ("Sticky Events:\tNo information", state[STATE_INDEX1]);
935
936 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
937 }
938
939 /*
940 * @tc.number: CommonEventDumpTest_1000
941 * @tc.name: test dump
942 * @tc.desc: Verify dump information for specified event
943 */
944 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1000, TestSize.Level1)
945 {
946 /* Subscribe */
947 CommonEventListener *listener = nullptr;
948 CommonEventListener *listener2 = nullptr;
949 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
950 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
951 EXPECT_NE(nullptr, listener);
952 EXPECT_NE(nullptr, listener2);
953
954 /* Publish */
955 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
956 PublishStickyEvent(EVENT2, TYPE2, FLAG2, PERMISSION2);
957
958 usleep(50000);
959
960 std::vector<std::string> state;
961 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), EVENT2, ALL_USER, state);
962 GTEST_LOG_(INFO) << "get state size:" << state.size();
963 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_ONE, 0, DUMP_HISTORY_COUNT_THREE);
964
965 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
966 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
967 }
968
969 /*
970 * @tc.number: CommonEventDumpTest_1100
971 * @tc.name: test dump
972 * @tc.desc: Verify dump information for sticky event
973 */
974 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1100, Function | MediumTest | Level1)
975 {
976 /* Publish */
977 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
978
979 usleep(50000);
980
981 std::vector<std::string> state;
982 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
983 GTEST_LOG_(INFO) << "get state size:" << state.size();
984 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
985 }
986
987 /*
988 * @tc.number: CommonEventDumpTest_1200
989 * @tc.name: test dump
990 * @tc.desc: Verify dump information for sticky event
991 */
992 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1200, Function | MediumTest | Level1)
993 {
994 /* Publish */
995 PublishStickyEvent(EVENT, "", FLAG, PERMISSION);
996
997 usleep(50000);
998
999 std::vector<std::string> state;
1000 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1001 GTEST_LOG_(INFO) << "get state size:" << state.size();
1002 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1003 }
1004
1005 /*
1006 * @tc.number: CommonEventDumpTest_1300
1007 * @tc.name: test dump
1008 * @tc.desc: Verify dump information for sticky event
1009 */
1010 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1300, Function | MediumTest | Level1)
1011 {
1012 /* Publish */
1013 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1014
1015 usleep(50000);
1016
1017 std::vector<std::string> state;
1018 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1019 GTEST_LOG_(INFO) << "get state size:" << state.size();
1020 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1021 }
1022
1023 /*
1024 * @tc.number: CommonEventDumpTest_1400
1025 * @tc.name: test dump
1026 * @tc.desc: Verify dump information for sticky event
1027 */
1028 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1400, Function | MediumTest | Level1)
1029 {
1030 /* Publish */
1031 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1032
1033 usleep(50000);
1034
1035 std::vector<std::string> state;
1036 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1037 GTEST_LOG_(INFO) << "get state size:" << state.size();
1038 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1039 }
1040
1041 /*
1042 * @tc.number: CommonEventDumpTest_1500
1043 * @tc.name: test dump
1044 * @tc.desc: Verify dump information for sticky event
1045 */
1046 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1500, Function | MediumTest | Level1)
1047 {
1048 /* Publish */
1049 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1050
1051 usleep(50000);
1052
1053 std::vector<std::string> state;
1054 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1055 GTEST_LOG_(INFO) << "get state size:" << state.size();
1056 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1057 }
1058
1059 /*
1060 * @tc.number: CommonEventDumpTest_1600
1061 * @tc.name: test dump
1062 * @tc.desc: Verify dump information for sticky event
1063 */
1064 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1600, Function | MediumTest | Level1)
1065 {
1066 /* Publish */
1067 // make a want
1068 Want want;
1069 want.SetAction(EVENT);
1070 // make common event data
1071 CommonEventData data;
1072 data.SetWant(want);
1073
1074 // make publish info
1075 CommonEventPublishInfo publishInfo;
1076 publishInfo.SetSticky(true);
1077
1078 std::vector<std::string> permissions;
1079 permissions.emplace_back(PERMISSION);
1080 publishInfo.SetSubscriberPermissions(permissions);
1081
1082 struct tm curTime {0};
1083 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
1084
1085 GetInnerCommonEventManager()->PublishCommonEvent(
1086 data, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
1087
1088 usleep(50000);
1089
1090 std::vector<std::string> state;
1091 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1092 GTEST_LOG_(INFO) << "get state size:" << state.size();
1093 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1094 }
1095
1096 /*
1097 * @tc.number: CommonEventDumpTest_1700
1098 * @tc.name: test dump
1099 * @tc.desc: Verify dump information for sticky event
1100 */
1101 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1700, Function | MediumTest | Level1)
1102 {
1103 /* Publish */
1104 // make a want
1105 Want want;
1106 want.SetAction(EVENT);
1107 // make common event data
1108 CommonEventData data;
1109 data.SetWant(want);
1110
1111 // make publish info
1112 CommonEventPublishInfo publishInfo;
1113 publishInfo.SetSticky(true);
1114
1115 struct tm curTime {0};
1116 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
1117
1118 GetInnerCommonEventManager()->PublishCommonEvent(
1119 data, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
1120
1121 usleep(50000);
1122
1123 std::vector<std::string> state;
1124 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1125 GTEST_LOG_(INFO) << "get state size:" << state.size();
1126 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1127 }
1128
1129 /*
1130 * @tc.number: CommonEventDumpTest_1800
1131 * @tc.name: test dump
1132 * @tc.desc: Verify dump information when the pending ordered event is empty
1133 */
1134 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1800, TestSize.Level1)
1135 {
1136 std::vector<std::string> state;
1137 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1138 ASSERT_NE(state.size(), 0);
1139 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, 0);
1140 EXPECT_EQ("Pending Events:\tNo information", state[STATE_INDEX3]);
1141 }
1142
1143 /*
1144 * @tc.number: CommonEventDumpTest_1900
1145 * @tc.name: test dump
1146 * @tc.desc: Verify dump information for ordered event
1147 */
1148 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1900, TestSize.Level1)
1149 {
1150 /* Subscribe */
1151 // make matching skills
1152 MatchingSkills matchingSkills;
1153 matchingSkills.AddEvent(EVENTCASE1);
1154 matchingSkills.AddEntity(ENTITY);
1155 matchingSkills.AddEntity(ENTITY2);
1156 // make subscriber info
1157 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
1158 subscribeInfo.SetPriority(1);
1159 subscribeInfo.SetDeviceId(DEVICEDID);
1160 // make a subscriber object
1161 std::shared_ptr<SubscriberTest> subscriberTest =
1162 std::make_shared<SubscriberTest>(subscribeInfo, GetInnerCommonEventManager());
1163 // subscribe a common event
1164 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest, UID, commonEventListener));
1165 usleep(50000);
1166
1167 // make another subscriber info
1168 CommonEventSubscribeInfo subscribeInfo2(matchingSkills);
1169 subscribeInfo2.SetPriority(0);
1170 subscribeInfo2.SetDeviceId(DEVICEDID2);
1171 // make another subscriber object
1172 std::shared_ptr<SubscriberTest2> subscriberTest2 =
1173 std::make_shared<SubscriberTest2>(subscribeInfo2, GetInnerCommonEventManager());
1174 // subscribe another event
1175 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest2, UID2, commonEventListener2));
1176 usleep(50000);
1177
1178 std::shared_ptr<SubscriberTestLast> subscriber = std::make_shared<SubscriberTestLast>();
1179
1180 /* Publish */
1181 CommonEventData data;
1182 CommonEventPublishInfo publishInfo;
1183 SetPublishDataByOrdered(data, publishInfo);
1184
1185 // publish order event
1186 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1187
1188 usleep(500000);
1189
1190 std::vector<std::string> state;
1191 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1192 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1193
1194 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener);
1195 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener2);
1196 }
1197 /*
1198 * @tc.number: CommonEventDumpTest_2000
1199 * @tc.name: test dump
1200 * @tc.desc: Verify dump information for maximum number of history events
1201 */
1202 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_2000, TestSize.Level1)
1203 {
1204 /* Subscribe */
1205 // make matching skills
1206 MatchingSkills matchingSkills;
1207 matchingSkills.AddEvent(EVENTCASE2);
1208 matchingSkills.AddEntity(ENTITY);
1209 matchingSkills.AddEntity(ENTITY2);
1210
1211 // make subscriber info
1212 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
1213 subscribeInfo.SetPriority(1);
1214 subscribeInfo.SetDeviceId(DEVICEDID);
1215 // make a subscriber object
1216 std::shared_ptr<SubscriberTest> subscriberTest =
1217 std::make_shared<SubscriberTest>(subscribeInfo, GetInnerCommonEventManager());
1218 // subscribe a common event
1219 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest, UID, commonEventListener));
1220 usleep(50000);
1221
1222 // make another subscriber info
1223 CommonEventSubscribeInfo subscribeInfo2(matchingSkills);
1224 subscribeInfo2.SetPriority(0);
1225 subscribeInfo2.SetDeviceId(DEVICEDID2);
1226 // make another subscriber object
1227 std::shared_ptr<SubscriberTest2> subscriberTest2 =
1228 std::make_shared<SubscriberTest2>(subscribeInfo2, GetInnerCommonEventManager());
1229 // subscribe another event
1230 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest2, UID2, commonEventListener2));
1231 usleep(50000);
1232
1233 std::shared_ptr<SubscriberTestLast> subscriber = std::make_shared<SubscriberTestLast>();
1234
1235 /* Publish */
1236 CommonEventData data;
1237 CommonEventPublishInfo publishInfo;
1238
1239 int count = 0;
1240 while (count < PUBLISH_COUNT) {
1241 // publish order event
1242 SetPublishDataByOrdered2(data, publishInfo);
1243 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1244 usleep(50000);
1245
1246 // publish unorder event
1247 SetPublishDataByUnordered(data, publishInfo);
1248 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1249 usleep(50000);
1250 count++;
1251 }
1252 usleep(500000);
1253
1254 std::vector<std::string> state;
1255 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1256 DumpInfoCount(state, DUMP_STICKY_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_MAX);
1257
1258 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener);
1259 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener2);
1260 }
1261
1262 /*
1263 * @tc.number: CommonEventDumpPartEventTest_0100
1264 * @tc.name: test dump
1265 * @tc.desc: Verify dump all subscriber
1266 * @tc.require: I582WG
1267 */
1268 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0100, Function | MediumTest | Level1)
1269 {
1270 /* Subscribe */
1271 CommonEventListener *listener = nullptr;
1272 CommonEventListener *listener2 = nullptr;
1273 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1274 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1275 EXPECT_NE(nullptr, listener);
1276 EXPECT_NE(nullptr, listener2);
1277
1278 usleep(50000);
1279
1280 std::vector<std::string> state;
1281 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::SUBSCRIBER), "", ALL_USER, state);
1282 GTEST_LOG_(INFO) << "get state size:" << state.size();
1283 ASSERT_EQ(state.size(), DUMP_SUBSCRIBER_COUNT_TWO);
1284 auto pos = state[0].find("Subscribers:");
1285 ASSERT_NE(pos, string::npos);
1286
1287 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1288 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1289 }
1290
1291 /*
1292 * @tc.number: CommonEventDumpPartEventTest_0200
1293 * @tc.name: test dump
1294 * @tc.desc: Verify dump information after publishing sticky events
1295 * @tc.require: I582WG
1296 */
1297 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0200, Function | MediumTest | Level1)
1298 {
1299 /* Subscribe */
1300 CommonEventListener *listener = nullptr;
1301 CommonEventListener *listener2 = nullptr;
1302 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1303 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1304 EXPECT_NE(nullptr, listener);
1305 EXPECT_NE(nullptr, listener2);
1306
1307 /* Publish */
1308 PublishStickyEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1309 PublishStickyEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1310
1311 usleep(50000);
1312
1313 std::vector<std::string> state;
1314 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::STICKY), "", ALL_USER, state);
1315 GTEST_LOG_(INFO) << "get state size:" << state.size();
1316 ASSERT_EQ(state.size(), DUMP_STICKY_COUNT_TWO);
1317 auto pos = state[0].find("Sticky Events:");
1318 ASSERT_NE(pos, string::npos);
1319
1320 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1321 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1322 }
1323
1324 /*
1325 * @tc.number: CommonEventDumpPartEventTest_0300
1326 * @tc.name: test dump
1327 * @tc.desc: Verify dump pending events
1328 * @tc.require: I582WG
1329 */
1330 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0300, Function | MediumTest | Level1)
1331 {
1332 /* Subscribe */
1333 CommonEventListener *listener = nullptr;
1334 CommonEventListener *listener2 = nullptr;
1335 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1336 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1337 EXPECT_NE(nullptr, listener);
1338 EXPECT_NE(nullptr, listener2);
1339
1340 /* Publish */
1341 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1342 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1343
1344 usleep(50000);
1345
1346 std::vector<std::string> state;
1347 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::PENDING), "", ALL_USER, state);
1348 GTEST_LOG_(INFO) << "get state size:" << state.size();
1349 ASSERT_EQ(state.size(), 1);
1350 EXPECT_EQ("Pending Events:\tNo information", state[0]);
1351
1352 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1353 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1354 }
1355
1356 /*
1357 * @tc.number: CommonEventDumpPartEventTest_0400
1358 * @tc.name: test dump
1359 * @tc.desc: Verify dump information after publishing unordered events
1360 * @tc.require: I582WG
1361 */
1362 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0400, Function | MediumTest | Level1)
1363 {
1364 /* Subscribe */
1365 CommonEventListener *listener = nullptr;
1366 CommonEventListener *listener2 = nullptr;
1367 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1368 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1369 EXPECT_NE(nullptr, listener);
1370 EXPECT_NE(nullptr, listener2);
1371
1372 /* Publish */
1373 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1374 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1375
1376 usleep(50000);
1377
1378 std::vector<std::string> state;
1379 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::HISTORY), "", ALL_USER, state);
1380 GTEST_LOG_(INFO) << "get state size:" << state.size();
1381 ASSERT_EQ(state.size(), DUMP_HISTORY_COUNT_TWO * 3);
1382 auto pos = state[0].find("History Events:");
1383 ASSERT_NE(pos, string::npos);
1384
1385 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1386 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1387 }
1388 } // namespace
1389