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