From cdeb9ec5fd68603e48ec543c4f8ea88cfc97b2f4 Mon Sep 17 00:00:00 2001 From: Chen Chengjun Date: Thu, 6 Nov 2025 12:25:16 +0000 Subject: [PATCH] Add tests for cgroup process management --- test/src/apps/scripts/cgroup.sh | 97 +++++++++++++++++++++++ test/src/apps/scripts/run_general_test.sh | 1 + 2 files changed, 98 insertions(+) create mode 100644 test/src/apps/scripts/cgroup.sh diff --git a/test/src/apps/scripts/cgroup.sh b/test/src/apps/scripts/cgroup.sh new file mode 100644 index 000000000..fd76d276b --- /dev/null +++ b/test/src/apps/scripts/cgroup.sh @@ -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!" \ No newline at end of file diff --git a/test/src/apps/scripts/run_general_test.sh b/test/src/apps/scripts/run_general_test.sh index e6d996982..0d5a05a2a 100755 --- a/test/src/apps/scripts/run_general_test.sh +++ b/test/src/apps/scripts/run_general_test.sh @@ -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