提交 da9ce464 编写于 作者: Z zhushengle

feat: 添加cgroups测试用例

Close #I6H2AR
Signed-off-by: Nzhushengle <zhushengle@huawei.com>
Change-Id: I31a432b69ea5fbad137aa1bb947fff4b6fc307df
上级 f0a435dc
......@@ -68,8 +68,6 @@ static ssize_t PidLimitReadPriorityLimit(struct SeqBuf *seqBuf, VOID *data);
static ssize_t PriorityLimitVariableWrite(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos);
static ssize_t PidsMaxVariableWrite(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos);
static ssize_t ProcLimitsShowLimiters(struct SeqBuf *seqBuf, VOID *data);
static ssize_t ProcLimitsDeleteLimiters(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos);
static ssize_t ProcLimitsAddLimiters(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos);
static int ProcfsPlimitsMkdir(struct ProcDirEntry *parent, const char *dirName, mode_t mode, struct ProcDirEntry **pde);
static int ProcfsPlimitsRmdir(struct ProcDirEntry *parent, struct ProcDirEntry *pde, const char *name);
#ifdef LOSCFG_KERNEL_MEM_PLIMIT
......@@ -120,24 +118,6 @@ static struct PLimitsEntryOpt g_plimitsEntryOpts[] = {
.read = ProcLimitsShowLimiters,
}
},
{
.id = PROCESS_LIMITER_COUNT,
.name = "plimits.limiter_add",
.mode = PLIMIT_FILE_MODE_READ_WRITE,
.offset = UNITPTR_NULL,
.ops = {
.write = ProcLimitsAddLimiters,
},
},
{
.id = PROCESS_LIMITER_COUNT,
.name = "plimits.limiter_delete",
.mode = PLIMIT_FILE_MODE_READ_WRITE,
.offset = UNITPTR_NULL,
.ops = {
.write = ProcLimitsDeleteLimiters,
},
},
{
.id = PROCESS_LIMITER_COUNT,
.name = "plimits.procs",
......@@ -458,152 +438,6 @@ static ssize_t ProcLimitsShowLimiters(struct SeqBuf *seqBuf, VOID *data)
return LOS_OK;
}
static ssize_t ProcLimitsAddLimiters(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos)
{
(VOID)ppos;
unsigned int ret;
struct ProcDirEntry *dirEntry = pf->pPDE;
ProcLimiterSet *plimits = GetProcLimiterSetFromDirEntry(dirEntry);
char *kbuf = NULL;
ret = MemUserCopy(buf, count, &kbuf);
if (ret != 0) {
return -ret;
} else if ((ret == 0) && (kbuf != NULL)) {
buf = (const char *)kbuf;
}
enum ProcLimiterID procLimiterID = 0;
if (strcmp(buf, "pids") == 0) {
procLimiterID = PROCESS_LIMITER_ID_PIDS;
#ifdef LOSCFG_KERNEL_MEM_PLIMIT
} else if (strcmp(buf, "memory") == 0) {
procLimiterID = PROCESS_LIMITER_ID_MEM;
#endif
#ifdef LOSCFG_KERNEL_IPC_PLIMIT
} else if (strcmp(buf, "ipc") == 0) {
procLimiterID = PROCESS_LIMITER_ID_IPC;
#endif
#ifdef LOSCFG_KERNEL_DEV_PLIMIT
} else if (strcmp(buf, "devices") == 0) {
procLimiterID = PROCESS_LIMITER_ID_DEV;
#endif
#ifdef LOSCFG_KERNEL_SCHED_PLIMIT
} else if (strcmp(buf, "sched") == 0) {
procLimiterID = PROCESS_LIMITER_ID_SCHED;
#endif
} else {
(void)LOS_MemFree(m_aucSysMem1, kbuf);
PRINTK("enter error, please check the params.\n");
return -EINVAL;
}
(void)LOS_MemFree(m_aucSysMem1, kbuf);
ret = OsPLimitsAddLimiters(plimits, procLimiterID);
if (ret != LOS_OK) {
return -ret;
}
ProcLimiterDirEntryInit(dirEntry, BIT(procLimiterID), PLIMIT_FILE_MODE_MASK_NONE);
return count;
}
static struct ProcDirEntry *PLimitsProcFindEntry(const char *name, struct ProcDirEntry *parent)
{
int len = strlen(name);
struct ProcDirEntry *pn = NULL;
for (pn = parent->subdir; pn != NULL; pn = pn->next) {
if (ProcMatch(len, name, pn)) {
break;
}
}
return pn;
}
static int DeleteProcEntry(const char *buf, struct ProcDirEntry *currDirectory)
{
struct ProcDirEntry *entry = PLimitsProcFindEntry(buf, currDirectory);
if (entry == NULL) {
return EINVAL;
}
ProcDetachNode(entry);
ProcEntryClearVnode(entry);
ProcFreeEntry(entry);
return 0;
}
static int PLimitsDeleteProcEntry(enum ProcLimiterID procLimiterID, struct ProcDirEntry *currDirectory)
{
for (int index = 0; index < (sizeof(g_plimitsEntryOpts) / sizeof(struct PLimitsEntryOpt)); index++) {
struct PLimitsEntryOpt *entryOpt = &g_plimitsEntryOpts[index];
if (entryOpt->id != procLimiterID) {
continue;
}
(void)DeleteProcEntry(entryOpt->name, currDirectory);
}
return 0;
}
static ssize_t ProcLimitsDeleteLimiters(struct ProcFile *pf, const CHAR *buf, size_t count, loff_t *ppos)
{
(VOID)ppos;
unsigned ret;
unsigned mask = 0;
enum ProcLimiterID procLimiterID = 0;
char *kbuf = NULL;
if ((pf == NULL) || (pf->pPDE == NULL)) {
return -EINVAL;
}
struct ProcDirEntry *pde = pf->pPDE;
struct ProcDirEntry *currDirectory = GetCurrDirectory(pde);
if ((currDirectory == NULL) || (currDirectory->data == NULL)) {
return -EINVAL;
}
ProcLimiterSet *plimits = (ProcLimiterSet *)currDirectory->data;
ret = MemUserCopy(buf, count, &kbuf);
if (ret != 0) {
return -ret;
} else if ((ret == 0) && (kbuf != NULL)) {
buf = (const char *)kbuf;
}
if (strcmp(buf, "pids") == 0) {
procLimiterID = PROCESS_LIMITER_ID_PIDS;
#ifdef LOSCFG_KERNEL_MEM_PLIMIT
} else if (strcmp(buf, "memory") == 0) {
procLimiterID = PROCESS_LIMITER_ID_MEM;
#endif
#ifdef LOSCFG_KERNEL_IPC_PLIMIT
} else if (strcmp(buf, "ipc") == 0) {
procLimiterID = PROCESS_LIMITER_ID_IPC;
#endif
#ifdef LOSCFG_KERNEL_DEV_PLIMIT
} else if (strcmp(buf, "devices") == 0) {
procLimiterID = PROCESS_LIMITER_ID_DEV;
#endif
#ifdef LOSCFG_KERNEL_SCHED_PLIMIT
} else if (strcmp(buf, "sched") == 0) {
procLimiterID = PROCESS_LIMITER_ID_SCHED;
#endif
} else {
PRINTK("the input information or format is incorrect.\n");
(void)LOS_MemFree(m_aucSysMem1, kbuf);
return -EINVAL;
}
(void)LOS_MemFree(m_aucSysMem1, kbuf);
ret = OsPLimitsDeleteLimiters(plimits, procLimiterID, &mask);
if (ret != LOS_OK) {
return -ret;
}
PLimitsDeleteProcEntry(procLimiterID, currDirectory);
return count;
}
#define PLIMITS_PID_STR_LENGTH 4
static int ShowPids(struct SeqBuf *seqBuf, VOID *data)
{
......
......@@ -645,15 +645,11 @@ int WriteProcFile(struct ProcDirEntry *pde, const void *buf, size_t len)
return -EISDIR;
}
#ifndef LOSCFG_KERNEL_PLIMITS
spin_lock(&procfsLock);
#endif
if ((pde->procFileOps != NULL) && (pde->procFileOps->write != NULL)) {
result = pde->procFileOps->write(pde->pf, (const char *)buf, len, &(pde->pf->fPos));
}
#ifndef LOSCFG_KERNEL_PLIMITS
spin_unlock(&procfsLock);
#endif
return result;
}
......
......@@ -58,7 +58,6 @@ VOID *OsDevLimitAlloc(VOID)
(VOID)memset_s(plimit, sizeof(ProcDevLimit), 0, sizeof(ProcDevLimit));
LOS_ListInit(&(plimit->accessList));
plimit->behavior = DEVLIMIT_DEFAULT_NONE;
LOS_AtomicSet(&plimit->rc, 1);
return (VOID *)plimit;
}
......@@ -79,11 +78,8 @@ VOID OsDevLimitFree(UINTPTR limit)
return;
}
LOS_AtomicDec(&devLimit->rc);
if (LOS_AtomicRead(&devLimit->rc) <= 0) {
DevAccessListDelete(devLimit);
LOS_KernelFree(devLimit);
}
DevAccessListDelete(devLimit);
LOS_KernelFree(devLimit);
}
STATIC UINT32 DevLimitCopyAccess(ProcDevLimit *devLimitDest, ProcDevLimit *devLimitSrc)
......@@ -110,16 +106,6 @@ VOID OsDevLimitCopy(UINTPTR dest, UINTPTR src)
devLimitDest->parent = (ProcDevLimit *)src;
}
VOID OsDevLimitMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process)
{
(VOID)currLimit;
ProcDevLimit *parentDevLimit = (ProcDevLimit *)parentLimit;
LosProcessCB *pcb = (LosProcessCB *)process;
if (pcb == NULL) {
LOS_AtomicInc(&parentDevLimit->rc);
}
}
STATIC INLINE INT32 IsSpace(INT32 c)
{
return (c == ' ' || (unsigned)c - '\t' < BUF_SEPARATOR);
......
......@@ -32,7 +32,6 @@
#define _LOS_DEVICELIMIT_H
#include "los_typedef.h"
#include "los_atomic.h"
#include "los_list.h"
#include "vfs_config.h"
......@@ -74,7 +73,6 @@ typedef struct DevAccessItem {
typedef struct ProcDevLimit {
struct ProcDevLimit *parent;
Atomic rc;
UINT8 allowFile;
UINT8 denyFile;
LOS_DL_LIST accessList; // device belong to devicelimite
......@@ -85,7 +83,6 @@ VOID OsDevLimitInit(UINTPTR limit);
VOID *OsDevLimitAlloc(VOID);
VOID OsDevLimitFree(UINTPTR limit);
VOID OsDevLimitCopy(UINTPTR dest, UINTPTR src);
VOID OsDevLimitMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process);
UINT32 OsDevLimitWriteAllow(ProcLimitSet *plimit, const CHAR *buf, UINT32 size);
UINT32 OsDevLimitWriteDeny(ProcLimitSet *plimit, const CHAR *buf, UINT32 size);
UINT32 OsDevLimitShow(ProcDevLimit *devLimit, struct SeqBuf *seqBuf);
......
......@@ -50,7 +50,6 @@ VOID *OsIPCLimitAlloc(VOID)
return NULL;
}
(VOID)memset_s(plimite, sizeof(ProcIPCLimit), 0, sizeof(ProcIPCLimit));
LOS_AtomicSet(&plimite->rc, 1);
return (VOID *)plimite;
}
......@@ -61,10 +60,7 @@ VOID OsIPCLimitFree(UINTPTR limite)
return;
}
LOS_AtomicDec(&plimite->rc);
if (LOS_AtomicRead(&plimite->rc) <= 0) {
LOS_KernelFree((VOID *)plimite);
}
LOS_KernelFree((VOID *)plimite);
}
VOID OsIPCLimitCopy(UINTPTR dest, UINTPTR src)
......@@ -101,7 +97,6 @@ VOID OsIPCLimitMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process)
parentIpcLimit->mqFailedCount += currIpcLimit->mqFailedCount;
parentIpcLimit->shmSize += currIpcLimit->shmSize;
parentIpcLimit->shmFailedCount += currIpcLimit->shmFailedCount;
LOS_AtomicInc(&parentIpcLimit->rc);
return;
}
......
......@@ -32,7 +32,6 @@
#define _LOS_IPCLIMIT_H
#include "los_typedef.h"
#include "los_atomic.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -41,7 +40,6 @@ extern "C" {
#endif /* __cplusplus */
typedef struct ProcIPCLimit {
Atomic rc;
UINT32 mqCount;
UINT32 mqFailedCount;
UINT32 mqCountLimit;
......
......@@ -57,7 +57,6 @@ VOID *OsMemLimiterAlloc(VOID)
return NULL;
}
(VOID)memset_s(plimite, sizeof(ProcMemLimiter), 0, sizeof(ProcMemLimiter));
LOS_AtomicSet(&plimite->rc, 1);
return (VOID *)plimite;
}
......@@ -68,10 +67,7 @@ VOID OsMemLimiterFree(UINTPTR limite)
return;
}
LOS_AtomicDec(&plimite->rc);
if (LOS_AtomicRead(&plimite->rc) <= 0) {
LOS_KernelFree((VOID *)limite);
}
LOS_KernelFree((VOID *)limite);
}
VOID OsMemLimiterCopy(UINTPTR dest, UINTPTR src)
......@@ -104,7 +100,6 @@ VOID OsMemLimiterMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process
if (parentMemLimit->peak < parentMemLimit->usage) {
parentMemLimit->peak = parentMemLimit->usage;
}
LOS_AtomicInc(&parentMemLimit->rc);
return;
}
......
......@@ -32,7 +32,6 @@
#define _LOS_MEMLIMIT_H
#include "los_typedef.h"
#include "los_atomic.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -41,7 +40,6 @@ extern "C" {
#endif /* __cplusplus */
typedef struct ProcMemLimiter {
Atomic rc;
UINT64 usage;
UINT64 limit;
UINT64 peak;
......
......@@ -56,7 +56,7 @@ static PlimiteOperations g_limiteOps[PROCESS_LIMITER_COUNT] = {
.LimiterAddProcess = OsPidLimitAddProcess,
.LimiterDelProcess = OsPidLimitDelProcess,
.LimiterMigrateCheck = PidLimitMigrateCheck,
.LimiterMigrate = OsPidLimiterMigrate,
.LimiterMigrate = NULL,
},
#ifdef LOSCFG_KERNEL_MEM_PLIMIT
[PROCESS_LIMITER_ID_MEM] = {
......@@ -81,7 +81,7 @@ static PlimiteOperations g_limiteOps[PROCESS_LIMITER_COUNT] = {
.LimiterAddProcess = NULL,
.LimiterDelProcess = NULL,
.LimiterMigrateCheck = NULL,
.LimiterMigrate = OsSchedLimitMigrate,
.LimiterMigrate = NULL,
},
#endif
#ifdef LOSCFG_KERNEL_DEV_PLIMIT
......@@ -94,7 +94,7 @@ static PlimiteOperations g_limiteOps[PROCESS_LIMITER_COUNT] = {
.LimiterAddProcess = NULL,
.LimiterDelProcess = NULL,
.LimiterMigrateCheck = NULL,
.LimiterMigrate = OsDevLimitMigrate,
.LimiterMigrate = NULL,
},
#endif
#ifdef LOSCFG_KERNEL_IPC_PLIMIT
......@@ -360,79 +360,6 @@ ProcLimiterSet *OsPLimitsCreate(ProcLimiterSet *parentPLimits)
return newPLimits;
}
UINT32 OsPLimitsAddLimiters(ProcLimiterSet *procLimiterSet, enum ProcLimiterID plimiteID)
{
UINT32 intSave;
UINT32 mask = BIT(plimiteID);
if ((procLimiterSet == NULL) || (plimiteID > PROCESS_LIMITER_COUNT)) {
return EINVAL;
}
SCHEDULER_LOCK(intSave);
if (procLimiterSet->level == 0) {
SCHEDULER_UNLOCK(intSave);
return EPERM;
}
if (procLimiterSet->mask & mask) {
SCHEDULER_UNLOCK(intSave);
return EINVAL;
}
UINTPTR currLimit = procLimiterSet->limitsList[plimiteID];
UINTPTR parentPLimit = procLimiterSet->parent->limitsList[plimiteID];
procLimiterSet->limitsList[plimiteID] = (UINTPTR)g_limiteOps[plimiteID].LimiterAlloc();
if (procLimiterSet->limitsList[plimiteID] == (UINTPTR)NULL) {
procLimiterSet->limitsList[plimiteID] = parentPLimit;
SCHEDULER_UNLOCK(intSave);
return ENOMEM;
}
g_limiteOps[plimiteID].LimiterCopy(procLimiterSet->limitsList[plimiteID], parentPLimit);
g_limiteOps[plimiteID].LimiterMigrate(procLimiterSet->limitsList[plimiteID],
parentPLimit, (UINTPTR)OsCurrProcessGet());
g_limiteOps[plimiteID].LimiterFree(currLimit);
SCHEDULER_UNLOCK(intSave);
return LOS_OK;
}
UINT32 OsPLimitsDeleteLimiters(ProcLimiterSet *procLimiterSet, enum ProcLimiterID plimiteID, UINT32 *mask)
{
UINT32 intSave;
if ((procLimiterSet == NULL) || (plimiteID > PROCESS_LIMITER_COUNT) || (mask == NULL)) {
return EINVAL;
}
SCHEDULER_LOCK(intSave);
if (!(procLimiterSet->mask & BIT(plimiteID))) {
SCHEDULER_UNLOCK(intSave);
return EINVAL;
}
if (procLimiterSet->level == 0) {
SCHEDULER_UNLOCK(intSave);
return EPERM;
}
UINTPTR currLimit = procLimiterSet->limitsList[plimiteID];
UINTPTR parentPLimit = procLimiterSet->parent->limitsList[plimiteID];
if ((g_limiteOps[plimiteID].LimiterMigrateCheck != NULL) &&
!g_limiteOps[plimiteID].LimiterMigrateCheck(currLimit, parentPLimit)) {
SCHEDULER_UNLOCK(intSave);
return EINVAL;
}
g_limiteOps[plimiteID].LimiterMigrate(currLimit, parentPLimit, 0);
procLimiterSet->limitsList[plimiteID] = parentPLimit;
g_limiteOps[plimiteID].LimiterFree(currLimit);
procLimiterSet->mask &= (~BIT(plimiteID));
*mask = procLimiterSet->mask;
SCHEDULER_UNLOCK(intSave);
return LOS_OK;
}
#ifdef LOSCFG_KERNEL_MEM_PLIMIT
UINT32 OsPLimitsMemUsageGet(ProcLimiterSet *plimits, UINT64 *usage, UINT32 size)
{
......
......@@ -101,9 +101,6 @@ UINT32 OsPLimitsFree(ProcLimiterSet *currPLimits);
ProcLimiterSet *OsPLimitsCreate(ProcLimiterSet *parentProcLimiterSet);
UINT32 OsProcLimiterSetInit(VOID);
UINT32 OsPLimitsAddLimiters(ProcLimiterSet *procLimiterSet, enum ProcLimiterID plimiteID);
UINT32 OsPLimitsDeleteLimiters(ProcLimiterSet *procLimiterSet, enum ProcLimiterID plimiteID, UINT32 *mask);
UINT32 OsPLimitsMemUsageGet(ProcLimiterSet *plimits, UINT64 *usage, UINT32 size);
UINT32 OsPLimitsIPCStatGet(ProcLimiterSet *plimits, ProcIPCLimit *ipc, UINT32 size);
UINT32 OsPLimitsSchedUsageGet(ProcLimiterSet *plimits, UINT64 *usage, UINT32 size);
......
......@@ -57,7 +57,6 @@ VOID *PidLimiterAlloc(VOID)
return NULL;
}
(VOID)memset_s(plimite, sizeof(PidLimit), 0, sizeof(PidLimit));
LOS_AtomicSet(&plimite->rc, 1);
return (VOID *)plimite;
}
......@@ -68,10 +67,7 @@ VOID PidLimterFree(UINTPTR limit)
return;
}
LOS_AtomicDec(&pidLimit->rc);
if (LOS_AtomicRead(&pidLimit->rc) <= 0) {
LOS_KernelFree((VOID *)limit);
}
LOS_KernelFree((VOID *)limit);
}
BOOL PidLimitMigrateCheck(UINTPTR curr, UINTPTR parent)
......@@ -88,18 +84,6 @@ BOOL PidLimitMigrateCheck(UINTPTR curr, UINTPTR parent)
return TRUE;
}
VOID OsPidLimiterMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process)
{
(VOID)currLimit;
PidLimit *parentPidLimit = (PidLimit *)parentLimit;
LosProcessCB *pcb = (LosProcessCB *)process;
if (pcb == NULL) {
LOS_AtomicInc(&parentPidLimit->rc);
}
}
BOOL OsPidLimitAddProcessCheck(UINTPTR limit, UINTPTR process)
{
(VOID)process;
......
......@@ -33,7 +33,6 @@
#include "los_list.h"
#include "los_typedef.h"
#include "los_atomic.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -42,7 +41,6 @@ extern "C" {
#endif /* __cplusplus */
typedef struct PidLimit {
Atomic rc;
UINT32 pidLimit;
UINT32 priorityLimit;
UINT32 pidCount;
......@@ -53,7 +51,6 @@ VOID *PidLimiterAlloc(VOID);
VOID PidLimterFree(UINTPTR limit);
VOID PidLimiterCopy(UINTPTR curr, UINTPTR parent);
BOOL PidLimitMigrateCheck(UINTPTR curr, UINTPTR parent);
VOID OsPidLimiterMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process);
BOOL OsPidLimitAddProcessCheck(UINTPTR limit, UINTPTR process);
VOID OsPidLimitAddProcess(UINTPTR limit, UINTPTR process);
VOID OsPidLimitDelProcess(UINTPTR limit, UINTPTR process);
......
......@@ -49,7 +49,6 @@ VOID *OsSchedLimitAlloc(VOID)
return NULL;
}
(VOID)memset_s(plimit, sizeof(ProcSchedLimiter), 0, sizeof(ProcSchedLimiter));
LOS_AtomicSet(&plimit->rc, 1);
return (VOID *)plimit;
}
......@@ -60,10 +59,7 @@ VOID OsSchedLimitFree(UINTPTR limit)
return;
}
LOS_AtomicDec(&schedLimit->rc);
if (LOS_AtomicRead(&schedLimit->rc) <= 0) {
LOS_KernelFree((VOID *)limit);
}
LOS_KernelFree((VOID *)limit);
}
VOID OsSchedLimitCopy(UINTPTR dest, UINTPTR src)
......@@ -75,16 +71,6 @@ VOID OsSchedLimitCopy(UINTPTR dest, UINTPTR src)
return;
}
VOID OsSchedLimitMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process)
{
(VOID)currLimit;
ProcSchedLimiter *parentSchedLimit = (ProcSchedLimiter *)parentLimit;
LosProcessCB *pcb = (LosProcessCB *)process;
if (pcb == NULL) {
LOS_AtomicInc(&parentSchedLimit->rc);
}
}
VOID OsSchedLimitUpdateRuntime(LosTaskCB *runTask, UINT64 currTime, INT32 incTime)
{
LosProcessCB *run = (LosProcessCB *)runTask->processCB;
......
......@@ -32,7 +32,6 @@
#define _LOS_SCHEDLIMIT_H
#include "los_typedef.h"
#include "los_atomic.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -44,7 +43,6 @@ extern "C" {
typedef struct TagTaskCB LosTaskCB;
typedef struct ProcSchedLimiter {
Atomic rc;
UINT64 startTime;
UINT64 endTime;
UINT64 period;
......@@ -58,7 +56,6 @@ VOID OsSchedLimitInit(UINTPTR limit);
VOID *OsSchedLimitAlloc(VOID);
VOID OsSchedLimitFree(UINTPTR limit);
VOID OsSchedLimitCopy(UINTPTR dest, UINTPTR src);
VOID OsSchedLimitMigrate(UINTPTR currLimit, UINTPTR parentLimit, UINTPTR process);
VOID OsSchedLimitUpdateRuntime(LosTaskCB *runTask, UINT64 currTime, INT32 incTime);
UINT32 OsSchedLimitSetPeriod(ProcSchedLimiter *schedLimit, UINT64 value);
UINT32 OsSchedLimitSetQuota(ProcSchedLimiter *schedLimit, UINT64 value);
......
......@@ -138,6 +138,9 @@ group("unittest") {
if (LOSCFG_USER_TEST_PROCESS_FS == true) {
deps += [ "process/fs:liteos_a_process_fs_unittest_door" ]
}
if (LOSCFG_USER_TEST_PROCESS_PLIMITS == true) {
deps += [ "process/plimits:liteos_a_process_plimits_unittest_door" ]
}
}
if (LOSCFG_USER_TEST_LEVEL >= TEST_LEVEL_MIDDLE) {
deps += [ "process/basic:liteos_a_process_basic_unittest" ]
......@@ -145,6 +148,9 @@ group("unittest") {
if (LOSCFG_USER_TEST_PROCESS_FS == true) {
deps += [ "process/fs:liteos_a_process_fs_unittest" ]
}
if (LOSCFG_USER_TEST_PROCESS_PLIMITS == true) {
deps += [ "process/plimits:liteos_a_process_plimits_unittest" ]
}
}
}
......
......@@ -165,6 +165,11 @@ if (defined(LOSCFG_KERNEL_CONTAINER) || liteos_container_test_enable == true) {
}
}
LOSCFG_USER_TEST_PROCESS_PLIMITS = false
if (defined(LOSCFG_KERNEL_PLIMITS) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_PROCESS_PLIMITS = true
}
########## fuzz test ##########
LOSCFG_USER_FUZZ_TEST = false
if (liteos_fuzz_test_enable == true) {
......
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//build/lite/config/test.gni")
import("//kernel/liteos_a/testsuites/unittest/config.gni")
import("./config.gni")
if (LOSCFG_USER_TEST_LEVEL >= TEST_LEVEL_LOW) {
unittest("liteos_a_process_plimits_unittest_door") {
output_extension = "bin"
output_dir = "$root_out_dir/test/unittest/kernel"
include_dirs = common_include_dirs
sources = sources_entry
sources += sources_smoke
sources_full = []
sources += sources_full
configs = [ "../..:public_config_for_door" ]
deps = [ "//third_party/bounds_checking_function:libsec_shared" ]
}
}
if (LOSCFG_USER_TEST_LEVEL >= TEST_LEVEL_MIDDLE) {
unittest("liteos_a_process_plimits_unittest") {
output_extension = "bin"
output_dir = "$root_out_dir/test/unittest/kernel"
include_dirs = common_include_dirs
sources = sources_entry
sources += sources_smoke
sources += sources_full
configs = [ "../..:public_config_for_all" ]
deps = [ "//third_party/bounds_checking_function:libsec_shared" ]
}
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _IT_PROCESS_PLIMITS_H
#define _IT_PROCESS_PLIMITS_H
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <regex>
#include <fcntl.h>
#include <iostream>
#include <cstring>
#include <fstream>
#include <regex>
#include <sstream>
#include <numeric>
#include "osTest.h"
#define MEM_PAGE_SIZE 4096
#define MEM_SLEEP_TIME 5
#define MEM_RESERVED_PAGE 2
#define CHILD_FUNC_ARG (0x2088)
#define STACK_SIZE (1024 * 1024)
#define PROCESS_LIMIT_AMOUNT (64)
#define TEST_BUFFER_SIZE (512)
#define CPUP10S_INDEX (11)
#define CPUP1S_INDEX (12)
#define WAIT_CPUP_STABLE (7)
#define WAIT_CPUP_STABLE_FOR_100 (17)
#define STATISTIC_TIMES (11)
#define PERIOD_10_SEC_IN_US (10 * 1000 * 1000)
#define QUOTA_2_SEC_IN_US (2 * 1000 * 1000)
#define QUOTA_5_SEC_IN_US (5 * 1000 * 1000)
#define QUOTA_6_SEC_IN_US (6 * 1000 * 1000)
#define QUOTA_7_SEC_IN_US (7 * 1000 * 1000)
#define QUOTA_10_SEC_IN_US (10 * 1000 * 1000)
#define QUOTA_PERCENT_20 (20)
#define QUOTA_PERCENT_50 (50)
#define QUOTA_PERCENT_60 (60)
#define QUOTA_PERCENT_70 (70)
#define QUOTA_PERCENT_100 (100)
#define HARDWARE_CORE_AMOUNT (2)
#define TOLERANCE_ERROR (5)
int WriteFile(const char *filepath, const char *buf);
int RmdirLimiterFile(std::string path);
int RmdirControlFile(std::string path);
int ReadFile(const char *filepath, char *buf);
int GetLine(char *buf, int count, int maxLen, char **array);
int RmdirTest (std::string path);
extern UINT32 LosCurTaskIDGet();
int ForkChilds(int num, int *pidArray);
int CreatePlimitGroup(const char* groupName, char *childPidFiles,
unsigned long long periodUs, unsigned long long quotaUs);
int AddPidIntoSchedLimiters(int num, int *pidArray, const char *procspath);
int WaitForCpupStable(int expectedCpupPercent);
double CalcCpupUsage(int childAmount, int *childPidArray, int expectedCpupPercent);
double CheckCpupUsage(double sumAllChildsCpup, int expectedCpupPercent);
int TerminateChildProcess(int *childPidArray, int childAmount, int sig);
double TestCpupInPlimit(int childAmount, const char* groupName,
unsigned long long periodUs, unsigned long long quotaUs, int expectedCpupPercent);
double TestCpupWithoutLimit(int childAmount, const char* groupName, int expectedCpupPercent);
#if defined(LOSCFG_USER_TEST_SMOKE)
void ItProcessPlimits001(void);
void ItProcessPlimits002(void);
void ItProcessPlimits003(void);
void ItProcessPlimits004(void);
void ItProcessPlimits005(void);
void ItProcessPlimits006(void);
void ItProcessPlimits007(void);
void ItProcessPlimits008(void);
void ItProcessPlimitsMemory001(void);
void ItProcessPlimitsMemory002(void);
void ItProcessPlimitsPid001(void);
void ItProcessPlimitsPid002(void);
void ItProcessPlimitsPid003(void);
void ItProcessPlimitsPid004(void);
void ItProcessPlimitsPid005(void);
void ItProcessPlimitsPid006(void);
void ItProcessPlimitsSched001(VOID);
void ItProcessPlimitsSched002(VOID);
void ItProcessPlimitsSched003(VOID);
void ItProcessPlimitsSched004(VOID);
void ItProcessPlimitsDevices001(void);
void ItProcessPlimitsDevices002(void);
void ItProcessPlimitsDevices003(void);
void ItProcessPlimitsDevices004(void);
void ItProcessPlimitsDevices005(void);
void ItProcessPlimitsDevices006(void);
void ItProcessPlimitsDevices007(void);
void ItProcessPlimitsDevices008(void);
void ItProcessPlimitsDevices009(void);
void ItProcessPlimitsIpc002(void);
void ItProcessPlimitsIpc003(void);
void ItProcessPlimitsIpc004(void);
void ItProcessPlimitsIpc005(void);
void ItProcessPlimitsIpc006(void);
void ItProcessPlimitsIpc007(void);
void ItProcessPlimitsIpc008(void);
void ItProcessPlimitsIpc009(void);
void ItProcessPlimitsIpc010(void);
void ItProcessPlimitsIpc011(void);
void ItProcessPlimitsIpc012(void);
void ItProcessPlimitsIpc013(void);
#endif
#endif /* _IT_PROCESS_PLIMITS_H */
# Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//build/lite/config/test.gni")
import("//kernel/liteos_a/testsuites/unittest/config.gni")
common_include_dirs = [
"//third_party/googletest/googletest/include",
"../../common/include",
]
sources_entry = [ "../../common/osTest.cpp" ]
sources_smoke = []
sources_full = []
process_plimits_include_dirs = [ "$TEST_UNITTEST_DIR/process/plimits" ]
process_plimits_sources_entry =
[ "$TEST_UNITTEST_DIR/process/plimits/process_plimits_test.cpp" ]
process_plimits_sources_smoke = [
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_001.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_003.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_004.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_005.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_006.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_007.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_008.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_001.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_003.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_004.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_005.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_pid_006.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_memory_001.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_memory_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_sched_001.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_sched_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_sched_003.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_sched_004.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_001.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_003.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_004.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_005.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_006.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_007.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_008.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_devices_009.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_002.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_003.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_004.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_005.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_006.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_007.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_008.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_009.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_010.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_011.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_012.cpp",
"$TEST_UNITTEST_DIR/process/plimits/smoke/It_process_plimits_ipc_013.cpp",
]
process_plimits_sources_full = []
# plimits module
if (LOSCFG_USER_TEST_PROCESS == true) {
common_include_dirs += process_plimits_include_dirs
sources_entry += process_plimits_sources_entry
sources_smoke += process_plimits_sources_smoke
sources_full += process_plimits_sources_full
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <climits>
#include <sys/types.h>
#include <gtest/gtest.h>
#include <dirent.h>
#include "It_process_plimits.h"
void ItProcessPlimits001(void)
{
DIR *dirp = opendir("/proc/plimits");
ASSERT_NE(dirp, nullptr);
(void)closedir(dirp);
int ret;
std::string path = "/proc/plimits/test1";
ret = mkdir(path.c_str(), S_IRWXU); // create directory
ASSERT_EQ(ret, 0);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <fcntl.h>
#include "It_process_plimits.h"
void ItProcessPlimits002(void)
{
(void)rmdir("/proc/plimits");
DIR *dirp = opendir("/proc/plimits/");
ASSERT_NE(dirp, nullptr);
(void)closedir(dirp);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include "It_process_plimits.h"
void ItProcessPlimits003(void)
{
int ret;
const char *path = "/proc/text.txt";
ret = open(path, O_CREAT);
ASSERT_EQ(ret, -1);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <dirent.h>
#include <sys/stat.h>
#include <regex>
#include <fstream>
#include "It_process_plimits.h"
void ItProcessPlimits004(void)
{
int ret, matchResult;
const size_t BUFFER_SIZE = 512;
char buf[BUFFER_SIZE + 1] = {0};
std::string path = "/proc/plimits/test";
mode_t mode;
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
(void)ReadFile("/proc/plimits/test/plimits.limiters", buf);
printf("/proc/plimits/test/plimits.limiters: %s\n", buf);
matchResult = strncmp(buf, "pids memory ipc devices sched", 29); /* 29: buf len */
ASSERT_EQ(matchResult, 0);
ret = rmdir("/proc/plimits/test");
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <fcntl.h>
#include "It_process_plimits.h"
void ItProcessPlimits005(void)
{
int ret;
const char *path = "/proc/plimits/text.txt";
ret = open(path, O_CREAT);
ASSERT_EQ(ret, -1);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include "It_process_plimits.h"
void ItProcessPlimits006(void)
{
int ret;
const char *path3 = "/proc/plimits/plimits.procs";
ret = remove(path3);
ASSERT_EQ(ret, -1);
const char *path4 = "/proc/plimits/pids.max";
ret = remove(path4);
ASSERT_EQ(ret, -1);
const char *path5 = "/proc/plimits/pids.priority";
ret = remove(path5);
ASSERT_EQ(ret, -1);
const char *path6 = "/proc/plimits/sched.period";
ret = remove(path6);
ASSERT_EQ(ret, -1);
const char *path7 = "/proc/plimits/sched.quota";
ret = remove(path7);
ASSERT_EQ(ret, -1);
const char *path8 = "/proc/plimits/sched.stat";
ret = remove(path8);
ASSERT_EQ(ret, -1);
const char *path9 = "/proc/plimits/memory.limit";
ret = remove(path9);
ASSERT_EQ(ret, -1);
const char *path10 = "/proc/plimits/memory.stat";
ret = remove(path10);
ASSERT_EQ(ret, -1);
const char *path11 = "/proc/plimits/ipc.mq_limit";
ret = remove(path11);
ASSERT_EQ(ret, -1);
const char *path12 = "/proc/plimits/ipc.shm_limit";
ret = remove(path12);
ASSERT_EQ(ret, -1);
const char *path13 = "/proc/plimits/ipc.stat";
ret = remove(path13);
ASSERT_EQ(ret, -1);
const char *path14 = "/proc/plimits/devices.list";
ret = remove(path14);
ASSERT_EQ(ret, -1);
const char *path15 = "/proc/plimits/devices.deny";
ret = remove(path15);
ASSERT_EQ(ret, -1);
const char *path16 = "/proc/plimits/devices.allow";
ret = remove(path16);
ASSERT_EQ(ret, -1);
const char *path17 = "/proc/plimits/limiters";
ret = remove(path17);
ASSERT_EQ(ret, -1);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdlib>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <climits>
#include "It_process_plimits.h"
void ItProcessPlimits007(void)
{
mode_t mode = S_IRWXU;
std::string path0 = "/proc/plimits/test";
std::string path1 = "/proc/plimits/test/subtest";
std::string path2 = "/proc/plimits/test/subtest/subtest";
std::string path3 = "/proc/plimits/test/subtest/subtest/subtest";
std::string path4 = "/proc/plimits/test/subtest/subtest/subtest/subtest";
int ret = mkdir(path0.c_str(), mode);
ASSERT_EQ(ret, 0);
ret = mkdir(path1.c_str(), mode);
ASSERT_EQ(ret, -1);
ret = mkdir(path2.c_str(), mode);
ASSERT_EQ(ret, -1);
ret = mkdir(path3.c_str(), mode);
ASSERT_EQ(ret, -1);
ret = mkdir(path4.c_str(), mode);
ASSERT_EQ(ret, -1);
ret = rmdir(path0.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <sys/types.h>
#include <gtest/gtest.h>
#include <dirent.h>
#include <unistd.h>
#include <vector>
#include <cstring>
#include "It_process_plimits.h"
static std::string GetFileMode(const char* filePath)
{
const int MODE_COUNT = 11;
char fileProperty[MODE_COUNT] = "----------";
char fileMode[MODE_COUNT] = "-rwxrwxrwx";
struct stat buf;
stat(filePath, &buf);
unsigned int off = 256;
const int LOOP_VARY = 10;
for (int i = 1; i < LOOP_VARY; i++) {
if (buf.st_mode & (off >> (i - 1))) {
fileProperty[i] = fileMode[i];
}
}
return fileProperty;
}
static int IsFilePropertyR1(const char* filePath)
{
std::string fileOrg = "-r--r--r--";
std::string fileProperty = GetFileMode(filePath);
return strcmp(fileProperty.c_str(), fileOrg.c_str());
}
void ItProcessPlimits008(void)
{
std::string filePath = "/proc/plimits/";
std::vector<std::string> fileName;
fileName.push_back("plimits.procs");
fileName.push_back("plimits.limiters");
fileName.push_back("pids.max");
fileName.push_back("sched.period");
fileName.push_back("sched.quota");
fileName.push_back("sched.stat");
fileName.push_back("memory.failcnt");
fileName.push_back("memory.limit");
fileName.push_back("memory.peak");
fileName.push_back("memory.usage");
fileName.push_back("memory.stat");
for (auto iter = fileName.begin(); iter != fileName.end(); ++iter) {
std::string fileFullPath = filePath + *iter;
int ret = IsFilePropertyR1(fileFullPath.c_str());
ASSERT_EQ(ret, 0);
}
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices001(void)
{
int fd;
int ret;
mode_t mode;
char writeBuf[8];
std::string test_dev = "/dev/hi_mipi";
std::string path = "/proc/plimits/test";
std::string procsTestPath = "/proc/plimits/test/plimits.procs";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
(void)memset_s(writeBuf, sizeof(writeBuf), 0, sizeof(writeBuf));
ret = sprintf_s(writeBuf, sizeof(writeBuf), "%d", getpid());
ASSERT_NE(ret, -1);
ret = WriteFile(procsTestPath.c_str(), writeBuf);
ASSERT_NE(ret, 0);
fd = open(test_dev.c_str(), O_RDWR|O_CREAT);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices002(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/hi_mipi";
std::string device_a = "a * rwm";
std::string device_a_r = "a * r";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_a_r.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_RDWR|O_CREAT);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices003(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/hi_mipi";
std::string device_a = "a * rwm";
std::string device_a_w = "a * w";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_a_w.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_RDWR|O_CREAT);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices004(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/hi_mipi";
std::string device_a = "a * rwm";
std::string device_a_m = "a * m";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_a_m.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_CREAT);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices005(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/mem";
std::string device_a = "a * rwm";
std::string device_c = "c * rwm";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_c.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_RDWR|O_CREAT);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices006(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/mem";
std::string device_a = "a * rwm";
std::string device_c_r = "c * r";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_c_r.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_RDONLY);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices007(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/mem";
std::string device_a = "a * rwm";
std::string device_c_w = "c * w";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_c_w.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_WRONLY);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices008(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/mem";
std::string device_a = "a * rwm";
std::string device_c_m = "c * rm";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
std::string devicesAllowPath = "/proc/plimits/test/devices.allow";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
ret = WriteFile(devicesAllowPath.c_str(), device_c_m.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_CREAT, O_RDONLY);
ASSERT_NE(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsDevices009(void)
{
int fd;
int ret;
mode_t mode;
std::string test_dev = "/dev/hi_mipi";
std::string device_a = "a";
std::string path = "/proc/plimits/test";
std::string devicesDenyPath = "/proc/plimits/test/devices.deny";
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(devicesDenyPath.c_str(), device_a.c_str());
ASSERT_NE(ret, -1);
fd = open(test_dev.c_str(), O_RDONLY|O_CREAT);
ASSERT_EQ(fd, -1);
(void)close(fd);
fd = open(test_dev.c_str(), O_WRONLY|O_CREAT);
ASSERT_EQ(fd, -1);
(void)close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc002(void)
{
mode_t mode;
int ret;
int fd;
std::string plimitsRootPath = "/proc/plimits/";
std::vector<std::string> ipcConfFileName;
ipcConfFileName.push_back("ipc.mq_limit");
ipcConfFileName.push_back("ipc.shm_limit");
ipcConfFileName.push_back("ipc.stat");
for (auto iter = ipcConfFileName.begin(); iter != ipcConfFileName.end(); ++iter) {
std::string fullPath = plimitsRootPath + *iter;
fd = access(fullPath.c_str(), W_OK | X_OK);
ASSERT_EQ(fd, -1);
fd = access(fullPath.c_str(), F_OK | R_OK);
ASSERT_EQ(fd, 0);
}
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc003(void)
{
mode_t mode;
int ret;
std::string plimitsPath = "/proc/plimits/test";
std::string configFileMqCount = "/proc/plimits/test/ipc.mq_limit";
std::string configFileShmSize = "/proc/plimits/test/ipc.shm_limit";
std::string configFileStat = "/proc/plimits/test/ipc.stat";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
int fd = access(configFileMqCount.c_str(), F_OK | W_OK | R_OK);
ASSERT_EQ(fd, 0);
fd = access(configFileShmSize.c_str(), F_OK | W_OK | R_OK);
ASSERT_EQ(fd, 0);
fd = access(configFileStat.c_str(), F_OK | R_OK);
ASSERT_EQ(fd, 0);
fd = access(configFileStat.c_str(), W_OK | X_OK);
ASSERT_EQ(fd, -1);
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc004(void)
{
mode_t mode;
mode_t chmodMode = 0777;
int ret;
int fd;
std::string rootplimitsPath = "/proc/plimits";
std::string subPlimitsPath = "/proc/plimits/test";
std::vector<std::string> ipcConfFileName;
ipcConfFileName.push_back("ipc.mq_limit");
ipcConfFileName.push_back("ipc.shm_limit");
ipcConfFileName.push_back("ipc.stat");
ret = mkdir(subPlimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
for (auto iter = ipcConfFileName.begin(); iter != ipcConfFileName.end(); ++iter) {
std::string fullPath = rootplimitsPath + "/" + *iter;
ret = chmod(fullPath.c_str(), mode);
ASSERT_EQ(ret, -1);
}
for (auto iter = ipcConfFileName.begin(); iter != ipcConfFileName.end(); ++iter) {
std::string fullPath = subPlimitsPath + "/" + *iter;
ret = chmod(fullPath.c_str(), mode);
ASSERT_EQ(ret, -1);
}
ret = rmdir(subPlimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <mqueue.h>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
static const int g_buffSize = 512;
static const int g_arryLen = 4;
static const int MQ_MAX_PER_PROCESS_COUNT = 255;
static const int MQUEUE_STANDARD_NAME_LENGTH = 50;
void ItProcessPlimitsIpc005(void)
{
INT32 ret;
mode_t mode;
char buf[g_buffSize] = { 0 };
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue[MQ_MAX_PER_PROCESS_COUNT];
struct mq_attr attr = { 0 };
int index = 0;
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = 1;
std::string plimitsPath = "/proc/plimits/test";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = ReadFile("/proc/plimits/test/ipc.mq_limit", buf);
ASSERT_STREQ(buf, "1024\n");
for (index = 0; index < MQ_MAX_PER_PROCESS_COUNT; ++index) {
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_005_%d_%d",
index, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
mqueue[index] = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ASSERT_NE(mqueue[index], (mqd_t)-1);
}
for (int k = 0; k < MQ_MAX_PER_PROCESS_COUNT; ++k) {
ret = mq_close(mqueue[k]);
ASSERT_NE(ret, -1);
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_005_%d_%d", k, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
ret = mq_unlink(mqname);
ASSERT_EQ(ret, 0);
}
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <mqueue.h>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
static const int MQUEUE_STANDARD_NAME_LENGTH = 50;
static const int g_buffSize = 512;
static const int g_arryLen = 4;
static const int g_readLen = 254;
static const int MQ_MAX_LIMIT_COUNT = 10;
static int FreeResource(mqd_t *mqueue, int index, char *mqname)
{
int ret = -1;
for (int k = 0; k < index; ++k) {
if (snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d",
k, LosCurTaskIDGet()) < 0) {
return -1;
}
ret = mq_close(mqueue[k]);
if (ret != 0) {
return -2; /* 2: errno */
}
ret = mq_unlink(mqname);
if (ret != 0) {
return -3; /* 3: errno */
}
(void)memset_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, 0, MQUEUE_STANDARD_NAME_LENGTH);
}
return ret;
}
// plimits_ipc_07, plimits_ipc_14, plimits_ipc_17
void ItProcessPlimitsIpc006(void)
{
INT32 ret;
mode_t mode;
char buf[g_buffSize] = { 0 };
char *array[g_arryLen] = { nullptr };
int mqSuccessCount = -1, mqFailedCount = -1;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue[g_readLen];
std::string subPlimitsPath = "/proc/plimits/test";
std::string configFileMqCount = "/proc/plimits/test/ipc.mq_limit";
std::string limitMqCount = "10";
struct mq_attr attr = { 0 };
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = 1;
int index = 0;
ret = mkdir(subPlimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileMqCount.c_str(), limitMqCount.c_str());
ASSERT_NE(ret, -1);
for (index = 0; index < MQ_MAX_LIMIT_COUNT; ++index) {
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d",
index, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
mqueue[index] = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ASSERT_NE(mqueue[index], (mqd_t)-1);
(void)memset_s(mqname, sizeof(mqname), 0, sizeof(mqname));
}
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d", index, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
mqueue[index] = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ASSERT_EQ(mqueue[index], (mqd_t)-1);
(void)memset_s(mqname, sizeof(mqname), 0, sizeof(mqname));
ret = ReadFile("/proc/plimits/test/ipc.stat", buf);
printf("/proc/plimits/test/ipc.stat: %s\n", buf);
GetLine(buf, g_arryLen, g_readLen, array);
mqSuccessCount = atoi(array[0] + strlen("mq count: "));
mqFailedCount = atoi((array[1] + strlen("mq failed count: ")));
ASSERT_EQ(mqSuccessCount, MQ_MAX_LIMIT_COUNT);
ASSERT_EQ(mqFailedCount, 1);
ret = FreeResource(mqueue, index, mqname);
ASSERT_EQ(ret, 0);
ret = rmdir(subPlimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc007(void)
{
mode_t mode;
int ret;
std::string plimitsPath = "/proc/plimits/test";
std::string configFileMqCount = "/proc/plimits/test/ipc.mq_limit";
std::string mqLimitCount = "0123";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount.c_str());
ASSERT_NE(ret, -1);
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc008(void)
{
mode_t mode;
int ret;
std::string plimitsPath = "/proc/plimits/test";
std::string configFileMqCount = "/proc/plimits/test/ipc.mq_limit";
std::string mqLimitCount_0 = "111*";
std::string mqLimitCount_1 = "123abc";
std::string mqLimitCount_2 = "\"123 456\"";
std::string mqLimitCount_3 = "\123";
std::string mqLimitCount_4 = "10000000000000000000000000000000001";
std::string mqLimitCount_5 = "\1\2\3";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_0.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_1.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_2.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_3.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_4.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileMqCount.c_str(), mqLimitCount_5.c_str());
ASSERT_EQ(ret, -1);
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <sys/shm.h>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
static const int g_buffSize = 512;
static const int g_arryLen = 4;
static const int g_readLen = 254;
void ItProcessPlimitsIpc009(void)
{
mode_t mode;
char buf[g_buffSize] = { 0 };
int ret;
int shmid;
void *shared = nullptr;
mode_t acessMode = 0666;
std::string subPlimitsPath = "/proc/plimits/test";
ret = mkdir(subPlimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = ReadFile("/proc/plimits/test/ipc.shm_limit", buf);
ASSERT_STREQ(buf, "104857600\n");
shmid = shmget(IPC_PRIVATE, PAGE_SIZE, acessMode | IPC_CREAT);
ASSERT_NE(shmid, -1);
shared = shmat(shmid, nullptr, 0);
ASSERT_NE(shared, (void *)-1);
ret = shmdt(shared);
ASSERT_NE(ret, -1);
ret = shmctl(shmid, IPC_RMID, nullptr);
ASSERT_NE(ret, -1);
ret = rmdir(subPlimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <sys/shm.h>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
static const int g_buffSize = 512;
static const int g_arryLen = 4;
static const int g_readLen = 254;
void ItProcessPlimitsIpc010(void)
{
mode_t mode;
mode_t shmAcess = 0666;
char buf[g_buffSize] = { 0 };
char *array[g_arryLen] = { nullptr };
int mqSuccessCount;
int mqFailedCount;
int shmSuccessSize;
int shmFailedCount;
int shmid = -1;
int shmid_1 = -1;
int index = 0;
int shmCkeckSize = PAGE_SIZE * 9;
void *shared = nullptr;
size_t shmSize = PAGE_SIZE * 9;
std::string subPlimitsPath = "/proc/plimits/test";
std::string configFileShmSize = "/proc/plimits/test/ipc.shm_limit";
char shmemLimit[6] = "40960";
int ret = mkdir(subPlimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileShmSize.c_str(), shmemLimit);
ASSERT_NE(ret, -1);
shmid = shmget(IPC_PRIVATE, shmSize, shmAcess | IPC_CREAT);
ASSERT_NE(shmid, -1);
shmid_1 = shmget(IPC_PRIVATE, 2 * PAGE_SIZE, shmAcess | IPC_CREAT); /* 2: PAGE num */
ASSERT_EQ(shmid_1, -1);
ret = ReadFile("/proc/plimits/test/ipc.stat", buf);
GetLine(buf, g_arryLen, g_readLen, array);
mqSuccessCount = atoi(array[index++] + strlen("mq count: "));
mqFailedCount = atoi(array[index++] + strlen("mq failed count: "));
shmSuccessSize = atoi(array[index++] + strlen("shm size: "));
shmFailedCount = atoi(array[index++] + strlen("shm failed count: "));
ASSERT_EQ(shmSuccessSize, shmCkeckSize);
ASSERT_EQ(shmFailedCount, 1);
shared = shmat(shmid, nullptr, 0);
ASSERT_NE(shared, (void *)-1);
ret = shmdt(shared);
ASSERT_NE(ret, -1);
ret = shmctl(shmid, IPC_RMID, nullptr);
ASSERT_NE(ret, -1);
shmctl(shmid_1, IPC_RMID, nullptr);
shmctl(shmid, IPC_RMID, nullptr);
ret = rmdir(subPlimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc011(void)
{
mode_t mode;
int ret;
char buf[512] = { 0 };
std::string plimitsPath = "/proc/plimits/test";
std::string configFileShmSize = "/proc/plimits/test/ipc.shm_limit";
std::string shmLimitSize = "0123";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize.c_str());
ASSERT_NE(ret, -1);
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
void ItProcessPlimitsIpc012(void)
{
mode_t mode;
int ret;
std::string plimitsPath = "/proc/plimits/test";
std::string configFileShmSize = "/proc/plimits/test/ipc.shm_limit";
std::string shmLimitSize_0 = "111*";
std::string shmLimitSize_1 = "123abc";
std::string shmLimitSize_2 = "\"123 456\"";
std::string shmLimitSize_3 = "\123";
std::string shmLimitSize_4 = "10000000000000000000000000000000001";
std::string shmLimitSize_5 = "\1\2\3";
ret = mkdir(plimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_0.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_1.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_2.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_3.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_4.c_str());
ASSERT_EQ(ret, -1);
ret = WriteFile(configFileShmSize.c_str(), shmLimitSize_5.c_str());
ASSERT_EQ(ret, -1);
ret = rmdir(plimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <mqueue.h>
#include <gtest/gtest.h>
#include "It_process_plimits.h"
static const int MQUEUE_STANDARD_NAME_LENGTH = 50;
static const int MQUEUE_STANDARD_NAME_LENGTH_MAX = 102500;
static const int g_buff = 512;
static const int MQ_MAX_LIMIT_COUNT = 10;
static int FreeResource(mqd_t *mqueue, int index, char *mqname)
{
int ret = -1;
for (int k = 0; k < index; ++k) {
ret = snprintf_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d",
k, LosCurTaskIDGet());
if (ret < 0) {
return -1; /* 1: errno */
}
ret = mq_close(mqueue[k]);
if (ret < 0) {
return -2; /* 2: errno */
}
ret = mq_unlink(mqname);
if (ret < 0) {
return -3; /* 3: errno */
}
(void)memset_s(mqname, MQUEUE_STANDARD_NAME_LENGTH, 0, MQUEUE_STANDARD_NAME_LENGTH);
}
return ret ;
}
void ItProcessPlimitsIpc013(void)
{
INT32 ret;
mode_t mode;
CHAR mqname[MQUEUE_STANDARD_NAME_LENGTH] = "";
mqd_t mqueue[g_buff];
std::string subPlimitsPath = "/proc/plimits/test";
std::string configFileMqCount = "/proc/plimits/test/ipc.mq_limit";
std::string limitMqCount = "11";
struct mq_attr attr = { 0 };
attr.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH;
attr.mq_maxmsg = 1;
struct mq_attr attr_err = { 0 };
attr_err.mq_msgsize = MQUEUE_STANDARD_NAME_LENGTH_MAX;
attr_err.mq_maxmsg = 1;
int index = 0;
ret = mkdir(subPlimitsPath.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
ret = WriteFile(configFileMqCount.c_str(), limitMqCount.c_str());
ASSERT_NE(ret, -1);
for (index = 0; index < MQ_MAX_LIMIT_COUNT; ++index) {
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d",
index, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
mqueue[index] = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
ASSERT_NE(mqueue[index], (mqd_t)-1);
(void)memset_s(mqname, sizeof(mqname), 0, sizeof(mqname));
}
ret = snprintf_s(mqname, sizeof(mqname), MQUEUE_STANDARD_NAME_LENGTH, "/mq_006_%d_%d", index, LosCurTaskIDGet());
ASSERT_NE(ret, -1);
mqueue[index] = mq_open(mqname, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr_err);
ASSERT_EQ(mqueue[index], (mqd_t)-1);
(void)memset_s(mqname, sizeof(mqname), 0, sizeof(mqname));
ret = FreeResource(mqueue, index, mqname);
ASSERT_EQ(ret, 0);
ret = rmdir(subPlimitsPath.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
static char *testStr1 = nullptr;
static int limitWrite(const char *filepath, const char *buf)
{
int fd = open(filepath, O_WRONLY);
size_t ret = write(fd, buf, strlen(buf));
close(fd);
return ret;
}
static int CloneOne(void *arg)
{
const unsigned int testSize = 11534336;
testStr1 = (char *)malloc(testSize);
EXPECT_STRNE(testStr1, NULL);
(void)memset_s(testStr1, testSize, 1, testSize);
return 0;
}
void ItProcessPlimitsMemory001(void)
{
mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
int ret, pid, status;
std::string path = "/proc/plimits/test";
std::string limitTestPath = "/proc/plimits/test/memory.limit";
std::string usageTestPath = "/proc/plimits/test/memory.stat";
const char *buffer = "10485760";
char buf[512];
int twoM = 2 * 1024 * 1024;
char *stack = (char *)mmap(NULL, twoM, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
EXPECT_STRNE(stack, NULL);
ret = access(path.c_str(), 0);
EXPECT_EQ(ret, -1);
ret = mkdir(path.c_str(), S_IFDIR | mode);
EXPECT_EQ(ret, 0);
ret = limitWrite(limitTestPath.c_str(), buffer);
EXPECT_NE(ret, -1);
pid = clone(CloneOne, stack, 0, NULL);
ret = waitpid(pid, &status, 0);
ASSERT_EQ(ret, pid);
ret = WIFEXITED(status);
ASSERT_EQ(ret, 0);
(void)memset_s(buf, sizeof(buf), 0, sizeof(buf));
ret = ReadFile(usageTestPath.c_str(), buf);
EXPECT_NE(ret, -1);
printf("%s: %s\n", usageTestPath.c_str(), buf);
ret = rmdir(path.c_str());
EXPECT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
static char *testStr1 = nullptr;
static int limitWrite(const char *filepath, const char *buf)
{
int fd = open(filepath, O_WRONLY);
size_t ret = write(fd, buf, strlen(buf));
close(fd);
return ret;
}
static int CloneOne(void *arg)
{
const unsigned int testSize = 1153;
testStr1 = (char *)malloc(testSize);
EXPECT_STRNE(testStr1, NULL);
(void)memset_s(testStr1, testSize, 1, testSize);
free(testStr1);
testStr1 = nullptr;
return 0;
}
void ItProcessPlimitsMemory002(void)
{
mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
int ret, pid, status;
std::string path = "/proc/plimits/test";
std::string limitTestPath = "/proc/plimits/test/memory.limit";
std::string usageTestPath = "/proc/plimits/test/memory.stat";
char buf[512];
const char *buffer = "10485760";
int twoM = 2 * 1024 * 1024;
char *stack = (char *)mmap(NULL, twoM, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
EXPECT_STRNE(stack, NULL);
ret = access(path.c_str(), 0);
EXPECT_EQ(ret, -1);
ret = mkdir(path.c_str(), S_IFDIR | mode);
EXPECT_EQ(ret, 0);
ret = limitWrite(limitTestPath.c_str(), buffer);
EXPECT_NE(ret, -1);
pid = clone(CloneOne, stack, 0, NULL);
ret = waitpid(pid, &status, 0);
ASSERT_EQ(ret, pid);
ret = WIFEXITED(status);
ASSERT_NE(ret, 0);
int exitCode = WEXITSTATUS(status);
ASSERT_EQ(exitCode, 0);
(void)memset_s(buf, sizeof(buf), 0, sizeof(buf));
ret = ReadFile(usageTestPath.c_str(), buf);
EXPECT_NE(ret, -1);
printf("%s: %s\n", usageTestPath.c_str(), buf);
ret = rmdir(path.c_str());
EXPECT_EQ(ret, 0);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <sys/wait.h>
#include "It_process_plimits.h"
static int g_pidGroup[10] = {0};
static int g_index = 0;
static int g_sleepTime = 5;
static int PidWrite(const char *filepath, char *buf)
{
int fd = open(filepath, O_WRONLY);
if (fd <= 0) {
return 2; /* 2: errno */
}
size_t ret = write(fd, buf, strlen(buf));
if (ret < 0) {
printf("filepath: %s buf: %s, errno=%d\n", filepath, buf, errno);
}
close(fd);
return ret;
}
static int PidFork(const char *filepath, int index)
{
pid_t fpid = fork();
if (fpid == 0) { // children proc
sleep(g_sleepTime);
exit(0);
} else if (fpid > 0) {
g_pidGroup[index] = fpid;
return 0;
}
return -1;
}
void ItProcessPlimitsPid001(void)
{
mode_t mode = 0;
int status;
const char *pidMaxPath = "/proc/plimits/test/pids.max";
const char *procsPath = "/proc/plimits/test/plimits.procs";
std::string path = "/proc/plimits/test";
char writeBuf[3];
int i = 0;
int pidnum = 5;
int mainpid = getpid();
int ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
(void)memset_s(writeBuf, sizeof(writeBuf), 0, sizeof(writeBuf));
ret = sprintf_s(writeBuf, sizeof(writeBuf), "%d", pidnum);
ASSERT_NE(ret, -1);
ret = PidWrite(pidMaxPath, writeBuf);
ASSERT_NE(ret, -1);
for (i = g_index; i < pidnum; i++) {
ret = PidFork(procsPath, i);
if (i != (pidnum - 1)) {
ASSERT_EQ(ret, 0);
} else {
ASSERT_EQ(ret, -1);
}
}
for (i = 0; i < pidnum - 1; ++i) {
pid_t pid = waitpid(g_pidGroup[i], &status, 0);
ASSERT_EQ(pid, g_pidGroup[i]);
ASSERT_EQ(WEXITSTATUS(status), 0);
}
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <vector>
#include <cstring>
#include <sys/wait.h>
#include "It_process_plimits.h"
static int g_pidGroup[10] = {0};
static int g_index = 0;
static int g_sleepTime = 5;
static int PidWrite(const char *filepath, char *buf)
{
int fd = open(filepath, O_WRONLY);
size_t ret = write(fd, buf, strlen(buf));
close(fd);
return ret;
}
static void PidFork(int index)
{
pid_t fpid = fork();
if (fpid == 0) { // children proc
sleep(g_sleepTime);
exit(0);
} else if (fpid > 0) {
g_pidGroup[index] = fpid;
return;
}
}
void ItProcessPlimitsPid002(void)
{
mode_t mode = 0;
int status;
const char *pidMaxPath = "/proc/plimits/test/pids.max";
const char *procsPath = "/proc/plimits/test/plimits.procs";
std::string path = "/proc/plimits/test";
char writeBuf[3];
int num = 4;
int i = 0;
pid_t fpid;
int pidnum = 5;
int ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
(void)memset_s(writeBuf, sizeof(writeBuf), 0, sizeof(writeBuf));
ret = sprintf_s(writeBuf, sizeof(writeBuf), "%d", pidnum);
ASSERT_NE(ret, -1);
ret = PidWrite(pidMaxPath, writeBuf);
ASSERT_NE(ret, -1);
(void)memset_s(writeBuf, sizeof(writeBuf), 0, sizeof(writeBuf));
ret = sprintf_s(writeBuf, sizeof(writeBuf), "%d", getpid());
ASSERT_NE(ret, -1);
ret = PidWrite(procsPath, writeBuf);
ASSERT_NE(ret, -1);
for (i = g_index; i < num; ++i) {
PidFork(i);
}
g_index = i;
fpid = fork();
if (fpid == 0) {
exit(0);
} else if (fpid > 0) {
waitpid(fpid, &status, 0);
}
for (i = 0; i < g_index; ++i) {
waitpid(g_pidGroup[i], &status, 0);
ASSERT_EQ(WEXITSTATUS(status), 0);
}
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <vector>
#include <cstring>
#include <sys/wait.h>
#include "It_process_plimits.h"
static int PidWrite(const char *filepath, char *buf)
{
int fd = open(filepath, O_WRONLY);
size_t ret = write(fd, buf, strlen(buf));
close(fd);
return ret;
}
void ItProcessPlimitsPid003(void)
{
mode_t mode = 0;
int status;
struct sched_param param = { 0 };
const char *pidMaxPath = "/proc/plimits/test/pids.priority";
std::string path = "/proc/plimits/test";
char writeBuf[3];
int pidnum = 15; /* 15: priority limit */
int ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
(void)memset_s(writeBuf, sizeof(writeBuf), 0, sizeof(writeBuf));
ret = sprintf_s(writeBuf, sizeof(writeBuf), "%d", pidnum);
ASSERT_NE(ret, -1);
ret = PidWrite(pidMaxPath, writeBuf);
ASSERT_NE(ret, -1);
int currProcessPri = getpriority(PRIO_PROCESS, getpid());
param.sched_priority = pidnum - 1;
ret = sched_setscheduler(getpid(), SCHED_RR, &param);
ASSERT_NE(ret, 0);
ret = setpriority(PRIO_PROCESS, getpid(), param.sched_priority);
ASSERT_NE(ret, 0);
ret = sched_setparam(getpid(), &param);
ASSERT_NE(ret, 0);
param.sched_priority = currProcessPri + 1;
ret = sched_setscheduler(getpid(), SCHED_RR, &param);
ASSERT_EQ(ret, 0);
param.sched_priority++;
ret = setpriority(PRIO_PROCESS, getpid(), param.sched_priority);
ASSERT_EQ(ret, 0);
param.sched_priority++;
ret = sched_setparam(getpid(), &param);
ASSERT_EQ(ret, 0);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include "It_process_plimits.h"
void ItProcessPlimitsPid004(void)
{
mode_t mode = 0;
int ret;
const char *res = nullptr;
const size_t BUFFER_SIZE = 512;
std::string path = "/proc/plimits/test";
DIR *dirp = opendir("/proc/plimits");
ASSERT_NE(dirp, nullptr);
closedir(dirp);
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
char buff[BUFFER_SIZE] = {0};
ret = ReadFile("/proc/plimits/pids.max", buff);
res = strstr(buff, "64");
ASSERT_STRNE(res, nullptr);
(void)memset_s(buff, BUFFER_SIZE, 0, BUFFER_SIZE);
ret = ReadFile("/proc/plimits/test/pids.max", buff);
res = strstr(buff, "64");
ASSERT_STRNE(res, nullptr);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <climits>
#include <sys/types.h>
#include <gtest/gtest.h>
#include <dirent.h>
#include "It_process_plimits.h"
static int g_processOs = 8;
void ItProcessPlimitsPid005(void)
{
mode_t mode = 0;
std::string path = "/proc/plimits/test";
std::string filepath = "/proc/plimits/test/plimits.procs";
int pid = getpid();
int vprocessId = 90;
std::string missPid = std::to_string(vprocessId);
std::string runPid = std::to_string(pid);
int ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
int fd = open(filepath.c_str(), O_WRONLY);
ASSERT_NE(fd, -1);
for (int i = 1; i <= g_processOs; i++) {
std::string fWrite = std::to_string(i);
ret = write(fd, fWrite.c_str(), (fWrite.length()));
ASSERT_EQ(ret, -1);
}
ret = write(fd, missPid.c_str(), (missPid.length()));
ASSERT_EQ(ret, -1);
ret = write(fd, path.c_str(), (path.length()));
ASSERT_EQ(ret, -1);
ret = write(fd, runPid.c_str(), (runPid.length()));
ASSERT_NE(ret, -1);
close(fd);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include "It_process_plimits.h"
void ItProcessPlimitsPid006(void)
{
mode_t mode = 0;
int ret;
const char *res = nullptr;
const size_t BUFFER_SIZE = 512;
std::string path = "/proc/plimits/test";
DIR *dirp = opendir("/proc/plimits");
ASSERT_NE(dirp, nullptr);
closedir(dirp);
ret = mkdir(path.c_str(), S_IFDIR | mode);
ASSERT_EQ(ret, 0);
char buff[BUFFER_SIZE] = {0};
ret = ReadFile("/proc/plimits/pids.max", buff);
res = strstr(buff, "64");
ASSERT_STRNE(res, nullptr);
(void)memset_s(buff, BUFFER_SIZE, 0, BUFFER_SIZE);
ret = ReadFile("/proc/plimits/test/pids.max", buff);
res = strstr(buff, "64");
ASSERT_STRNE(res, nullptr);
ret = rmdir(path.c_str());
ASSERT_EQ(ret, 0);
return;
}
/*
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
using namespace std;
VOID ItProcessPlimitsSched001(void)
{
const int childAmount = 1;
double errorRate = TestCpupInPlimit(childAmount, "testcpup101", PERIOD_10_SEC_IN_US,
QUOTA_2_SEC_IN_US, QUOTA_PERCENT_20);
ASSERT_GE(errorRate, 0);
ASSERT_LE(errorRate, TOLERANCE_ERROR);
}
/*
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
using namespace std;
VOID ItProcessPlimitsSched002(void)
{
const int childAmount = 1;
double errorRate = TestCpupInPlimit(childAmount, "testcpup102", PERIOD_10_SEC_IN_US,
QUOTA_6_SEC_IN_US, QUOTA_PERCENT_60);
ASSERT_GE(errorRate, 0);
ASSERT_LE(errorRate, TOLERANCE_ERROR);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
using namespace std;
VOID ItProcessPlimitsSched003(void)
{
const int childAmount = 1;
double errorRate = TestCpupInPlimit(childAmount, "testcpup104", PERIOD_10_SEC_IN_US,
QUOTA_10_SEC_IN_US, QUOTA_PERCENT_100);
ASSERT_GE(errorRate, 0);
ASSERT_LE(errorRate, TOLERANCE_ERROR);
}
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_process_plimits.h"
using namespace std;
VOID ItProcessPlimitsSched004(void)
{
const int childAmount = 2;
double errorRate = TestCpupInPlimit(childAmount, "testcpup105", PERIOD_10_SEC_IN_US,
QUOTA_10_SEC_IN_US, QUOTA_PERCENT_100);
ASSERT_GE(errorRate, 0);
ASSERT_LE(errorRate, TOLERANCE_ERROR);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册