17a9a4b8fSopenharmony_ci/*
27a9a4b8fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
37a9a4b8fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47a9a4b8fSopenharmony_ci * you may not use this file except in compliance with the License.
57a9a4b8fSopenharmony_ci * You may obtain a copy of the License at
67a9a4b8fSopenharmony_ci *
77a9a4b8fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87a9a4b8fSopenharmony_ci *
97a9a4b8fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107a9a4b8fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117a9a4b8fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127a9a4b8fSopenharmony_ci * See the License for the specific language governing permissions and
137a9a4b8fSopenharmony_ci * limitations under the License.
147a9a4b8fSopenharmony_ci */
157a9a4b8fSopenharmony_ci
167a9a4b8fSopenharmony_ci#include <functional>
177a9a4b8fSopenharmony_ci#include <gtest/gtest.h>
187a9a4b8fSopenharmony_ci
197a9a4b8fSopenharmony_ci#include "watchdog.h"
207a9a4b8fSopenharmony_ci#include "work_policy_manager.h"
217a9a4b8fSopenharmony_ci#include "work_scheduler_service.h"
227a9a4b8fSopenharmony_ci
237a9a4b8fSopenharmony_ciusing namespace testing::ext;
247a9a4b8fSopenharmony_ci
257a9a4b8fSopenharmony_cinamespace OHOS {
267a9a4b8fSopenharmony_cinamespace WorkScheduler {
277a9a4b8fSopenharmony_ci
287a9a4b8fSopenharmony_ciclass WatchdogTest : public testing::Test {
297a9a4b8fSopenharmony_cipublic:
307a9a4b8fSopenharmony_ci    static void SetUpTestCase();
317a9a4b8fSopenharmony_ci    static void TearDownTestCase() {}
327a9a4b8fSopenharmony_ci    void SetUp() {}
337a9a4b8fSopenharmony_ci    void TearDown() {}
347a9a4b8fSopenharmony_ci    static std::shared_ptr<Watchdog> watchdog_;
357a9a4b8fSopenharmony_ci};
367a9a4b8fSopenharmony_ci
377a9a4b8fSopenharmony_cistd::shared_ptr<Watchdog> WatchdogTest::watchdog_ = nullptr;
387a9a4b8fSopenharmony_ci
397a9a4b8fSopenharmony_civoid WatchdogTest::SetUpTestCase()
407a9a4b8fSopenharmony_ci{
417a9a4b8fSopenharmony_ci    std::shared_ptr<WorkSchedulerService> workSchedulerService = DelayedSingleton<WorkSchedulerService>::GetInstance();
427a9a4b8fSopenharmony_ci    std::shared_ptr<AppExecFwk::EventRunner> runner;
437a9a4b8fSopenharmony_ci    watchdog_ = std::make_shared<Watchdog>(workSchedulerService->GetWorkPolicyManager(), runner);
447a9a4b8fSopenharmony_ci}
457a9a4b8fSopenharmony_ci
467a9a4b8fSopenharmony_ci/**
477a9a4b8fSopenharmony_ci * @tc.name: watchdog_001
487a9a4b8fSopenharmony_ci * @tc.desc: Test Watchdog AddWatchdog.
497a9a4b8fSopenharmony_ci * @tc.type: FUNC
507a9a4b8fSopenharmony_ci * @tc.require: I8JBRY
517a9a4b8fSopenharmony_ci */
527a9a4b8fSopenharmony_ciHWTEST_F(WatchdogTest, watchdog_001, TestSize.Level1)
537a9a4b8fSopenharmony_ci{
547a9a4b8fSopenharmony_ci    bool result = watchdog_->AddWatchdog(1, 1);
557a9a4b8fSopenharmony_ci    EXPECT_EQ(result, false);
567a9a4b8fSopenharmony_ci}
577a9a4b8fSopenharmony_ci
587a9a4b8fSopenharmony_ci/**
597a9a4b8fSopenharmony_ci * @tc.name: watchdog_002
607a9a4b8fSopenharmony_ci * @tc.desc: Test Watchdog RemoveWatchdog.
617a9a4b8fSopenharmony_ci * @tc.type: FUNC
627a9a4b8fSopenharmony_ci * @tc.require: I8JBRY
637a9a4b8fSopenharmony_ci */
647a9a4b8fSopenharmony_ciHWTEST_F(WatchdogTest, watchdog_002, TestSize.Level1)
657a9a4b8fSopenharmony_ci{
667a9a4b8fSopenharmony_ci    bool result = watchdog_->AddWatchdog(1, 1);
677a9a4b8fSopenharmony_ci    EXPECT_EQ(result, false);
687a9a4b8fSopenharmony_ci    watchdog_->RemoveWatchdog(1);
697a9a4b8fSopenharmony_ci}
707a9a4b8fSopenharmony_ci
717a9a4b8fSopenharmony_ci/**
727a9a4b8fSopenharmony_ci * @tc.name: watchdog_003
737a9a4b8fSopenharmony_ci * @tc.desc: Test Watchdog ProcessEvent.
747a9a4b8fSopenharmony_ci * @tc.type: FUNC
757a9a4b8fSopenharmony_ci * @tc.require: I8JBRY
767a9a4b8fSopenharmony_ci */
777a9a4b8fSopenharmony_ciHWTEST_F(WatchdogTest, watchdog_003, TestSize.Level1)
787a9a4b8fSopenharmony_ci{
797a9a4b8fSopenharmony_ci    AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(0);
807a9a4b8fSopenharmony_ci    event = nullptr;
817a9a4b8fSopenharmony_ci    watchdog_->ProcessEvent(event);
827a9a4b8fSopenharmony_ci    EXPECT_TRUE(event == nullptr);
837a9a4b8fSopenharmony_ci}
847a9a4b8fSopenharmony_ci
857a9a4b8fSopenharmony_ci/**
867a9a4b8fSopenharmony_ci * @tc.name: watchdog_004
877a9a4b8fSopenharmony_ci * @tc.desc: Test Watchdog ProcessEvent.
887a9a4b8fSopenharmony_ci * @tc.type: FUNC
897a9a4b8fSopenharmony_ci * @tc.require: I8JBRY
907a9a4b8fSopenharmony_ci */
917a9a4b8fSopenharmony_ciHWTEST_F(WatchdogTest, watchdog_004, TestSize.Level1)
927a9a4b8fSopenharmony_ci{
937a9a4b8fSopenharmony_ci    AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(0);
947a9a4b8fSopenharmony_ci    watchdog_->ProcessEvent(event);
957a9a4b8fSopenharmony_ci    EXPECT_TRUE(event->GetInnerEventId() == 0);
967a9a4b8fSopenharmony_ci}
977a9a4b8fSopenharmony_ci
987a9a4b8fSopenharmony_ci/**
997a9a4b8fSopenharmony_ci * @tc.name: watchdog_005
1007a9a4b8fSopenharmony_ci * @tc.desc: Test Watchdog ProcessEvent.
1017a9a4b8fSopenharmony_ci * @tc.type: FUNC
1027a9a4b8fSopenharmony_ci * @tc.require: I8JBRY
1037a9a4b8fSopenharmony_ci */
1047a9a4b8fSopenharmony_ciHWTEST_F(WatchdogTest, watchdog_005, TestSize.Level1)
1057a9a4b8fSopenharmony_ci{
1067a9a4b8fSopenharmony_ci    AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(0);
1077a9a4b8fSopenharmony_ci    watchdog_->service_ = nullptr;
1087a9a4b8fSopenharmony_ci    watchdog_->ProcessEvent(event);
1097a9a4b8fSopenharmony_ci    std::shared_ptr<WorkPolicyManager> service;
1107a9a4b8fSopenharmony_ci    watchdog_->service_ = service;
1117a9a4b8fSopenharmony_ci    EXPECT_TRUE(event->GetInnerEventId() == 0);
1127a9a4b8fSopenharmony_ci}
1137a9a4b8fSopenharmony_ci
1147a9a4b8fSopenharmony_ci}
1157a9a4b8fSopenharmony_ci}