mirror of
https://github.com/containers/podman
synced 2024-10-20 17:23:30 +00:00
dcabf6dd71
Since podman-remote resize requests can come in at random times, this generates a real potential for race conditions. We should only be attempting to resize TTY on running containers, but the containers can go from running to stopped at any time, and returning an error to the caller is just causing noice. This change will basically ignore requests to resize terminals if the container is not running and return the caller to success. All other callers will still return failure. Fixes: https://github.com/containers/podman/issues/9831 Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
88 lines
2.6 KiB
Bash
88 lines
2.6 KiB
Bash
# -*- bats -*-
|
|
#
|
|
# tests of podman commands that require an interactive pty
|
|
#
|
|
|
|
load helpers
|
|
|
|
###############################################################################
|
|
# BEGIN setup/teardown
|
|
|
|
# Each test runs with its own PTY, managed by socat.
|
|
PODMAN_TEST_PTY=$(mktemp -u --tmpdir=${BATS_TMPDIR:-/tmp} podman_pty.XXXXXX)
|
|
PODMAN_DUMMY=$(mktemp -u --tmpdir=${BATS_TMPDIR:-/tmp} podman_dummy.XXXXXX)
|
|
PODMAN_SOCAT_PID=
|
|
|
|
function setup() {
|
|
basic_setup
|
|
|
|
# Create a pty. Run under 'timeout' because BATS reaps child processes
|
|
# and if we exit before killing socat, bats will hang forever.
|
|
timeout 10 socat \
|
|
PTY,link=$PODMAN_TEST_PTY,raw,echo=0 \
|
|
PTY,link=$PODMAN_DUMMY,raw,echo=0 &
|
|
PODMAN_SOCAT_PID=$!
|
|
|
|
# Wait for pty
|
|
retries=5
|
|
while [[ ! -e $PODMAN_TEST_PTY ]]; do
|
|
retries=$(( retries - 1 ))
|
|
if [[ $retries -eq 0 ]]; then
|
|
die "Timed out waiting for $PODMAN_TEST_PTY"
|
|
fi
|
|
sleep 0.5
|
|
done
|
|
}
|
|
|
|
function teardown() {
|
|
if [[ -n $PODMAN_SOCAT_PID ]]; then
|
|
kill $PODMAN_SOCAT_PID
|
|
PODMAN_SOCAT_PID=
|
|
fi
|
|
rm -f $PODMAN_TEST_PTY $PODMAN_DUMMY_PTY
|
|
|
|
basic_teardown
|
|
}
|
|
|
|
# END setup/teardown
|
|
###############################################################################
|
|
# BEGIN tests
|
|
|
|
@test "podman detects correct tty size" {
|
|
# Set the pty to a random size. Make rows/columns odd/even, to guarantee
|
|
# that they can never be the same
|
|
rows=$(( 15 + RANDOM % 60 | 1 ))
|
|
cols=$(( 15 + RANDOM % 60 & 126 ))
|
|
stty rows $rows cols $cols <$PODMAN_TEST_PTY
|
|
|
|
# ...and make sure stty under podman reads that.
|
|
# FIXME: 'sleep 1' is needed for podman-remote; without it, there's
|
|
run_podman run -it --name mystty $IMAGE sh -c 'sleep 1;stty size' <$PODMAN_TEST_PTY
|
|
is "$output" "$rows $cols" "stty under podman reads the correct dimensions"
|
|
}
|
|
|
|
|
|
@test "podman load - will not read from tty" {
|
|
run_podman 125 load <$PODMAN_TEST_PTY
|
|
is "$output" \
|
|
"Error: cannot read from terminal. Use command-line redirection" \
|
|
"Diagnostic from 'podman load' without redirection or -i"
|
|
}
|
|
|
|
|
|
@test "podman run --tty -i failure with no tty" {
|
|
run_podman run --tty -i --rm $IMAGE echo hello < /dev/null
|
|
is "$output" ".*The input device is not a TTY.*" "-it _without_ a tty"
|
|
|
|
run_podman run --tty -i --rm $IMAGE echo hello <$PODMAN_TEST_PTY
|
|
is "$output" "hello" "-it _with_ a pty"
|
|
|
|
run_podman run --tty=false -i --rm $IMAGE echo hello < /dev/null
|
|
is "$output" "hello" "-tty=false: no warning"
|
|
|
|
run_podman run --tty -i=false --rm $IMAGE echo hello < /dev/null
|
|
is "$output" "hello" "-i=false: no warning"
|
|
}
|
|
|
|
# vim: filetype=sh
|