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

port forward range test: fix an oops #14855

Merged
merged 1 commit into from
Jul 7, 2022
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
12 changes: 8 additions & 4 deletions test/system/500-networking.bats
Original file line number Diff line number Diff line change
Expand Up @@ -677,16 +677,20 @@ EOF
@test "podman run port forward range" {
for netmode in bridge slirp4netns:port_handler=slirp4netns slirp4netns:port_handler=rootlesskit; do
local range=$(random_free_port_range 3)
local port="${test%-*}"
local end_port="${test#-*}"
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUBTLE BUT IMPORTANT! Note the change of dash-asterisk to asterisk-star in this one!

# die() inside $(...) does not actually stop us.
assert "$range" != "" "Could not find free port range"

local port="${range%-*}"
local end_port="${range#*-}"
local random=$(random_string)

run_podman run --network $netmode -p "$range:$range" -d $IMAGE sleep inf
cid="$output"
for port in $(seq $port $end_port); do
run_podman exec -d $cid nc -l -p $port -e /bin/cat
# -w 1 adds a 1 second timeout, for some reason ubuntus ncat doesn't close the connection on EOF,
# other options to change this are not portable across distros but -w seems to work
# -w 1 adds a 1 second timeout. For some reason, ubuntu's ncat
# doesn't close the connection on EOF, and other options to
# change this are not portable across distros. -w seems to work.
run nc -w 1 127.0.0.1 $port <<<$random
is "$output" "$random" "ncat got data back (netmode=$netmode port=$port)"
done
Expand Down
14 changes: 8 additions & 6 deletions test/system/helpers.bash
Original file line number Diff line number Diff line change
Expand Up @@ -299,15 +299,17 @@ function random_free_port_range() {
local maxtries=10
while [[ $maxtries -gt 0 ]]; do
local firstport=$(random_free_port)
local all_ports_free=1
for i in $(seq 2 $size); do
if ! port_is_free $((firstport + $i)); then
all_ports_free=
local lastport=
for i in $(seq 1 $((size - 1))); do
lastport=$((firstport + i))
if ! port_is_free $lastport; then
echo "# port $lastport is in use; trying another." >&3
lastport=
break
fi
done
if [[ -n "$all_ports_free" ]]; then
echo "$firstport-$((firstport + $size - 1))"
if [[ -n "$lastport" ]]; then
echo "$firstport-$lastport"
return
fi

Expand Down