1#!/bin/sh 2 3################################################################################ 4## ## 5## Copyright (c) 2009 FUJITSU LIMITED ## 6## Author: Shi Weihua <shiwh@cn.fujitsu.com> ## 7## Copyright (c) 2015 Cedric Hnyda <chnyda@suse.com> ## 8## Copyright (c) 2015-2016 Cyril Hrubis <chrubis@suse.cz> ## 9## ## 10## This program is free software; you can redistribute it and#or modify ## 11## it under the terms of the GNU General Public License as published by ## 12## the Free Software Foundation; either version 2 of the License, or ## 13## (at your option) any later version. ## 14## ## 15## This program is distributed in the hope that it will be useful, but ## 16## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## 17## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## 18## for more details. ## 19## ## 20## You should have received a copy of the GNU General Public License ## 21## along with this program; if not, write to the Free Software Foundation, ## 22## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## 23## ## 24################################################################################ 25 26TCID="cgroup_fj_function2" 27TST_TOTAL=7 28 29. cgroup_fj_common.sh 30 31subsystem=$1 32 33usage_and_exit() 34{ 35 echo "usage of cgroup_fj_function2.sh: " 36 echo " ./cgroup_fj_function2.sh subsystem" 37 echo "example: ./cgroup_fj_function2.sh cpuset" 38 39 tst_brkm TBROK "$1" 40} 41 42if [ "$#" -ne "1" ]; then 43 usage_and_exit "Invalid number of parameters" 44fi 45 46# Move a task from group to group 47test1() 48{ 49 if ! attach_and_check "$pid" "$start_path/ltp_1"; then 50 tst_resm TFAIL "Failed to attach task" 51 return 52 fi 53 54 if ! attach_and_check "$pid" "$start_path"; then 55 tst_resm TFAIL "Failed to attach task" 56 return 57 fi 58 59 tst_resm TPASS "Task attached succesfully" 60} 61 62# Group can be renamed with mv 63test2() 64{ 65 create_subgroup "$start_path/ltp_2" 66 67 if ! mv "$start_path/ltp_2" "$start_path/ltp_3"; then 68 tst_resm TFAIL "Failed to move $start_path/ltp_2 to $start_path/ltp_3" 69 rmdir "$start_path/ltp_2" 70 return 71 fi 72 73 if ! rmdir "$start_path/ltp_3"; then 74 tst_resm TFAIL "Failed to remove $start_path/ltp_3" 75 return 76 fi 77 78 tst_resm TPASS "Successfully moved $start_path/ltp_2 to $start_path/ltp_3" 79} 80 81# Group can be renamed with mv unless the target name exists 82test3() 83{ 84 create_subgroup "$start_path/ltp_2" 85 86 if mv "$start_path/ltp_2" "$start_path/ltp_1" > /dev/null 2>&1; then 87 tst_resm TFAIL "Moved $start_path/ltp_2 over existing $start_path/ltp_1" 88 return 89 fi 90 91 tst_resm TPASS "Failed to move $start_path/ltp_2 over existing $start_path/ltp_1" 92 93 ROD rmdir "$start_path/ltp_2" 94} 95 96# Group with attached task cannot be removed 97test4() 98{ 99 if ! attach_and_check "$pid" "$start_path/ltp_1"; then 100 tst_resm TFAIL "Failed to attach $pid to $start_path/ltp_1" 101 return 102 fi 103 104 if rmdir "$start_path/ltp_1" > /dev/null 2>&1; then 105 tst_resm TFAIL "Removed $start_path/ltp_1 which contains task $pid" 106 create_subgroup "$start_path/ltp_1" 107 return 108 fi 109 110 tst_resm TPASS "Group $start_path/ltp_1 with task $pid cannot be removed" 111} 112 113# Group with a subgroup cannot be removed 114test5() 115{ 116 create_subgroup "$start_path/ltp_1/a" 117 118 if rmdir "$start_path/ltp_1" > /dev/null 2>&1; then 119 tst_resm TFAIL "Removed $start_path/ltp_1 which contains subdir 'a'" 120 return 121 fi 122 123 tst_resm TPASS "Dir $start_path/ltp_1 with subdir 'a' cannot be removed" 124 125 ROD rmdir "$start_path/ltp_1/a" 126 127 ROD echo "$pid" \> "$start_path/tasks" 128} 129 130# Group cannot be moved outside of hierarchy 131test6() 132{ 133 if mv "$start_path/ltp_1" "$PWD/ltp" > /dev/null 2>&1; then 134 tst_resm TFAIL "Subgroup $start_path/ltp_1 outside hierarchy to $PWD/ltp" 135 return 136 fi 137 138 tst_resm TPASS "Subgroup $start_path/ltp_1 cannot be moved to $PWD/ltp" 139} 140 141# Tasks file cannot be removed 142test7() 143{ 144 if rm "$start_path/ltp_1/tasks" > /dev/null 2>&1; then 145 tst_resm TFAIL "Tasks file $start_path/ltp_1/tasks could be removed" 146 return 147 fi 148 149 tst_resm TPASS "Tasks file $start_path/ltp_1/tasks cannot be removed" 150} 151 152# Test notify_on_release with invalid inputs 153test8() 154{ 155 if echo "-1" > "$start_path/ltp_1/notify_on_release" 2>/dev/null; then 156 tst_resm TFAIL "Can write -1 to $start_path/ltp_1/notify_on_release" 157 return 158 fi 159 160 if echo "ltp" > "$start_path/ltp_1/notify_on_release" 2>/dev/null; then 161 tst_resm TFAIL "Can write ltp to $start_path/ltp_1/notify_on_release" 162 return 163 fi 164 165 tst_resm TPASS "Cannot write invalid values to $start_path/ltp_1/notify_on_release" 166} 167 168# Test that notify_on_release can be changed 169test9() 170{ 171 local notify=$(ROD cat "$start_path/ltp_1/notify_on_release") 172 local value 173 174 if [ "$notify" -eq 0 ]; then 175 value=1 176 else 177 value=0 178 fi 179 180 if ! echo "$value" > "$start_path/ltp_1/notify_on_release"; then 181 tst_resm TFAIL "Failed to set $start_path/ltp_1/notify_on_release to $value" 182 return 183 fi 184 185 ROD echo "$notify" \> "$start_path/ltp_1/notify_on_release" 186 187 tst_resm TPASS "Set $start_path/ltp_1/notify_on_release to $value" 188} 189 190setup 191 192cgroup_fj_proc& 193pid=$! 194 195start_path="$mount_point/ltp" 196 197create_subgroup "$start_path" 198create_subgroup "$start_path/ltp_1" 199 200test1 201test2 202test3 203test4 204test5 205test6 206test7 207test8 208test9 209 210ROD kill -9 $pid 211wait $pid 212ROD rmdir "$start_path/ltp_1" 213 214tst_exit 215