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 "internal_inc/osal.h" 20484543d1Sopenharmony_ci#include "sched/interval.h" 21484543d1Sopenharmony_ci#include "dm/dependence_manager.h" 22484543d1Sopenharmony_ci#include "sched/frame_interval.h" 23484543d1Sopenharmony_ci#include "dfx/log/ffrt_log_api.h" 24484543d1Sopenharmony_ci#include "common.h" 25484543d1Sopenharmony_ci 26484543d1Sopenharmony_ciusing namespace testing; 27484543d1Sopenharmony_ci#ifdef HWTEST_TESTING_EXT_ENABLE 28484543d1Sopenharmony_ciusing namespace testing::ext; 29484543d1Sopenharmony_ci#endif 30484543d1Sopenharmony_ciusing namespace ffrt; 31484543d1Sopenharmony_ci 32484543d1Sopenharmony_ciclass DeadlineTest : public testing::Test { 33484543d1Sopenharmony_ciprotected: 34484543d1Sopenharmony_ci static void SetUpTestCase() 35484543d1Sopenharmony_ci { 36484543d1Sopenharmony_ci } 37484543d1Sopenharmony_ci 38484543d1Sopenharmony_ci static void TearDownTestCase() 39484543d1Sopenharmony_ci { 40484543d1Sopenharmony_ci } 41484543d1Sopenharmony_ci 42484543d1Sopenharmony_ci virtual void SetUp() 43484543d1Sopenharmony_ci { 44484543d1Sopenharmony_ci } 45484543d1Sopenharmony_ci 46484543d1Sopenharmony_ci virtual void TearDown() 47484543d1Sopenharmony_ci { 48484543d1Sopenharmony_ci } 49484543d1Sopenharmony_ci}; 50484543d1Sopenharmony_ci 51484543d1Sopenharmony_ci/** 52484543d1Sopenharmony_ci * @tc.name: qos_interval_create_test 53484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_create interface are normal. 54484543d1Sopenharmony_ci * @tc.type: FUNC 55484543d1Sopenharmony_ci */ 56484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_create_test, TestSize.Level1) 57484543d1Sopenharmony_ci{ 58484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 59484543d1Sopenharmony_ci qos qos = qos_deadline_request; 60484543d1Sopenharmony_ci 61484543d1Sopenharmony_ci interval qi = qos_interval_create(deadline_us, qos); 62484543d1Sopenharmony_ci EXPECT_NE(&qi, nullptr); 63484543d1Sopenharmony_ci 64484543d1Sopenharmony_ci qos = qos_max + 1; 65484543d1Sopenharmony_ci interval qi1 = qos_interval_create(deadline_us, qos); 66484543d1Sopenharmony_ci EXPECT_NE(&qi1, nullptr); 67484543d1Sopenharmony_ci} 68484543d1Sopenharmony_ci 69484543d1Sopenharmony_ci/** 70484543d1Sopenharmony_ci * @tc.name: qos_interval_destroy_test 71484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_destroy interface are normal. 72484543d1Sopenharmony_ci * @tc.type: FUNC 73484543d1Sopenharmony_ci */ 74484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_destroy_test, TestSize.Level1) 75484543d1Sopenharmony_ci{ 76484543d1Sopenharmony_ci interval* qi = new interval(); 77484543d1Sopenharmony_ci qos_interval_destroy(*qi); 78484543d1Sopenharmony_ci 79484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 80484543d1Sopenharmony_ci qos qos = qos_max + 1; 81484543d1Sopenharmony_ci 82484543d1Sopenharmony_ci interval qi1 = qos_interval_create(deadline_us, qos); 83484543d1Sopenharmony_ci qos_interval_destroy(qi1); 84484543d1Sopenharmony_ci} 85484543d1Sopenharmony_ci 86484543d1Sopenharmony_ci/** 87484543d1Sopenharmony_ci * @tc.name: qos_interval_begin_test 88484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_begin interface are normal. 89484543d1Sopenharmony_ci * @tc.type: FUNC 90484543d1Sopenharmony_ci */ 91484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_begin_test, TestSize.Level1) 92484543d1Sopenharmony_ci{ 93484543d1Sopenharmony_ci interval* qi = new interval(); 94484543d1Sopenharmony_ci qos_interval_begin(*qi); 95484543d1Sopenharmony_ci 96484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 97484543d1Sopenharmony_ci qos qos = qos_max + 1; 98484543d1Sopenharmony_ci 99484543d1Sopenharmony_ci interval qi1 = qos_interval_create(deadline_us, qos); 100484543d1Sopenharmony_ci qos_interval_begin(qi1); 101484543d1Sopenharmony_ci} 102484543d1Sopenharmony_ci 103484543d1Sopenharmony_ci/** 104484543d1Sopenharmony_ci * @tc.name: qos_interval_update_test 105484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_update interface are normal. 106484543d1Sopenharmony_ci * @tc.type: FUNC 107484543d1Sopenharmony_ci */ 108484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_update_test, TestSize.Level1) 109484543d1Sopenharmony_ci{ 110484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 111484543d1Sopenharmony_ci qos qos = qos_max + 1; 112484543d1Sopenharmony_ci uint64_t new_deadline_us = 40000; 113484543d1Sopenharmony_ci interval* qi = new interval(); 114484543d1Sopenharmony_ci qos_interval_update(*qi, new_deadline_us); 115484543d1Sopenharmony_ci 116484543d1Sopenharmony_ci interval qi1 = qos_interval_create(deadline_us, qos); 117484543d1Sopenharmony_ci qos_interval_update(qi1, new_deadline_us); 118484543d1Sopenharmony_ci} 119484543d1Sopenharmony_ci 120484543d1Sopenharmony_ci/** 121484543d1Sopenharmony_ci * @tc.name: qos_interval_end_test 122484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_end interface are normal. 123484543d1Sopenharmony_ci * @tc.type: FUNC 124484543d1Sopenharmony_ci */ 125484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_end_test, TestSize.Level1) 126484543d1Sopenharmony_ci{ 127484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 128484543d1Sopenharmony_ci qos qos = qos_max + 1; 129484543d1Sopenharmony_ci interval* qi = new interval(); 130484543d1Sopenharmony_ci qos_interval_end(*qi); 131484543d1Sopenharmony_ci 132484543d1Sopenharmony_ci interval qi1 = qos_interval_create(deadline_us, qos); 133484543d1Sopenharmony_ci qos_interval_end(qi1); 134484543d1Sopenharmony_ci} 135484543d1Sopenharmony_ci 136484543d1Sopenharmony_ci/** 137484543d1Sopenharmony_ci * @tc.name: qos_interval_join_test 138484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_join interface are normal. 139484543d1Sopenharmony_ci * @tc.type: FUNC 140484543d1Sopenharmony_ci */ 141484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_join_test, TestSize.Level1) 142484543d1Sopenharmony_ci{ 143484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 144484543d1Sopenharmony_ci qos qos = qos_deadline_request; 145484543d1Sopenharmony_ci interval ret = qos_interval_create(deadline_us, qos); 146484543d1Sopenharmony_ci qos_interval_join(ret); 147484543d1Sopenharmony_ci 148484543d1Sopenharmony_ci qos = qos_max + 1; 149484543d1Sopenharmony_ci interval ret1 = qos_interval_create(deadline_us, qos); 150484543d1Sopenharmony_ci qos_interval_join(ret1); 151484543d1Sopenharmony_ci} 152484543d1Sopenharmony_ci 153484543d1Sopenharmony_ci/** 154484543d1Sopenharmony_ci * @tc.name: qos_interval_leave_test 155484543d1Sopenharmony_ci * @tc.desc: Test whether the qos_interval_leave interface are normal. 156484543d1Sopenharmony_ci * @tc.type: FUNC 157484543d1Sopenharmony_ci */ 158484543d1Sopenharmony_ciHWTEST_F(DeadlineTest, qos_interval_leave_test, TestSize.Level1) 159484543d1Sopenharmony_ci{ 160484543d1Sopenharmony_ci uint64_t deadline_us = 50000; 161484543d1Sopenharmony_ci qos qos = qos_deadline_request; 162484543d1Sopenharmony_ci interval ret = qos_interval_create(deadline_us, qos); 163484543d1Sopenharmony_ci qos_interval_leave(ret); 164484543d1Sopenharmony_ci 165484543d1Sopenharmony_ci qos = qos_max + 1; 166484543d1Sopenharmony_ci interval ret1 = qos_interval_create(deadline_us, qos); 167484543d1Sopenharmony_ci qos_interval_leave(ret1); 168484543d1Sopenharmony_ci} 169