1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License.
5f6603c60Sopenharmony_ci * You may obtain a copy of the License at
6f6603c60Sopenharmony_ci *
7f6603c60Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f6603c60Sopenharmony_ci *
9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and
13f6603c60Sopenharmony_ci * limitations under the License.
14f6603c60Sopenharmony_ci */
15f6603c60Sopenharmony_ci
16f6603c60Sopenharmony_ci#include "gtest/gtest.h"
17f6603c60Sopenharmony_ci
18f6603c60Sopenharmony_ci#include "qos.h"
19f6603c60Sopenharmony_ci
20f6603c60Sopenharmony_ci
21f6603c60Sopenharmony_ciusing namespace std;
22f6603c60Sopenharmony_ciusing namespace testing::ext;
23f6603c60Sopenharmony_ciclass QoSTestSuite : public testing::Test {
24f6603c60Sopenharmony_ciprotected:
25f6603c60Sopenharmony_ci    // Preset action of the test suite, which is executed before the first test case
26f6603c60Sopenharmony_ci    static void SetUpTestCase(void) {
27f6603c60Sopenharmony_ci    }
28f6603c60Sopenharmony_ci    // Test suite cleanup action, which is executed after the last test case
29f6603c60Sopenharmony_ci    static void TearDownTestCase(void) {
30f6603c60Sopenharmony_ci    }
31f6603c60Sopenharmony_ci    // Preset action of the test case
32f6603c60Sopenharmony_ci    virtual void SetUp()
33f6603c60Sopenharmony_ci    {
34f6603c60Sopenharmony_ci    }
35f6603c60Sopenharmony_ci    // Cleanup action of the test case
36f6603c60Sopenharmony_ci    virtual void TearDown()
37f6603c60Sopenharmony_ci    {
38f6603c60Sopenharmony_ci    }
39f6603c60Sopenharmony_ci};
40f6603c60Sopenharmony_ci
41f6603c60Sopenharmony_ci/**
42f6603c60Sopenharmony_ci * @tc.name: SetThreadQoSNdkTest
43f6603c60Sopenharmony_ci * @tc.desc: Verify the Set QoSLevel function.
44f6603c60Sopenharmony_ci * @tc.type: FUNC
45f6603c60Sopenharmony_ci */
46f6603c60Sopenharmony_ciHWTEST_F(QoSTestSuite, SetThreadQoSNdkTest, Function | MediumTest | Level1)
47f6603c60Sopenharmony_ci{
48f6603c60Sopenharmony_ci    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
49f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
50f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
51f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
52f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
53f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
54f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
55f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
56f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
57f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
58f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
59f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
60f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level(-1));
61f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
62f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level(6));
63f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
64f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level(1024));
65f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
66f6603c60Sopenharmony_ci}
67f6603c60Sopenharmony_ci
68f6603c60Sopenharmony_ci/**
69f6603c60Sopenharmony_ci * @tc.name: ResetThreadQoSNdkTest
70f6603c60Sopenharmony_ci * @tc.desc: Verify the Reset QoSLevel function.
71f6603c60Sopenharmony_ci * @tc.type: FUNC
72f6603c60Sopenharmony_ci */
73f6603c60Sopenharmony_ciHWTEST_F(QoSTestSuite, ResetThreadQoSNdkTest, Function | MediumTest | Level1)
74f6603c60Sopenharmony_ci{
75f6603c60Sopenharmony_ci    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
76f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
77f6603c60Sopenharmony_ci    ret = OH_QoS_ResetThreadQoS();
78f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
79f6603c60Sopenharmony_ci
80f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
81f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
82f6603c60Sopenharmony_ci    ret =  OH_QoS_ResetThreadQoS();
83f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
84f6603c60Sopenharmony_ci
85f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
86f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
87f6603c60Sopenharmony_ci    ret =  OH_QoS_ResetThreadQoS();
88f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
89f6603c60Sopenharmony_ci
90f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
91f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
92f6603c60Sopenharmony_ci    ret =  OH_QoS_ResetThreadQoS();
93f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
94f6603c60Sopenharmony_ci
95f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
96f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
97f6603c60Sopenharmony_ci    ret =  OH_QoS_ResetThreadQoS();
98f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
99f6603c60Sopenharmony_ci
100f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
101f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
102f6603c60Sopenharmony_ci    ret = OH_QoS_ResetThreadQoS();
103f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
104f6603c60Sopenharmony_ci}
105f6603c60Sopenharmony_ci
106f6603c60Sopenharmony_ci/**
107f6603c60Sopenharmony_ci * @tc.name: GetThreadQoSNdkTest
108f6603c60Sopenharmony_ci * @tc.desc: Verify the Get QoSLevel function.
109f6603c60Sopenharmony_ci * @tc.type: FUNC
110f6603c60Sopenharmony_ci */
111f6603c60Sopenharmony_ciHWTEST_F(QoSTestSuite, GetThreadQoSNdkTest, Function | MediumTest | Level1)
112f6603c60Sopenharmony_ci{
113f6603c60Sopenharmony_ci    int ret = OH_QoS_GetThreadQoS(nullptr);
114f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
115f6603c60Sopenharmony_ci
116f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
117f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
118f6603c60Sopenharmony_ci    enum QoS_Level level;
119f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
120f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
121f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
122f6603c60Sopenharmony_ci
123f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_UTILITY);
124f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
125f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
126f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
127f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_UTILITY);
128f6603c60Sopenharmony_ci
129f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEFAULT);
130f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
131f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
132f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
133f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_DEFAULT);
134f6603c60Sopenharmony_ci
135f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INITIATED);
136f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
137f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
138f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
139f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_USER_INITIATED);
140f6603c60Sopenharmony_ci
141f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_DEADLINE_REQUEST);
142f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
143f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
144f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
145f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_DEADLINE_REQUEST);
146f6603c60Sopenharmony_ci
147f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_USER_INTERACTIVE);
148f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
149f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
150f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
151f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_USER_INTERACTIVE);
152f6603c60Sopenharmony_ci
153f6603c60Sopenharmony_ci    ret = OH_QoS_ResetThreadQoS();
154f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
155f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
156f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
157f6603c60Sopenharmony_ci}
158f6603c60Sopenharmony_ci
159f6603c60Sopenharmony_ci/**
160f6603c60Sopenharmony_ci * @tc.name: ThreadQoSNdkTest
161f6603c60Sopenharmony_ci * @tc.desc: Double Test ThreadQoSNDKTest function.
162f6603c60Sopenharmony_ci * @tc.type: FUNC
163f6603c60Sopenharmony_ci */
164f6603c60Sopenharmony_ciHWTEST_F(QoSTestSuite, ThreadQoSNdkTest, Function | MediumTest | Level1)
165f6603c60Sopenharmony_ci{
166f6603c60Sopenharmony_ci    int ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
167f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
168f6603c60Sopenharmony_ci    ret = OH_QoS_SetThreadQoS(QoS_Level::QOS_BACKGROUND);
169f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
170f6603c60Sopenharmony_ci
171f6603c60Sopenharmony_ci    enum QoS_Level level;
172f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
173f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
174f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
175f6603c60Sopenharmony_ci    ret = OH_QoS_GetThreadQoS(&level);
176f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
177f6603c60Sopenharmony_ci    EXPECT_EQ(level, QoS_Level::QOS_BACKGROUND);
178f6603c60Sopenharmony_ci
179f6603c60Sopenharmony_ci    ret = OH_QoS_ResetThreadQoS();
180f6603c60Sopenharmony_ci    EXPECT_EQ(ret, 0);
181f6603c60Sopenharmony_ci    ret = OH_QoS_ResetThreadQoS();
182f6603c60Sopenharmony_ci    EXPECT_EQ(ret, -1);
183f6603c60Sopenharmony_ci}
184