1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include "ffrt_inner.h"
18 #include "c/ffrt_dump.h"
19 #include "sync/delayed_worker.h"
20 #include "../common.h"
21 #include "util/ffrt_facade.h"
22
23 using namespace std;
24 using namespace ffrt;
25 using namespace testing;
26 #ifdef HWTEST_TESTING_EXT_ENABLE
27 using namespace testing::ext;
28 #endif
29
30 class DelayWorkDeinitTest : public testing::Test {
31 protected:
SetUpTestCase()32 static void SetUpTestCase()
33 {
34 }
35
TearDownTestCase()36 static void TearDownTestCase()
37 {
38 }
39
SetUp()40 void SetUp() override
41 {
42 }
43
TearDown()44 void TearDown() override
45 {
46 }
47 };
48
CheckCallBackThreadName()49 void CheckCallBackThreadName()
50 {
51 EXPECT_EQ(true, DelayedWorker::IsDelayerWorkerThread());
52 }
53
54 WaitUntilEntry g_delayWorkerThreadTestWe;
55
SendDelayedWorker(uint64_t timeoutUs)56 void SendDelayedWorker(uint64_t timeoutUs)
57 {
58 TimePoint now = std::chrono::steady_clock::now();
59 TimePoint delay = now + std::chrono::microseconds(timeoutUs);
60
61 g_delayWorkerThreadTestWe.tp = delay;
62 g_delayWorkerThreadTestWe.cb = ([](ffrt::WaitEntry* we) { CheckCallBackThreadName(); });
63 FFRTFacade::GetDWInstance().dispatch(g_delayWorkerThreadTestWe.tp,
64 &g_delayWorkerThreadTestWe, g_delayWorkerThreadTestWe.cb);
65 }
66
67 /*
68 * 测试用例名称 : delay_work_thread_para_01
69 * 测试用例描述:测试delayWork线程变量是否正确配置
70 * 操作步骤 :1、提交DelayWorker任务
71 * 2、等待任务执行完成
72 * 预期结果 :检测是否为delayworker线程,callback函数中检查为是,主线程检查为否
73 */
74 HWTEST_F(DelayWorkDeinitTest, delay_work_thread_para_01, TestSize.Level1)
75 {
76 const uint64_t timeoutUs = 100;
77 DelayedWorker::ThreadEnvCreate();
78 SendDelayedWorker(timeoutUs);
79 sleep(1);
80 EXPECT_EQ(false, DelayedWorker::IsDelayerWorkerThread());
81 }
82
83 HWTEST_F(DelayWorkDeinitTest, delay_work_thread_para_02, TestSize.Level1)
84 {
85 const uint64_t timeoutUs = 100;
86 DelayedWorker::ThreadEnvCreate();
87 SendDelayedWorker(timeoutUs);
88 sleep(1);
89 bool ret = DelayedWorker::IsDelayerWorkerThread();
90 EXPECT_EQ(ret, false);
91 }