2016-03-15 03:55:05 +08:00
|
|
|
#!/usr/bin/env bats
|
|
|
|
|
|
|
|
load helpers
|
|
|
|
|
|
|
|
function setup() {
|
|
|
|
teardown_busybox
|
|
|
|
setup_busybox
|
|
|
|
}
|
|
|
|
|
|
|
|
function teardown() {
|
|
|
|
teardown_busybox
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "runc delete" {
|
2016-05-14 06:49:45 +08:00
|
|
|
# run busybox detached
|
2016-09-06 20:40:01 +08:00
|
|
|
runc run -d --console-socket $CONSOLE_SOCKET test_busybox
|
2016-03-15 03:55:05 +08:00
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
|
|
|
|
# check state
|
|
|
|
testcontainer test_busybox running
|
2016-05-16 16:21:52 +08:00
|
|
|
|
2016-05-09 21:06:42 +08:00
|
|
|
runc kill test_busybox KILL
|
2016-05-11 15:45:00 +08:00
|
|
|
[ "$status" -eq 0 ]
|
2016-03-15 03:55:05 +08:00
|
|
|
# wait for busybox to be in the destroyed state
|
2016-05-20 08:28:58 +08:00
|
|
|
retry 10 1 eval "__runc state test_busybox | grep -q 'stopped'"
|
2016-03-15 03:55:05 +08:00
|
|
|
|
|
|
|
# delete test_busybox
|
2016-05-09 21:06:42 +08:00
|
|
|
runc delete test_busybox
|
2016-05-11 15:45:00 +08:00
|
|
|
[ "$status" -eq 0 ]
|
2016-05-16 16:21:52 +08:00
|
|
|
|
2016-05-09 21:06:42 +08:00
|
|
|
runc state test_busybox
|
2016-03-15 03:55:05 +08:00
|
|
|
[ "$status" -ne 0 ]
|
|
|
|
}
|
2016-06-29 06:21:42 +08:00
|
|
|
|
|
|
|
@test "runc delete --force" {
|
|
|
|
# run busybox detached
|
2016-09-06 20:40:01 +08:00
|
|
|
runc run -d --console-socket $CONSOLE_SOCKET test_busybox
|
2016-06-29 06:21:42 +08:00
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
|
|
|
|
# check state
|
|
|
|
testcontainer test_busybox running
|
|
|
|
|
|
|
|
# force delete test_busybox
|
|
|
|
runc delete --force test_busybox
|
|
|
|
|
|
|
|
runc state test_busybox
|
|
|
|
[ "$status" -ne 0 ]
|
|
|
|
}
|
2017-05-17 04:17:34 +08:00
|
|
|
|
|
|
|
@test "runc delete --force ignore not exist" {
|
|
|
|
runc delete --force notexists
|
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
}
|
2020-05-19 17:56:30 +08:00
|
|
|
|
|
|
|
@test "runc delete --force in cgroupv2 with subcgroups" {
|
|
|
|
requires cgroups_v2 root
|
|
|
|
set_cgroups_path "$BUSYBOX_BUNDLE"
|
|
|
|
|
|
|
|
# grant `rw` priviledge to `/sys/fs/cgroup`
|
|
|
|
cat "${BUSYBOX_BUNDLE}/config.json"\
|
|
|
|
| jq '.mounts |= map((select(.type=="cgroup") | .options -= ["ro"]) // .)'\
|
|
|
|
> "${BUSYBOX_BUNDLE}/config.json.tmp"
|
|
|
|
mv "${BUSYBOX_BUNDLE}/config.json"{.tmp,}
|
|
|
|
|
|
|
|
# run busybox detached
|
|
|
|
runc run -d --console-socket $CONSOLE_SOCKET test_busybox
|
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
|
|
|
|
# check state
|
|
|
|
testcontainer test_busybox running
|
|
|
|
|
|
|
|
# create a sub process
|
|
|
|
__runc exec -d test_busybox sleep 1d
|
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
|
|
|
|
# find the pid of sleep
|
|
|
|
pid=$(__runc exec test_busybox ps -a | grep 1d | awk '{print $1}')
|
|
|
|
[[ ${pid} =~ [0-9]+ ]]
|
|
|
|
|
|
|
|
# create subcgroups
|
|
|
|
cat <<EOF > nest.sh
|
|
|
|
cd /sys/fs/cgroup
|
|
|
|
for f in \$(cat cgroup.controllers); do echo +\$f > cgroup.subtree_control; done
|
|
|
|
mkdir foo
|
|
|
|
cd foo
|
|
|
|
echo threaded > cgroup.type
|
|
|
|
echo ${pid} > cgroup.threads
|
|
|
|
cat cgroup.threads
|
|
|
|
EOF
|
|
|
|
cat nest.sh | runc exec test_busybox sh
|
|
|
|
[[ ${output} =~ [0-9]+ ]]
|
|
|
|
|
|
|
|
# check create subcgroups success
|
|
|
|
[ -d $CGROUP_PATH/foo ]
|
|
|
|
|
|
|
|
# check cgroup.threads' value
|
|
|
|
runc exec test_busybox cat /sys/fs/cgroup/foo/cgroup.threads
|
|
|
|
[[ ${output} =~ [0-9]+ ]]
|
|
|
|
|
|
|
|
# force delete test_busybox
|
|
|
|
runc delete --force test_busybox
|
|
|
|
|
|
|
|
runc state test_busybox
|
|
|
|
[ "$status" -ne 0 ]
|
|
|
|
|
|
|
|
# check delete subcgroups success
|
|
|
|
[ ! -d $CGROUP_PATH/foo ]
|
|
|
|
}
|