1 /*
2 * Copyright (c) 2023-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
18 #include "ffrt_utils.h"
19
20 namespace OHOS::MiscServices {
21 using namespace testing::ext;
22 using namespace testing;
23
24 class FFRTTimerTest : public testing::Test {
25 public:
26 static void SetUpTestCase(void);
27 static void TearDownTestCase(void);
28 void SetUp();
29 void TearDown();
30 };
31
SetUpTestCase(void)32 void FFRTTimerTest::SetUpTestCase(void) {}
33
TearDownTestCase(void)34 void FFRTTimerTest::TearDownTestCase(void) {}
35
SetUp(void)36 void FFRTTimerTest::SetUp(void) {}
37
TearDown(void)38 void FFRTTimerTest::TearDown(void) {}
39
40 /**
41 * @tc.name: SetTimerTest001
42 * @tc.desc: Set Timer
43 * @tc.type: FUNC
44 */
HWTEST_F(FFRTTimerTest, SetTimerTest001, TestSize.Level0)45 HWTEST_F(FFRTTimerTest, SetTimerTest001, TestSize.Level0)
46 {
47 FFRTTimer ffrtTimer;
48 std::string timerId = "ffrt_test";
49 int x = 4;
50 FFRTTask ffrtTask = [&x] {
51 x /= 2;
52 };
53 ffrtTimer.SetTimer(timerId, ffrtTask, 0);
54 ffrt::wait();
55 EXPECT_TRUE(x == 2);
56 }
57
58 /**
59 * @tc.name: SetTimerTest002
60 * @tc.desc: Set Timer
61 * @tc.type: FUNC
62 */
HWTEST_F(FFRTTimerTest, SetTimerTest002, TestSize.Level0)63 HWTEST_F(FFRTTimerTest, SetTimerTest002, TestSize.Level0)
64 {
65 FFRTTimer pbFfrtTimer("paste_ffrt_timer");
66 std::string pbTimerId = "paste_ffrt_test1";
67 int y = 8;
68 FFRTTask pbFfrtTask = [&y] {
69 y /= 2;
70 };
71 pbFfrtTimer.SetTimer(pbTimerId, pbFfrtTask, 5);
72 ffrt::wait();
73 uint32_t taskId = pbFfrtTimer.GetTaskId(pbTimerId);
74 EXPECT_TRUE(taskId == 1);
75 }
76
77 /**
78 * @tc.name: SubmitQueueTasksTest
79 * @tc.desc: Submit Queue Tasks
80 * @tc.type: FUNC
81 */
HWTEST_F(FFRTTimerTest, SubmitQueueTasksTest, TestSize.Level0)82 HWTEST_F(FFRTTimerTest, SubmitQueueTasksTest, TestSize.Level0)
83 {
84 std::vector<FFRTTask> tasks;
85 FFRTQueue que("QueueTasks");
86 std::vector<FFRTTask>().swap(tasks);
87 FFRTUtils::SubmitQueueTasks(tasks, que);
88 int x = 2;
89 int z = 19;
90 FFRTTask task1 = [&x] {
91 x <<= 3;
92 };
93 FFRTTask task2 = [&z] {
94 z /= 2;
95 };
96 tasks.push_back(task1);
97 tasks.push_back(task2);
98 FFRTUtils::SubmitQueueTasks(tasks, que);
99 EXPECT_TRUE(true);
100 }
101
102 /**
103 * @tc.name: SubmitDelayTaskTest
104 * @tc.desc: Submit Delay Task
105 * @tc.type: FUNC
106 */
HWTEST_F(FFRTTimerTest, SubmitDelayTaskTest, TestSize.Level0)107 HWTEST_F(FFRTTimerTest, SubmitDelayTaskTest, TestSize.Level0)
108 {
109 std::shared_ptr<FFRTQueue> queu = std::make_shared<FFRTQueue>("delayTask");
110 uint32_t delayMs = 20;
111 int x = 10;
112 FFRTTask task0 = [&x] {
113 x <<= 3;
114 };
115 FFRTHandle handle = FFRTUtils::SubmitDelayTask(task0, delayMs, queu);
116 FFRTUtils::CancelTask(handle, queu);
117 EXPECT_TRUE(true);
118 }
119
120 /**
121 * @tc.name: SubmitTimeoutTaskTest
122 * @tc.desc: Submit Timeout Task
123 * @tc.type: FUNC
124 */
HWTEST_F(FFRTTimerTest, SubmitTimeoutTaskTest, TestSize.Level0)125 HWTEST_F(FFRTTimerTest, SubmitTimeoutTaskTest, TestSize.Level0)
126 {
127 uint32_t timeoutMs = 5;
128 int x = 9;
129 FFRTTask task = [&x] {
130 x <<= 3;
131 };
132 bool res = FFRTUtils::SubmitTimeoutTask(task, timeoutMs);
133 EXPECT_TRUE(res);
134 }
135 } // namespace OHOS::MiscServices