1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#include <gtest/gtest.h> 17d9f0492fSopenharmony_ci#include <ctime> 18d9f0492fSopenharmony_ci#include <cstdint> 19d9f0492fSopenharmony_ci#include <cstdlib> 20d9f0492fSopenharmony_ci#include <unistd.h> 21d9f0492fSopenharmony_ci#include "le_loop.h" 22d9f0492fSopenharmony_ci#include "loop_event.h" 23d9f0492fSopenharmony_ci#include "le_timer.h" 24d9f0492fSopenharmony_ci 25d9f0492fSopenharmony_ciusing namespace testing::ext; 26d9f0492fSopenharmony_ciusing namespace std; 27d9f0492fSopenharmony_ci 28d9f0492fSopenharmony_cinamespace init_ut { 29d9f0492fSopenharmony_ciclass LoopTimerUnitTest : public testing::Test { 30d9f0492fSopenharmony_cipublic: 31d9f0492fSopenharmony_ci static void SetUpTestCase(void) {}; 32d9f0492fSopenharmony_ci static void TearDownTestCase(void) {}; 33d9f0492fSopenharmony_ci void SetUp() {}; 34d9f0492fSopenharmony_ci void TearDown() {}; 35d9f0492fSopenharmony_ci}; 36d9f0492fSopenharmony_ci 37d9f0492fSopenharmony_cistatic LoopHandle g_loop = NULL; 38d9f0492fSopenharmony_ciint32_t g_maxCount = 0; 39d9f0492fSopenharmony_cistatic void Test_ProcessTimer(const TimerHandle taskHandle, void *context) 40d9f0492fSopenharmony_ci{ 41d9f0492fSopenharmony_ci g_maxCount--; 42d9f0492fSopenharmony_ci if (g_maxCount <= 0) { 43d9f0492fSopenharmony_ci LE_StopLoop(g_loop); 44d9f0492fSopenharmony_ci } 45d9f0492fSopenharmony_ci printf("WaitTimeout count %d\n", g_maxCount); 46d9f0492fSopenharmony_ci} 47d9f0492fSopenharmony_ci 48d9f0492fSopenharmony_cistatic void TimeoutCancel(const TimerHandle taskHandle, void *context) 49d9f0492fSopenharmony_ci{ 50d9f0492fSopenharmony_ci printf("TimeoutCancel count %d", g_maxCount); 51d9f0492fSopenharmony_ci LE_StopTimer(LE_GetDefaultLoop(), taskHandle); 52d9f0492fSopenharmony_ci} 53d9f0492fSopenharmony_ci 54d9f0492fSopenharmony_ciHWTEST_F(LoopTimerUnitTest, Init_Timer_001, TestSize.Level0) 55d9f0492fSopenharmony_ci{ 56d9f0492fSopenharmony_ci EXPECT_EQ(LE_CreateLoop(&g_loop), 0); 57d9f0492fSopenharmony_ci 58d9f0492fSopenharmony_ci TimerHandle timer = NULL; 59d9f0492fSopenharmony_ci int ret = LE_CreateTimer(NULL, &timer, Test_ProcessTimer, NULL); 60d9f0492fSopenharmony_ci EXPECT_NE(ret, 0); 61d9f0492fSopenharmony_ci 62d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, NULL, Test_ProcessTimer, NULL); 63d9f0492fSopenharmony_ci EXPECT_NE(ret, 0); 64d9f0492fSopenharmony_ci 65d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, &timer, NULL, NULL); 66d9f0492fSopenharmony_ci EXPECT_NE(ret, 0); 67d9f0492fSopenharmony_ci 68d9f0492fSopenharmony_ci CancelTimer(timer); 69d9f0492fSopenharmony_ci 70d9f0492fSopenharmony_ci uint64_t time = GetCurrentTimespec(0); 71d9f0492fSopenharmony_ci EXPECT_GT(time, 0); 72d9f0492fSopenharmony_ci 73d9f0492fSopenharmony_ci time = GetMinTimeoutPeriod(NULL); 74d9f0492fSopenharmony_ci EXPECT_EQ(time, 0); 75d9f0492fSopenharmony_ci 76d9f0492fSopenharmony_ci EventLoop *loop = reinterpret_cast<EventLoop *>(g_loop); 77d9f0492fSopenharmony_ci DestroyTimerList(loop); 78d9f0492fSopenharmony_ci printf("Init_Timer_001 %d end", g_maxCount); 79d9f0492fSopenharmony_ci} 80d9f0492fSopenharmony_ci 81d9f0492fSopenharmony_ciHWTEST_F(LoopTimerUnitTest, Init_Timer_002, TestSize.Level0) 82d9f0492fSopenharmony_ci{ 83d9f0492fSopenharmony_ci EXPECT_EQ(LE_CreateLoop(&g_loop), 0); 84d9f0492fSopenharmony_ci EventLoop *loop = reinterpret_cast<EventLoop *>(g_loop); 85d9f0492fSopenharmony_ci 86d9f0492fSopenharmony_ci TimerHandle timer = NULL; 87d9f0492fSopenharmony_ci g_maxCount = 1; 88d9f0492fSopenharmony_ci int ret = LE_CreateTimer(g_loop, &timer, Test_ProcessTimer, NULL); 89d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 90d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer, 200, 1); 91d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 92d9f0492fSopenharmony_ci usleep(200000); 93d9f0492fSopenharmony_ci CheckTimeoutOfTimer(loop, GetCurrentTimespec(0)); 94d9f0492fSopenharmony_ci EXPECT_EQ(g_maxCount, 0); 95d9f0492fSopenharmony_ci LE_CloseLoop(g_loop); 96d9f0492fSopenharmony_ci 97d9f0492fSopenharmony_ci printf("Init_Timer_002 %d end", g_maxCount); 98d9f0492fSopenharmony_ci} 99d9f0492fSopenharmony_ci 100d9f0492fSopenharmony_ciHWTEST_F(LoopTimerUnitTest, Init_Timer_003, TestSize.Level0) 101d9f0492fSopenharmony_ci{ 102d9f0492fSopenharmony_ci EXPECT_EQ(LE_CreateLoop(&g_loop), 0); 103d9f0492fSopenharmony_ci 104d9f0492fSopenharmony_ci TimerHandle timer = NULL; 105d9f0492fSopenharmony_ci int ret = LE_CreateTimer(g_loop, &timer, Test_ProcessTimer, NULL); 106d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 107d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer, 200, 2); 108d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 109d9f0492fSopenharmony_ci g_maxCount = 2; 110d9f0492fSopenharmony_ci LE_RunLoop(g_loop); 111d9f0492fSopenharmony_ci EXPECT_EQ(g_maxCount, 0); 112d9f0492fSopenharmony_ci LE_CloseLoop(g_loop); 113d9f0492fSopenharmony_ci 114d9f0492fSopenharmony_ci printf("Init_Timer_003 %d end", g_maxCount); 115d9f0492fSopenharmony_ci} 116d9f0492fSopenharmony_ci 117d9f0492fSopenharmony_ciHWTEST_F(LoopTimerUnitTest, Init_Timer_004, TestSize.Level0) 118d9f0492fSopenharmony_ci{ 119d9f0492fSopenharmony_ci EXPECT_EQ(LE_CreateLoop(&g_loop), 0); 120d9f0492fSopenharmony_ci 121d9f0492fSopenharmony_ci g_maxCount = 3; 122d9f0492fSopenharmony_ci TimerHandle timer = NULL; 123d9f0492fSopenharmony_ci int ret = LE_CreateTimer(g_loop, &timer, Test_ProcessTimer, NULL); 124d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 125d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer, 100, 1); 126d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 127d9f0492fSopenharmony_ci 128d9f0492fSopenharmony_ci TimerHandle timer1 = NULL; 129d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, &timer1, Test_ProcessTimer, NULL); 130d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 131d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer1, 150, 1); 132d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 133d9f0492fSopenharmony_ci 134d9f0492fSopenharmony_ci TimerHandle timer2 = NULL; 135d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, &timer2, Test_ProcessTimer, NULL); 136d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 137d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer2, 300, 1); 138d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 139d9f0492fSopenharmony_ci 140d9f0492fSopenharmony_ci usleep(150); 141d9f0492fSopenharmony_ci LE_RunLoop(g_loop); 142d9f0492fSopenharmony_ci EXPECT_EQ(g_maxCount, 0); 143d9f0492fSopenharmony_ci LE_CloseLoop(g_loop); 144d9f0492fSopenharmony_ci 145d9f0492fSopenharmony_ci printf("Init_Timer_004 %d end", g_maxCount); 146d9f0492fSopenharmony_ci} 147d9f0492fSopenharmony_ci 148d9f0492fSopenharmony_ciHWTEST_F(LoopTimerUnitTest, Init_Timer_005, TestSize.Level0) 149d9f0492fSopenharmony_ci{ 150d9f0492fSopenharmony_ci EXPECT_EQ(LE_CreateLoop(&g_loop), 0); 151d9f0492fSopenharmony_ci 152d9f0492fSopenharmony_ci g_maxCount = 3; 153d9f0492fSopenharmony_ci TimerHandle timer = NULL; 154d9f0492fSopenharmony_ci int ret = LE_CreateTimer(g_loop, &timer, Test_ProcessTimer, NULL); 155d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 156d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer, 100, 2); 157d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 158d9f0492fSopenharmony_ci 159d9f0492fSopenharmony_ci TimerHandle timer1 = NULL; 160d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, &timer1, Test_ProcessTimer, NULL); 161d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 162d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer1, 150, 2); 163d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 164d9f0492fSopenharmony_ci 165d9f0492fSopenharmony_ci TimerHandle timer2 = NULL; 166d9f0492fSopenharmony_ci ret = LE_CreateTimer(g_loop, &timer2, Test_ProcessTimer, NULL); 167d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 168d9f0492fSopenharmony_ci ret = LE_StartTimer(g_loop, timer2, 300, 1); 169d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 170d9f0492fSopenharmony_ci 171d9f0492fSopenharmony_ci CancelTimer(timer); 172d9f0492fSopenharmony_ci LE_RunLoop(g_loop); 173d9f0492fSopenharmony_ci EXPECT_EQ(g_maxCount, 0); 174d9f0492fSopenharmony_ci LE_CloseLoop(g_loop); 175d9f0492fSopenharmony_ci 176d9f0492fSopenharmony_ci printf("Init_Timer_005 %d end", g_maxCount); 177d9f0492fSopenharmony_ci} 178d9f0492fSopenharmony_ci}