1484543d1Sopenharmony_ci/*
2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License.
5484543d1Sopenharmony_ci * You may obtain a copy of the License at
6484543d1Sopenharmony_ci *
7484543d1Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8484543d1Sopenharmony_ci *
9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and
13484543d1Sopenharmony_ci * limitations under the License.
14484543d1Sopenharmony_ci */
15484543d1Sopenharmony_ci
16484543d1Sopenharmony_ci#include <gtest/gtest.h>
17484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
18484543d1Sopenharmony_ci#include <mockcpp/mockcpp.hpp>
19484543d1Sopenharmony_ci#endif
20484543d1Sopenharmony_ci#include <fcntl.h>
21484543d1Sopenharmony_ci#include "eu/osattr_manager.h"
22484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
23484543d1Sopenharmony_ci#include "eu/qos_config.h"
24484543d1Sopenharmony_ci#endif
25484543d1Sopenharmony_ci#include "eu/qos_interface.h"
26484543d1Sopenharmony_ci#include "../common.h"
27484543d1Sopenharmony_ci
28484543d1Sopenharmony_ciusing namespace testing;
29484543d1Sopenharmony_ci#ifdef HWTEST_TESTING_EXT_ENABLE
30484543d1Sopenharmony_ciusing namespace testing::ext;
31484543d1Sopenharmony_ci#endif
32484543d1Sopenharmony_ciusing namespace ffrt;
33484543d1Sopenharmony_ci
34484543d1Sopenharmony_ciclass CgroupQosTest : public testing::Test {
35484543d1Sopenharmony_ciprotected:
36484543d1Sopenharmony_ci    static void SetUpTestCase()
37484543d1Sopenharmony_ci    {
38484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
39484543d1Sopenharmony_ci        MOCKER(write).stubs().will(returnValue(0));
40484543d1Sopenharmony_ci        MOCKER(read).stubs().will(returnValue(0));
41484543d1Sopenharmony_ci#endif
42484543d1Sopenharmony_ci    }
43484543d1Sopenharmony_ci
44484543d1Sopenharmony_ci    static void TearDownTestCase()
45484543d1Sopenharmony_ci    {
46484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
47484543d1Sopenharmony_ci        GlobalMockObject::verify();
48484543d1Sopenharmony_ci#endif
49484543d1Sopenharmony_ci    }
50484543d1Sopenharmony_ci
51484543d1Sopenharmony_ci    virtual void SetUp()
52484543d1Sopenharmony_ci    {
53484543d1Sopenharmony_ci    }
54484543d1Sopenharmony_ci
55484543d1Sopenharmony_ci    virtual void TearDown()
56484543d1Sopenharmony_ci    {
57484543d1Sopenharmony_ci    }
58484543d1Sopenharmony_ci};
59484543d1Sopenharmony_ci
60484543d1Sopenharmony_ci#ifndef FFRT_GITEE
61484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, UpdateSchedAttr_test, TestSize.Level1)
62484543d1Sopenharmony_ci{
63484543d1Sopenharmony_ci        ffrt_os_sched_attr attr = {100, 10, 99, 99, 9, "2-3"};
64484543d1Sopenharmony_ci        int ret = 0;
65484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
66484543d1Sopenharmony_ci        ret = OSAttrManager::Instance()->UpdateSchedAttr(QoS(static_cast<int>(qos_defined_ive)), &attr);
67484543d1Sopenharmony_ci        EXPECT_EQ(ret, 0);
68484543d1Sopenharmony_ci#endif
69484543d1Sopenharmony_ci        ret = OSAttrManager::Instance()->UpdateSchedAttr(QoS(static_cast<int>(qos_user_interactive)), &attr);
70484543d1Sopenharmony_ci        EXPECT_EQ(ret, -1);
71484543d1Sopenharmony_ci}
72484543d1Sopenharmony_ci#endif
73484543d1Sopenharmony_ci
74484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetTidToCGroup_test, TestSize.Level1)
75484543d1Sopenharmony_ci{
76484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetTidToCGroup(100);
77484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetTidToCGroup(-1);
78484543d1Sopenharmony_ci}
79484543d1Sopenharmony_ci
80484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetCGroupCtlPara_test, TestSize.Level1)
81484543d1Sopenharmony_ci{
82484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupCtlPara("", 1);
83484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupCtlPara("test", 1);
84484543d1Sopenharmony_ci}
85484543d1Sopenharmony_ci
86484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetCGroupSetPara_test, TestSize.Level1)
87484543d1Sopenharmony_ci{
88484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupSetPara("", "1");
89484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupSetPara("test", "1");
90484543d1Sopenharmony_ci}
91484543d1Sopenharmony_ci
92484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetTidToCGroupPrivate_test, TestSize.Level1)
93484543d1Sopenharmony_ci{
94484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetTidToCGroupPrivate("test", 100);
95484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetTidToCGroupPrivate("test", -1);
96484543d1Sopenharmony_ci}
97484543d1Sopenharmony_ci
98484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetCGroupPara_test, TestSize.Level1)
99484543d1Sopenharmony_ci{
100484543d1Sopenharmony_ci        int a = 100;
101484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupPara("/proc/cpuinfo", a);
102484543d1Sopenharmony_ci}
103484543d1Sopenharmony_ci
104484543d1Sopenharmony_ciHWTEST_F(CgroupQosTest, SetCGroupPara_err_test, TestSize.Level1)
105484543d1Sopenharmony_ci{
106484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
107484543d1Sopenharmony_ci        MOCKER(write).stubs().will(returnValue(0));
108484543d1Sopenharmony_ci        MOCKER(read).stubs().will(returnValue(0));
109484543d1Sopenharmony_ci#endif
110484543d1Sopenharmony_ci        int a = 3;
111484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupPara("/proc/cpuinfo", a);
112484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
113484543d1Sopenharmony_ci        MOCKER(write).stubs().will(returnValue(-1));
114484543d1Sopenharmony_ci        MOCKER(read).stubs().will(returnValue(0));
115484543d1Sopenharmony_ci#endif
116484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupPara("/proc/cpuinfo", a);
117484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
118484543d1Sopenharmony_ci        MOCKER(write).stubs().will(returnValue(0));
119484543d1Sopenharmony_ci        MOCKER(read).stubs().will(returnValue(33));
120484543d1Sopenharmony_ci#endif
121484543d1Sopenharmony_ci        OSAttrManager::Instance()->SetCGroupPara("/proc/cpuinfo", a);
122484543d1Sopenharmony_ci}
123484543d1Sopenharmony_ci
124484543d1Sopenharmony_ciclass QosTest : public testing::Test {
125484543d1Sopenharmony_ciprotected:
126484543d1Sopenharmony_ci    static void SetUpTestCase()
127484543d1Sopenharmony_ci    {
128484543d1Sopenharmony_ci    }
129484543d1Sopenharmony_ci
130484543d1Sopenharmony_ci    static void TearDownTestCase()
131484543d1Sopenharmony_ci    {
132484543d1Sopenharmony_ci    }
133484543d1Sopenharmony_ci
134484543d1Sopenharmony_ci    virtual void SetUp()
135484543d1Sopenharmony_ci    {
136484543d1Sopenharmony_ci    }
137484543d1Sopenharmony_ci
138484543d1Sopenharmony_ci    virtual void TearDown()
139484543d1Sopenharmony_ci    {
140484543d1Sopenharmony_ci    }
141484543d1Sopenharmony_ci};
142484543d1Sopenharmony_ci
143484543d1Sopenharmony_ciHWTEST_F(QosTest, QosConfig_test, TestSize.Level1)
144484543d1Sopenharmony_ci{
145484543d1Sopenharmony_ci#ifndef WITH_NO_MOCKER
146484543d1Sopenharmony_ci        QosConfig::Instance().setPolicySystem();
147484543d1Sopenharmony_ci#endif
148484543d1Sopenharmony_ci}
149484543d1Sopenharmony_ci
150484543d1Sopenharmony_ciclass QosInterfaceTest : public testing::Test {
151484543d1Sopenharmony_ciprotected:
152484543d1Sopenharmony_ci    static void SetUpTestCase()
153484543d1Sopenharmony_ci    {
154484543d1Sopenharmony_ci    }
155484543d1Sopenharmony_ci
156484543d1Sopenharmony_ci    static void TearDownTestCase()
157484543d1Sopenharmony_ci    {
158484543d1Sopenharmony_ci    }
159484543d1Sopenharmony_ci
160484543d1Sopenharmony_ci    virtual void SetUp()
161484543d1Sopenharmony_ci    {
162484543d1Sopenharmony_ci    }
163484543d1Sopenharmony_ci
164484543d1Sopenharmony_ci    virtual void TearDown()
165484543d1Sopenharmony_ci    {
166484543d1Sopenharmony_ci    }
167484543d1Sopenharmony_ci};
168484543d1Sopenharmony_ci
169484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, QosPolicyTest, TestSize.Level1)
170484543d1Sopenharmony_ci{
171484543d1Sopenharmony_ci    struct QosPolicyData qp = {0, 0, 0, 0, 0};
172484543d1Sopenharmony_ci    struct QosPolicyDatas policyDatas = {0, 0, {qp}};
173484543d1Sopenharmony_ci
174484543d1Sopenharmony_ci    QosPolicy(&policyDatas);
175484543d1Sopenharmony_ci}
176484543d1Sopenharmony_ci
177484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTEnableRtgTest, TestSize.Level1)
178484543d1Sopenharmony_ci{
179484543d1Sopenharmony_ci    bool flag = false;
180484543d1Sopenharmony_ci    FFRTEnableRtg(flag);
181484543d1Sopenharmony_ci}
182484543d1Sopenharmony_ci
183484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTAuthEnableTest, TestSize.Level1)
184484543d1Sopenharmony_ci{
185484543d1Sopenharmony_ci    unsigned int uid = 3039;
186484543d1Sopenharmony_ci    unsigned int uaFlag = 0x1fff;
187484543d1Sopenharmony_ci    unsigned int status = 3;
188484543d1Sopenharmony_ci    FFRTAuthEnable(uid, uaFlag, status);
189484543d1Sopenharmony_ci}
190484543d1Sopenharmony_ci
191484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTAuthSwitchTest, TestSize.Level1)
192484543d1Sopenharmony_ci{
193484543d1Sopenharmony_ci    unsigned int uid = 3039;
194484543d1Sopenharmony_ci    unsigned int rtgFlag = 0x1fff;
195484543d1Sopenharmony_ci    unsigned int qosFlag = 0x0003;
196484543d1Sopenharmony_ci    unsigned int status = 3;
197484543d1Sopenharmony_ci    FFRTAuthSwitch(uid, rtgFlag, qosFlag, status);
198484543d1Sopenharmony_ci}
199484543d1Sopenharmony_ci
200484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTAuthDeleteTest, TestSize.Level1)
201484543d1Sopenharmony_ci{
202484543d1Sopenharmony_ci    unsigned int uid = 3039;
203484543d1Sopenharmony_ci    FFRTAuthDelete(uid);
204484543d1Sopenharmony_ci}
205484543d1Sopenharmony_ci
206484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTAuthPauseTest, TestSize.Level1)
207484543d1Sopenharmony_ci{
208484543d1Sopenharmony_ci    unsigned int uid = 3039;
209484543d1Sopenharmony_ci    unsigned int uaFlag = 0x1fff;
210484543d1Sopenharmony_ci    unsigned int status = 3;
211484543d1Sopenharmony_ci    FFRTAuthEnable(uid, uaFlag, status);
212484543d1Sopenharmony_ci    FFRTAuthPause(uid);
213484543d1Sopenharmony_ci}
214484543d1Sopenharmony_ci
215484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTAuthGetTest, TestSize.Level1)
216484543d1Sopenharmony_ci{
217484543d1Sopenharmony_ci    unsigned int uid = 3039;
218484543d1Sopenharmony_ci    unsigned int uaFlag = 0x1fff;
219484543d1Sopenharmony_ci    unsigned int status = 3;
220484543d1Sopenharmony_ci
221484543d1Sopenharmony_ci    FFRTAuthEnable(uid, uaFlag, status);
222484543d1Sopenharmony_ci    FFRTAuthGet(uid, &uaFlag, &status);
223484543d1Sopenharmony_ci}
224484543d1Sopenharmony_ci
225484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTQosApplyTest, TestSize.Level1)
226484543d1Sopenharmony_ci{
227484543d1Sopenharmony_ci    unsigned int level = 1;
228484543d1Sopenharmony_ci
229484543d1Sopenharmony_ci    FFRTQosApply(level);
230484543d1Sopenharmony_ci}
231484543d1Sopenharmony_ci
232484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTQosApplyForOtherTest, TestSize.Level1)
233484543d1Sopenharmony_ci{
234484543d1Sopenharmony_ci    unsigned int level = 1;
235484543d1Sopenharmony_ci    int tid = 0;
236484543d1Sopenharmony_ci
237484543d1Sopenharmony_ci    FFRTQosApplyForOther(level, tid);
238484543d1Sopenharmony_ci}
239484543d1Sopenharmony_ci
240484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTQosLeaveTest, TestSize.Level1)
241484543d1Sopenharmony_ci{
242484543d1Sopenharmony_ci    FFRTQosLeave();
243484543d1Sopenharmony_ci}
244484543d1Sopenharmony_ci
245484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTQosLeaveForOtherTest, TestSize.Level1)
246484543d1Sopenharmony_ci{
247484543d1Sopenharmony_ci    unsigned int level = 1;
248484543d1Sopenharmony_ci    int tid = 0;
249484543d1Sopenharmony_ci    FFRTQosApplyForOther(level, tid);
250484543d1Sopenharmony_ci
251484543d1Sopenharmony_ci    FFRTQosLeaveForOther(tid);
252484543d1Sopenharmony_ci}
253484543d1Sopenharmony_ci
254484543d1Sopenharmony_ciHWTEST_F(QosInterfaceTest, FFRTQosConvertInt, TestSize.Level1)
255484543d1Sopenharmony_ci{
256484543d1Sopenharmony_ci    QoS qos1 = 1;
257484543d1Sopenharmony_ci    QoS qos2 = 2;
258484543d1Sopenharmony_ci    QoS qos3 = qos1 + qos2;
259484543d1Sopenharmony_ci    printf("qos3=%d", qos3());
260484543d1Sopenharmony_ci}