/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "common/include/task_scheduler.h" #include using namespace testing; using namespace testing::ext; namespace OHOS { namespace Rosen { class TaskSchedulerTest : public testing::Test { public: TaskSchedulerTest() {} ~TaskSchedulerTest() {} }; namespace { /** * @tc.name: task_scheduler_test001 * @tc.desc: normal function * @tc.type: FUNC */ HWTEST_F(TaskSchedulerTest, task_scheduler_test001, TestSize.Level1) { GTEST_LOG_(INFO) << "TaskSchedulerTest: task_scheduler_test001 start"; std::string threadName = "threadName"; std::string name = "name"; TaskScheduler* taskScheduler = new (std::nothrow) TaskScheduler(threadName); int res = 0; taskScheduler->RemoveTask(name); ASSERT_EQ(res, 0); delete taskScheduler; GTEST_LOG_(INFO) << "TaskSchedulerTest: task_scheduler_test001 end"; } /** * @tc.name: GetEventHandler * @tc.desc: GetEventHandler function * @tc.type: FUNC */ HWTEST_F(TaskSchedulerTest, GetEventHandler, TestSize.Level1) { std::string threadName = "threadName"; std::shared_ptr taskScheduler = std::make_shared(threadName); ASSERT_NE(taskScheduler, nullptr); EXPECT_NE(taskScheduler->GetEventHandler(), nullptr); } /** * @tc.name: PostTask * @tc.desc: PostTask function * @tc.type: FUNC */ HWTEST_F(TaskSchedulerTest, PostTask, TestSize.Level1) { std::string threadName = "threadName"; std::shared_ptr taskScheduler = std::make_shared(threadName); ASSERT_NE(taskScheduler, nullptr); int resultValue = 0; auto taskFunc = [&resultValue]() { GTEST_LOG_(INFO) << "START_TASK"; resultValue = 1; }; taskScheduler->PostAsyncTask(taskFunc, "ssmTask"); EXPECT_NE(taskScheduler->handler_, nullptr); EXPECT_EQ(resultValue, 0); int64_t delayTime = 1; taskScheduler->PostAsyncTask(taskFunc, "ssmTask", delayTime); EXPECT_EQ(resultValue, 0); } HWTEST_F(TaskSchedulerTest, AddExportTask1, TestSize.Level1) { std::string threadName = "threadName"; std::string funcName = "funcName"; std::shared_ptr taskScheduler = std::make_shared(threadName); pid_t taskTid = 0; auto taskFunc = [&taskTid]() { GTEST_LOG_(INFO) << "START_TASK"; taskTid = gettid(); }; ASSERT_NE(taskScheduler, nullptr); ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); taskScheduler->AddExportTask(funcName, taskFunc); ASSERT_EQ(taskTid, gettid()); ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); } HWTEST_F(TaskSchedulerTest, AddExportTask2, TestSize.Level1) { std::string threadName = "threadName"; std::string funcName = "funcName"; std::shared_ptr taskScheduler = std::make_shared(threadName); pid_t taskTid = 0; auto taskFunc = [&taskTid]() { GTEST_LOG_(INFO) << "START_TASK"; taskTid = gettid(); }; ASSERT_NE(taskScheduler, nullptr); ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); auto testTask = [taskScheduler, funcName, taskFunc] { taskScheduler->AddExportTask(funcName, taskFunc); return 0; }; taskScheduler->PostSyncTask(testTask); ASSERT_EQ(taskTid, 0); ASSERT_NE(taskScheduler->exportFuncMap_.size(), 0); } HWTEST_F(TaskSchedulerTest, SetExportHandler, TestSize.Level1) { std::string exportThreadName = "exportThread"; auto eventRunner = AppExecFwk::EventRunner::Create(exportThreadName); auto eventHandler = std::make_shared(eventRunner); std::string threadName = "threadName"; std::shared_ptr taskScheduler = std::make_shared(threadName); taskScheduler->SetExportHandler(eventHandler); ASSERT_EQ(eventHandler.get(), taskScheduler->exportHandler_.get()); } HWTEST_F(TaskSchedulerTest, ExecuteExportTask, TestSize.Level1) { std::string threadName = "threadName"; std::shared_ptr taskScheduler = std::make_shared(threadName); bool executed = false; std::string funcName = "funcName"; auto taskFunc = [&executed]() { GTEST_LOG_(INFO) << "START_TASK"; executed = true; }; ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); taskScheduler->ExecuteExportTask(); ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); ASSERT_EQ(executed, false); taskScheduler->exportFuncMap_["taskFunc"] = taskFunc; ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 1); taskScheduler->ExecuteExportTask(); std::string exportThreadName = "exportThread"; auto eventRunner = AppExecFwk::EventRunner::Create(exportThreadName); auto eventHandler = std::make_shared(eventRunner); taskScheduler->SetExportHandler(eventHandler); taskScheduler->ExecuteExportTask(); ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0); } } // namespace } // namespace Rosen } // namespace OHOS