Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

system tests: new interactive tests #9818

Merged
merged 1 commit into from
Mar 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions test/system/030-run.bats
Original file line number Diff line number Diff line change
Expand Up @@ -668,15 +668,4 @@ json-file | f
is "$output" ".*HOME=/.*"
}

@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.*"

run_podman run --tty=false -i --rm $IMAGE echo hello < /dev/null
is "$output" "hello"

run_podman run --tty -i=false --rm $IMAGE echo hello < /dev/null
is "$output" "hello"
}

# vim: filetype=sh
11 changes: 0 additions & 11 deletions test/system/120-load.bats
Original file line number Diff line number Diff line change
Expand Up @@ -126,17 +126,6 @@ verify_iid_and_name() {
verify_iid_and_name $img_name
}

@test "podman load - will not read from tty" {
if [ ! -t 0 ]; then
skip "STDIN is not a tty"
fi

run_podman 125 load
is "$output" \
"Error: cannot read from terminal. Use command-line redirection" \
"Diagnostic from 'podman load' without redirection or -i"
}

@test "podman load - redirect corrupt payload" {
run_podman 125 load <<< "Danger, Will Robinson!! This is a corrupt tarball!"
is "$output" \
Expand Down
92 changes: 92 additions & 0 deletions test/system/450-interactive.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# -*- 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" {
skip_if_remote "FIXME: resolved in #9782"

# 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
# a race condition resulting in the following warning:
# WARN[0000] failed to resize TTY: container "xx" in wrong state "stopped"
# (also "created")
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