* 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 <gtest/gtest.h>
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);
ASSERT_NE(taskScheduler, nullptr);
taskScheduler->RemoveTask(name);
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> taskScheduler = std::make_shared<TaskScheduler>(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> taskScheduler = std::make_shared<TaskScheduler>(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> taskScheduler = std::make_shared<TaskScheduler>(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> taskScheduler = std::make_shared<TaskScheduler>(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<AppExecFwk::EventHandler>(eventRunner);
std::string threadName = "threadName";
std::shared_ptr<TaskScheduler> taskScheduler = std::make_shared<TaskScheduler>(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> taskScheduler = std::make_shared<TaskScheduler>(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<AppExecFwk::EventHandler>(eventRunner);
taskScheduler->SetExportHandler(eventHandler);
taskScheduler->ExecuteExportTask();
ASSERT_EQ(taskScheduler->exportFuncMap_.size(), 0);
}
}
}
}