1/*
2 * Copyright (c) 2023 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#include <thread>
18#include "c/deadline.h"
19#include "internal_inc/osal.h"
20#include "sched/interval.h"
21#include "dm/dependence_manager.h"
22#include "sched/frame_interval.h"
23#include "dfx/log/ffrt_log_api.h"
24#include "common.h"
25
26using namespace testing;
27#ifdef HWTEST_TESTING_EXT_ENABLE
28using namespace testing::ext;
29#endif
30using namespace ffrt;
31
32class DeadlineTest : public testing::Test {
33protected:
34    static void SetUpTestCase()
35    {
36    }
37
38    static void TearDownTestCase()
39    {
40    }
41
42    virtual void SetUp()
43    {
44    }
45
46    virtual void TearDown()
47    {
48    }
49};
50
51/**
52 * @tc.name: qos_interval_create_test
53 * @tc.desc: Test whether the qos_interval_create interface are normal.
54 * @tc.type: FUNC
55 */
56HWTEST_F(DeadlineTest, qos_interval_create_test, TestSize.Level1)
57{
58    uint64_t deadline_us = 50000;
59    qos qos = qos_deadline_request;
60
61    interval qi = qos_interval_create(deadline_us, qos);
62    EXPECT_NE(&qi, nullptr);
63
64    qos = qos_max + 1;
65    interval qi1 = qos_interval_create(deadline_us, qos);
66    EXPECT_NE(&qi1, nullptr);
67}
68
69/**
70 * @tc.name: qos_interval_destroy_test
71 * @tc.desc: Test whether the qos_interval_destroy interface are normal.
72 * @tc.type: FUNC
73 */
74HWTEST_F(DeadlineTest, qos_interval_destroy_test, TestSize.Level1)
75{
76    interval* qi = new interval();
77    qos_interval_destroy(*qi);
78
79    uint64_t deadline_us = 50000;
80    qos qos = qos_max + 1;
81
82    interval qi1 = qos_interval_create(deadline_us, qos);
83    qos_interval_destroy(qi1);
84}
85
86/**
87 * @tc.name: qos_interval_begin_test
88 * @tc.desc: Test whether the qos_interval_begin interface are normal.
89 * @tc.type: FUNC
90 */
91HWTEST_F(DeadlineTest, qos_interval_begin_test, TestSize.Level1)
92{
93    interval* qi = new interval();
94    qos_interval_begin(*qi);
95
96    uint64_t deadline_us = 50000;
97    qos qos = qos_max + 1;
98
99    interval qi1 = qos_interval_create(deadline_us, qos);
100    qos_interval_begin(qi1);
101}
102
103/**
104 * @tc.name: qos_interval_update_test
105 * @tc.desc: Test whether the qos_interval_update interface are normal.
106 * @tc.type: FUNC
107 */
108HWTEST_F(DeadlineTest, qos_interval_update_test, TestSize.Level1)
109{
110    uint64_t deadline_us = 50000;
111    qos qos = qos_max + 1;
112    uint64_t new_deadline_us = 40000;
113    interval* qi = new interval();
114    qos_interval_update(*qi, new_deadline_us);
115
116    interval qi1 = qos_interval_create(deadline_us, qos);
117    qos_interval_update(qi1, new_deadline_us);
118}
119
120/**
121 * @tc.name: qos_interval_end_test
122 * @tc.desc: Test whether the qos_interval_end interface are normal.
123 * @tc.type: FUNC
124 */
125HWTEST_F(DeadlineTest, qos_interval_end_test, TestSize.Level1)
126{
127    uint64_t deadline_us = 50000;
128    qos qos = qos_max + 1;
129    interval* qi = new interval();
130    qos_interval_end(*qi);
131
132    interval qi1 = qos_interval_create(deadline_us, qos);
133    qos_interval_end(qi1);
134}
135
136/**
137 * @tc.name: qos_interval_join_test
138 * @tc.desc: Test whether the qos_interval_join interface are normal.
139 * @tc.type: FUNC
140 */
141HWTEST_F(DeadlineTest, qos_interval_join_test, TestSize.Level1)
142{
143    uint64_t deadline_us = 50000;
144    qos qos = qos_deadline_request;
145    interval ret = qos_interval_create(deadline_us, qos);
146    qos_interval_join(ret);
147
148    qos = qos_max + 1;
149    interval ret1 = qos_interval_create(deadline_us, qos);
150    qos_interval_join(ret1);
151}
152
153/**
154 * @tc.name: qos_interval_leave_test
155 * @tc.desc: Test whether the qos_interval_leave interface are normal.
156 * @tc.type: FUNC
157 */
158HWTEST_F(DeadlineTest, qos_interval_leave_test, TestSize.Level1)
159{
160    uint64_t deadline_us = 50000;
161    qos qos = qos_deadline_request;
162    interval ret = qos_interval_create(deadline_us, qos);
163    qos_interval_leave(ret);
164
165    qos = qos_max + 1;
166    interval ret1 = qos_interval_create(deadline_us, qos);
167    qos_interval_leave(ret1);
168}
169