tests/int: BATS_TMPDIR -> BATS_RUN_TMPDIR

It's a little known fact, but BATS_TMPDIR is just /tmp, and it is not
being cleaned by bats after the test.

BATS_RUN_TMPDIR (available since bats 1.2.1) is $BATS_TMPDIR/bats-run-$$
(i.e. it is per bats run and includes PID), and it is cleaned up after
the test (unless --no-tmpdir-cleanup is given).

Use BATS_RUN_TMPDIR for better isolation and cleanup.

[v2: check for BATS_RUN_TMPDIR, effectively requiring bats >= 1.2.1]

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
Kir Kolyshkin
2021-01-21 11:47:43 -08:00
parent 85d5fea468
commit 985546b445
4 changed files with 23 additions and 17 deletions
+15 -9
View File
@@ -1,5 +1,11 @@
#!/bin/bash #!/bin/bash
# bats-core v1.2.1 defines BATS_RUN_TMPDIR
if [ -z "$BATS_RUN_TMPDIR" ]; then
echo "bats >= v1.2.1 is required. Aborting." >&2
exit 1
fi
# Root directory of integration tests. # Root directory of integration tests.
INTEGRATION_ROOT=$(dirname "$(readlink -f "$BASH_SOURCE")") INTEGRATION_ROOT=$(dirname "$(readlink -f "$BASH_SOURCE")")
@@ -15,9 +21,9 @@ RECVTTY="${INTEGRATION_ROOT}/../../contrib/cmd/recvtty/recvtty"
TESTDATA="${INTEGRATION_ROOT}/testdata" TESTDATA="${INTEGRATION_ROOT}/testdata"
# Destinations for test containers. # Destinations for test containers.
BUSYBOX_BUNDLE="$BATS_TMPDIR/busyboxtest" BUSYBOX_BUNDLE="$BATS_RUN_TMPDIR/busyboxtest"
HELLO_BUNDLE="$BATS_TMPDIR/hello-world" HELLO_BUNDLE="$BATS_RUN_TMPDIR/hello-world"
DEBIAN_BUNDLE="$BATS_TMPDIR/debiantest" DEBIAN_BUNDLE="$BATS_RUN_TMPDIR/debiantest"
# CRIU PATH # CRIU PATH
CRIU="$(which criu 2>/dev/null || true)" CRIU="$(which criu 2>/dev/null || true)"
@@ -29,10 +35,10 @@ KERNEL_MINOR="${KERNEL_VERSION#$KERNEL_MAJOR.}"
KERNEL_MINOR="${KERNEL_MINOR%%.*}" KERNEL_MINOR="${KERNEL_MINOR%%.*}"
# Root state path. # Root state path.
ROOT=$(mktemp -d "$BATS_TMPDIR/runc.XXXXXX") ROOT=$(mktemp -d "$BATS_RUN_TMPDIR/runc.XXXXXX")
# Path to console socket. # Path to console socket.
CONSOLE_SOCKET="$BATS_TMPDIR/console.sock" CONSOLE_SOCKET="$BATS_RUN_TMPDIR/console.sock"
# Check if we're in rootless mode. # Check if we're in rootless mode.
ROOTLESS=$(id -u) ROOTLESS=$(id -u)
@@ -423,17 +429,17 @@ function testcontainer() {
function setup_recvtty() { function setup_recvtty() {
# We need to start recvtty in the background, so we double fork in the shell. # We need to start recvtty in the background, so we double fork in the shell.
("$RECVTTY" --pid-file "$BATS_TMPDIR/recvtty.pid" --mode null "$CONSOLE_SOCKET" &) & ("$RECVTTY" --pid-file "$BATS_RUN_TMPDIR/recvtty.pid" --mode null "$CONSOLE_SOCKET" &) &
} }
function teardown_recvtty() { function teardown_recvtty() {
# When we kill recvtty, the container will also be killed. # When we kill recvtty, the container will also be killed.
if [ -f "$BATS_TMPDIR/recvtty.pid" ]; then if [ -f "$BATS_RUN_TMPDIR/recvtty.pid" ]; then
kill -9 $(cat "$BATS_TMPDIR/recvtty.pid") kill -9 $(cat "$BATS_RUN_TMPDIR/recvtty.pid")
fi fi
# Clean up the files that might be left over. # Clean up the files that might be left over.
rm -f "$BATS_TMPDIR/recvtty.pid" rm -f "$BATS_RUN_TMPDIR/recvtty.pid"
rm -f "$CONSOLE_SOCKET" rm -f "$CONSOLE_SOCKET"
} }
+1 -1
View File
@@ -6,7 +6,7 @@ function setup() {
unset ALT_ROOT unset ALT_ROOT
teardown teardown
setup_busybox setup_busybox
ALT_ROOT=$(mktemp -d "$BATS_TMPDIR/runc-2.XXXXXX") ALT_ROOT=$(mktemp -d "$BATS_RUN_TMPDIR/runc-2.XXXXXX")
} }
function teardown() { function teardown() {
+1 -1
View File
@@ -6,7 +6,7 @@ function setup() {
unset ALT_ROOT unset ALT_ROOT
teardown teardown
setup_busybox setup_busybox
ALT_ROOT=$(mktemp -d "$BATS_TMPDIR/runc-2.XXXXXX") ALT_ROOT=$(mktemp -d "$BATS_RUN_TMPDIR/runc-2.XXXXXX")
} }
function teardown() { function teardown() {
+6 -6
View File
@@ -3,7 +3,7 @@
load helpers load helpers
function teardown() { function teardown() {
rm -f "$BATS_TMPDIR"/runc-cgroups-integration-test.json rm -f "$BATS_RUN_TMPDIR"/runc-cgroups-integration-test.json
teardown_running_container test_update teardown_running_container test_update
teardown_running_container test_update_rt teardown_running_container test_update_rt
teardown_busybox teardown_busybox
@@ -208,7 +208,7 @@ EOF
check_systemd_value "TasksMax" 10 check_systemd_value "TasksMax" 10
# reset to initial test value via json file # reset to initial test value via json file
cat <<EOF >"$BATS_TMPDIR"/runc-cgroups-integration-test.json cat <<EOF >"$BATS_RUN_TMPDIR"/runc-cgroups-integration-test.json
{ {
"memory": { "memory": {
"limit": 33554432, "limit": 33554432,
@@ -226,7 +226,7 @@ EOF
} }
EOF EOF
runc update -r "$BATS_TMPDIR"/runc-cgroups-integration-test.json test_update runc update -r "$BATS_RUN_TMPDIR"/runc-cgroups-integration-test.json test_update
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
check_cgroup_value "cpuset.cpus" 0 check_cgroup_value "cpuset.cpus" 0
@@ -297,7 +297,7 @@ EOF
check_cpu_quota -1 100000 "infinity" check_cpu_quota -1 100000 "infinity"
# reset to initial test value via json file # reset to initial test value via json file
cat <<EOF >"$BATS_TMPDIR"/runc-cgroups-integration-test.json cat <<EOF >"$BATS_RUN_TMPDIR"/runc-cgroups-integration-test.json
{ {
"cpu": { "cpu": {
"shares": 100, "shares": 100,
@@ -308,7 +308,7 @@ EOF
EOF EOF
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
runc update -r "$BATS_TMPDIR"/runc-cgroups-integration-test.json test_update runc update -r "$BATS_RUN_TMPDIR"/runc-cgroups-integration-test.json test_update
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
check_cpu_quota 500000 1000000 "500ms" check_cpu_quota 500000 1000000 "500ms"
check_cpu_shares 100 check_cpu_shares 100
@@ -573,7 +573,7 @@ EOF
update_config '.process.args |= ["sh", "-c", "while true; do echo >/dev/null; done"]' update_config '.process.args |= ["sh", "-c", "while true; do echo >/dev/null; done"]'
# Set up a temporary console socket and recvtty so we can get the stdio. # Set up a temporary console socket and recvtty so we can get the stdio.
TMP_RECVTTY_DIR="$(mktemp -d "$BATS_TMPDIR/runc-tmp-recvtty.XXXXXX")" TMP_RECVTTY_DIR="$(mktemp -d "$BATS_RUN_TMPDIR/runc-tmp-recvtty.XXXXXX")"
TMP_RECVTTY_PID="$TMP_RECVTTY_DIR/recvtty.pid" TMP_RECVTTY_PID="$TMP_RECVTTY_DIR/recvtty.pid"
TMP_CONSOLE_SOCKET="$TMP_RECVTTY_DIR/console.sock" TMP_CONSOLE_SOCKET="$TMP_RECVTTY_DIR/console.sock"
CONTAINER_OUTPUT="$TMP_RECVTTY_DIR/output" CONTAINER_OUTPUT="$TMP_RECVTTY_DIR/output"