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 }
77 
78 HWTEST_F(QosTest, SetThreadQosTest2, TestSize.Level1)
79 {
80     int ret = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
81     EXPECT_EQ(ret, 0);
82     ret = SetQosForOtherThread(QosLevel::QOS_DEFAULT, gettid());
83     EXPECT_EQ(ret, 0);
84     ret = SetQosForOtherThread(QosLevel::QOS_UTILITY, gettid());
85     EXPECT_EQ(ret, 0);
86     ret = SetQosForOtherThread(QosLevel::QOS_BACKGROUND, gettid());
87     EXPECT_EQ(ret, 0);
88 }
89 
90 HWTEST_F(QosTest, ResetThreadQosTest1, TestSize.Level1)
91 {
92     int ret = SetThreadQos(QosLevel::QOS_USER_INITIATED);
93     EXPECT_EQ(ret, 0);
94     ret = ResetThreadQos();
95     EXPECT_EQ(ret, 0);
96 }
97 
98 HWTEST_F(QosTest, ResetThreadQosTest2, TestSize.Level1)
99 {
100     int ret = SetQosForOtherThread(QosLevel::QOS_USER_INITIATED, gettid());
101     EXPECT_EQ(ret, 0);
102     ret = ResetQosForOtherThread(gettid());
103     EXPECT_EQ(ret, 0);
104 }
105 
106 HWTEST_F(QosTest, GetThreadQosTest1, TestSize.Level1)
107 {
108     int ret = SetThreadQos(QosLevel::QOS_USER_INITIATED);
109     EXPECT_EQ(ret, 0);
110     enum QosLevel level;
111     ret = GetThreadQos(level);
112     EXPECT_EQ(ret, 0);
113     EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INITIATED));
114     ret = SetThreadQos(QosLevel::QOS_USER_INTERACTIVE);
115     EXPECT_EQ(ret, 0);
116     ret = GetThreadQos(level);
117     EXPECT_EQ(ret, 0);
118     EXPECT_EQ(static_cast<unsigned int>(level), static_cast<unsigned int>(QosLevel::QOS_USER_INTERACTIVE));
119 }
120 
121 HWTEST_F(QosTest, GetThreadQosTest2, TestSize.Level1)
122 {
123     int ret = ResetThreadQos();
124     EXPECT_EQ(ret, 0);
125     enum QosLevel level;
126     ret = GetThreadQos(level);
127     EXPECT_EQ(ret, -1);
128 }
129 } // QOS
130 } // OHOS