1 /*
2 * Copyright (c) 2022 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 <cstdio>
17 #include <unistd.h>
18 #include "gtest/gtest.h"
19 #include "qos.h"
20
21 namespace OHOS {
22 namespace QOS {
23 using namespace testing;
24 using namespace testing::ext;
25 using namespace OHOS::QOS;
26
27 class QosTest : public testing::Test {
28 public:
29 static void SetUpTestCase();
30 static void TearDownTestCase();
31 void SetUp();
32 void TearDown();
33 };
34
SetUpTestCase()35 void QosTest::SetUpTestCase()
36 {
37 }
38
TearDownTestCase()39 void QosTest::TearDownTestCase()
40 {
41 }
42
SetUp()43 void QosTest::SetUp()
44 {
45 }
46
TearDown()47 void QosTest::TearDown()
48 {
49 }
50
51 /**
52 * @tc.name: QosTest
53 * @tc.desc: Verify the Set and Reset QosLevel function.
54 * @tc.type: FUNC
55 */
56 HWTEST_F(QosTest, SetThreadQosTest1, TestSize.Level1)
57 {
58 int ret = SetThreadQos(QosLevel::QOS_USER_INITIATED);
59 EXPECT_EQ(ret, 0);
60 ret = SetThreadQos(QosLevel::QOS_DEFAULT);
61 EXPECT_EQ(ret, 0);
62 ret = SetThreadQos(QosLevel::QOS_UTILITY);
63 EXPECT_EQ(ret, 0);
64 ret = SetThreadQos(QosLevel::QOS_BACKGROUND);
65 EXPECT_EQ(ret, 0);
66 ret = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
67 EXPECT_EQ(ret, 0);
68 ret = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
69 EXPECT_EQ(ret, 0);
70 ret = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
71 EXPECT_EQ(ret, 0);
72 ret = SetThreadQos(QosLevel::QOS_MAX);
73 EXPECT_EQ(ret, -1);
74 ret = SetThreadQos(QosLevel(-1));
75 EXPECT_EQ(ret, -1);
76 ret = SetThreadQos(QosLevel(6));
77 EXPECT_EQ(ret, 0);
78 ret = SetThreadQos(QosLevel(1024));
79 EXPECT_EQ(ret, -1);
80 }
81
82 HWTEST_F(QosTest, SetThreadQosTest2, TestSize.Level1)
83 {
84 int ret = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
85 EXPECT_EQ(ret, 0);
86 ret = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
87 EXPECT_EQ(ret, 0);
88 ret = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
89 EXPECT_EQ(ret, 0);
90 ret = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
91 EXPECT_EQ(ret, 0);
92 ret = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
93 EXPECT_EQ(ret, 0);
94 ret = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
95 EXPECT_EQ(ret, 0);
96 ret = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
97 EXPECT_EQ(ret, 0);
98 ret = SetQosForOtherThread(QosLevel::QOS_MAX, gettid());
99 EXPECT_EQ(ret, -1);
100 ret = SetQosForOtherThread(QosLevel(-1), gettid());
101 EXPECT_EQ(ret, -1);
102 ret = SetQosForOtherThread(QosLevel(6), gettid());
103 EXPECT_EQ(ret, 0);
104 ret = SetQosForOtherThread(QosLevel(1024), gettid());
105 EXPECT_EQ(ret, -1);
106 }
107
108 HWTEST_F(QosTest, ResetThreadQosTest1, TestSize.Level1)
109 {
110 int ret = SetThreadQos(QosLevel::QOS_USER_INITIATED);
111 EXPECT_EQ(ret, 0);
112 ret = ResetThreadQos();
113 EXPECT_EQ(ret, 0);
114
115 ret = SetThreadQos(QosLevel::QOS_DEFAULT);
116 EXPECT_EQ(ret, 0);
117 ret = ResetThreadQos();
118 EXPECT_EQ(ret, 0);
119
120 ret = SetThreadQos(QosLevel::QOS_UTILITY);
121 EXPECT_EQ(ret, 0);
122 ret = ResetThreadQos();
123 EXPECT_EQ(ret, 0);
124
125 ret = SetThreadQos(QosLevel::QOS_BACKGROUND);
126 EXPECT_EQ(ret, 0);
127 ret = ResetThreadQos();
128 EXPECT_EQ(ret, 0);
129
130 ret = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
131 EXPECT_EQ(ret, 0);
132 ret = ResetThreadQos();
133 EXPECT_EQ(ret, 0);
134
135 ret = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
136 EXPECT_EQ(ret, 0);
137 ret = ResetThreadQos();
138 EXPECT_EQ(ret, 0);
139
140 ret = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
141 EXPECT_EQ(ret, 0);
142 ret = ResetThreadQos();
143 EXPECT_EQ(ret, 0);
144
145 ret = SetThreadQos(QosLevel::QOS_MAX);
146 EXPECT_EQ(ret, -1);
147 ret = ResetThreadQos();
148 EXPECT_EQ(ret, -1);
149
150 ret = SetThreadQos(QosLevel(6));
151 EXPECT_EQ(ret, 0);
152 ret = ResetThreadQos();
153 EXPECT_EQ(ret, 0);
154 }
155
156 HWTEST_F(QosTest, ResetThreadQosTest2, TestSize.Level1)
157 {
158 int ret = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
159 EXPECT_EQ(ret, 0);
160 ret = ResetQosForOtherThread(gettid());
161 EXPECT_EQ(ret, 0);
162
163 ret = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
164 EXPECT_EQ(ret, 0);
165 ret = ResetQosForOtherThread(gettid());
166 EXPECT_EQ(ret, 0);
167
168 ret = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
169 EXPECT_EQ(ret, 0);
170 ret = ResetQosForOtherThread(gettid());
171 EXPECT_EQ(ret, 0);
172
173 ret = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
174 EXPECT_EQ(ret, 0);
175 ret = ResetQosForOtherThread(gettid());
176 EXPECT_EQ(ret, 0);
177
178 ret = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
179 EXPECT_EQ(ret, 0);
180 ret = ResetQosForOtherThread(gettid());
181 EXPECT_EQ(ret, 0);
182
183 ret = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
184 EXPECT_EQ(ret, 0);
185 ret = ResetQosForOtherThread(gettid());
186 EXPECT_EQ(ret, 0);
187
188 ret = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
189 EXPECT_EQ(ret, 0);
190 ret = ResetQosForOtherThread(gettid());
191 EXPECT_EQ(ret, 0);
192
193 ret = SetQosForOtherThread(QosLevel::QOS_MAX, gettid());
194 EXPECT_EQ(ret, -1);
195 ret = ResetQosForOtherThread(gettid());
196 EXPECT_EQ(ret, -1);
197
198 ret = SetQosForOtherThread(QosLevel(6), gettid());
199 EXPECT_EQ(ret, 0);
200 ret = ResetQosForOtherThread(gettid());
201 EXPECT_EQ(ret, 0);
202 }
203
204 HWTEST_F(QosTest, GetThreadQosTest1, TestSize.Level1)
205 {
206 int ret = SetThreadQos(QosLevel::QOS_USER_INITIATED);
207 EXPECT_EQ(ret, 0);
208 enum QosLevel level;
209 ret = GetThreadQos(level);
210 EXPECT_EQ(ret, 0);
211 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INITIATED));
212
213 ret = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
214 EXPECT_EQ(ret, 0);
215 ret = GetThreadQos(level);
216 EXPECT_EQ(ret, 0);
217 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INTERACTIVE));
218
219 ret = SetThreadQos(QosLevel::QOS_DEFAULT);
220 EXPECT_EQ(ret, 0);
221 ret = GetThreadQos(level);
222 EXPECT_EQ(ret, 0);
223 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEFAULT));
224
225 ret = SetThreadQos(QosLevel::QOS_UTILITY);
226 EXPECT_EQ(ret, 0);
227 ret = GetThreadQos(level);
228 EXPECT_EQ(ret, 0);
229 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_UTILITY));
230
231 ret = SetThreadQos(QosLevel::QOS_BACKGROUND);
232 EXPECT_EQ(ret, 0);
233 ret = GetThreadQos(level);
234 EXPECT_EQ(ret, 0);
235 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_BACKGROUND));
236
237 ret = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
238 EXPECT_EQ(ret, 0);
239 ret = GetThreadQos(level);
240 EXPECT_EQ(ret, 0);
241 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEADLINE_REQUEST));
242
243 ret = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
244 EXPECT_EQ(ret, 0);
245 ret = GetThreadQos(level);
246 EXPECT_EQ(ret, 0);
247 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_KEY_BACKGROUND));
248 }
249
250 HWTEST_F(QosTest, GetThreadQosTest2, TestSize.Level1)
251 {
252 int ret = ResetThreadQos();
253 EXPECT_EQ(ret, 0);
254 enum QosLevel level;
255 ret = GetThreadQos(level);
256 EXPECT_EQ(ret, -1);
257
258 ret = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
259 EXPECT_EQ(ret, 0);
260 ret = GetQosForOtherThread(level, gettid());
261 EXPECT_EQ(ret, 0);
262 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INITIATED));
263
264 ret = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
265 EXPECT_EQ(ret, 0);
266 ret = GetQosForOtherThread(level, gettid());
267 EXPECT_EQ(ret, 0);
268 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INTERACTIVE));
269
270 ret = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
271 EXPECT_EQ(ret, 0);
272 ret = GetQosForOtherThread(level, gettid());
273 EXPECT_EQ(ret, 0);
274 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEFAULT));
275
276 ret = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
277 EXPECT_EQ(ret, 0);
278 ret = GetQosForOtherThread(level, gettid());
279 EXPECT_EQ(ret, 0);
280 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_UTILITY));
281
282 ret = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
283 EXPECT_EQ(ret, 0);
284 ret = GetQosForOtherThread(level, gettid());
285 EXPECT_EQ(ret, 0);
286 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_BACKGROUND));
287
288 ret = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
289 EXPECT_EQ(ret, 0);
290 ret = GetQosForOtherThread(level, gettid());
291 EXPECT_EQ(ret, 0);
292 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEADLINE_REQUEST));
293
294 ret = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
295 EXPECT_EQ(ret, 0);
296 ret = GetQosForOtherThread(level, gettid());
297 EXPECT_EQ(ret, 0);
298 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_KEY_BACKGROUND));
299 }
300 } // QOS
301 } // OHOS