#!/usr/bin/env bats load helpers function setup() { setup_busybox } function teardown() { teardown_bundle } @test "runc create" { runc create --console-socket "$CONSOLE_SOCKET" test_busybox [ "$status" -eq 0 ] testcontainer test_busybox created # start the command runc start test_busybox [ "$status" -eq 0 ] testcontainer test_busybox running } @test "runc create exec" { runc create --console-socket "$CONSOLE_SOCKET" test_busybox [ "$status" -eq 0 ] testcontainer test_busybox created runc exec test_busybox true [ "$status" -eq 0 ] testcontainer test_busybox created # start the command runc start test_busybox [ "$status" -eq 0 ] testcontainer test_busybox running } @test "runc create --pid-file" { runc create --pid-file pid.txt --console-socket "$CONSOLE_SOCKET" test_busybox [ "$status" -eq 0 ] testcontainer test_busybox created # check pid.txt was generated [ -e pid.txt ] [[ $(cat pid.txt) = $(__runc state test_busybox | jq '.pid') ]] # start the command runc start test_busybox [ "$status" -eq 0 ] testcontainer test_busybox running } @test "runc create --pid-file with new CWD" { bundle="$(pwd)" # create pid_file directory as the CWD mkdir pid_file cd pid_file runc create --pid-file pid.txt -b "$bundle" --console-socket "$CONSOLE_SOCKET" test_busybox [ "$status" -eq 0 ] testcontainer test_busybox created # check pid.txt was generated [ -e pid.txt ] [[ $(cat pid.txt) = $(__runc state test_busybox | jq '.pid') ]] # start the command runc start test_busybox [ "$status" -eq 0 ] testcontainer test_busybox running } # https://github.com/opencontainers/runc/issues/4394#issuecomment-2334926257 @test "runc create [shared pidns + rootless]" { # Remove pidns so it's shared with the host. update_config ' .linux.namespaces -= [{"type": "pid"}]' if [ $EUID -ne 0 ]; then if rootless_cgroup; then # Rootless containers have empty cgroup path by default. set_cgroups_path fi # Can't mount real /proc when rootless + no pidns, # so change it to a bind-mounted one from the host. update_config ' .mounts |= map((select(.type == "proc") | .type = "none" | .source = "/proc" | .options = ["rbind", "nosuid", "nodev", "noexec"] ) // .)' fi exp="Such configuration is strongly discouraged" runc create --console-socket "$CONSOLE_SOCKET" test [ "$status" -eq 0 ] if [ $EUID -ne 0 ] && ! rootless_cgroup; then [[ "$output" = *"$exp"* ]] else [[ "$output" != *"$exp"* ]] fi }