Add tests for cgroup process management

This commit is contained in:
Chen Chengjun 2025-11-06 12:25:16 +00:00 committed by Ruihan Li
parent b17602693a
commit cdeb9ec5fd
2 changed files with 98 additions and 0 deletions

View File

@ -0,0 +1,97 @@
#!/bin/sh
# SPDX-License-Identifier: MPL-2.0
set -e
CGROUP_ROOT="/sys/fs/cgroup"
CGROUP_NAME="user"
PROCESS_ID=1
log_step() {
echo -e "\n==> $1"
}
verify() {
local description=$1
local command=$2
local expected=$3
log_step "Verify: $description"
echo "Run: $command"
local result=$(eval "$command")
echo "Got: $result"
echo "Expected: $expected"
if [ "$result" != "$expected" ]; then
echo -e "Error: Verification failed!"
exit 1
else
echo -e "Verified"
fi
}
cleanup() {
log_step "Cleaning up"
if [ -f "$CGROUP_ROOT/cgroup.procs" ]; then
echo "Moving process $PROCESS_ID back to root cgroup"
echo $PROCESS_ID > "$CGROUP_ROOT/cgroup.procs" 2>/dev/null || true
fi
if [ -d "$CGROUP_ROOT/$CGROUP_NAME" ]; then
echo "Removing test cgroup: $CGROUP_ROOT/$CGROUP_NAME"
rmdir "$CGROUP_ROOT/$CGROUP_NAME" 2>/dev/null || true
fi
echo "Cleanup complete"
}
trap cleanup EXIT
log_step "1. Change to cgroup root directory"
cd "$CGROUP_ROOT"
echo "Current directory: $(pwd)"
log_step "2. Create user hierarchy"
mkdir -p "$CGROUP_NAME"
verify "user hierarchy exists" "ls -d $CGROUP_NAME" "$CGROUP_NAME"
log_step "3. Enter user directory"
cd "$CGROUP_NAME"
echo "Current directory: $(pwd)"
log_step "4. Check initial cgroup of process 1"
verify "Process 1 initially in root cgroup" "grep -a '0::' /proc/$PROCESS_ID/cgroup" "0::/"
log_step "4a. Check initial populated status"
verify "Initial cgroup.events populated=0" "grep '^populated' cgroup.events" "populated 0"
log_step "5. Bind process 1 to user hierarchy"
echo $PROCESS_ID > cgroup.procs
verify "Process 1 added to user hierarchy" "cat cgroup.procs | grep -w $PROCESS_ID" "$PROCESS_ID"
log_step "5a. Check populated status after binding"
verify "cgroup.events populated=1 after binding" "grep '^populated' cgroup.events" "populated 1"
log_step "6. Check process 1 cgroup again"
verify "Process 1 now in user hierarchy" "grep -a '0::' /proc/$PROCESS_ID/cgroup" "0::/$CGROUP_NAME"
log_step "7. Return to parent directory"
cd ..
echo "Current directory: $(pwd)"
log_step "8. Check parent cgroup.procs contents"
echo "cgroup.procs contents:"
cat cgroup.procs
verify "cgroup.procs now does not contain process 1" "cat cgroup.procs | grep -w $PROCESS_ID" ""
log_step "9. Move process 1 back to root cgroup"
echo $PROCESS_ID > cgroup.procs
verify "Process 1 back in root cgroup" "grep -a '0::' /proc/$PROCESS_ID/cgroup" "0::/"
log_step "10. Remove user hierarchy"
rmdir "$CGROUP_NAME"
verify "user hierarchy removed" "ls -d $CGROUP_NAME 2>&1" "ls: $CGROUP_NAME: No such file or directory"
echo -e "\nAll test steps completed successfully!"

View File

@ -9,6 +9,7 @@ cd ${SCRIPT_DIR}
./shell_cmd.sh
./test_epoll_pwait.sh
./cgroup.sh
# TODO: Support the following tests with SMP
if [ -z $BLOCK_UNSUPPORTED_SMP_TESTS ]; then