10d163575Sopenharmony_ci/* 20d163575Sopenharmony_ci 30d163575Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved. 40d163575Sopenharmony_ci * 50d163575Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification, 60d163575Sopenharmony_ci * are permitted provided that the following conditions are met: 70d163575Sopenharmony_ci * 80d163575Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of 90d163575Sopenharmony_ci * conditions and the following disclaimer. 100d163575Sopenharmony_ci * 110d163575Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list 120d163575Sopenharmony_ci * of conditions and the following disclaimer in the documentation and/or other materials 130d163575Sopenharmony_ci * provided with the distribution. 140d163575Sopenharmony_ci * 150d163575Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used 160d163575Sopenharmony_ci * to endorse or promote products derived from this software without specific prior written 170d163575Sopenharmony_ci * permission. 180d163575Sopenharmony_ci * 190d163575Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 200d163575Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 210d163575Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 220d163575Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 230d163575Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 240d163575Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 250d163575Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 260d163575Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 270d163575Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 280d163575Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 290d163575Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 300d163575Sopenharmony_ci */ 310d163575Sopenharmony_ci#include <climits> 320d163575Sopenharmony_ci#include <cstdio> 330d163575Sopenharmony_ci#include <cstdlib> 340d163575Sopenharmony_ci#include <unistd.h> 350d163575Sopenharmony_ci#include <fcntl.h> 360d163575Sopenharmony_ci#include <vector> 370d163575Sopenharmony_ci#include <string> 380d163575Sopenharmony_ci#include <gtest/gtest.h> 390d163575Sopenharmony_ci#include <sys/stat.h> 400d163575Sopenharmony_ci#include <sys/types.h> 410d163575Sopenharmony_ci#include <dirent.h> 420d163575Sopenharmony_ci#include "It_process_plimits.h" 430d163575Sopenharmony_ci 440d163575Sopenharmony_ciusing namespace std; 450d163575Sopenharmony_ciusing namespace testing::ext; 460d163575Sopenharmony_cinamespace OHOS { 470d163575Sopenharmony_ciclass ProcessPlimitsTest : public testing::Test { 480d163575Sopenharmony_cipublic: 490d163575Sopenharmony_ci static void SetUpTestCase(void) {} 500d163575Sopenharmony_ci static void TearDownTestCase(void) {} 510d163575Sopenharmony_ci 520d163575Sopenharmony_ciprotected: 530d163575Sopenharmony_ci virtual void SetUp(); 540d163575Sopenharmony_ci virtual void TearDown(); 550d163575Sopenharmony_ci 560d163575Sopenharmony_ciprivate: 570d163575Sopenharmony_ci inline bool IsFile(const std::string &file); 580d163575Sopenharmony_ci inline bool IsDir(const std::string &path); 590d163575Sopenharmony_ci inline bool IsSpecialDir(const std::string &path); 600d163575Sopenharmony_ci}; 610d163575Sopenharmony_ci 620d163575Sopenharmony_ci#if defined(LOSCFG_USER_TEST_SMOKE) 630d163575Sopenharmony_ci/** 640d163575Sopenharmony_ci* @tc.name: plimits_Test_001 650d163575Sopenharmony_ci* @tc.desc: plimits function test case 660d163575Sopenharmony_ci* @tc.type: FUNC 670d163575Sopenharmony_ci* @tc.require: issueI6GVPL 680d163575Sopenharmony_ci* @tc.author: 690d163575Sopenharmony_ci*/ 700d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits001, TestSize.Level0) 710d163575Sopenharmony_ci{ 720d163575Sopenharmony_ci ItProcessPlimits001(); 730d163575Sopenharmony_ci} 740d163575Sopenharmony_ci 750d163575Sopenharmony_ci/** 760d163575Sopenharmony_ci* @tc.name: plimits_Test_002 770d163575Sopenharmony_ci* @tc.desc: plimits function test case 780d163575Sopenharmony_ci* @tc.type: FUNC 790d163575Sopenharmony_ci* @tc.require: issueI6GVPL 800d163575Sopenharmony_ci* @tc.author: 810d163575Sopenharmony_ci*/ 820d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits002, TestSize.Level0) 830d163575Sopenharmony_ci{ 840d163575Sopenharmony_ci ItProcessPlimits002(); 850d163575Sopenharmony_ci} 860d163575Sopenharmony_ci 870d163575Sopenharmony_ci/** 880d163575Sopenharmony_ci* @tc.name: plimits_Test_003 890d163575Sopenharmony_ci* @tc.desc: plimits function test case 900d163575Sopenharmony_ci* @tc.type: FUNC 910d163575Sopenharmony_ci* @tc.require: issueI6GVPL 920d163575Sopenharmony_ci* @tc.author: 930d163575Sopenharmony_ci*/ 940d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits003, TestSize.Level0) 950d163575Sopenharmony_ci{ 960d163575Sopenharmony_ci ItProcessPlimits003(); 970d163575Sopenharmony_ci} 980d163575Sopenharmony_ci 990d163575Sopenharmony_ci/** 1000d163575Sopenharmony_ci* @tc.name: plimits_Test_004 1010d163575Sopenharmony_ci* @tc.desc: plimits function test case 1020d163575Sopenharmony_ci* @tc.type: FUNC 1030d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1040d163575Sopenharmony_ci* @tc.author: 1050d163575Sopenharmony_ci*/ 1060d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits004, TestSize.Level0) 1070d163575Sopenharmony_ci{ 1080d163575Sopenharmony_ci ItProcessPlimits004(); 1090d163575Sopenharmony_ci} 1100d163575Sopenharmony_ci 1110d163575Sopenharmony_ci/** 1120d163575Sopenharmony_ci* @tc.name: plimits_Test_005 1130d163575Sopenharmony_ci* @tc.desc: plimits function test case 1140d163575Sopenharmony_ci* @tc.type: FUNC 1150d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1160d163575Sopenharmony_ci* @tc.author: 1170d163575Sopenharmony_ci*/ 1180d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits005, TestSize.Level0) 1190d163575Sopenharmony_ci{ 1200d163575Sopenharmony_ci ItProcessPlimits005(); 1210d163575Sopenharmony_ci} 1220d163575Sopenharmony_ci 1230d163575Sopenharmony_ci/** 1240d163575Sopenharmony_ci* @tc.name: plimits_Test_006 1250d163575Sopenharmony_ci* @tc.desc: plimits function test case 1260d163575Sopenharmony_ci* @tc.type: FUNC 1270d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1280d163575Sopenharmony_ci* @tc.author: 1290d163575Sopenharmony_ci*/ 1300d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits006, TestSize.Level0) 1310d163575Sopenharmony_ci{ 1320d163575Sopenharmony_ci ItProcessPlimits006(); 1330d163575Sopenharmony_ci} 1340d163575Sopenharmony_ci 1350d163575Sopenharmony_ci/** 1360d163575Sopenharmony_ci* @tc.name: plimits_Test_007 1370d163575Sopenharmony_ci* @tc.desc: plimits function test case 1380d163575Sopenharmony_ci* @tc.type: FUNC 1390d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1400d163575Sopenharmony_ci* @tc.author: 1410d163575Sopenharmony_ci*/ 1420d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits007, TestSize.Level0) 1430d163575Sopenharmony_ci{ 1440d163575Sopenharmony_ci ItProcessPlimits007(); 1450d163575Sopenharmony_ci} 1460d163575Sopenharmony_ci 1470d163575Sopenharmony_ci/** 1480d163575Sopenharmony_ci* @tc.name: plimits_Test_008 1490d163575Sopenharmony_ci* @tc.desc: plimits function test case 1500d163575Sopenharmony_ci* @tc.type: FUNC 1510d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1520d163575Sopenharmony_ci* @tc.author: 1530d163575Sopenharmony_ci*/ 1540d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimits008, TestSize.Level0) 1550d163575Sopenharmony_ci{ 1560d163575Sopenharmony_ci ItProcessPlimits008(); 1570d163575Sopenharmony_ci} 1580d163575Sopenharmony_ci 1590d163575Sopenharmony_ci/** 1600d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_001 1610d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 1620d163575Sopenharmony_ci* @tc.type: FUNC 1630d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1640d163575Sopenharmony_ci* @tc.author: 1650d163575Sopenharmony_ci*/ 1660d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid001, TestSize.Level0) 1670d163575Sopenharmony_ci{ 1680d163575Sopenharmony_ci ItProcessPlimitsPid001(); 1690d163575Sopenharmony_ci} 1700d163575Sopenharmony_ci 1710d163575Sopenharmony_ci/** 1720d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_002 1730d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 1740d163575Sopenharmony_ci* @tc.type: FUNC 1750d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1760d163575Sopenharmony_ci* @tc.author: 1770d163575Sopenharmony_ci*/ 1780d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid002, TestSize.Level0) 1790d163575Sopenharmony_ci{ 1800d163575Sopenharmony_ci ItProcessPlimitsPid002(); 1810d163575Sopenharmony_ci} 1820d163575Sopenharmony_ci 1830d163575Sopenharmony_ci/** 1840d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_003 1850d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 1860d163575Sopenharmony_ci* @tc.type: FUNC 1870d163575Sopenharmony_ci* @tc.require: issueI6GVPL 1880d163575Sopenharmony_ci* @tc.author: 1890d163575Sopenharmony_ci*/ 1900d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid003, TestSize.Level0) 1910d163575Sopenharmony_ci{ 1920d163575Sopenharmony_ci ItProcessPlimitsPid003(); 1930d163575Sopenharmony_ci} 1940d163575Sopenharmony_ci 1950d163575Sopenharmony_ci/** 1960d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_004 1970d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 1980d163575Sopenharmony_ci* @tc.type: FUNC 1990d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2000d163575Sopenharmony_ci* @tc.author: 2010d163575Sopenharmony_ci*/ 2020d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid004, TestSize.Level0) 2030d163575Sopenharmony_ci{ 2040d163575Sopenharmony_ci ItProcessPlimitsPid004(); 2050d163575Sopenharmony_ci} 2060d163575Sopenharmony_ci 2070d163575Sopenharmony_ci/** 2080d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_005 2090d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 2100d163575Sopenharmony_ci* @tc.type: FUNC 2110d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2120d163575Sopenharmony_ci* @tc.author: 2130d163575Sopenharmony_ci*/ 2140d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid005, TestSize.Level0) 2150d163575Sopenharmony_ci{ 2160d163575Sopenharmony_ci ItProcessPlimitsPid005(); 2170d163575Sopenharmony_ci} 2180d163575Sopenharmony_ci 2190d163575Sopenharmony_ci/** 2200d163575Sopenharmony_ci* @tc.name: plimits_pid_Test_006 2210d163575Sopenharmony_ci* @tc.desc: pid plimit function test case 2220d163575Sopenharmony_ci* @tc.type: FUNC 2230d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2240d163575Sopenharmony_ci* @tc.author: 2250d163575Sopenharmony_ci*/ 2260d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsPid006, TestSize.Level0) 2270d163575Sopenharmony_ci{ 2280d163575Sopenharmony_ci ItProcessPlimitsPid006(); 2290d163575Sopenharmony_ci} 2300d163575Sopenharmony_ci 2310d163575Sopenharmony_ci/** 2320d163575Sopenharmony_ci* @tc.name: plimits_Mem_Test_001 2330d163575Sopenharmony_ci* @tc.desc: mem plimit function test case 2340d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2350d163575Sopenharmony_ci* @tc.author: 2360d163575Sopenharmony_ci*/ 2370d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsMemory001, TestSize.Level0) 2380d163575Sopenharmony_ci{ 2390d163575Sopenharmony_ci ItProcessPlimitsMemory001(); 2400d163575Sopenharmony_ci} 2410d163575Sopenharmony_ci 2420d163575Sopenharmony_ci/** 2430d163575Sopenharmony_ci* @tc.name: plimits_Mem_Test_002 2440d163575Sopenharmony_ci* @tc.desc: mem plimit function test case 2450d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2460d163575Sopenharmony_ci* @tc.author: 2470d163575Sopenharmony_ci*/ 2480d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsMemory002, TestSize.Level0) 2490d163575Sopenharmony_ci{ 2500d163575Sopenharmony_ci ItProcessPlimitsMemory002(); 2510d163575Sopenharmony_ci} 2520d163575Sopenharmony_ci 2530d163575Sopenharmony_ci/** 2540d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_001 2550d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 2560d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2570d163575Sopenharmony_ci* @tc.author: 2580d163575Sopenharmony_ci*/ 2590d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices001, TestSize.Level0) 2600d163575Sopenharmony_ci{ 2610d163575Sopenharmony_ci ItProcessPlimitsDevices001(); 2620d163575Sopenharmony_ci} 2630d163575Sopenharmony_ci 2640d163575Sopenharmony_ci/** 2650d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_002 2660d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 2670d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2680d163575Sopenharmony_ci* @tc.author: 2690d163575Sopenharmony_ci*/ 2700d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices002, TestSize.Level0) 2710d163575Sopenharmony_ci{ 2720d163575Sopenharmony_ci ItProcessPlimitsDevices002(); 2730d163575Sopenharmony_ci} 2740d163575Sopenharmony_ci 2750d163575Sopenharmony_ci/** 2760d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_003 2770d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 2780d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2790d163575Sopenharmony_ci* @tc.author: 2800d163575Sopenharmony_ci*/ 2810d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices003, TestSize.Level0) 2820d163575Sopenharmony_ci{ 2830d163575Sopenharmony_ci ItProcessPlimitsDevices003(); 2840d163575Sopenharmony_ci} 2850d163575Sopenharmony_ci 2860d163575Sopenharmony_ci/** 2870d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_004 2880d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 2890d163575Sopenharmony_ci* @tc.require: issueI6GVPL 2900d163575Sopenharmony_ci* @tc.author: 2910d163575Sopenharmony_ci*/ 2920d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices004, TestSize.Level0) 2930d163575Sopenharmony_ci{ 2940d163575Sopenharmony_ci ItProcessPlimitsDevices004(); 2950d163575Sopenharmony_ci} 2960d163575Sopenharmony_ci 2970d163575Sopenharmony_ci/** 2980d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_005 2990d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 3000d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3010d163575Sopenharmony_ci* @tc.author: 3020d163575Sopenharmony_ci*/ 3030d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices005, TestSize.Level0) 3040d163575Sopenharmony_ci{ 3050d163575Sopenharmony_ci ItProcessPlimitsDevices005(); 3060d163575Sopenharmony_ci} 3070d163575Sopenharmony_ci 3080d163575Sopenharmony_ci/** 3090d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_006 3100d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 3110d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3120d163575Sopenharmony_ci* @tc.author: 3130d163575Sopenharmony_ci*/ 3140d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices006, TestSize.Level0) 3150d163575Sopenharmony_ci{ 3160d163575Sopenharmony_ci ItProcessPlimitsDevices006(); 3170d163575Sopenharmony_ci} 3180d163575Sopenharmony_ci 3190d163575Sopenharmony_ci/** 3200d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_007 3210d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 3220d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3230d163575Sopenharmony_ci* @tc.author: 3240d163575Sopenharmony_ci*/ 3250d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices007, TestSize.Level0) 3260d163575Sopenharmony_ci{ 3270d163575Sopenharmony_ci ItProcessPlimitsDevices007(); 3280d163575Sopenharmony_ci} 3290d163575Sopenharmony_ci 3300d163575Sopenharmony_ci/** 3310d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_008 3320d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 3330d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3340d163575Sopenharmony_ci* @tc.author: 3350d163575Sopenharmony_ci*/ 3360d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices008, TestSize.Level0) 3370d163575Sopenharmony_ci{ 3380d163575Sopenharmony_ci ItProcessPlimitsDevices008(); 3390d163575Sopenharmony_ci} 3400d163575Sopenharmony_ci 3410d163575Sopenharmony_ci/** 3420d163575Sopenharmony_ci* @tc.name: plimits_Dev_Test_009 3430d163575Sopenharmony_ci* @tc.desc: devices plimit function test case 3440d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3450d163575Sopenharmony_ci* @tc.author: 3460d163575Sopenharmony_ci*/ 3470d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsDevices009, TestSize.Level0) 3480d163575Sopenharmony_ci{ 3490d163575Sopenharmony_ci ItProcessPlimitsDevices009(); 3500d163575Sopenharmony_ci} 3510d163575Sopenharmony_ci 3520d163575Sopenharmony_ci/** 3530d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_002 3540d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 3550d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3560d163575Sopenharmony_ci* @tc.author: 3570d163575Sopenharmony_ci*/ 3580d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc002, TestSize.Level0) 3590d163575Sopenharmony_ci{ 3600d163575Sopenharmony_ci ItProcessPlimitsIpc002(); 3610d163575Sopenharmony_ci} 3620d163575Sopenharmony_ci 3630d163575Sopenharmony_ci/** 3640d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_003 3650d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 3660d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3670d163575Sopenharmony_ci* @tc.author: 3680d163575Sopenharmony_ci*/ 3690d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc003, TestSize.Level0) 3700d163575Sopenharmony_ci{ 3710d163575Sopenharmony_ci ItProcessPlimitsIpc003(); 3720d163575Sopenharmony_ci} 3730d163575Sopenharmony_ci 3740d163575Sopenharmony_ci/** 3750d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_004 3760d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 3770d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3780d163575Sopenharmony_ci* @tc.author: 3790d163575Sopenharmony_ci*/ 3800d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc004, TestSize.Level0) 3810d163575Sopenharmony_ci{ 3820d163575Sopenharmony_ci ItProcessPlimitsIpc004(); 3830d163575Sopenharmony_ci} 3840d163575Sopenharmony_ci 3850d163575Sopenharmony_ci/** 3860d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_005 3870d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 3880d163575Sopenharmony_ci* @tc.require: issueI6GVPL 3890d163575Sopenharmony_ci* @tc.author: 3900d163575Sopenharmony_ci*/ 3910d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc005, TestSize.Level0) 3920d163575Sopenharmony_ci{ 3930d163575Sopenharmony_ci ItProcessPlimitsIpc005(); 3940d163575Sopenharmony_ci} 3950d163575Sopenharmony_ci 3960d163575Sopenharmony_ci/** 3970d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_006 3980d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 3990d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4000d163575Sopenharmony_ci* @tc.author: 4010d163575Sopenharmony_ci*/ 4020d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc006, TestSize.Level0) 4030d163575Sopenharmony_ci{ 4040d163575Sopenharmony_ci ItProcessPlimitsIpc006(); 4050d163575Sopenharmony_ci} 4060d163575Sopenharmony_ci 4070d163575Sopenharmony_ci/** 4080d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_007 4090d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4100d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4110d163575Sopenharmony_ci* @tc.author: 4120d163575Sopenharmony_ci*/ 4130d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc007, TestSize.Level0) 4140d163575Sopenharmony_ci{ 4150d163575Sopenharmony_ci ItProcessPlimitsIpc007(); 4160d163575Sopenharmony_ci} 4170d163575Sopenharmony_ci 4180d163575Sopenharmony_ci/** 4190d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_008 4200d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4210d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4220d163575Sopenharmony_ci* @tc.author: 4230d163575Sopenharmony_ci*/ 4240d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc008, TestSize.Level0) 4250d163575Sopenharmony_ci{ 4260d163575Sopenharmony_ci ItProcessPlimitsIpc008(); 4270d163575Sopenharmony_ci} 4280d163575Sopenharmony_ci 4290d163575Sopenharmony_ci/** 4300d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_009 4310d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4320d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4330d163575Sopenharmony_ci* @tc.author: 4340d163575Sopenharmony_ci*/ 4350d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc009, TestSize.Level0) 4360d163575Sopenharmony_ci{ 4370d163575Sopenharmony_ci ItProcessPlimitsIpc009(); 4380d163575Sopenharmony_ci} 4390d163575Sopenharmony_ci 4400d163575Sopenharmony_ci/** 4410d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_010 4420d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4430d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4440d163575Sopenharmony_ci* @tc.author: 4450d163575Sopenharmony_ci*/ 4460d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc010, TestSize.Level0) 4470d163575Sopenharmony_ci{ 4480d163575Sopenharmony_ci ItProcessPlimitsIpc010(); 4490d163575Sopenharmony_ci} 4500d163575Sopenharmony_ci 4510d163575Sopenharmony_ci/** 4520d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_011 4530d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4540d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4550d163575Sopenharmony_ci* @tc.author: 4560d163575Sopenharmony_ci*/ 4570d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc011, TestSize.Level0) 4580d163575Sopenharmony_ci{ 4590d163575Sopenharmony_ci ItProcessPlimitsIpc011(); 4600d163575Sopenharmony_ci} 4610d163575Sopenharmony_ci 4620d163575Sopenharmony_ci/** 4630d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_012 4640d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4650d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4660d163575Sopenharmony_ci* @tc.author: 4670d163575Sopenharmony_ci*/ 4680d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc012, TestSize.Level0) 4690d163575Sopenharmony_ci{ 4700d163575Sopenharmony_ci ItProcessPlimitsIpc012(); 4710d163575Sopenharmony_ci} 4720d163575Sopenharmony_ci 4730d163575Sopenharmony_ci/** 4740d163575Sopenharmony_ci* @tc.name: plimits_Ipc_Test_013 4750d163575Sopenharmony_ci* @tc.desc: ipc plimit function test case 4760d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4770d163575Sopenharmony_ci* @tc.author: 4780d163575Sopenharmony_ci*/ 4790d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, ItProcessPlimitsIpc013, TestSize.Level0) 4800d163575Sopenharmony_ci{ 4810d163575Sopenharmony_ci ItProcessPlimitsIpc013(); 4820d163575Sopenharmony_ci} 4830d163575Sopenharmony_ci 4840d163575Sopenharmony_ci/** 4850d163575Sopenharmony_ci* @tc.name: plimits_Sched_Test_001 4860d163575Sopenharmony_ci* @tc.desc: sched plimit function test case 4870d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4880d163575Sopenharmony_ci* @tc.author: 4890d163575Sopenharmony_ci*/ 4900d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, IItProcessPlimitsSched001, TestSize.Level0) 4910d163575Sopenharmony_ci{ 4920d163575Sopenharmony_ci ItProcessPlimitsSched001(); 4930d163575Sopenharmony_ci} 4940d163575Sopenharmony_ci 4950d163575Sopenharmony_ci/** 4960d163575Sopenharmony_ci* @tc.name: plimits_Sched_Test_002 4970d163575Sopenharmony_ci* @tc.desc: sched plimit function test case 4980d163575Sopenharmony_ci* @tc.require: issueI6GVPL 4990d163575Sopenharmony_ci* @tc.author: 5000d163575Sopenharmony_ci*/ 5010d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, IItProcessPlimitsSched002, TestSize.Level0) 5020d163575Sopenharmony_ci{ 5030d163575Sopenharmony_ci ItProcessPlimitsSched002(); 5040d163575Sopenharmony_ci} 5050d163575Sopenharmony_ci 5060d163575Sopenharmony_ci/** 5070d163575Sopenharmony_ci* @tc.name: plimits_Sched_Test_003 5080d163575Sopenharmony_ci* @tc.desc: sched plimit function test case 5090d163575Sopenharmony_ci* @tc.require: issueI6GVPL 5100d163575Sopenharmony_ci* @tc.author: 5110d163575Sopenharmony_ci*/ 5120d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, IItProcessPlimitsSched003, TestSize.Level0) 5130d163575Sopenharmony_ci{ 5140d163575Sopenharmony_ci ItProcessPlimitsSched003(); 5150d163575Sopenharmony_ci} 5160d163575Sopenharmony_ci 5170d163575Sopenharmony_ci/** 5180d163575Sopenharmony_ci* @tc.name: plimits_Sched_Test_004 5190d163575Sopenharmony_ci* @tc.desc: sched plimit function test case 5200d163575Sopenharmony_ci* @tc.require: issueI6GVPL 5210d163575Sopenharmony_ci* @tc.author: 5220d163575Sopenharmony_ci*/ 5230d163575Sopenharmony_ciHWTEST_F(ProcessPlimitsTest, IItProcessPlimitsSched004, TestSize.Level0) 5240d163575Sopenharmony_ci{ 5250d163575Sopenharmony_ci ItProcessPlimitsSched004(); 5260d163575Sopenharmony_ci} 5270d163575Sopenharmony_ci#endif 5280d163575Sopenharmony_ci} // namespace OHOS 5290d163575Sopenharmony_ci 5300d163575Sopenharmony_ci 5310d163575Sopenharmony_cinamespace OHOS { 5320d163575Sopenharmony_civoid ProcessPlimitsTest::SetUp() 5330d163575Sopenharmony_ci{ 5340d163575Sopenharmony_ci (void)rmdir("/proc/plimits/test"); 5350d163575Sopenharmony_ci} 5360d163575Sopenharmony_ci 5370d163575Sopenharmony_civoid ProcessPlimitsTest::TearDown() 5380d163575Sopenharmony_ci{ 5390d163575Sopenharmony_ci (void)rmdir("/proc/plimits/test"); 5400d163575Sopenharmony_ci} 5410d163575Sopenharmony_ci 5420d163575Sopenharmony_cibool ProcessPlimitsTest::IsFile(const std::string &file) 5430d163575Sopenharmony_ci{ 5440d163575Sopenharmony_ci struct stat statbuf; 5450d163575Sopenharmony_ci return (lstat(file.c_str(), &statbuf) == 0) && S_ISREG(statbuf.st_mode); 5460d163575Sopenharmony_ci} 5470d163575Sopenharmony_ci 5480d163575Sopenharmony_cibool ProcessPlimitsTest::IsDir(const std::string &path) 5490d163575Sopenharmony_ci{ 5500d163575Sopenharmony_ci struct stat statbuf; 5510d163575Sopenharmony_ci return (lstat(path.c_str(), &statbuf) == 0) && S_ISDIR(statbuf.st_mode); 5520d163575Sopenharmony_ci} 5530d163575Sopenharmony_ci 5540d163575Sopenharmony_cibool ProcessPlimitsTest::IsSpecialDir(const std::string &path) 5550d163575Sopenharmony_ci{ 5560d163575Sopenharmony_ci return strcmp(path.c_str(), ".") == 0 || strcmp(path.c_str(), "..") == 0; 5570d163575Sopenharmony_ci} 5580d163575Sopenharmony_ci} // namespace OHOS 5590d163575Sopenharmony_ci 5600d163575Sopenharmony_ciint ReadFile(const char *filepath, char *buf) 5610d163575Sopenharmony_ci{ 5620d163575Sopenharmony_ci FILE *fpid = nullptr; 5630d163575Sopenharmony_ci fpid = fopen(filepath, "r"); 5640d163575Sopenharmony_ci if (fpid == nullptr) { 5650d163575Sopenharmony_ci return -1; 5660d163575Sopenharmony_ci } 5670d163575Sopenharmony_ci size_t trd = fread(buf, 1, 512, fpid); 5680d163575Sopenharmony_ci (void)fclose(fpid); 5690d163575Sopenharmony_ci return trd; 5700d163575Sopenharmony_ci} 5710d163575Sopenharmony_ci 5720d163575Sopenharmony_ciint WriteFile(const char *filepath, const char *buf) 5730d163575Sopenharmony_ci{ 5740d163575Sopenharmony_ci int fd = open(filepath, O_WRONLY); 5750d163575Sopenharmony_ci if (fd == -1) { 5760d163575Sopenharmony_ci return -1; 5770d163575Sopenharmony_ci } 5780d163575Sopenharmony_ci size_t twd = write(fd, buf, strlen(buf)); 5790d163575Sopenharmony_ci if (twd == -1) { 5800d163575Sopenharmony_ci (void)close(fd); 5810d163575Sopenharmony_ci return -1; 5820d163575Sopenharmony_ci } 5830d163575Sopenharmony_ci (void)close(fd); 5840d163575Sopenharmony_ci return twd; 5850d163575Sopenharmony_ci} 5860d163575Sopenharmony_ci 5870d163575Sopenharmony_ciint GetLine(char *buf, int count, int maxLen, char **array) 5880d163575Sopenharmony_ci{ 5890d163575Sopenharmony_ci char *head = buf; 5900d163575Sopenharmony_ci char *tail = buf; 5910d163575Sopenharmony_ci char index = 0; 5920d163575Sopenharmony_ci if ((buf == NULL) || (strlen(buf) == 0)) { 5930d163575Sopenharmony_ci return 0; 5940d163575Sopenharmony_ci } 5950d163575Sopenharmony_ci while (*tail != '\0') { 5960d163575Sopenharmony_ci if (*tail != '\n') { 5970d163575Sopenharmony_ci tail++; 5980d163575Sopenharmony_ci continue; 5990d163575Sopenharmony_ci } 6000d163575Sopenharmony_ci if (index >= count) { 6010d163575Sopenharmony_ci return index + 1; 6020d163575Sopenharmony_ci } 6030d163575Sopenharmony_ci 6040d163575Sopenharmony_ci array[index] = head; 6050d163575Sopenharmony_ci index++; 6060d163575Sopenharmony_ci *tail = '\0'; 6070d163575Sopenharmony_ci if (strlen(head) > maxLen) { 6080d163575Sopenharmony_ci return index + 1; 6090d163575Sopenharmony_ci } 6100d163575Sopenharmony_ci tail++; 6110d163575Sopenharmony_ci head = tail; 6120d163575Sopenharmony_ci tail++; 6130d163575Sopenharmony_ci } 6140d163575Sopenharmony_ci return (index + 1); 6150d163575Sopenharmony_ci} 6160d163575Sopenharmony_ci 6170d163575Sopenharmony_ciint RmdirTest(std::string path) 6180d163575Sopenharmony_ci{ 6190d163575Sopenharmony_ci int ret; 6200d163575Sopenharmony_ci RmdirControlFile(path); 6210d163575Sopenharmony_ci ret = rmdir(path.c_str()); 6220d163575Sopenharmony_ci ICUNIT_ASSERT_EQUAL(ret, 0, ret); 6230d163575Sopenharmony_ci return 0; 6240d163575Sopenharmony_ci} 6250d163575Sopenharmony_ci 6260d163575Sopenharmony_ciint WaitForCpupStable(int expectedCpupPercent) 6270d163575Sopenharmony_ci{ 6280d163575Sopenharmony_ci int sleepTime; 6290d163575Sopenharmony_ci if (expectedCpupPercent >= QUOTA_PERCENT_100) { 6300d163575Sopenharmony_ci sleepTime = WAIT_CPUP_STABLE_FOR_100; 6310d163575Sopenharmony_ci } else { 6320d163575Sopenharmony_ci sleepTime = WAIT_CPUP_STABLE; 6330d163575Sopenharmony_ci } 6340d163575Sopenharmony_ci return sleep(sleepTime); 6350d163575Sopenharmony_ci} 6360d163575Sopenharmony_ci 6370d163575Sopenharmony_cistatic int SampleRound(void) 6380d163575Sopenharmony_ci{ 6390d163575Sopenharmony_ci return STATISTIC_TIMES; 6400d163575Sopenharmony_ci} 6410d163575Sopenharmony_ci 6420d163575Sopenharmony_cistatic vector<string> GetProcessInfo(pid_t pid) 6430d163575Sopenharmony_ci{ 6440d163575Sopenharmony_ci vector<string> contentArr; 6450d163575Sopenharmony_ci char buf[TEST_BUFFER_SIZE + 1] = {0}; 6460d163575Sopenharmony_ci string strpid = to_string(pid); 6470d163575Sopenharmony_ci 6480d163575Sopenharmony_ci ifstream infile; 6490d163575Sopenharmony_ci infile.open("/proc/process"); 6500d163575Sopenharmony_ci while (!infile.eof()) { 6510d163575Sopenharmony_ci infile.getline(buf, TEST_BUFFER_SIZE); 6520d163575Sopenharmony_ci regex e("^\\s+"+strpid); 6530d163575Sopenharmony_ci int matchResult = regex_search(buf, e); 6540d163575Sopenharmony_ci if (matchResult == 1) { 6550d163575Sopenharmony_ci istringstream str(buf); 6560d163575Sopenharmony_ci string out; 6570d163575Sopenharmony_ci while (str >> out) { 6580d163575Sopenharmony_ci contentArr.push_back(out); 6590d163575Sopenharmony_ci } 6600d163575Sopenharmony_ci break; 6610d163575Sopenharmony_ci } 6620d163575Sopenharmony_ci (void)memset_s(buf, TEST_BUFFER_SIZE, 0, TEST_BUFFER_SIZE); 6630d163575Sopenharmony_ci } 6640d163575Sopenharmony_ci infile.close(); 6650d163575Sopenharmony_ci (void)memset_s(buf, TEST_BUFFER_SIZE, 0, TEST_BUFFER_SIZE); 6660d163575Sopenharmony_ci return contentArr; 6670d163575Sopenharmony_ci} 6680d163575Sopenharmony_ci 6690d163575Sopenharmony_ci 6700d163575Sopenharmony_cistatic void SigQuit(int s) 6710d163575Sopenharmony_ci{ 6720d163575Sopenharmony_ci exit(0); 6730d163575Sopenharmony_ci} 6740d163575Sopenharmony_ci 6750d163575Sopenharmony_cistatic int ChildRunCpup() 6760d163575Sopenharmony_ci{ 6770d163575Sopenharmony_ci struct sigaction act; 6780d163575Sopenharmony_ci act.sa_handler = SigQuit; 6790d163575Sopenharmony_ci (void)sigaction(SIGUSR1, &act, NULL); 6800d163575Sopenharmony_ci 6810d163575Sopenharmony_ci unsigned long x = 1; 6820d163575Sopenharmony_ci unsigned long y = 1; 6830d163575Sopenharmony_ci while (1) { 6840d163575Sopenharmony_ci y++; 6850d163575Sopenharmony_ci x *= y; 6860d163575Sopenharmony_ci } 6870d163575Sopenharmony_ci 6880d163575Sopenharmony_ci return 0; 6890d163575Sopenharmony_ci} 6900d163575Sopenharmony_ci 6910d163575Sopenharmony_ciint ForkChilds(int num, int *pidArray) 6920d163575Sopenharmony_ci{ 6930d163575Sopenharmony_ci pid_t childPid; 6940d163575Sopenharmony_ci pid_t pidArrayLocal[PROCESS_LIMIT_AMOUNT]; 6950d163575Sopenharmony_ci 6960d163575Sopenharmony_ci for (int idx = 0; idx < num; idx++) { 6970d163575Sopenharmony_ci childPid = fork(); 6980d163575Sopenharmony_ci if (childPid == 0) { 6990d163575Sopenharmony_ci (void)ChildRunCpup(); 7000d163575Sopenharmony_ci } else if (childPid > 0) { 7010d163575Sopenharmony_ci pidArrayLocal[idx] = childPid; 7020d163575Sopenharmony_ci *pidArray = childPid; 7030d163575Sopenharmony_ci pidArray++; 7040d163575Sopenharmony_ci } else { 7050d163575Sopenharmony_ci return -errno; 7060d163575Sopenharmony_ci } 7070d163575Sopenharmony_ci } 7080d163575Sopenharmony_ci return 0; 7090d163575Sopenharmony_ci} 7100d163575Sopenharmony_ci 7110d163575Sopenharmony_cistatic double GetCpup(pid_t pid) 7120d163575Sopenharmony_ci{ 7130d163575Sopenharmony_ci auto content = GetProcessInfo(pid); 7140d163575Sopenharmony_ci double cpup10s = atof(content[CPUP10S_INDEX].c_str()); 7150d163575Sopenharmony_ci return cpup10s; 7160d163575Sopenharmony_ci} 7170d163575Sopenharmony_ci 7180d163575Sopenharmony_cistatic int CollectCpupData(int childAmount, int sampleSeconds, int *pidArray, vector<vector<double>> &cpupValuesArray) 7190d163575Sopenharmony_ci{ 7200d163575Sopenharmony_ci double cpup10s; 7210d163575Sopenharmony_ci for (int i = 0; i < sampleSeconds; i++) { 7220d163575Sopenharmony_ci for (int j = 0; j < childAmount;j++) { 7230d163575Sopenharmony_ci cpup10s = GetCpup(pidArray[j]); 7240d163575Sopenharmony_ci cpupValuesArray[j].push_back(cpup10s); 7250d163575Sopenharmony_ci } 7260d163575Sopenharmony_ci sleep(1); 7270d163575Sopenharmony_ci } 7280d163575Sopenharmony_ci return 0; 7290d163575Sopenharmony_ci} 7300d163575Sopenharmony_ci 7310d163575Sopenharmony_cistatic int CalcAverageCpup(int num, vector<vector<double>> &cpupValuesArray, double *cpupAverageArray) 7320d163575Sopenharmony_ci{ 7330d163575Sopenharmony_ci double cpup10sAverage; 7340d163575Sopenharmony_ci for (int idx = 0; idx < num; idx++) { 7350d163575Sopenharmony_ci auto size = cpupValuesArray[idx].size(); 7360d163575Sopenharmony_ci cpup10sAverage = std::accumulate(cpupValuesArray[idx].begin(), cpupValuesArray[idx].end(), 0.0) / size; 7370d163575Sopenharmony_ci cpupAverageArray[idx] = cpup10sAverage; 7380d163575Sopenharmony_ci } 7390d163575Sopenharmony_ci return 0; 7400d163575Sopenharmony_ci} 7410d163575Sopenharmony_ci 7420d163575Sopenharmony_ciint CreatePlimitGroup(const char* groupName, char *childPidFiles, 7430d163575Sopenharmony_ci unsigned long long periodUs, unsigned long long quotaUs) 7440d163575Sopenharmony_ci{ 7450d163575Sopenharmony_ci int ret; 7460d163575Sopenharmony_ci mode_t mode = 0777; 7470d163575Sopenharmony_ci char dirpath[TEST_BUFFER_SIZE]; 7480d163575Sopenharmony_ci char procspath[TEST_BUFFER_SIZE]; 7490d163575Sopenharmony_ci char periodpath[TEST_BUFFER_SIZE]; 7500d163575Sopenharmony_ci char quotapath[TEST_BUFFER_SIZE]; 7510d163575Sopenharmony_ci char periodValue[TEST_BUFFER_SIZE]; 7520d163575Sopenharmony_ci char quotaValue[TEST_BUFFER_SIZE]; 7530d163575Sopenharmony_ci 7540d163575Sopenharmony_ci if (sprintf_s(dirpath, TEST_BUFFER_SIZE, "/proc/plimits/%s", groupName) < 0) { 7550d163575Sopenharmony_ci return -1; 7560d163575Sopenharmony_ci } 7570d163575Sopenharmony_ci if (sprintf_s(procspath, TEST_BUFFER_SIZE, "%s/plimits.procs", dirpath) < 0) { 7580d163575Sopenharmony_ci return -1; 7590d163575Sopenharmony_ci } 7600d163575Sopenharmony_ci if (sprintf_s(periodpath, TEST_BUFFER_SIZE, "%s/sched.period", dirpath) < 0) { 7610d163575Sopenharmony_ci return -1; 7620d163575Sopenharmony_ci } 7630d163575Sopenharmony_ci if (sprintf_s(quotapath, TEST_BUFFER_SIZE, "%s/sched.quota", dirpath) < 0) { 7640d163575Sopenharmony_ci return -1; 7650d163575Sopenharmony_ci } 7660d163575Sopenharmony_ci 7670d163575Sopenharmony_ci ret = access(dirpath, 0); 7680d163575Sopenharmony_ci ICUNIT_ASSERT_EQUAL(ret, -1, ret); 7690d163575Sopenharmony_ci 7700d163575Sopenharmony_ci ret = mkdir(dirpath, mode); 7710d163575Sopenharmony_ci ICUNIT_ASSERT_EQUAL(ret, 0, ret); 7720d163575Sopenharmony_ci 7730d163575Sopenharmony_ci if (sprintf_s(periodValue, TEST_BUFFER_SIZE, "%llu", periodUs) < 0) { 7740d163575Sopenharmony_ci return -1; 7750d163575Sopenharmony_ci } 7760d163575Sopenharmony_ci if (sprintf_s(quotaValue, TEST_BUFFER_SIZE, "%llu", quotaUs) < 0) { 7770d163575Sopenharmony_ci return -1; 7780d163575Sopenharmony_ci } 7790d163575Sopenharmony_ci ret = WriteFile(periodpath, periodValue); 7800d163575Sopenharmony_ci if (ret < 0) { 7810d163575Sopenharmony_ci printf("%s %d\n", __FUNCTION__, __LINE__); 7820d163575Sopenharmony_ci return ret; 7830d163575Sopenharmony_ci } 7840d163575Sopenharmony_ci ret = WriteFile(quotapath, quotaValue); 7850d163575Sopenharmony_ci if (ret < 0) { 7860d163575Sopenharmony_ci printf("%s %d\n", __FUNCTION__, __LINE__); 7870d163575Sopenharmony_ci return ret; 7880d163575Sopenharmony_ci } 7890d163575Sopenharmony_ci if (sprintf_s(childPidFiles, TEST_BUFFER_SIZE, "%s", procspath) < 0) { 7900d163575Sopenharmony_ci return -1; 7910d163575Sopenharmony_ci } 7920d163575Sopenharmony_ci return 0; 7930d163575Sopenharmony_ci} 7940d163575Sopenharmony_ci 7950d163575Sopenharmony_ciint CreatePlimitGroupWithoutLimit(const char* groupName, char *childPidFiles) 7960d163575Sopenharmony_ci{ 7970d163575Sopenharmony_ci int ret; 7980d163575Sopenharmony_ci mode_t mode = 0777; 7990d163575Sopenharmony_ci char dirpath[TEST_BUFFER_SIZE]; 8000d163575Sopenharmony_ci char procspath[TEST_BUFFER_SIZE]; 8010d163575Sopenharmony_ci 8020d163575Sopenharmony_ci if (sprintf_s(dirpath, TEST_BUFFER_SIZE, "/proc/plimits/%s", groupName) < 0) { 8030d163575Sopenharmony_ci return -1; 8040d163575Sopenharmony_ci } 8050d163575Sopenharmony_ci if (sprintf_s(procspath, TEST_BUFFER_SIZE, "%s/plimits.procs", dirpath) < 0) { 8060d163575Sopenharmony_ci return -1; 8070d163575Sopenharmony_ci } 8080d163575Sopenharmony_ci 8090d163575Sopenharmony_ci ret = access(dirpath, 0); 8100d163575Sopenharmony_ci ICUNIT_ASSERT_EQUAL(ret, -1, ret); 8110d163575Sopenharmony_ci ret = mkdir(dirpath, mode); 8120d163575Sopenharmony_ci ICUNIT_ASSERT_EQUAL(ret, 0, ret); 8130d163575Sopenharmony_ci if (sprintf_s(childPidFiles, TEST_BUFFER_SIZE, "%s", procspath) < 0) { 8140d163575Sopenharmony_ci return -1; 8150d163575Sopenharmony_ci } 8160d163575Sopenharmony_ci return 0; 8170d163575Sopenharmony_ci} 8180d163575Sopenharmony_ci 8190d163575Sopenharmony_ciint TerminateChildProcess(int *childPidArray, int childAmount, int sig) 8200d163575Sopenharmony_ci{ 8210d163575Sopenharmony_ci int idx; 8220d163575Sopenharmony_ci for (idx = 0; idx < childAmount; idx++) { 8230d163575Sopenharmony_ci (void)kill(childPidArray[idx], SIGUSR1); 8240d163575Sopenharmony_ci 8250d163575Sopenharmony_ci int status; 8260d163575Sopenharmony_ci (void)waitpid(childPidArray[idx], &status, 0); 8270d163575Sopenharmony_ci } 8280d163575Sopenharmony_ci 8290d163575Sopenharmony_ci (void)signal(SIGUSR1, SIG_DFL); 8300d163575Sopenharmony_ci return 0; 8310d163575Sopenharmony_ci} 8320d163575Sopenharmony_ci 8330d163575Sopenharmony_cidouble CalcCpupUsage(int childAmount, int *childPidArray, int expectedCpupPercent) 8340d163575Sopenharmony_ci{ 8350d163575Sopenharmony_ci int idx; 8360d163575Sopenharmony_ci int sampleSeconds = SampleRound(); 8370d163575Sopenharmony_ci vector<vector<double>> cpupValuesArray(PROCESS_LIMIT_AMOUNT); 8380d163575Sopenharmony_ci (void)CollectCpupData(childAmount, sampleSeconds, &childPidArray[0], cpupValuesArray); 8390d163575Sopenharmony_ci 8400d163575Sopenharmony_ci double actualCpup10sArray[PROCESS_LIMIT_AMOUNT]; 8410d163575Sopenharmony_ci (void)CalcAverageCpup(childAmount, cpupValuesArray, &actualCpup10sArray[0]); 8420d163575Sopenharmony_ci 8430d163575Sopenharmony_ci double sumAllChildsCpup = 0; 8440d163575Sopenharmony_ci for (idx = 0; idx < childAmount; idx++) { 8450d163575Sopenharmony_ci sumAllChildsCpup += actualCpup10sArray[idx]; 8460d163575Sopenharmony_ci } 8470d163575Sopenharmony_ci return sumAllChildsCpup; 8480d163575Sopenharmony_ci} 8490d163575Sopenharmony_ci 8500d163575Sopenharmony_cidouble CheckCpupUsage(double sumAllChildsCpup, int expectedCpupPercent) 8510d163575Sopenharmony_ci{ 8520d163575Sopenharmony_ci if (expectedCpupPercent <= 0.0) { 8530d163575Sopenharmony_ci return 500.0; /* 500.0: errno */ 8540d163575Sopenharmony_ci } 8550d163575Sopenharmony_ci double errorRate = fabs(sumAllChildsCpup / expectedCpupPercent - 1.0); 8560d163575Sopenharmony_ci return errorRate; 8570d163575Sopenharmony_ci} 8580d163575Sopenharmony_ci 8590d163575Sopenharmony_ciint checkCpupUsageGreaterThan(double sumAllChildsCpup, int expectedCpupPercent) 8600d163575Sopenharmony_ci{ 8610d163575Sopenharmony_ci if (sumAllChildsCpup > expectedCpupPercent) { 8620d163575Sopenharmony_ci return 0; 8630d163575Sopenharmony_ci } else { 8640d163575Sopenharmony_ci return -1; 8650d163575Sopenharmony_ci } 8660d163575Sopenharmony_ci} 8670d163575Sopenharmony_ci 8680d163575Sopenharmony_cidouble TestCpupInPlimit(int childAmount, const char* groupName, 8690d163575Sopenharmony_ci unsigned long long periodUs, unsigned long long quotaUs, int expectedCpupPercent) 8700d163575Sopenharmony_ci{ 8710d163575Sopenharmony_ci char dirpath[TEST_BUFFER_SIZE]; 8720d163575Sopenharmony_ci pid_t childPidArray[PROCESS_LIMIT_AMOUNT]; 8730d163575Sopenharmony_ci char procspath[TEST_BUFFER_SIZE]; 8740d163575Sopenharmony_ci double sumAllChildsCpup = 0; 8750d163575Sopenharmony_ci 8760d163575Sopenharmony_ci int ret = CreatePlimitGroup(groupName, procspath, periodUs, quotaUs); 8770d163575Sopenharmony_ci if (ret < 0) { 8780d163575Sopenharmony_ci printf("%s %d, ret=%d\n", __FUNCTION__, __LINE__, ret); 8790d163575Sopenharmony_ci return 100.0; /* 100.0: errno */ 8800d163575Sopenharmony_ci } 8810d163575Sopenharmony_ci ret = ForkChilds(childAmount, &childPidArray[0]); 8820d163575Sopenharmony_ci if (ret != 0) { 8830d163575Sopenharmony_ci printf("%s %d, ret=%d\n", __FUNCTION__, __LINE__, ret); 8840d163575Sopenharmony_ci return 200.0; /* 200.0: errno */ 8850d163575Sopenharmony_ci } 8860d163575Sopenharmony_ci (void)WaitForCpupStable(expectedCpupPercent); 8870d163575Sopenharmony_ci sumAllChildsCpup = CalcCpupUsage(childAmount, &childPidArray[0], 0); 8880d163575Sopenharmony_ci double errorRate = CheckCpupUsage(sumAllChildsCpup, expectedCpupPercent); 8890d163575Sopenharmony_ci 8900d163575Sopenharmony_ci (void)TerminateChildProcess(&childPidArray[0], childAmount, SIGUSR1); 8910d163575Sopenharmony_ci 8920d163575Sopenharmony_ci if (sprintf_s(dirpath, TEST_BUFFER_SIZE, "/proc/plimits/%s", groupName) < 0) { 8930d163575Sopenharmony_ci return 300.0; /* 300.0: errno */ 8940d163575Sopenharmony_ci } 8950d163575Sopenharmony_ci ret = rmdir(dirpath); 8960d163575Sopenharmony_ci if (ret != 0) { 8970d163575Sopenharmony_ci printf("%s %d, ret=%d\n", __FUNCTION__, __LINE__, errno); 8980d163575Sopenharmony_ci return 400.0; /* 400.0: errno */ 8990d163575Sopenharmony_ci } 9000d163575Sopenharmony_ci return errorRate; 9010d163575Sopenharmony_ci} 902