1/*
2 * Copyright (c) 2024 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 "c/qos.h"
20
21namespace OHOS {
22namespace QOS {
23using namespace testing;
24using namespace testing::ext;
25using namespace OHOS::QOS;
26
27class QoSNdkTest : public testing::Test {
28public:
29    static void SetUpTestCase();
30    static void TearDownTestCase();
31    void SetUp();
32    void TearDown();
33};
34
35void QoSNdkTest::SetUpTestCase()
36{
37}
38
39void QoSNdkTest::TearDownTestCase()
40{
41}
42
43void QoSNdkTest::SetUp()
44{
45}
46
47void QoSNdkTest::TearDown()
48{
49}
50
51/**
52 * @tc.name: QoSNdkTest
53 * @tc.desc: Verify the Set and Reset QoSLevel function.
54 * @tc.type: FUNC
55 */
56HWTEST_F(QoSNdkTest, SetThreadQoSNdkTest1, TestSize.Level1)
57{
58    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
59    EXPECT_EQ(ret, 0);
60    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
61    EXPECT_EQ(ret, 0);
62    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
63    EXPECT_EQ(ret, 0);
64    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
65    EXPECT_EQ(ret, 0);
66    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
67    EXPECT_EQ(ret, 0);
68    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
69    EXPECT_EQ(ret, 0);
70    ret = OH_QoS_SetThreadQoS(QoS_Level(-1));
71    EXPECT_EQ(ret, -1);
72    ret = OH_QoS_SetThreadQoS(QoS_Level(6));
73    EXPECT_EQ(ret, -1);
74    ret = OH_QoS_SetThreadQoS(QoS_Level(1024));
75    EXPECT_EQ(ret, -1);
76}
77
78HWTEST_F(QoSNdkTest, ResetThreadQoSNdkTest, TestSize.Level1)
79{
80    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
81    EXPECT_EQ(ret, 0);
82    ret = OH_QoS_ResetThreadQoS();
83    EXPECT_EQ(ret, 0);
84
85    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
86    EXPECT_EQ(ret, 0);
87    ret =  OH_QoS_ResetThreadQoS();
88    EXPECT_EQ(ret, 0);
89
90    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
91    EXPECT_EQ(ret, 0);
92    ret =  OH_QoS_ResetThreadQoS();
93    EXPECT_EQ(ret, 0);
94
95    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
96    EXPECT_EQ(ret, 0);
97    ret =  OH_QoS_ResetThreadQoS();
98    EXPECT_EQ(ret, 0);
99
100    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
101    EXPECT_EQ(ret, 0);
102    ret =  OH_QoS_ResetThreadQoS();
103    EXPECT_EQ(ret, 0);
104
105    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
106    EXPECT_EQ(ret, 0);
107    ret = OH_QoS_ResetThreadQoS();
108    EXPECT_EQ(ret, 0);
109}
110
111HWTEST_F(QoSNdkTest, GetThreadQoSNdkTest1, TestSize.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} // QOS
159} // OHOS