123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- #!/bin/sh
- ################################################################################
- ## ##
- ## Copyright (c) 2009 FUJITSU LIMITED ##
- ## Author: Shi Weihua <shiwh@cn.fujitsu.com> ##
- ## Copyright (c) 2015 Cedric Hnyda <chnyda@suse.com> ##
- ## Copyright (c) 2015-2016 Cyril Hrubis <chrubis@suse.cz> ##
- ## ##
- ## 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 ##
- ## ##
- ################################################################################
- TCID="cgroup_fj_function2"
- TST_TOTAL=7
- . cgroup_fj_common.sh
- subsystem=$1
- usage_and_exit()
- {
- echo "usage of cgroup_fj_function2.sh: "
- echo " ./cgroup_fj_function2.sh subsystem"
- echo "example: ./cgroup_fj_function2.sh cpuset"
- tst_brkm TBROK "$1"
- }
- if [ "$#" -ne "1" ]; then
- usage_and_exit "Invalid number of parameters"
- fi
- # Move a task from group to group
- test1()
- {
- if ! attach_and_check "$pid" "$start_path/ltp_1"; then
- tst_resm TFAIL "Failed to attach task"
- return
- fi
- if ! attach_and_check "$pid" "$start_path"; then
- tst_resm TFAIL "Failed to attach task"
- return
- fi
- tst_resm TPASS "Task attached succesfully"
- }
- # Group can be renamed with mv
- test2()
- {
- create_subgroup "$start_path/ltp_2"
- if ! mv "$start_path/ltp_2" "$start_path/ltp_3"; then
- tst_resm TFAIL "Failed to move $start_path/ltp_2 to $start_path/ltp_3"
- rmdir "$start_path/ltp_2"
- return
- fi
- if ! rmdir "$start_path/ltp_3"; then
- tst_resm TFAIL "Failed to remove $start_path/ltp_3"
- return
- fi
- tst_resm TPASS "Successfully moved $start_path/ltp_2 to $start_path/ltp_3"
- }
- # Group can be renamed with mv unless the target name exists
- test3()
- {
- create_subgroup "$start_path/ltp_2"
- if mv "$start_path/ltp_2" "$start_path/ltp_1" > /dev/null 2>&1; then
- tst_resm TFAIL "Moved $start_path/ltp_2 over existing $start_path/ltp_1"
- return
- fi
- tst_resm TPASS "Failed to move $start_path/ltp_2 over existing $start_path/ltp_1"
- ROD rmdir "$start_path/ltp_2"
- }
- # Group with attached task cannot be removed
- test4()
- {
- if ! attach_and_check "$pid" "$start_path/ltp_1"; then
- tst_resm TFAIL "Failed to attach $pid to $start_path/ltp_1"
- return
- fi
- if rmdir "$start_path/ltp_1" > /dev/null 2>&1; then
- tst_resm TFAIL "Removed $start_path/ltp_1 which contains task $pid"
- create_subgroup "$start_path/ltp_1"
- return
- fi
- tst_resm TPASS "Group $start_path/ltp_1 with task $pid cannot be removed"
- }
- # Group with a subgroup cannot be removed
- test5()
- {
- create_subgroup "$start_path/ltp_1/a"
- if rmdir "$start_path/ltp_1" > /dev/null 2>&1; then
- tst_resm TFAIL "Removed $start_path/ltp_1 which contains subdir 'a'"
- return
- fi
- tst_resm TPASS "Dir $start_path/ltp_1 with subdir 'a' cannot be removed"
- ROD rmdir "$start_path/ltp_1/a"
- ROD echo "$pid" \> "$start_path/tasks"
- }
- # Group cannot be moved outside of hierarchy
- test6()
- {
- if mv "$start_path/ltp_1" "$PWD/ltp" > /dev/null 2>&1; then
- tst_resm TFAIL "Subgroup $start_path/ltp_1 outside hierarchy to $PWD/ltp"
- return
- fi
- tst_resm TPASS "Subgroup $start_path/ltp_1 cannot be moved to $PWD/ltp"
- }
- # Tasks file cannot be removed
- test7()
- {
- if rm "$start_path/ltp_1/tasks" > /dev/null 2>&1; then
- tst_resm TFAIL "Tasks file $start_path/ltp_1/tasks could be removed"
- return
- fi
- tst_resm TPASS "Tasks file $start_path/ltp_1/tasks cannot be removed"
- }
- # Test notify_on_release with invalid inputs
- test8()
- {
- if echo "-1" > "$start_path/ltp_1/notify_on_release" 2>/dev/null; then
- tst_resm TFAIL "Can write -1 to $start_path/ltp_1/notify_on_release"
- return
- fi
- if echo "ltp" > "$start_path/ltp_1/notify_on_release" 2>/dev/null; then
- tst_resm TFAIL "Can write ltp to $start_path/ltp_1/notify_on_release"
- return
- fi
- tst_resm TPASS "Cannot write invalid values to $start_path/ltp_1/notify_on_release"
- }
- # Test that notify_on_release can be changed
- test9()
- {
- local notify=$(ROD cat "$start_path/ltp_1/notify_on_release")
- local value
- if [ "$notify" -eq 0 ]; then
- value=1
- else
- value=0
- fi
- if ! echo "$value" > "$start_path/ltp_1/notify_on_release"; then
- tst_resm TFAIL "Failed to set $start_path/ltp_1/notify_on_release to $value"
- return
- fi
- ROD echo "$notify" \> "$start_path/ltp_1/notify_on_release"
- tst_resm TPASS "Set $start_path/ltp_1/notify_on_release to $value"
- }
- setup
- cgroup_fj_proc&
- pid=$!
- start_path="$mount_point/ltp"
- create_subgroup "$start_path"
- create_subgroup "$start_path/ltp_1"
- test1
- test2
- test3
- test4
- test5
- test6
- test7
- test8
- test9
- ROD kill -9 $pid
- wait $pid
- ROD rmdir "$start_path/ltp_1"
- tst_exit
|