1484543d1Sopenharmony_ci/* 2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License. 5484543d1Sopenharmony_ci * You may obtain a copy of the License at 6484543d1Sopenharmony_ci * 7484543d1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8484543d1Sopenharmony_ci * 9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and 13484543d1Sopenharmony_ci * limitations under the License. 14484543d1Sopenharmony_ci */ 15484543d1Sopenharmony_ci 16484543d1Sopenharmony_ci#include <gtest/gtest.h> 17484543d1Sopenharmony_ci#include <thread> 18484543d1Sopenharmony_ci#include "c/deadline.h" 19484543d1Sopenharmony_ci#include "sched/interval.h" 20484543d1Sopenharmony_ci#include "sched/sched_deadline.h" 21484543d1Sopenharmony_ci#include "tm/cpu_task.h" 22484543d1Sopenharmony_ci#include "../common.h" 23484543d1Sopenharmony_ci 24484543d1Sopenharmony_ciusing namespace testing; 25484543d1Sopenharmony_ci#ifdef HWTEST_TESTING_EXT_ENABLE 26484543d1Sopenharmony_ciusing namespace testing::ext; 27484543d1Sopenharmony_ci#endif 28484543d1Sopenharmony_ciusing namespace ffrt; 29484543d1Sopenharmony_ci 30484543d1Sopenharmony_ciclass DeadlineTest : public testing::Test { 31484543d1Sopenharmony_ciprotected: 32484543d1Sopenharmony_ci static void SetUpTestCase() 33484543d1Sopenharmony_ci { 34484543d1Sopenharmony_ci } 35484543d1Sopenharmony_ci 36484543d1Sopenharmony_ci static void TearDownTestCase() 37484543d1Sopenharmony_ci { 38484543d1Sopenharmony_ci } 39484543d1Sopenharmony_ci 40484543d1Sopenharmony_ci virtual void SetUp() 41484543d1Sopenharmony_ci { 42484543d1Sopenharmony_ci } 43484543d1Sopenharmony_ci 44484543d1Sopenharmony_ci virtual void TearDown() 45484543d1Sopenharmony_ci { 46484543d1Sopenharmony_ci } 47484543d1Sopenharmony_ci}; 48484543d1Sopenharmony_ci 49484543d1Sopenharmony_ci 50484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, interval_deadline_test, TestSize.Level1) 51484543d1Sopenharmony_ci{ 52484543d1Sopenharmony_ci auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive)); 53484543d1Sopenharmony_ci int ret = qos_interval_begin(it); 54484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 55484543d1Sopenharmony_ci 56484543d1Sopenharmony_ci qos_interval_end(it); 57484543d1Sopenharmony_ci 58484543d1Sopenharmony_ci ret = qos_interval_begin(it); 59484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 60484543d1Sopenharmony_ci 61484543d1Sopenharmony_ci qos_interval_update(it, 50); 62484543d1Sopenharmony_ci qos_interval_end(it); 63484543d1Sopenharmony_ci qos_interval_destroy(it); 64484543d1Sopenharmony_ci} 65484543d1Sopenharmony_ci 66484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, interval_join_test, TestSize.Level1) 67484543d1Sopenharmony_ci{ 68484543d1Sopenharmony_ci auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive)); 69484543d1Sopenharmony_ci int ret = qos_interval_begin(it); 70484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 71484543d1Sopenharmony_ci 72484543d1Sopenharmony_ci qos_interval_join(it); 73484543d1Sopenharmony_ci qos_interval_leave(it); 74484543d1Sopenharmony_ci 75484543d1Sopenharmony_ci qos_interval_end(it); 76484543d1Sopenharmony_ci qos_interval_destroy(it); 77484543d1Sopenharmony_ci} 78484543d1Sopenharmony_ci 79484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, interval_exception_test, TestSize.Level1) 80484543d1Sopenharmony_ci{ 81484543d1Sopenharmony_ci auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive)); 82484543d1Sopenharmony_ci int ret = qos_interval_begin(it); 83484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 84484543d1Sopenharmony_ci 85484543d1Sopenharmony_ci ret = qos_interval_begin(it); 86484543d1Sopenharmony_ci EXPECT_EQ(ret, -1); 87484543d1Sopenharmony_ci 88484543d1Sopenharmony_ci qos_interval_end(it); 89484543d1Sopenharmony_ci 90484543d1Sopenharmony_ci ret = qos_interval_begin(it); 91484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 92484543d1Sopenharmony_ci qos_interval_destroy(it); 93484543d1Sopenharmony_ci} 94484543d1Sopenharmony_ci 95484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, interval_exception2_test, TestSize.Level1) 96484543d1Sopenharmony_ci{ 97484543d1Sopenharmony_ci auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive)); 98484543d1Sopenharmony_ci 99484543d1Sopenharmony_ci qos_interval_update(it, 50); 100484543d1Sopenharmony_ci qos_interval_end(it); 101484543d1Sopenharmony_ci 102484543d1Sopenharmony_ci int ret = qos_interval_begin(it); 103484543d1Sopenharmony_ci EXPECT_EQ(ret, 0); 104484543d1Sopenharmony_ci 105484543d1Sopenharmony_ci qos_interval_end(it); 106484543d1Sopenharmony_ci qos_interval_destroy(it); 107484543d1Sopenharmony_ci} 108484543d1Sopenharmony_ci 109484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, interval_exception3_test, TestSize.Level1) 110484543d1Sopenharmony_ci{ 111484543d1Sopenharmony_ci auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_default)); 112484543d1Sopenharmony_ci 113484543d1Sopenharmony_ci qos_interval_update(it, 50); 114484543d1Sopenharmony_ci qos_interval_end(it); 115484543d1Sopenharmony_ci 116484543d1Sopenharmony_ci int ret = qos_interval_begin(it); 117484543d1Sopenharmony_ci EXPECT_EQ(ret, -1); 118484543d1Sopenharmony_ci 119484543d1Sopenharmony_ci qos_interval_join(it); 120484543d1Sopenharmony_ci qos_interval_leave(it); 121484543d1Sopenharmony_ci 122484543d1Sopenharmony_ci qos_interval_end(it); 123484543d1Sopenharmony_ci qos_interval_destroy(it); 124484543d1Sopenharmony_ci} 125484543d1Sopenharmony_ci 126484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, sched_deadline_test, TestSize.Level1) 127484543d1Sopenharmony_ci{ 128484543d1Sopenharmony_ci CPUEUTask *ctx = ExecuteCtx::Cur()->task; 129484543d1Sopenharmony_ci TaskLoadTracking::Begin(ctx); 130484543d1Sopenharmony_ci TaskLoadTracking::End(ctx); 131484543d1Sopenharmony_ci 132484543d1Sopenharmony_ci uint64_t load = TaskLoadTracking::GetLoad(ctx); 133484543d1Sopenharmony_ci} 134484543d1Sopenharmony_ci 135