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 #include "inner_common_event_manager.h"
22 #undef private
23 #undef protected
24
25 #include "common_event_constant.h"
26 #include "common_event_listener.h"
27 #include "datetime_ex.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 if (innerCommonEventManager_ != nullptr) {
318 if (innerCommonEventManager_->controlPtr_ != nullptr) {
319 innerCommonEventManager_->controlPtr_.reset();
320 }
321 if (innerCommonEventManager_->staticSubscriberManager_ != nullptr) {
322 innerCommonEventManager_->staticSubscriberManager_.reset();
323 }
324 }
325 }
326
SubscribeCommonEvent(const std::shared_ptr<CommonEventSubscriber> & subscriber,uid_t callingUid,OHOS::sptr<OHOS::IRemoteObject> & commonEventListener)327 bool CommonEventDumpTest::SubscribeCommonEvent(const std::shared_ptr<CommonEventSubscriber> &subscriber,
328 uid_t callingUid, OHOS::sptr<OHOS::IRemoteObject> &commonEventListener)
329 {
330 OHOS::sptr<IEventReceive> listener = new CommonEventListener(subscriber);
331 if (!listener) {
332 return false;
333 }
334 commonEventListener = listener->AsObject();
335 struct tm recordTime = {0};
336 if (!OHOS::GetSystemCurrentTime(&recordTime)) {
337 return false;
338 }
339 pid_t callingPid = 10;
340 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
341
342 std::string bundleName = "";
343 std::function<void()> SubscribeCommonEventFunc = std::bind(&InnerCommonEventManager::SubscribeCommonEvent,
344 innerCommonEventManager_,
345 subscriber->GetSubscribeInfo(),
346 commonEventListener,
347 recordTime,
348 callingPid,
349 callingUid,
350 tokenID,
351 bundleName);
352 return handler_->PostTask(SubscribeCommonEventFunc);
353 }
354
PublishCommonEvent(const CommonEventData & data,const CommonEventPublishInfo & publishInfo,const std::shared_ptr<CommonEventSubscriber> & subscriber,OHOS::sptr<OHOS::IRemoteObject> & commonEventListener)355 bool CommonEventDumpTest::PublishCommonEvent(const CommonEventData &data, const CommonEventPublishInfo &publishInfo,
356 const std::shared_ptr<CommonEventSubscriber> &subscriber, OHOS::sptr<OHOS::IRemoteObject> &commonEventListener)
357 {
358 if (commonEventListener == nullptr && publishInfo.IsOrdered()) {
359 OHOS::sptr<IEventReceive> listener = new CommonEventListener(subscriber);
360 if (!listener) {
361 return false;
362 }
363 commonEventListener = listener->AsObject();
364 } else if (!publishInfo.IsOrdered()) {
365 commonEventListener = nullptr;
366 }
367
368 struct tm recordTime = {0};
369 if (!OHOS::GetSystemCurrentTime(&recordTime)) {
370 return false;
371 }
372 pid_t callingPid = 20;
373 uid_t callingUid = 21;
374 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
375 int32_t userId = UNDEFINED_USER;
376 std::string bundleName = "";
377
378 std::function<void()> PublishCommonEventFunc = std::bind(&InnerCommonEventManager::PublishCommonEvent,
379 innerCommonEventManager_,
380 data,
381 publishInfo,
382 commonEventListener,
383 recordTime,
384 callingPid,
385 callingUid,
386 tokenID,
387 userId,
388 bundleName,
389 nullptr);
390 return handler_->PostTask(PublishCommonEventFunc);
391 }
392
FinishReceiver(const OHOS::sptr<OHOS::IRemoteObject> & proxy,const int & code,const std::string & data,const bool & abortEvent)393 bool CommonEventDumpTest::FinishReceiver(
394 const OHOS::sptr<OHOS::IRemoteObject> &proxy, const int &code, const std::string &data, const bool &abortEvent)
395 {
396 std::function<void()> FinishReceiverFunc =
397 std::bind(&InnerCommonEventManager::FinishReceiver, innerCommonEventManager_, proxy, code, data, abortEvent);
398 return handler_->PostTask(FinishReceiverFunc);
399 }
400
GetInnerCommonEventManager()401 std::shared_ptr<InnerCommonEventManager> CommonEventDumpTest::GetInnerCommonEventManager()
402 {
403 return innerCommonEventManager_;
404 }
405
DumpInfoCount(const std::vector<std::string> & state,int desSubscribersCount,int desStickyCount,int desPendingCount,int desHistoryCount)406 void CommonEventDumpTest::DumpInfoCount(const std::vector<std::string> &state, int desSubscribersCount,
407 int desStickyCount, int desPendingCount, int desHistoryCount)
408 {
409 int subscribersNum = 0;
410 int stickyNum = 0;
411 int pendingCount = 0;
412 int historyCount = 0;
413 bool isSubscribers = false;
414 bool isSticky = false;
415 bool isPending = false;
416 bool isHistory = false;
417 for (auto vec : state) {
418 GTEST_LOG_(INFO) << vec;
419 auto pos = vec.find("No information");
420 if (pos != string::npos) {
421 auto pos2 = vec.find("\tSubscribers:\tNo information");
422 if (pos2 != string::npos) {
423 } else {
424 continue;
425 }
426 }
427 if (!isPending && !isHistory) {
428 auto pos = vec.find("Subscribers:");
429 if (pos != string::npos) {
430 isSubscribers = true;
431 }
432 }
433 pos = vec.find("Sticky Events:");
434 if (pos != string::npos) {
435 isSubscribers = false;
436 isSticky = true;
437 }
438 pos = vec.find("Pending Events:");
439 if (pos != string::npos) {
440 isSubscribers = false;
441 isSticky = false;
442 isPending = true;
443 }
444 pos = vec.find("History Events:");
445 if (pos != string::npos) {
446 isSubscribers = false;
447 isSticky = false;
448 isPending = false;
449 isHistory = true;
450 }
451 if (isSubscribers) {
452 subscribersNum++;
453 } else if (isSticky) {
454 stickyNum++;
455 } else if (isPending) {
456 pendingCount++;
457 } else if (isHistory) {
458 historyCount++;
459 }
460 }
461
462 EXPECT_EQ(subscribersNum, desSubscribersCount);
463 EXPECT_EQ(stickyNum, desStickyCount);
464 EXPECT_EQ(pendingCount, desPendingCount);
465 EXPECT_EQ(historyCount, desHistoryCount);
466 }
467
SetPublishDataByOrdered(CommonEventData & data,CommonEventPublishInfo & publishInfo)468 void CommonEventDumpTest::SetPublishDataByOrdered(CommonEventData &data, CommonEventPublishInfo &publishInfo)
469 {
470 // make a want
471 Want want;
472 want.SetAction(EVENTCASE1);
473 want.AddEntity(ENTITY);
474 want.AddEntity(ENTITY2);
475 want.SetType(TYPE);
476 want.SetFlags(FLAG);
477
478 OHOS::AppExecFwk::ElementName element;
479 element.SetBundleName(BUNDLE);
480 element.SetAbilityName(ABILITY);
481 element.SetDeviceID(DEVICEDID);
482 want.SetElement(element);
483
484 // make common event data
485 data.SetWant(want);
486 data.SetData(INNITDATA);
487 data.SetCode(INNITCODE);
488
489 publishInfo.SetOrdered(true);
490 }
491
SetPublishDataByOrdered2(CommonEventData & data,CommonEventPublishInfo & publishInfo)492 void CommonEventDumpTest::SetPublishDataByOrdered2(CommonEventData &data, CommonEventPublishInfo &publishInfo)
493 {
494 // make a want
495 Want want;
496 want.SetAction(EVENTCASE2);
497 want.AddEntity(ENTITY);
498 want.AddEntity(ENTITY2);
499 want.SetType(TYPE);
500 want.SetFlags(FLAG);
501
502 OHOS::AppExecFwk::ElementName element;
503 element.SetBundleName(BUNDLE);
504 element.SetAbilityName(ABILITY);
505 element.SetDeviceID(DEVICEDID);
506 want.SetElement(element);
507
508 // make common event data
509 data.SetWant(want);
510 data.SetData(INNITDATA);
511 data.SetCode(INNITCODE);
512
513 publishInfo.SetOrdered(true);
514 }
515
SetPublishDataByUnordered(CommonEventData & data,CommonEventPublishInfo & publishInfo)516 void CommonEventDumpTest::SetPublishDataByUnordered(CommonEventData &data, CommonEventPublishInfo &publishInfo)
517 {
518 // make a want
519 Want want;
520 want.SetAction(EVENTCASE3);
521 want.AddEntity(ENTITY);
522 want.AddEntity(ENTITY2);
523 want.SetType(TYPE);
524 want.SetFlags(FLAG);
525
526 OHOS::AppExecFwk::ElementName element;
527 element.SetBundleName(BUNDLE);
528 element.SetAbilityName(ABILITY);
529 element.SetDeviceID(DEVICEDID);
530 want.SetElement(element);
531
532 // make common event data
533 data.SetWant(want);
534 data.SetData(INNITDATA);
535 data.SetCode(INNITCODE);
536
537 publishInfo.SetOrdered(false);
538 }
539
SubscribeDoubleEvent(int priority,const std::string & permission,const std::string & deviceId,CommonEventListener * & listener)540 void CommonEventDumpTest::SubscribeDoubleEvent(
541 int priority, const std::string &permission, const std::string &deviceId, CommonEventListener *&listener)
542 {
543 MatchingSkills matchingSkills;
544 matchingSkills.AddEvent(EVENT);
545 matchingSkills.AddEvent(EVENT2);
546 matchingSkills.AddEntity(ENTITY);
547 matchingSkills.AddEntity(ENTITY2);
548
549 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
550 subscribeInfo.SetPriority(priority);
551 subscribeInfo.SetPermission(permission);
552 subscribeInfo.SetDeviceId(deviceId);
553
554 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
555 listener = new (std::nothrow) CommonEventListener(subscriber);
556
557 struct tm curTime {0};
558 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
559 innerCommonEventManager_->SubscribeCommonEvent(
560 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
561 }
562
PublishUnorderedEvent(const std::string & event,const std::string & type,const int code,const std::string & data,const std::string & permission)563 void CommonEventDumpTest::PublishUnorderedEvent(
564 const std::string &event, const std::string &type,
565 const int code, const std::string &data, const std::string &permission)
566 {
567 Want want;
568 want.SetAction(event);
569 want.AddEntity(ENTITY);
570 want.AddEntity(ENTITY2);
571 want.SetType(type);
572
573 OHOS::AppExecFwk::ElementName element;
574 element.SetBundleName(BUNDLE);
575 element.SetAbilityName(ABILITY);
576 element.SetDeviceID(DEVICEDID);
577 want.SetElement(element);
578
579 // make common event data
580 CommonEventData eventData;
581 eventData.SetWant(want);
582 eventData.SetCode(code);
583 eventData.SetData(data);
584
585 // make publish info
586 CommonEventPublishInfo publishInfo;
587 publishInfo.SetSticky(false);
588 std::vector<std::string> permissions;
589 permissions.emplace_back(permission);
590 publishInfo.SetSubscriberPermissions(permissions);
591
592 struct tm curTime {0};
593 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
594 innerCommonEventManager_->PublishCommonEvent(
595 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
596 }
597
PublishStickyEvent(const std::string & event,const std::string & type,const int code,const std::string & data,const std::string & permission)598 void CommonEventDumpTest::PublishStickyEvent(
599 const std::string &event, const std::string &type,
600 const int code, const std::string &data, const std::string &permission)
601 {
602 Want want;
603 want.SetAction(event);
604 want.AddEntity(ENTITY);
605 want.AddEntity(ENTITY2);
606 want.SetType(type);
607
608 OHOS::AppExecFwk::ElementName element;
609 element.SetBundleName(BUNDLE);
610 element.SetAbilityName(ABILITY);
611 element.SetDeviceID(DEVICEDID);
612 want.SetElement(element);
613
614 // make common event data
615 CommonEventData eventData;
616 eventData.SetWant(want);
617 eventData.SetCode(code);
618 eventData.SetData(data);
619
620 // make publish info
621 CommonEventPublishInfo publishInfo;
622 publishInfo.SetSticky(true);
623 std::vector<std::string> permissions;
624 permissions.emplace_back(permission);
625 publishInfo.SetSubscriberPermissions(permissions);
626
627 struct tm curTime {0};
628 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
629 innerCommonEventManager_->PublishCommonEvent(
630 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
631 }
632
PublishStickyEvent(const std::string & event,const std::string & type,const int flag,const std::string & permission)633 void CommonEventDumpTest::PublishStickyEvent(
634 const std::string &event, const std::string &type, const int flag, const std::string &permission)
635 {
636 Want want;
637 want.SetAction(event);
638 want.AddEntity(ENTITY);
639 want.AddEntity(ENTITY2);
640 want.SetType(type);
641 want.SetFlags(flag);
642
643 OHOS::AppExecFwk::ElementName element;
644 element.SetBundleName(BUNDLE);
645 element.SetAbilityName(ABILITY);
646 element.SetDeviceID(DEVICEDID);
647 want.SetElement(element);
648
649 // make common event data
650 CommonEventData eventData;
651 eventData.SetWant(want);
652
653 // make publish info
654 CommonEventPublishInfo publishInfo;
655 publishInfo.SetSticky(true);
656 std::vector<std::string> permissions;
657 permissions.emplace_back(permission);
658 publishInfo.SetSubscriberPermissions(permissions);
659
660 struct tm curTime {0};
661 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
662 innerCommonEventManager_->PublishCommonEvent(
663 eventData, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
664 }
665
666 /*
667 * @tc.number: CommonEventDumpTest_0100
668 * @tc.name: test dump
669 * @tc.desc: Verify dump information after publishing unordered events
670 */
671 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0100, Function | MediumTest | Level1)
672 {
673 /* Subscribe */
674 CommonEventListener *listener = nullptr;
675 CommonEventListener *listener2 = nullptr;
676 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
677 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
678 EXPECT_NE(nullptr, listener);
679 EXPECT_NE(nullptr, listener2);
680
681 /* Publish */
682 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
683 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
684
685 usleep(50000);
686
687 std::vector<std::string> state;
688 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
689 GTEST_LOG_(INFO) << "get state size:" << state.size();
690 ASSERT_NE(state.size(), 0);
691 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, 0, 0, DUMP_HISTORY_COUNT_TWO);
692 EXPECT_EQ("Sticky Events:\tNo information", state[STATE_INDEX2]);
693
694 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
695 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
696 }
697
698 /*
699 * @tc.number: CommonEventDumpTest_0200
700 * @tc.name: test dump
701 * @tc.desc: Verify dump information after publishing sticky events
702 */
703 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0200, Function | MediumTest | Level1)
704 {
705 /* Subscribe */
706 CommonEventListener *listener = nullptr;
707 CommonEventListener *listener2 = nullptr;
708 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
709 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
710 EXPECT_NE(nullptr, listener);
711 EXPECT_NE(nullptr, listener2);
712
713 /* Publish */
714 PublishStickyEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
715 PublishStickyEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
716
717 usleep(50000);
718
719 std::vector<std::string> state;
720 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
721 GTEST_LOG_(INFO) << "get state size:" << state.size();
722 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_TWO);
723
724 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
725 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
726 }
727
728 /*
729 * @tc.number: CommonEventDumpTest_0300
730 * @tc.name: test dump
731 * @tc.desc: Verify dump information after updating sticky events
732 */
733 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0300, Function | MediumTest | Level1)
734 {
735 /* Publish */
736 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
737 PublishStickyEvent(EVENT2, TYPE2, FLAG2, PERMISSION2);
738
739 usleep(50000);
740
741 std::vector<std::string> state;
742 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
743 GTEST_LOG_(INFO) << "get state size:" << state.size();
744 ASSERT_NE(state.size(), 0);
745 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_TWO);
746 EXPECT_EQ("Subscribers:\tNo information", state[0]);
747 }
748
749 /*
750 * @tc.number: CommonEventDumpTest_0400
751 * @tc.name: test dump
752 * @tc.desc: Verify dump information after subscribing
753 */
754 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0400, Function | MediumTest | Level1)
755 {
756 /* Subscribe */
757 MatchingSkills matchingSkills;
758 matchingSkills.AddEvent(EVENT);
759 matchingSkills.AddScheme(SCHEME);
760
761 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
762 subscribeInfo.SetPriority(PRIORITY);
763 subscribeInfo.SetPermission(PERMISSION);
764 subscribeInfo.SetDeviceId(DEVICEDID);
765
766 struct tm curTime {0};
767 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
768
769 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
770 CommonEventListener *listener = new CommonEventListener(subscriber);
771 GetInnerCommonEventManager()->SubscribeCommonEvent(
772 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
773
774 usleep(50000);
775
776 std::vector<std::string> state;
777 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
778 GTEST_LOG_(INFO) << "get state size:" << state.size();
779 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
780
781 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
782 }
783
784 /*
785 * @tc.number: CommonEventDumpTest_0500
786 * @tc.name: test dump
787 * @tc.desc: Verify dump information after subscribing
788 */
789 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0500, Function | MediumTest | Level1)
790 {
791 /* Subscribe */
792 MatchingSkills matchingSkills;
793 matchingSkills.AddEvent(EVENT);
794
795 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
796 subscribeInfo.SetPriority(PRIORITY);
797 subscribeInfo.SetPermission(PERMISSION);
798 subscribeInfo.SetDeviceId(DEVICEDID);
799
800 struct tm curTime {0};
801 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
802
803 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
804 CommonEventListener *listener = new CommonEventListener(subscriber);
805 GetInnerCommonEventManager()->SubscribeCommonEvent(
806 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
807
808 usleep(50000);
809
810 std::vector<std::string> state;
811 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
812 GTEST_LOG_(INFO) << "get state size:" << state.size();
813 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
814
815 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
816 }
817
818 /*
819 * @tc.number: CommonEventDumpTest_0600
820 * @tc.name: test dump
821 * @tc.desc: Verify dump information after subscribing
822 */
823 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0600, Function | MediumTest | Level1)
824 {
825 /* Subscribe */
826 MatchingSkills matchingSkills;
827 matchingSkills.AddEvent(EVENT);
828
829 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
830 subscribeInfo.SetPermission(PERMISSION);
831 subscribeInfo.SetDeviceId(DEVICEDID);
832
833 struct tm curTime {0};
834 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
835
836 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
837 CommonEventListener *listener = new CommonEventListener(subscriber);
838 GetInnerCommonEventManager()->SubscribeCommonEvent(
839 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
840
841 usleep(50000);
842
843 std::vector<std::string> state;
844 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
845 GTEST_LOG_(INFO) << "get state size:" << state.size();
846 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
847
848 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
849 }
850
851 /*
852 * @tc.number: CommonEventDumpTest_0700
853 * @tc.name: test dump
854 * @tc.desc: Verify dump information after subscribing
855 */
856 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0700, Function | MediumTest | Level1)
857 {
858 /* Subscribe */
859 MatchingSkills matchingSkills;
860 matchingSkills.AddEvent(EVENT);
861
862 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
863 subscribeInfo.SetDeviceId(DEVICEDID);
864
865 struct tm curTime {0};
866 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
867
868 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
869 CommonEventListener *listener = new CommonEventListener(subscriber);
870 GetInnerCommonEventManager()->SubscribeCommonEvent(
871 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
872
873 usleep(50000);
874
875 std::vector<std::string> state;
876 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
877 GTEST_LOG_(INFO) << "get state size:" << state.size();
878 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
879
880 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
881 }
882
883 /*
884 * @tc.number: CommonEventDumpTest_0800
885 * @tc.name: test dump
886 * @tc.desc: Verify dump information after subscribing
887 */
888 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0800, Function | MediumTest | Level1)
889 {
890 /* Subscribe */
891 MatchingSkills matchingSkills;
892 matchingSkills.AddEvent(EVENT);
893
894 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
895
896 struct tm curTime {0};
897 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
898
899 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
900 CommonEventListener *listener = new CommonEventListener(subscriber);
901 GetInnerCommonEventManager()->SubscribeCommonEvent(
902 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
903
904 usleep(50000);
905
906 std::vector<std::string> state;
907 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
908 GTEST_LOG_(INFO) << "get state size:" << state.size();
909 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_ONE, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
910
911 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
912 }
913
914 /*
915 * @tc.number: CommonEventDumpTest_0900
916 * @tc.name: test dump
917 * @tc.desc: Verify dump information for unpublished event
918 */
919 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_0900, Function | MediumTest | Level1)
920 {
921 /* Subscribe */
922 MatchingSkills matchingSkills;
923 matchingSkills.AddEvent(EVENT);
924
925 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
926
927 struct tm curTime {0};
928 OHOS::Security::AccessToken::AccessTokenID tokenID = 1;
929
930 std::shared_ptr<SubscriberTest> subscriber = std::make_shared<SubscriberTest>(subscribeInfo);
931 CommonEventListener *listener = new CommonEventListener(subscriber);
932 GetInnerCommonEventManager()->SubscribeCommonEvent(
933 subscribeInfo, listener->AsObject(), curTime, PID, SYSTEM_UID, tokenID, "hello");
934
935 usleep(50000);
936
937 std::vector<std::string> state;
938 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), EVENT3, ALL_USER, state);
939 GTEST_LOG_(INFO) << "get state size:" << state.size();
940 ASSERT_NE(state.size(), 0);
941 DumpInfoCount(state, 0, 0, 0, 0);
942 EXPECT_EQ("Subscribers:\tNo information", state[0]);
943 EXPECT_EQ("Sticky Events:\tNo information", state[STATE_INDEX1]);
944
945 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
946 }
947
948 /*
949 * @tc.number: CommonEventDumpTest_1000
950 * @tc.name: test dump
951 * @tc.desc: Verify dump information for specified event
952 */
953 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1000, TestSize.Level1)
954 {
955 /* Subscribe */
956 CommonEventListener *listener = nullptr;
957 CommonEventListener *listener2 = nullptr;
958 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
959 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
960 EXPECT_NE(nullptr, listener);
961 EXPECT_NE(nullptr, listener2);
962
963 /* Publish */
964 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
965 PublishStickyEvent(EVENT2, TYPE2, FLAG2, PERMISSION2);
966
967 usleep(50000);
968
969 std::vector<std::string> state;
970 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), EVENT2, ALL_USER, state);
971 GTEST_LOG_(INFO) << "get state size:" << state.size();
972 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_ONE, 0, DUMP_HISTORY_COUNT_THREE);
973
974 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
975 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
976 }
977
978 /*
979 * @tc.number: CommonEventDumpTest_1100
980 * @tc.name: test dump
981 * @tc.desc: Verify dump information for sticky event
982 */
983 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1100, Function | MediumTest | Level1)
984 {
985 /* Publish */
986 PublishStickyEvent(EVENT, TYPE, FLAG, PERMISSION);
987
988 usleep(50000);
989
990 std::vector<std::string> state;
991 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
992 GTEST_LOG_(INFO) << "get state size:" << state.size();
993 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
994 }
995
996 /*
997 * @tc.number: CommonEventDumpTest_1200
998 * @tc.name: test dump
999 * @tc.desc: Verify dump information for sticky event
1000 */
1001 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1200, Function | MediumTest | Level1)
1002 {
1003 /* Publish */
1004 PublishStickyEvent(EVENT, "", FLAG, PERMISSION);
1005
1006 usleep(50000);
1007
1008 std::vector<std::string> state;
1009 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1010 GTEST_LOG_(INFO) << "get state size:" << state.size();
1011 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1012 }
1013
1014 /*
1015 * @tc.number: CommonEventDumpTest_1300
1016 * @tc.name: test dump
1017 * @tc.desc: Verify dump information for sticky event
1018 */
1019 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1300, Function | MediumTest | Level1)
1020 {
1021 /* Publish */
1022 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1023
1024 usleep(50000);
1025
1026 std::vector<std::string> state;
1027 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1028 GTEST_LOG_(INFO) << "get state size:" << state.size();
1029 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1030 }
1031
1032 /*
1033 * @tc.number: CommonEventDumpTest_1400
1034 * @tc.name: test dump
1035 * @tc.desc: Verify dump information for sticky event
1036 */
1037 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1400, Function | MediumTest | Level1)
1038 {
1039 /* Publish */
1040 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1041
1042 usleep(50000);
1043
1044 std::vector<std::string> state;
1045 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1046 GTEST_LOG_(INFO) << "get state size:" << state.size();
1047 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1048 }
1049
1050 /*
1051 * @tc.number: CommonEventDumpTest_1500
1052 * @tc.name: test dump
1053 * @tc.desc: Verify dump information for sticky event
1054 */
1055 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1500, Function | MediumTest | Level1)
1056 {
1057 /* Publish */
1058 PublishStickyEvent(EVENT, "", 0, PERMISSION);
1059
1060 usleep(50000);
1061
1062 std::vector<std::string> state;
1063 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1064 GTEST_LOG_(INFO) << "get state size:" << state.size();
1065 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1066 }
1067
1068 /*
1069 * @tc.number: CommonEventDumpTest_1600
1070 * @tc.name: test dump
1071 * @tc.desc: Verify dump information for sticky event
1072 */
1073 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1600, Function | MediumTest | Level1)
1074 {
1075 /* Publish */
1076 // make a want
1077 Want want;
1078 want.SetAction(EVENT);
1079 // make common event data
1080 CommonEventData data;
1081 data.SetWant(want);
1082
1083 // make publish info
1084 CommonEventPublishInfo publishInfo;
1085 publishInfo.SetSticky(true);
1086
1087 std::vector<std::string> permissions;
1088 permissions.emplace_back(PERMISSION);
1089 publishInfo.SetSubscriberPermissions(permissions);
1090
1091 struct tm curTime {0};
1092 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
1093
1094 GetInnerCommonEventManager()->PublishCommonEvent(
1095 data, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
1096
1097 usleep(50000);
1098
1099 std::vector<std::string> state;
1100 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1101 GTEST_LOG_(INFO) << "get state size:" << state.size();
1102 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1103 }
1104
1105 /*
1106 * @tc.number: CommonEventDumpTest_1700
1107 * @tc.name: test dump
1108 * @tc.desc: Verify dump information for sticky event
1109 */
1110 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1700, Function | MediumTest | Level1)
1111 {
1112 /* Publish */
1113 // make a want
1114 Want want;
1115 want.SetAction(EVENT);
1116 // make common event data
1117 CommonEventData data;
1118 data.SetWant(want);
1119
1120 // make publish info
1121 CommonEventPublishInfo publishInfo;
1122 publishInfo.SetSticky(true);
1123
1124 struct tm curTime {0};
1125 OHOS::Security::AccessToken::AccessTokenID tokenID = 0;
1126
1127 GetInnerCommonEventManager()->PublishCommonEvent(
1128 data, publishInfo, nullptr, curTime, PID, SYSTEM_UID, tokenID, UNDEFINED_USER, "hello");
1129
1130 usleep(50000);
1131
1132 std::vector<std::string> state;
1133 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1134 GTEST_LOG_(INFO) << "get state size:" << state.size();
1135 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1136 }
1137
1138 /*
1139 * @tc.number: CommonEventDumpTest_1800
1140 * @tc.name: test dump
1141 * @tc.desc: Verify dump information when the pending ordered event is empty
1142 */
1143 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1800, TestSize.Level1)
1144 {
1145 std::vector<std::string> state;
1146 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1147 ASSERT_NE(state.size(), 0);
1148 DumpInfoCount(state, 0, DUMP_STICKY_COUNT_TWO, 0, 0);
1149 EXPECT_EQ("Pending Events:\tNo information", state[STATE_INDEX3]);
1150 }
1151
1152 /*
1153 * @tc.number: CommonEventDumpTest_1900
1154 * @tc.name: test dump
1155 * @tc.desc: Verify dump information for ordered event
1156 */
1157 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_1900, TestSize.Level1)
1158 {
1159 /* Subscribe */
1160 // make matching skills
1161 MatchingSkills matchingSkills;
1162 matchingSkills.AddEvent(EVENTCASE1);
1163 matchingSkills.AddEntity(ENTITY);
1164 matchingSkills.AddEntity(ENTITY2);
1165 // make subscriber info
1166 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
1167 subscribeInfo.SetPriority(1);
1168 subscribeInfo.SetDeviceId(DEVICEDID);
1169 // make a subscriber object
1170 std::shared_ptr<SubscriberTest> subscriberTest =
1171 std::make_shared<SubscriberTest>(subscribeInfo, GetInnerCommonEventManager());
1172 // subscribe a common event
1173 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest, UID, commonEventListener));
1174 usleep(50000);
1175
1176 // make another subscriber info
1177 CommonEventSubscribeInfo subscribeInfo2(matchingSkills);
1178 subscribeInfo2.SetPriority(0);
1179 subscribeInfo2.SetDeviceId(DEVICEDID2);
1180 // make another subscriber object
1181 std::shared_ptr<SubscriberTest2> subscriberTest2 =
1182 std::make_shared<SubscriberTest2>(subscribeInfo2, GetInnerCommonEventManager());
1183 // subscribe another event
1184 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest2, UID2, commonEventListener2));
1185 usleep(50000);
1186
1187 std::shared_ptr<SubscriberTestLast> subscriber = std::make_shared<SubscriberTestLast>();
1188
1189 /* Publish */
1190 CommonEventData data;
1191 CommonEventPublishInfo publishInfo;
1192 SetPublishDataByOrdered(data, publishInfo);
1193
1194 // publish order event
1195 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1196
1197 usleep(500000);
1198
1199 std::vector<std::string> state;
1200 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1201 DumpInfoCount(state, DUMP_SUBSCRIBER_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_ONE);
1202
1203 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener);
1204 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener2);
1205 }
1206 /*
1207 * @tc.number: CommonEventDumpTest_2000
1208 * @tc.name: test dump
1209 * @tc.desc: Verify dump information for maximum number of history events
1210 */
1211 HWTEST_F(CommonEventDumpTest, CommonEventDumpTest_2000, TestSize.Level1)
1212 {
1213 /* Subscribe */
1214 // make matching skills
1215 MatchingSkills matchingSkills;
1216 matchingSkills.AddEvent(EVENTCASE2);
1217 matchingSkills.AddEntity(ENTITY);
1218 matchingSkills.AddEntity(ENTITY2);
1219
1220 // make subscriber info
1221 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
1222 subscribeInfo.SetPriority(1);
1223 subscribeInfo.SetDeviceId(DEVICEDID);
1224 // make a subscriber object
1225 std::shared_ptr<SubscriberTest> subscriberTest =
1226 std::make_shared<SubscriberTest>(subscribeInfo, GetInnerCommonEventManager());
1227 // subscribe a common event
1228 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest, UID, commonEventListener));
1229 usleep(50000);
1230
1231 // make another subscriber info
1232 CommonEventSubscribeInfo subscribeInfo2(matchingSkills);
1233 subscribeInfo2.SetPriority(0);
1234 subscribeInfo2.SetDeviceId(DEVICEDID2);
1235 // make another subscriber object
1236 std::shared_ptr<SubscriberTest2> subscriberTest2 =
1237 std::make_shared<SubscriberTest2>(subscribeInfo2, GetInnerCommonEventManager());
1238 // subscribe another event
1239 EXPECT_TRUE(SubscribeCommonEvent(subscriberTest2, UID2, commonEventListener2));
1240 usleep(50000);
1241
1242 std::shared_ptr<SubscriberTestLast> subscriber = std::make_shared<SubscriberTestLast>();
1243
1244 /* Publish */
1245 CommonEventData data;
1246 CommonEventPublishInfo publishInfo;
1247
1248 int count = 0;
1249 while (count < PUBLISH_COUNT) {
1250 // publish order event
1251 SetPublishDataByOrdered2(data, publishInfo);
1252 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1253 usleep(50000);
1254
1255 // publish unorder event
1256 SetPublishDataByUnordered(data, publishInfo);
1257 EXPECT_TRUE(PublishCommonEvent(data, publishInfo, subscriber, commonEventListener3));
1258 usleep(50000);
1259 count++;
1260 }
1261 usleep(500000);
1262
1263 std::vector<std::string> state;
1264 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::ALL), "", ALL_USER, state);
1265 DumpInfoCount(state, DUMP_STICKY_COUNT_TWO, DUMP_STICKY_COUNT_TWO, 0, DUMP_HISTORY_COUNT_MAX);
1266
1267 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener);
1268 GetInnerCommonEventManager()->UnsubscribeCommonEvent(commonEventListener2);
1269 }
1270
1271 /*
1272 * @tc.number: CommonEventDumpPartEventTest_0100
1273 * @tc.name: test dump
1274 * @tc.desc: Verify dump all subscriber
1275 * @tc.require: I582WG
1276 */
1277 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0100, Function | MediumTest | Level1)
1278 {
1279 /* Subscribe */
1280 CommonEventListener *listener = nullptr;
1281 CommonEventListener *listener2 = nullptr;
1282 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1283 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1284 EXPECT_NE(nullptr, listener);
1285 EXPECT_NE(nullptr, listener2);
1286
1287 usleep(50000);
1288
1289 std::vector<std::string> state;
1290 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::SUBSCRIBER), "", ALL_USER, state);
1291 GTEST_LOG_(INFO) << "get state size:" << state.size();
1292 ASSERT_EQ(state.size(), DUMP_SUBSCRIBER_COUNT_TWO);
1293 auto pos = state[0].find("Subscribers:");
1294 ASSERT_NE(pos, string::npos);
1295
1296 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1297 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1298 }
1299
1300 /*
1301 * @tc.number: CommonEventDumpPartEventTest_0200
1302 * @tc.name: test dump
1303 * @tc.desc: Verify dump information after publishing sticky events
1304 * @tc.require: I582WG
1305 */
1306 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0200, Function | MediumTest | Level1)
1307 {
1308 /* Subscribe */
1309 CommonEventListener *listener = nullptr;
1310 CommonEventListener *listener2 = nullptr;
1311 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1312 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1313 EXPECT_NE(nullptr, listener);
1314 EXPECT_NE(nullptr, listener2);
1315
1316 /* Publish */
1317 PublishStickyEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1318 PublishStickyEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1319
1320 usleep(50000);
1321
1322 std::vector<std::string> state;
1323 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::STICKY), "", ALL_USER, state);
1324 GTEST_LOG_(INFO) << "get state size:" << state.size();
1325 ASSERT_EQ(state.size(), DUMP_STICKY_COUNT_TWO);
1326 auto pos = state[0].find("Sticky Events:");
1327 ASSERT_NE(pos, string::npos);
1328
1329 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1330 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1331 }
1332
1333 /*
1334 * @tc.number: CommonEventDumpPartEventTest_0300
1335 * @tc.name: test dump
1336 * @tc.desc: Verify dump pending events
1337 * @tc.require: I582WG
1338 */
1339 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0300, Function | MediumTest | Level1)
1340 {
1341 /* Subscribe */
1342 CommonEventListener *listener = nullptr;
1343 CommonEventListener *listener2 = nullptr;
1344 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1345 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1346 EXPECT_NE(nullptr, listener);
1347 EXPECT_NE(nullptr, listener2);
1348
1349 /* Publish */
1350 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1351 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1352
1353 usleep(50000);
1354
1355 std::vector<std::string> state;
1356 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::PENDING), "", ALL_USER, state);
1357 GTEST_LOG_(INFO) << "get state size:" << state.size();
1358 ASSERT_EQ(state.size(), 1);
1359 EXPECT_EQ("Pending Events:\tNo information", state[0]);
1360
1361 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1362 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1363 }
1364
1365 /*
1366 * @tc.number: CommonEventDumpPartEventTest_0400
1367 * @tc.name: test dump
1368 * @tc.desc: Verify dump information after publishing unordered events
1369 * @tc.require: I582WG
1370 */
1371 HWTEST_F(CommonEventDumpTest, CommonEventDumpPartEventTest_0400, Function | MediumTest | Level1)
1372 {
1373 /* Subscribe */
1374 CommonEventListener *listener = nullptr;
1375 CommonEventListener *listener2 = nullptr;
1376 SubscribeDoubleEvent(PRIORITY, PERMISSION, DEVICEDID, listener);
1377 SubscribeDoubleEvent(PRIORITY2, PERMISSION2, DEVICEDID2, listener2);
1378 EXPECT_NE(nullptr, listener);
1379 EXPECT_NE(nullptr, listener2);
1380
1381 /* Publish */
1382 PublishUnorderedEvent(EVENT, TYPE, CODE, DATA, PERMISSION);
1383 PublishUnorderedEvent(EVENT2, TYPE2, CODE2, DATA2, PERMISSION2);
1384
1385 usleep(50000);
1386
1387 std::vector<std::string> state;
1388 GetInnerCommonEventManager()->DumpState(static_cast<int32_t>(DumpEventType::HISTORY), "", ALL_USER, state);
1389 GTEST_LOG_(INFO) << "get state size:" << state.size();
1390 ASSERT_EQ(state.size(), DUMP_HISTORY_COUNT_TWO * 3);
1391 auto pos = state[0].find("History Events:");
1392 ASSERT_NE(pos, string::npos);
1393
1394 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener->AsObject());
1395 GetInnerCommonEventManager()->UnsubscribeCommonEvent(listener2->AsObject());
1396 }
1397 } // namespace
1398