• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }