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 
22 using namespace std;
23 using namespace ffrt;
24 using namespace testing;
25 #ifdef HWTEST_TESTING_EXT_ENABLE
26 using namespace testing::ext;
27 #endif
28 
29 class DelayWorkDeinitTest : public testing::Test {
30 protected:
SetUpTestCase()31     static void SetUpTestCase()
32     {
33     }
34 
TearDownTestCase()35     static void TearDownTestCase()
36     {
37     }
38 
SetUp()39     virtual void SetUp()
40     {
41     }
42 
TearDown()43     virtual void TearDown()
44     {
45     }
46 };
47 
CheckCallBackThreadName()48 void CheckCallBackThreadName()
49 {
50     EXPECT_EQ(true, DelayedWorker::IsDelayerWorkerThread());
51 }
52 
53 WaitUntilEntry g_delayWorkerThreadTestWe;
54 
SendDelayedWorker(uint64_t timeoutUs)55 void SendDelayedWorker(uint64_t timeoutUs)
56 {
57     TimePoint now = std::chrono::steady_clock::now();
58     TimePoint delay = now + std::chrono::microseconds(timeoutUs);
59 
60     g_delayWorkerThreadTestWe.tp = delay;
61     g_delayWorkerThreadTestWe.cb = ([](ffrt::WaitEntry* we) { CheckCallBackThreadName(); });
62     DelayedWorker::GetInstance().dispatch(g_delayWorkerThreadTestWe.tp,
63         &g_delayWorkerThreadTestWe, g_delayWorkerThreadTestWe.cb);
64 }
65 
66 /*
67  * 测试用例名称 : delay_work_thread_para_01
68  * 测试用例描述:测试delayWork线程变量是否正确配置
69  * 操作步骤    :1、提交DelayWorker任务
70  *              2、等待任务执行完成
71  * 预期结果    :检测是否为delayworker线程,callback函数中检查为是,主线程检查为否
72  */
HWTEST_F(DelayWorkDeinitTest, delay_work_thread_para_01, TestSize.Level1)73 HWTEST_F(DelayWorkDeinitTest, delay_work_thread_para_01, TestSize.Level1)
74 {
75     const uint64_t timeoutUs = 100;
76     DelayedWorker::ThreadEnvCreate();
77     SendDelayedWorker(timeoutUs);
78     sleep(1);
79     EXPECT_EQ(false, DelayedWorker::IsDelayerWorkerThread());
80 }