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