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: SetThreadQosTest
53 * @tc.desc: Verify the Set QosLevel function.
54 * @tc.type: FUNC
55 */
56 HWTEST_F(QosTest, SetThreadQosTest0, TestSize.Level0)
57 {
58 int val = SetThreadQos(QosLevel::QOS_BACKGROUND);
59 EXPECT_EQ(val, 0);
60 }
61
62 HWTEST_F(QosTest, SetThreadQosTest1, TestSize.Level0)
63 {
64 int val = SetThreadQos(QosLevel::QOS_UTILITY);
65 EXPECT_EQ(val, 0);
66 }
67
68 HWTEST_F(QosTest, SetThreadQosTest2, TestSize.Level0)
69 {
70 int val = SetThreadQos(QosLevel::QOS_DEFAULT);
71 EXPECT_EQ(val, 0);
72 }
73
74 HWTEST_F(QosTest, SetThreadQosTest3, TestSize.Level0)
75 {
76 int val = SetThreadQos(QosLevel::QOS_USER_INITIATED);
77 EXPECT_EQ(val, 0);
78 }
79
80 HWTEST_F(QosTest, SetThreadQosTest4, TestSize.Level0)
81 {
82 int val = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
83 EXPECT_EQ(val, 0);
84 }
85
86 HWTEST_F(QosTest, SetThreadQosTest5, TestSize.Level0)
87 {
88 int val = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
89 EXPECT_EQ(val, 0);
90 }
91
92 HWTEST_F(QosTest, SetThreadQosTest6, TestSize.Level1)
93 {
94 int val = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
95 EXPECT_EQ(val, 0);
96 }
97
98 HWTEST_F(QosTest, SetThreadQosTest7, TestSize.Level1)
99 {
100 int val = SetThreadQos(QosLevel::QOS_MAX);
101 EXPECT_EQ(val, -1);
102 }
103
104 HWTEST_F(QosTest, SetThreadQosTestExt, TestSize.Level1)
105 {
106 int val = SetThreadQos(QosLevel(-1));
107 EXPECT_EQ(val, -1);
108 val = SetThreadQos(QosLevel(6));
109 EXPECT_EQ(val, 0);
110 val = SetThreadQos(QosLevel(1024));
111 EXPECT_EQ(val, -1);
112 }
113
114 /**
115 * @tc.name: SetQosForOtherThreadTest
116 * @tc.desc: Verify the Set QosLevel For Other function.
117 * @tc.type: FUNC
118 */
119 HWTEST_F(QosTest, SetQosForOtherThreadTest0, TestSize.Level0)
120 {
121 int val = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
122 EXPECT_EQ(val, 0);
123 }
124
125 HWTEST_F(QosTest, SetQosForOtherThreadTest1, TestSize.Level0)
126 {
127 int val = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
128 EXPECT_EQ(val, 0);
129 }
130
131 HWTEST_F(QosTest, SetQosForOtherThreadTest2, TestSize.Level0)
132 {
133 int val = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
134 EXPECT_EQ(val, 0);
135 }
136
137 HWTEST_F(QosTest, SetQosForOtherThreadTest3, TestSize.Level0)
138 {
139 int val = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
140 EXPECT_EQ(val, 0);
141 }
142
143 HWTEST_F(QosTest, SetQosForOtherThreadTest4, TestSize.Level0)
144 {
145 int val = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
146 EXPECT_EQ(val, 0);
147 }
148
149 HWTEST_F(QosTest, SetQosForOtherThreadTest5, TestSize.Level0)
150 {
151 int val = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
152 EXPECT_EQ(val, 0);
153 }
154
155 HWTEST_F(QosTest, SetQosForOtherThreadTest6, TestSize.Level1)
156 {
157 int val = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
158 EXPECT_EQ(val, 0);
159 }
160
161 HWTEST_F(QosTest, SetQosForOtherThreadTest7, TestSize.Level1)
162 {
163 int val = SetQosForOtherThread(QosLevel::QOS_MAX, gettid());
164 EXPECT_EQ(val, -1);
165 }
166
167 HWTEST_F(QosTest, SetQosForOtherThreadTestExt, TestSize.Level1)
168 {
169 int val = SetQosForOtherThread(QosLevel(-1), gettid());
170 EXPECT_EQ(val, -1);
171 val = SetQosForOtherThread(QosLevel(6), gettid());
172 EXPECT_EQ(val, 0);
173 val = SetQosForOtherThread(QosLevel(1024), gettid());
174 EXPECT_EQ(val, -1);
175 }
176
177 /**
178 * @tc.name: ResetThreadQosTest
179 * @tc.desc: Verify the Reset QosLevel function.
180 * @tc.type: FUNC
181 */
182 HWTEST_F(QosTest, ResetThreadQosTest0, TestSize.Level0)
183 {
184 int val = SetThreadQos(QosLevel::QOS_BACKGROUND);
185 EXPECT_EQ(val, 0);
186 val = ResetThreadQos();
187 EXPECT_EQ(val, 0);
188 }
189
190 HWTEST_F(QosTest, ResetThreadQosTest1, TestSize.Level0)
191 {
192 int val = SetThreadQos(QosLevel::QOS_UTILITY);
193 EXPECT_EQ(val, 0);
194 val = ResetThreadQos();
195 EXPECT_EQ(val, 0);
196 }
197
198 HWTEST_F(QosTest, ResetThreadQosTest2, TestSize.Level0)
199 {
200 int val = SetThreadQos(QosLevel::QOS_DEFAULT);
201 EXPECT_EQ(val, 0);
202 val = ResetThreadQos();
203 EXPECT_EQ(val, 0);
204 }
205
206 HWTEST_F(QosTest, ResetThreadQosTest3, TestSize.Level0)
207 {
208 int val = SetThreadQos(QosLevel::QOS_USER_INITIATED);
209 EXPECT_EQ(val, 0);
210 val = ResetThreadQos();
211 EXPECT_EQ(val, 0);
212 }
213
214 HWTEST_F(QosTest, ResetThreadQosTest4, TestSize.Level0)
215 {
216 int val = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
217 EXPECT_EQ(val, 0);
218 val = ResetThreadQos();
219 EXPECT_EQ(val, 0);
220 }
221
222 HWTEST_F(QosTest, ResetThreadQosTest5, TestSize.Level0)
223 {
224 int val = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
225 EXPECT_EQ(val, 0);
226 val = ResetThreadQos();
227 EXPECT_EQ(val, 0);
228 }
229
230 HWTEST_F(QosTest, ResetThreadQosTest6, TestSize.Level1)
231 {
232 int val = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
233 EXPECT_EQ(val, 0);
234 val = ResetThreadQos();
235 EXPECT_EQ(val, 0);
236 }
237
238 HWTEST_F(QosTest, ResetThreadQosTest7, TestSize.Level1)
239 {
240 int val = SetThreadQos(QosLevel::QOS_MAX);
241 EXPECT_EQ(val, -1);
242 val = ResetThreadQos();
243 EXPECT_EQ(val, -1);
244 }
245
246 HWTEST_F(QosTest, ResetThreadQosTestExt, TestSize.Level1)
247 {
248 int val = SetThreadQos(QosLevel(6));
249 EXPECT_EQ(val, 0);
250 val = ResetThreadQos();
251 EXPECT_EQ(val, 0);
252
253 val = SetThreadQos(QosLevel(-1));
254 EXPECT_EQ(val, -1);
255 val = ResetThreadQos();
256 EXPECT_EQ(val, -1);
257
258 val = SetThreadQos(QosLevel(1024));
259 EXPECT_EQ(val, -1);
260 val = ResetThreadQos();
261 EXPECT_EQ(val, -1);
262 }
263
264 /**
265 * @tc.name: ResetQosForOtherThreadTest
266 * @tc.desc: Verify the Reset QosLevel For Other function.
267 * @tc.type: FUNC
268 */
269 HWTEST_F(QosTest, ResetQosForOtherThreadTest0, TestSize.Level1)
270 {
271 int val = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
272 EXPECT_EQ(val, 0);
273 val = ResetQosForOtherThread(gettid());
274 EXPECT_EQ(val, 0);
275 }
276
277 HWTEST_F(QosTest, ResetQosForOtherThreadTest1, TestSize.Level1)
278 {
279 int val = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
280 EXPECT_EQ(val, 0);
281 val = ResetQosForOtherThread(gettid());
282 EXPECT_EQ(val, 0);
283 }
284
285 HWTEST_F(QosTest, ResetQosForOtherThreadTest2, TestSize.Level1)
286 {
287 int val = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
288 EXPECT_EQ(val, 0);
289 val = ResetQosForOtherThread(gettid());
290 EXPECT_EQ(val, 0);
291 }
292
293 HWTEST_F(QosTest, ResetQosForOtherThreadTest3, TestSize.Level1)
294 {
295 int val = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
296 EXPECT_EQ(val, 0);
297 val = ResetQosForOtherThread(gettid());
298 EXPECT_EQ(val, 0);
299 }
300
301 HWTEST_F(QosTest, ResetQosForOtherThreadTest4, TestSize.Level1)
302 {
303 int val = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
304 EXPECT_EQ(val, 0);
305 val = ResetQosForOtherThread(gettid());
306 EXPECT_EQ(val, 0);
307 }
308
309 HWTEST_F(QosTest, ResetQosForOtherThreadTest5, TestSize.Level1)
310 {
311 int val = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
312 EXPECT_EQ(val, 0);
313 val = ResetQosForOtherThread(gettid());
314 EXPECT_EQ(val, 0);
315 }
316
317 HWTEST_F(QosTest, ResetQosForOtherThreadTest6, TestSize.Level0)
318 {
319 int val = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
320 EXPECT_EQ(val, 0);
321 val = ResetQosForOtherThread(gettid());
322 EXPECT_EQ(val, 0);
323 }
324
325 HWTEST_F(QosTest, ResetQosForOtherThreadTest7, TestSize.Level0)
326 {
327 int val = SetQosForOtherThread(QosLevel::QOS_MAX, gettid());
328 EXPECT_EQ(val, -1);
329 val = ResetQosForOtherThread(gettid());
330 EXPECT_EQ(val, -1);
331 }
332
333 HWTEST_F(QosTest, ResetQosForOtherThreadTestExt, TestSize.Level0)
334 {
335 int val = SetQosForOtherThread(QosLevel(6), gettid());
336 EXPECT_EQ(val, 0);
337 val = ResetQosForOtherThread(gettid());
338 EXPECT_EQ(val, 0);
339
340 val = SetQosForOtherThread(QosLevel(-1), gettid());
341 EXPECT_EQ(val, -1);
342 val = ResetQosForOtherThread(gettid());
343 EXPECT_EQ(val, -1);
344
345 val = SetQosForOtherThread(QosLevel(1024), gettid());
346 EXPECT_EQ(val, -1);
347 val = ResetQosForOtherThread(gettid());
348 EXPECT_EQ(val, -1);
349 }
350
351 /**
352 * @tc.name: GetThreadQosTest
353 * @tc.desc: Verify the Get QosLevel function.
354 * @tc.type: FUNC
355 */
356 HWTEST_F(QosTest, GetThreadQosTest0, TestSize.Level1)
357 {
358 int val = SetThreadQos(QosLevel::QOS_BACKGROUND);
359 EXPECT_EQ(val, 0);
360 enum QosLevel level;
361 val = GetThreadQos(level);
362 EXPECT_EQ(val, 0);
363 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_BACKGROUND));
364 }
365
366 HWTEST_F(QosTest, GetThreadQosTest1, TestSize.Level1)
367 {
368 int val = SetThreadQos(QosLevel::QOS_UTILITY);
369 EXPECT_EQ(val, 0);
370 enum QosLevel level;
371 val = GetThreadQos(level);
372 EXPECT_EQ(val, 0);
373 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_UTILITY));
374 }
375
376 HWTEST_F(QosTest, GetThreadQosTest2, TestSize.Level1)
377 {
378 int val = SetThreadQos(QosLevel::QOS_DEFAULT);
379 EXPECT_EQ(val, 0);
380 enum QosLevel level;
381 val = GetThreadQos(level);
382 EXPECT_EQ(val, 0);
383 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEFAULT));
384 }
385
386 HWTEST_F(QosTest, GetThreadQosTest3, TestSize.Level1)
387 {
388 int val = SetThreadQos(QosLevel::QOS_USER_INITIATED);
389 EXPECT_EQ(val, 0);
390 enum QosLevel level;
391 val = GetThreadQos(level);
392 EXPECT_EQ(val, 0);
393 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INITIATED));
394 }
395
396 HWTEST_F(QosTest, GetThreadQosTest4, TestSize.Level1)
397 {
398 int val = SetThreadQos(QosLevel::QOS_DEADLINE_REQUEST);
399 EXPECT_EQ(val, 0);
400 enum QosLevel level;
401 val = GetThreadQos(level);
402 EXPECT_EQ(val, 0);
403 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEADLINE_REQUEST));
404 }
405
406 HWTEST_F(QosTest, GetThreadQosTest5, TestSize.Level1)
407 {
408 int val = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
409 EXPECT_EQ(val, 0);
410 enum QosLevel level;
411 val = GetThreadQos(level);
412 EXPECT_EQ(val, 0);
413 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INTERACTIVE));
414 }
415
416 HWTEST_F(QosTest, GetThreadQosTest6, TestSize.Level1)
417 {
418 int val = SetThreadQos(QosLevel::QOS_KEY_BACKGROUND);
419 EXPECT_EQ(val, 0);
420 enum QosLevel level;
421 val = GetThreadQos(level);
422 EXPECT_EQ(val, 0);
423 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_KEY_BACKGROUND));
424 }
425
426 HWTEST_F(QosTest, GetThreadQosTestExt, TestSize.Level1)
427 {
428 int val = SetThreadQos(QosLevel::QOS_MAX);
429 EXPECT_NE(val, 0);
430 enum QosLevel level2;
431 val = GetThreadQos(level2);
432 EXPECT_EQ(val, 0);
433 EXPECT_NE(static_cast<unsigned int>(level2), static_cast<unsigned int>(QosLevel::QOS_MAX));
434
435 val = SetThreadQos((QosLevel)-1);
436 EXPECT_NE(val, 0);
437 enum QosLevel level3;
438 val = GetThreadQos(level3);
439 EXPECT_EQ(val, 0);
440 EXPECT_NE(static_cast<unsigned int>(level3), static_cast<unsigned int>((QosLevel)-1));
441
442 val = SetThreadQos((QosLevel)1024);
443 EXPECT_NE(val, 0);
444 enum QosLevel level4;
445 val = GetThreadQos(level4);
446 EXPECT_EQ(val, 0);
447 EXPECT_NE(static_cast<unsigned int>(level4), static_cast<unsigned int>((QosLevel)1024));
448 }
449
450 /**
451 * @tc.name: GetQosForOtherThread
452 * @tc.desc: Verify the Get QosLevel For Other function.
453 * @tc.type: FUNC
454 */
455 HWTEST_F(QosTest, GetQosForOtherThreadTest0, TestSize.Level1)
456 {
457 int val = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
458 EXPECT_EQ(val, 0);
459 enum QosLevel level;
460 val = GetQosForOtherThread(level, gettid());
461 EXPECT_EQ(val, 0);
462 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_BACKGROUND));
463 }
464
465 HWTEST_F(QosTest, GetQosForOtherThreadTest1, TestSize.Level1)
466 {
467 int val = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
468 EXPECT_EQ(val, 0);
469 enum QosLevel level;
470 val = GetQosForOtherThread(level, gettid());
471 EXPECT_EQ(val, 0);
472 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_UTILITY));
473 }
474
475 HWTEST_F(QosTest, GetQosForOtherThreadTest2, TestSize.Level1)
476 {
477 int val = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
478 EXPECT_EQ(val, 0);
479 enum QosLevel level;
480 val = GetQosForOtherThread(level, gettid());
481 EXPECT_EQ(val, 0);
482 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEFAULT));
483 }
484
485 HWTEST_F(QosTest, GetQosForOtherThreadTest3, TestSize.Level1)
486 {
487 int val = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
488 EXPECT_EQ(val, 0);
489 enum QosLevel level;
490 val = GetQosForOtherThread(level, gettid());
491 EXPECT_EQ(val, 0);
492 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INITIATED));
493 }
494
495 HWTEST_F(QosTest, GetQosForOtherThreadTest4, TestSize.Level1)
496 {
497 int val = SetQosForOtherThread(QosLevel::QOS_DEADLINE_REQUEST, gettid());
498 EXPECT_EQ(val, 0);
499 enum QosLevel level;
500 val = GetQosForOtherThread(level, gettid());
501 EXPECT_EQ(val, 0);
502 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_DEADLINE_REQUEST));
503 }
504
505 HWTEST_F(QosTest, GetQosForOtherThreadTest5, TestSize.Level1)
506 {
507 int val = SetQosForOtherThread(QosLevel::QOS_USER_INTERACTIVE, gettid());
508 EXPECT_EQ(val, 0);
509 enum QosLevel level;
510 val = GetQosForOtherThread(level, gettid());
511 EXPECT_EQ(val, 0);
512 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INTERACTIVE));
513 }
514
515 HWTEST_F(QosTest, GetQosForOtherThreadTest6, TestSize.Level1)
516 {
517 int val = SetQosForOtherThread(QosLevel::QOS_KEY_BACKGROUND, gettid());
518 EXPECT_EQ(val, 0);
519 enum QosLevel level;
520 val = GetQosForOtherThread(level, gettid());
521 EXPECT_EQ(val, 0);
522 EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_KEY_BACKGROUND));
523 }
524
525 HWTEST_F(QosTest, GetQosForOtherThreadTestExt, TestSize.Level1)
526 {
527 int val = ResetThreadQos();
528 EXPECT_EQ(val, 0);
529 enum QosLevel level;
530 val = GetThreadQos(level);
531 EXPECT_EQ(val, -1);
532 }
533 } // QOS
534 } // OHOS