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