1/*
2 * Copyright (c) 2021 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
18#include "qos.h"
19
20
21using namespace std;
22using namespace testing::ext;
23class QoSTestSuite : public testing::Test {
24protected:
25    // Preset action of the test suite, which is executed before the first test case
26    static void SetUpTestCase(void) {
27    }
28    // Test suite cleanup action, which is executed after the last test case
29    static void TearDownTestCase(void) {
30    }
31    // Preset action of the test case
32    virtual void SetUp()
33    {
34    }
35    // Cleanup action of the test case
36    virtual void TearDown()
37    {
38    }
39};
40
41/**
42 * @tc.name: SetThreadQoSNdkTest
43 * @tc.desc: Verify the Set QoSLevel function.
44 * @tc.type: FUNC
45 */
46HWTEST_F(QoSTestSuite, SetThreadQoSNdkTest, Function | MediumTest | Level1)
47{
48    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
49    EXPECT_EQ(ret, 0);
50    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
51    EXPECT_EQ(ret, 0);
52    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
53    EXPECT_EQ(ret, 0);
54    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
55    EXPECT_EQ(ret, 0);
56    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
57    EXPECT_EQ(ret, 0);
58    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
59    EXPECT_EQ(ret, 0);
60    ret = OH_QoS_SetThreadQoS(QoS_Level(-1));
61    EXPECT_EQ(ret, -1);
62    ret = OH_QoS_SetThreadQoS(QoS_Level(6));
63    EXPECT_EQ(ret, -1);
64    ret = OH_QoS_SetThreadQoS(QoS_Level(1024));
65    EXPECT_EQ(ret, -1);
66}
67
68/**
69 * @tc.name: ResetThreadQoSNdkTest
70 * @tc.desc: Verify the Reset QoSLevel function.
71 * @tc.type: FUNC
72 */
73HWTEST_F(QoSTestSuite, ResetThreadQoSNdkTest, Function | MediumTest | Level1)
74{
75    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
76    EXPECT_EQ(ret, 0);
77    ret = OH_QoS_ResetThreadQoS();
78    EXPECT_EQ(ret, 0);
79
80    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
81    EXPECT_EQ(ret, 0);
82    ret =  OH_QoS_ResetThreadQoS();
83    EXPECT_EQ(ret, 0);
84
85    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
86    EXPECT_EQ(ret, 0);
87    ret =  OH_QoS_ResetThreadQoS();
88    EXPECT_EQ(ret, 0);
89
90    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
91    EXPECT_EQ(ret, 0);
92    ret =  OH_QoS_ResetThreadQoS();
93    EXPECT_EQ(ret, 0);
94
95    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
96    EXPECT_EQ(ret, 0);
97    ret =  OH_QoS_ResetThreadQoS();
98    EXPECT_EQ(ret, 0);
99
100    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
101    EXPECT_EQ(ret, 0);
102    ret = OH_QoS_ResetThreadQoS();
103    EXPECT_EQ(ret, 0);
104}
105
106/**
107 * @tc.name: GetThreadQoSNdkTest
108 * @tc.desc: Verify the Get QoSLevel function.
109 * @tc.type: FUNC
110 */
111HWTEST_F(QoSTestSuite, GetThreadQoSNdkTest, Function | MediumTest | Level1)
112{
113    int ret = OH_QoS_GetThreadQoS(nullptr);
114    EXPECT_EQ(ret, -1);
115
116    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
117    EXPECT_EQ(ret, 0);
118    enum QoS_Level level;
119    ret = OH_QoS_GetThreadQoS(&level);
120    EXPECT_EQ(ret, 0);
121    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
122
123    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
124    EXPECT_EQ(ret, 0);
125    ret = OH_QoS_GetThreadQoS(&level);
126    EXPECT_EQ(ret, 0);
127    EXPECT_EQ(level, QoS_Level::QOS_UTILITY);
128
129    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
130    EXPECT_EQ(ret, 0);
131    ret = OH_QoS_GetThreadQoS(&level);
132    EXPECT_EQ(ret, 0);
133    EXPECT_EQ(level, QoS_Level::QOS_DEFAULT);
134
135    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
136    EXPECT_EQ(ret, 0);
137    ret = OH_QoS_GetThreadQoS(&level);
138    EXPECT_EQ(ret, 0);
139    EXPECT_EQ(level, QoS_Level::QOS_USER_INITIATED);
140
141    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
142    EXPECT_EQ(ret, 0);
143    ret = OH_QoS_GetThreadQoS(&level);
144    EXPECT_EQ(ret, 0);
145    EXPECT_EQ(level, QoS_Level::QOS_DEADLINE_REQUEST);
146
147    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
148    EXPECT_EQ(ret, 0);
149    ret = OH_QoS_GetThreadQoS(&level);
150    EXPECT_EQ(ret, 0);
151    EXPECT_EQ(level, QoS_Level::QOS_USER_INTERACTIVE);
152
153    ret = OH_QoS_ResetThreadQoS();
154    EXPECT_EQ(ret, 0);
155    ret = OH_QoS_GetThreadQoS(&level);
156    EXPECT_EQ(ret, -1);
157}
158
159/**
160 * @tc.name: ThreadQoSNdkTest
161 * @tc.desc: Double Test ThreadQoSNDKTest function.
162 * @tc.type: FUNC
163 */
164HWTEST_F(QoSTestSuite, ThreadQoSNdkTest, Function | MediumTest | Level1)
165{
166    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
167    EXPECT_EQ(ret, 0);
168    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
169    EXPECT_EQ(ret, 0);
170
171    enum QoS_Level level;
172    ret = OH_QoS_GetThreadQoS(&level);
173    EXPECT_EQ(ret, 0);
174    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
175    ret = OH_QoS_GetThreadQoS(&level);
176    EXPECT_EQ(ret, 0);
177    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
178
179    ret = OH_QoS_ResetThreadQoS();
180    EXPECT_EQ(ret, 0);
181    ret = OH_QoS_ResetThreadQoS();
182    EXPECT_EQ(ret, -1);
183}
184