blob: 837244b4b7f3ebe2e02c8ab5ff51c1b55766b0dc [file] [log] [blame]
#!/bin/sh
################################################################################
# #
# Copyright (c) 2009 FUJITSU LIMITED #
# #
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
# #
# Author: Miao Xie <miaox@cn.fujitsu.com> #
# #
################################################################################
cd $LTPROOT/testcases/bin
. ./cpuset_funcs.sh
export TCID="cpuset01"
export TST_TOTAL=97
export TST_COUNT=1
nr_cpus=$NR_CPUS
nr_mems=$N_NODES
cpus_all="$(seq -s, 0 $((nr_cpus-1)))"
mems_all="$(seq -s, 0 $((nr_mems-1)))"
exit_status=0
cfile_name=
# base_op_write_and_test <write_file_name> <write_string> <expect_string>
base_op_write_and_test()
{
local write_file="$1"
local write_string="$2"
local expect_string="$3"
local write_result=
local ret=0
mkdir -p "$(dirname $write_file)" || {
tst_brkm TFAIL "Failed to mkdir -p $(basename $write_file)"
return 1
}
[ "$write_string" = NULL ] && write_string=" "
/bin/echo "$write_string" > "$write_file" 2> $CPUSET_TMP/stderr
ret=$?
write_result="$(cat "$write_file")"
case "$expect_string" in
EMPTY)
test -z "$write_result" -a $ret = 0
ret=$?
;;
WRITE_ERROR)
ret=$((!$ret))
;;
*)
test "$expect_string" = "$write_result" -a $ret = 0
ret=$?
;;
esac
if [ $ret -eq 0 ]; then
tst_resm TPASS "$cfile_name: Get the expected string"
else
tst_resm TFAIL "$cfile_name: Test result - $write_result Expected string - \"$expect_string\""
fi
return $ret
}
base_op_test()
{
setup
if [ $? -ne 0 ]; then
exit_status=1
else
base_op_write_and_test "$@"
if [ $? -ne 0 ]; then
exit_status=1
fi
cleanup
if [ $? -ne 0 ]; then
exit_status=1
fi
fi
: $((TST_COUNT++))
}
test_cpus()
{
cfile_name="cpus"
while read cpus result
do
base_op_test "$CPUSET/1/cpus" "$cpus" "$result"
done <<- EOF
NULL EMPTY
0 0
$nr_cpus WRITE_ERROR
$cpus_all 0-$((nr_cpus-1))
${cpus_all}$nr_cpus WRITE_ERROR
0,0 0
0-0 0
0-$((nr_cpus-1)) 0-$((nr_cpus-1))
-1 WRITE_ERROR
0-$nr_cpus WRITE_ERROR
0- WRITE_ERROR
0--$((nr_cpus-1)) WRITE_ERROR
0,1-$((nr_cpus-2)),$((nr_cpus-1)) 0-$((nr_cpus-1))
0,1-$((nr_cpus-2)), 0-$((nr_cpus-2))
0AAA WRITE_ERROR
AAA WRITE_ERROR
EOF
# while read cpus result
}
test_mems()
{
cfile_name="mems"
while read mems result
do
base_op_test "$CPUSET/1/mems" "$mems" "$result"
done <<- EOF
NULL EMPTY
0 0
$nr_mems WRITE_ERROR
$mems_all 0-$((nr_mems-1))
${mems_all}$nr_mems WRITE_ERROR
0,0 0
0-0 0
0-$((nr_mems-1)) 0-$((nr_mems-1))
-1 WRITE_ERROR
0-$nr_mems WRITE_ERROR
0- WRITE_ERROR
0--$((nr_mems-1)) WRITE_ERROR
0,1-$((nr_mems-2)),$((nr_mems-1)) 0-$((nr_mems-1))
0,1-$((nr_mems-2)), 0-$((nr_mems-2))
0AAA WRITE_ERROR
AAA WRITE_ERROR
EOF
# while read mems result
}
test_flags()
{
for filename in cpu_exclusive mem_exclusive mem_hardwall \
memory_migrate memory_spread_page memory_spread_slab \
sched_load_balance memory_pressure_enabled
do
cfile_name="$filename"
while read flags result
do
base_op_test "$CPUSET/$filename" "$flags" "$result"
done <<- EOF
NULL 0
0 0
1 1
-1 WRITE_ERROR
A WRITE_ERROR
2 1
EOF
# while read flags, result
done # for filename in flagfiles
}
# attach_task_test <cpus> <mems> <expect>
attach_task_test()
{
local cpus=$1
local mems=$2
local expect=$3
local pid=
local ret=
setup
if [ $? -ne 0 ]; then
exit_status=1
cleanup
: $((TST_COUNT++))
return
fi
# create sub cpuset
mkdir "$CPUSET/sub_cpuset" > /dev/null
if [ $? -ne 0 ]; then
exit_status=1
cleanup
: $((TST_COUNT++))
return
fi
if [ "$cpus" != "NULL" ]; then
echo $cpus > "$CPUSET/sub_cpuset/cpus"
fi
if [ "$mems" != "NULL" ]; then
echo $mems > "$CPUSET/sub_cpuset/mems"
fi
cat /dev/zero > /dev/null &
pid=$!
# attach task into the cpuset group
echo $pid > "$CPUSET/sub_cpuset/tasks" 2> /dev/null
if [ $? -eq $expect ]; then
tst_resm TPASS "Attaching Task Test successed!!"
else
tst_resm TFAIL "Attaching Task Test failed!! cpus - \"$cpus\", mems - \"$mems\", Expect - \"$expect\", Fact - \"$ret\". (0 - Attach Success, 1 - Attach Fail)"
exit_status=1
fi
/bin/kill $pid > /dev/null 2>&1
cleanup
if [ $? -ne 0 ]; then
exit_status=1
fi
: $((TST_COUNT++))
}
test_attach_task()
{
cfile_name="tasks"
while read cpus mems expect
do
attach_task_test "$cpus" "$mems" "$expect"
done <<- EOF
0 NULL 1
0 0 0
NULL 0 1
EOF
# while read cpus mems expect
}
test_readonly_cfiles()
{
for filename in cpus mems memory_pressure
do
cfile_name="$filename(READONLY)"
base_op_test "$CPUSET/$filename" "0" "WRITE_ERROR"
done # for filename in readonly cfiles
}
# Case 1-3
test_readonly_cfiles
# Case 4-19
test_cpus
# Case 20-35
test_mems
# Case 36-83
test_flags
# Case 84-86
test_attach_task
exit $exit_status