17405867cSopenharmony_ci/* 27405867cSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 37405867cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47405867cSopenharmony_ci * you may not use this file except in compliance with the License. 57405867cSopenharmony_ci * You may obtain a copy of the License at 67405867cSopenharmony_ci * 77405867cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87405867cSopenharmony_ci * 97405867cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107405867cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117405867cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127405867cSopenharmony_ci * See the License for the specific language governing permissions and 137405867cSopenharmony_ci * limitations under the License. 147405867cSopenharmony_ci */ 157405867cSopenharmony_ci 167405867cSopenharmony_ci#include "hiappevent_cache_test.h" 177405867cSopenharmony_ci 187405867cSopenharmony_ci#include "app_event_cache_common.h" 197405867cSopenharmony_ci#include "app_event_store.h" 207405867cSopenharmony_ci#include "file_util.h" 217405867cSopenharmony_ci#include "hiappevent_base.h" 227405867cSopenharmony_ci#include "hiappevent_clean.h" 237405867cSopenharmony_ci#include "hiappevent_config.h" 247405867cSopenharmony_ci#include "hiappevent_write.h" 257405867cSopenharmony_ci 267405867cSopenharmony_ciusing namespace testing::ext; 277405867cSopenharmony_ciusing namespace OHOS::HiviewDFX; 287405867cSopenharmony_ciusing namespace OHOS::HiviewDFX::AppEventCacheCommon; 297405867cSopenharmony_cinamespace { 307405867cSopenharmony_ciconst std::string TEST_DIR = "/data/test/hiappevent/"; 317405867cSopenharmony_ciconst std::string TEST_DB_PATH = "/data/test/hiappevent/databases/appevent.db"; 327405867cSopenharmony_ciconst std::string TEST_OBSERVER_NAME = "test_observer"; 337405867cSopenharmony_ciconst std::string TEST_EVENT_DOMAIN = "test_domain"; 347405867cSopenharmony_ciconst std::string TEST_EVENT_NAME = "test_name"; 357405867cSopenharmony_ciconstexpr int TEST_EVENT_TYPE = 1; 367405867cSopenharmony_ciconst std::string TEST_PACKAGE = "{\"domain_\":\"hiappevent\", \"name_\":\"testEvent\"}"; 377405867cSopenharmony_ciconst std::string TEST_RUNNING_ID = "running_test"; 387405867cSopenharmony_ci 397405867cSopenharmony_cistd::shared_ptr<AppEventPack> CreateAppEventPack() 407405867cSopenharmony_ci{ 417405867cSopenharmony_ci return std::make_shared<AppEventPack>(TEST_EVENT_DOMAIN, TEST_EVENT_NAME, TEST_EVENT_TYPE); 427405867cSopenharmony_ci} 437405867cSopenharmony_ci} 447405867cSopenharmony_ci 457405867cSopenharmony_civoid HiAppEventCacheTest::SetUp() 467405867cSopenharmony_ci{ 477405867cSopenharmony_ci HiAppEventConfig::GetInstance().SetStorageDir(TEST_DIR); 487405867cSopenharmony_ci} 497405867cSopenharmony_ci 507405867cSopenharmony_ci/** 517405867cSopenharmony_ci * @tc.name: HiAppEventDBTest001 527405867cSopenharmony_ci * @tc.desc: check the query result of DB operation. 537405867cSopenharmony_ci * @tc.type: FUNC 547405867cSopenharmony_ci * @tc.require: issueI5K0X6 557405867cSopenharmony_ci */ 567405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest001, TestSize.Level0) 577405867cSopenharmony_ci{ 587405867cSopenharmony_ci /** 597405867cSopenharmony_ci * @tc.steps: step1. open the db. 607405867cSopenharmony_ci * @tc.steps: step2. insert record to the tables. 617405867cSopenharmony_ci * @tc.steps: step3. query records from tables. 627405867cSopenharmony_ci */ 637405867cSopenharmony_ci int result = AppEventStore::GetInstance().InitDbStore();; 647405867cSopenharmony_ci ASSERT_EQ(result, 0); 657405867cSopenharmony_ci 667405867cSopenharmony_ci int64_t eventSeq = AppEventStore::GetInstance().InsertEvent(CreateAppEventPack()); 677405867cSopenharmony_ci ASSERT_GT(eventSeq, 0); 687405867cSopenharmony_ci int64_t observerSeq = AppEventStore::GetInstance().InsertObserver(TEST_OBSERVER_NAME); 697405867cSopenharmony_ci ASSERT_GT(observerSeq, 0); 707405867cSopenharmony_ci int64_t mappingSeq = AppEventStore::GetInstance().InsertEventMapping(eventSeq, observerSeq); 717405867cSopenharmony_ci ASSERT_GT(mappingSeq, 0); 727405867cSopenharmony_ci 737405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events; 747405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events, observerSeq); 757405867cSopenharmony_ci ASSERT_EQ(result, 0); 767405867cSopenharmony_ci ASSERT_GT(events.size(), 0); 777405867cSopenharmony_ci ASSERT_EQ(events[0]->GetDomain(), TEST_EVENT_DOMAIN); 787405867cSopenharmony_ci ASSERT_EQ(events[0]->GetName(), TEST_EVENT_NAME); 797405867cSopenharmony_ci ASSERT_EQ(events[0]->GetType(), TEST_EVENT_TYPE); 807405867cSopenharmony_ci 817405867cSopenharmony_ci std::vector<int64_t> observerSeqs; 827405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryObserverSeqs(TEST_OBSERVER_NAME, observerSeqs); 837405867cSopenharmony_ci ASSERT_EQ(result, 0); 847405867cSopenharmony_ci ASSERT_GT(observerSeqs.size(), 0); 857405867cSopenharmony_ci ASSERT_EQ(observerSeqs[0], observerSeq); 867405867cSopenharmony_ci 877405867cSopenharmony_ci result = AppEventStore::GetInstance().DestroyDbStore();; 887405867cSopenharmony_ci ASSERT_EQ(result, 0); 897405867cSopenharmony_ci} 907405867cSopenharmony_ci 917405867cSopenharmony_ci/** 927405867cSopenharmony_ci * @tc.name: HiAppEventDBTest002 937405867cSopenharmony_ci * @tc.desc: check the take result of DB operation. 947405867cSopenharmony_ci * @tc.type: FUNC 957405867cSopenharmony_ci * @tc.require: issueI5K0X6 967405867cSopenharmony_ci */ 977405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest002, TestSize.Level0) 987405867cSopenharmony_ci{ 997405867cSopenharmony_ci /** 1007405867cSopenharmony_ci * @tc.steps: step1. open the db. 1017405867cSopenharmony_ci * @tc.steps: step2. insert record to the tables. 1027405867cSopenharmony_ci * @tc.steps: step3. take records from tables. 1037405867cSopenharmony_ci */ 1047405867cSopenharmony_ci int result = AppEventStore::GetInstance().InitDbStore();; 1057405867cSopenharmony_ci ASSERT_EQ(result, 0); 1067405867cSopenharmony_ci 1077405867cSopenharmony_ci auto eventSeq = AppEventStore::GetInstance().InsertEvent(CreateAppEventPack()); 1087405867cSopenharmony_ci ASSERT_GT(eventSeq, 0); 1097405867cSopenharmony_ci auto observerSeq = AppEventStore::GetInstance().InsertObserver(TEST_OBSERVER_NAME); 1107405867cSopenharmony_ci ASSERT_GT(observerSeq, 0); 1117405867cSopenharmony_ci auto mappingSeq = AppEventStore::GetInstance().InsertEventMapping(eventSeq, observerSeq); 1127405867cSopenharmony_ci ASSERT_GT(mappingSeq, 0); 1137405867cSopenharmony_ci 1147405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events; 1157405867cSopenharmony_ci result = AppEventStore::GetInstance().TakeEvents(events, observerSeq); 1167405867cSopenharmony_ci ASSERT_EQ(result, 0); 1177405867cSopenharmony_ci ASSERT_GT(events.size(), 0); 1187405867cSopenharmony_ci ASSERT_EQ(events[0]->GetDomain(), TEST_EVENT_DOMAIN); 1197405867cSopenharmony_ci ASSERT_EQ(events[0]->GetName(), TEST_EVENT_NAME); 1207405867cSopenharmony_ci ASSERT_EQ(events[0]->GetType(), TEST_EVENT_TYPE); 1217405867cSopenharmony_ci 1227405867cSopenharmony_ci events.clear(); 1237405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events, observerSeq); 1247405867cSopenharmony_ci ASSERT_EQ(result, 0); 1257405867cSopenharmony_ci ASSERT_EQ(events.size(), 0); 1267405867cSopenharmony_ci 1277405867cSopenharmony_ci result = AppEventStore::GetInstance().DestroyDbStore();; 1287405867cSopenharmony_ci ASSERT_EQ(result, 0); 1297405867cSopenharmony_ci} 1307405867cSopenharmony_ci 1317405867cSopenharmony_ci/** 1327405867cSopenharmony_ci * @tc.name: HiAppEventDBTest003 1337405867cSopenharmony_ci * @tc.desc: check the delete result of DB operation. 1347405867cSopenharmony_ci * @tc.type: FUNC 1357405867cSopenharmony_ci * @tc.require: issueI5NTOD 1367405867cSopenharmony_ci */ 1377405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest003, TestSize.Level0) 1387405867cSopenharmony_ci{ 1397405867cSopenharmony_ci /** 1407405867cSopenharmony_ci * @tc.steps: step1. open the db. 1417405867cSopenharmony_ci * @tc.steps: step2. insert record to the tables. 1427405867cSopenharmony_ci * @tc.steps: step3. delete records from tables. 1437405867cSopenharmony_ci */ 1447405867cSopenharmony_ci int result = AppEventStore::GetInstance().InitDbStore();; 1457405867cSopenharmony_ci ASSERT_EQ(result, 0); 1467405867cSopenharmony_ci 1477405867cSopenharmony_ci auto eventSeq = AppEventStore::GetInstance().InsertEvent(CreateAppEventPack()); 1487405867cSopenharmony_ci ASSERT_GT(eventSeq, 0); 1497405867cSopenharmony_ci auto observerSeq = AppEventStore::GetInstance().InsertObserver(TEST_OBSERVER_NAME); 1507405867cSopenharmony_ci ASSERT_GT(observerSeq, 0); 1517405867cSopenharmony_ci auto mappingSeq = AppEventStore::GetInstance().InsertEventMapping(eventSeq, observerSeq); 1527405867cSopenharmony_ci ASSERT_GT(mappingSeq, 0); 1537405867cSopenharmony_ci 1547405867cSopenharmony_ci result = AppEventStore::GetInstance().DeleteObserver(observerSeq); 1557405867cSopenharmony_ci ASSERT_EQ(result, 1); // 1 recored 1567405867cSopenharmony_ci std::vector<int64_t> observerSeqs; 1577405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryObserverSeqs(TEST_OBSERVER_NAME, observerSeqs); 1587405867cSopenharmony_ci ASSERT_EQ(result, 0); 1597405867cSopenharmony_ci ASSERT_EQ(observerSeqs.size(), 0); 1607405867cSopenharmony_ci 1617405867cSopenharmony_ci result = AppEventStore::GetInstance().DeleteEventMapping(observerSeq, {eventSeq}); 1627405867cSopenharmony_ci ASSERT_EQ(result, 0); // 0 recored 1637405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events; 1647405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events, observerSeq); 1657405867cSopenharmony_ci ASSERT_EQ(result, 0); 1667405867cSopenharmony_ci ASSERT_EQ(events.size(), 0); 1677405867cSopenharmony_ci} 1687405867cSopenharmony_ci 1697405867cSopenharmony_ci/** 1707405867cSopenharmony_ci * @tc.name: HiAppEventDBTest004 1717405867cSopenharmony_ci * @tc.desc: revisit the DB after destroying it. 1727405867cSopenharmony_ci * @tc.type: FUNC 1737405867cSopenharmony_ci * @tc.require: issueI5NTOS 1747405867cSopenharmony_ci */ 1757405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest004, TestSize.Level1) 1767405867cSopenharmony_ci{ 1777405867cSopenharmony_ci /** 1787405867cSopenharmony_ci * @tc.steps: step1. open the db. 1797405867cSopenharmony_ci * @tc.steps: step2. create block table. 1807405867cSopenharmony_ci * @tc.steps: step3. add record to the block table. 1817405867cSopenharmony_ci * @tc.steps: step4. config the max storage size. 1827405867cSopenharmony_ci * @tc.steps: step5. trigger cleanup. 1837405867cSopenharmony_ci * @tc.steps: step6. close the db. 1847405867cSopenharmony_ci */ 1857405867cSopenharmony_ci int result = AppEventStore::GetInstance().DestroyDbStore();; 1867405867cSopenharmony_ci ASSERT_EQ(result, 0); 1877405867cSopenharmony_ci 1887405867cSopenharmony_ci int64_t eventSeq = AppEventStore::GetInstance().InsertEvent(CreateAppEventPack()); 1897405867cSopenharmony_ci ASSERT_GT(eventSeq, 0); 1907405867cSopenharmony_ci int64_t observerSeq = AppEventStore::GetInstance().InsertObserver(TEST_OBSERVER_NAME); 1917405867cSopenharmony_ci ASSERT_GT(observerSeq, 0); 1927405867cSopenharmony_ci int64_t mappingSeq = AppEventStore::GetInstance().InsertEventMapping(eventSeq, observerSeq); 1937405867cSopenharmony_ci ASSERT_GT(mappingSeq, 0); 1947405867cSopenharmony_ci 1957405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events; 1967405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events, observerSeq); 1977405867cSopenharmony_ci ASSERT_EQ(result, 0); 1987405867cSopenharmony_ci std::vector<int64_t> observerSeqs; 1997405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryObserverSeqs(TEST_OBSERVER_NAME, observerSeqs); 2007405867cSopenharmony_ci ASSERT_EQ(result, 0); 2017405867cSopenharmony_ci result = AppEventStore::GetInstance().TakeEvents(events, observerSeq); 2027405867cSopenharmony_ci ASSERT_EQ(result, 0); 2037405867cSopenharmony_ci 2047405867cSopenharmony_ci result = AppEventStore::GetInstance().DeleteObserver(observerSeq); 2057405867cSopenharmony_ci ASSERT_EQ(result, 1); // 1 recored 2067405867cSopenharmony_ci result = AppEventStore::GetInstance().DeleteEventMapping(observerSeq, {eventSeq}); 2077405867cSopenharmony_ci ASSERT_EQ(result, 0); // 0 recored 2087405867cSopenharmony_ci} 2097405867cSopenharmony_ci 2107405867cSopenharmony_ci/** 2117405867cSopenharmony_ci * @tc.name: HiAppEventDBTest005 2127405867cSopenharmony_ci * @tc.desc: check the result of clear data. 2137405867cSopenharmony_ci * @tc.type: FUNC 2147405867cSopenharmony_ci * @tc.require: issueI5NTOS 2157405867cSopenharmony_ci */ 2167405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest005, TestSize.Level1) 2177405867cSopenharmony_ci{ 2187405867cSopenharmony_ci /** 2197405867cSopenharmony_ci * @tc.steps: step1. create log file. 2207405867cSopenharmony_ci * @tc.steps: step2. create db file. 2217405867cSopenharmony_ci * @tc.steps: step3. clear the data. 2227405867cSopenharmony_ci */ 2237405867cSopenharmony_ci WriteEvent(std::make_shared<AppEventPack>("name", 1)); 2247405867cSopenharmony_ci std::vector<std::string> files; 2257405867cSopenharmony_ci FileUtil::GetDirFiles(TEST_DIR, files); 2267405867cSopenharmony_ci ASSERT_FALSE(files.empty()); 2277405867cSopenharmony_ci ASSERT_TRUE(FileUtil::IsFileExists(TEST_DIR)); 2287405867cSopenharmony_ci ASSERT_TRUE(FileUtil::IsFileExists(TEST_DB_PATH)); 2297405867cSopenharmony_ci 2307405867cSopenharmony_ci HiAppEventClean::ClearData(TEST_DIR); 2317405867cSopenharmony_ci ASSERT_TRUE(FileUtil::IsFileExists(TEST_DB_PATH)); 2327405867cSopenharmony_ci ASSERT_TRUE(FileUtil::IsFileExists(TEST_DIR)); 2337405867cSopenharmony_ci for (const auto& file : files) { 2347405867cSopenharmony_ci ASSERT_FALSE(FileUtil::IsFileExists(file)); 2357405867cSopenharmony_ci } 2367405867cSopenharmony_ci} 2377405867cSopenharmony_ci 2387405867cSopenharmony_ci/** 2397405867cSopenharmony_ci * @tc.name: HiAppEventDBTest006 2407405867cSopenharmony_ci * @tc.desc: check the query result of DB operation. 2417405867cSopenharmony_ci * @tc.type: FUNC 2427405867cSopenharmony_ci * @tc.require: issueI5K0X6 2437405867cSopenharmony_ci */ 2447405867cSopenharmony_ciHWTEST_F(HiAppEventCacheTest, HiAppEventDBTest006, TestSize.Level0) 2457405867cSopenharmony_ci{ 2467405867cSopenharmony_ci /** 2477405867cSopenharmony_ci * @tc.steps: step1. open the db. 2487405867cSopenharmony_ci * @tc.steps: step2. insert record to the tables, insert custom param. 2497405867cSopenharmony_ci * @tc.steps: step3. query records from tables. 2507405867cSopenharmony_ci * @tc.steps: step3. delete custom param, query records from tables. 2517405867cSopenharmony_ci */ 2527405867cSopenharmony_ci int result = AppEventStore::GetInstance().InitDbStore();; 2537405867cSopenharmony_ci ASSERT_EQ(result, 0); 2547405867cSopenharmony_ci 2557405867cSopenharmony_ci auto event = CreateAppEventPack(); 2567405867cSopenharmony_ci event->SetRunningId(TEST_RUNNING_ID); 2577405867cSopenharmony_ci int64_t eventSeq = AppEventStore::GetInstance().InsertEvent(event); 2587405867cSopenharmony_ci ASSERT_GT(eventSeq, 0); 2597405867cSopenharmony_ci int64_t observerSeq = AppEventStore::GetInstance().InsertObserver(TEST_OBSERVER_NAME); 2607405867cSopenharmony_ci ASSERT_GT(observerSeq, 0); 2617405867cSopenharmony_ci int64_t mappingSeq = AppEventStore::GetInstance().InsertEventMapping(eventSeq, observerSeq); 2627405867cSopenharmony_ci ASSERT_GT(mappingSeq, 0); 2637405867cSopenharmony_ci auto eventParams = CreateAppEventPack(); 2647405867cSopenharmony_ci eventParams->SetRunningId(TEST_RUNNING_ID); 2657405867cSopenharmony_ci eventParams->AddParam("custom_data", "value_str"); 2667405867cSopenharmony_ci int64_t ret = AppEventStore::GetInstance().InsertCustomEventParams(eventParams); 2677405867cSopenharmony_ci ASSERT_EQ(ret, 0); 2687405867cSopenharmony_ci 2697405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events; 2707405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events, observerSeq); 2717405867cSopenharmony_ci ASSERT_EQ(result, 0); 2727405867cSopenharmony_ci ASSERT_GT(events.size(), 0); 2737405867cSopenharmony_ci ASSERT_EQ(events[0]->GetDomain(), TEST_EVENT_DOMAIN); 2747405867cSopenharmony_ci ASSERT_EQ(events[0]->GetName(), TEST_EVENT_NAME); 2757405867cSopenharmony_ci ASSERT_EQ(events[0]->GetType(), TEST_EVENT_TYPE); 2767405867cSopenharmony_ci ASSERT_EQ(events[0]->GetRunningId(), TEST_RUNNING_ID); 2777405867cSopenharmony_ci ASSERT_EQ(events[0]->GetParamStr(), "{\"custom_data\":\"value_str\"}\n"); 2787405867cSopenharmony_ci 2797405867cSopenharmony_ci // delete custom params 2807405867cSopenharmony_ci AppEventStore::GetInstance().DeleteCustomEventParams(); 2817405867cSopenharmony_ci std::vector<std::shared_ptr<AppEventPack>> events1; 2827405867cSopenharmony_ci result = AppEventStore::GetInstance().QueryEvents(events1, observerSeq, 1); 2837405867cSopenharmony_ci ASSERT_EQ(result, 0); 2847405867cSopenharmony_ci ASSERT_EQ(events1.size(), 1); 2857405867cSopenharmony_ci ASSERT_EQ(events1[0]->GetDomain(), TEST_EVENT_DOMAIN); 2867405867cSopenharmony_ci ASSERT_EQ(events1[0]->GetName(), TEST_EVENT_NAME); 2877405867cSopenharmony_ci ASSERT_EQ(events1[0]->GetType(), TEST_EVENT_TYPE); 2887405867cSopenharmony_ci ASSERT_EQ(events1[0]->GetRunningId(), TEST_RUNNING_ID); 2897405867cSopenharmony_ci ASSERT_EQ(events1[0]->GetParamStr(), "{}\n"); 2907405867cSopenharmony_ci 2917405867cSopenharmony_ci result = AppEventStore::GetInstance().DestroyDbStore();; 2927405867cSopenharmony_ci ASSERT_EQ(result, 0); 2937405867cSopenharmony_ci} 294