blob: e7600b32f737a89cb5857cd6d198f57bd66337a2 [file] [log] [blame]
#!/bin/sh
################################################################################
## ##
## Copyright (c) 2015 SUSE ##
## ##
## This program is free software; you can redistribute it and#or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation; either version 2 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, but ##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ##
## for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program; if not, write to the Free Software ##
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 ##
## USA ##
## ##
## Author: Cedric Hnyda <chnyda@suse.com> ##
## ##
################################################################################
# Usage
# ./pids.sh caseno max
#
caseno=$1
max=$2
export TCID="pids_$1_$2"
export TST_TOTAL=1
mounted=1
. test.sh
cleanup()
{
killall -9 pids_task2 >/dev/null 2>&1
tst_resm TINFO "removing created directories"
rmdir $testpath
if [ "$mounted" -ne "1" ]; then
tst_resm TINFO "Umounting pids"
umount $mount_point
rmdir $mount_point
fi
}
setup()
{
tst_require_root
exist=`grep -w pids /proc/cgroups | cut -f1`;
if [ "$exist" = "" ]; then
tst_brkm TCONF NULL "pids not supported"
fi
mount_point=`grep -w pids /proc/mounts | cut -f 2 | cut -d " " -f2`
if [ "$mount_point" = "" ]; then
mounted=0
mount_point=/dev/cgroup
fi
TST_CLEANUP=cleanup
testpath=$mount_point/ltp_$TCID
if [ "$mounted" -eq "0" ]; then
ROD mkdir -p $mount_point
ROD mount -t cgroup -o pids none $mount_point
fi
ROD mkdir -p $testpath
}
start_pids_tasks2()
{
nb=$1
for i in `seq 1 $nb`; do
pids_task2 &
echo $! > $testpath/tasks
done
if [ $(cat "$testpath/tasks" | wc -l) -ne $nb ]; then
tst_resm TBROK "failed to attach process"
fi
}
case1()
{
start_pids_tasks2 $max
# should return 0 because there is no limit
pids_task1 "$testpath/tasks"
ret=$?
if [ "$ret" -eq "2" ]; then
tst_resm TFAIL "fork failed unexpectedly"
elif [ "$ret" -eq "0" ]; then
tst_resm TPASS "fork didn't fail"
else
tst_resm TBROK "pids_task1 failed"
fi
}
case2()
{
tmp=$((max - 1))
tst_resm TINFO "limit the number of pid to $max"
ROD echo $max \> $testpath/pids.max
start_pids_tasks2 $tmp
# should return 2 because the limit of pids is reached
pids_task1 "$testpath/tasks"
ret=$?
if [ "$ret" -eq "2" ]; then
tst_resm TPASS "fork failed as expected"
elif [ "$ret" -eq "0" ]; then
tst_resm TFAIL "fork didn't fail despite the limit"
else
tst_resm TBROK "pids_task1 failed"
fi
}
case3()
{
lim=$((max + 2))
tst_resm TINFO "limit the number of avalaible pid to $lim"
ROD echo $lim \> $testpath/pids.max
start_pids_tasks2 $max
pids_task1 "$testpath/tasks"
ret=$?
if [ "$ret" -eq "2" ]; then
tst_resm TFAIL "fork failed unexpectedly"
elif [ "$ret" -eq "0" ]; then
tst_resm TPASS "fork worked as expected"
else
tst_resm TBROK "pids_task1 failed"
fi
}
case4()
{
tst_resm TINFO "limit the number of avalaible pid to 0"
ROD echo 0 \> $testpath/pids.max
start_pids_tasks2 $max
tst_resm TPASS "all process were attached"
}
case5()
{
tst_resm TINFO "try to limit the number of avalaible pid to -1"
echo -1 > $testpath/pids.max
if [ "$?" -eq "0" ]; then
tst_resm TFAIL "managed to set the limit to -1"
else
tst_resm TPASS "didn't manage to set the limit to -1"
fi
}
setup
if [ "$#" -ne "2" ]; then
tst_resm TFAIL "invalid parameters, usage: ./pids01 caseno max"
else
case$caseno
fi
tst_exit