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}