• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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