• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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