mirror of
https://github.com/containers/podman.git
synced 2025-05-17 06:59:07 +08:00

This vendors the latest c/common version, including making Pasta the default rootless network provider. That broke a number of tests, which have been fixed as part of this PR. Also includes a change to network stats logic, which simplifies the code a bit and makes it actually work with Pasta. Signed-off-by: Matt Heon <mheon@redhat.com>
125 lines
3.4 KiB
Bash
125 lines
3.4 KiB
Bash
#!/usr/bin/env bats -*- bats -*-
|
|
#
|
|
# Tests podman system service under systemd socket activation
|
|
#
|
|
|
|
load helpers
|
|
load helpers.registry
|
|
load helpers.systemd
|
|
|
|
function setup_file() {
|
|
# We have to stop the background registry here. These tests kill the podman pause
|
|
# process which means commands after that are in a new one and when the cleanup
|
|
# later tries to stop the registry container it will be in the wrong ns and can fail.
|
|
# https://github.com/containers/podman/pull/21563#issuecomment-1960047648
|
|
stop_registry
|
|
}
|
|
|
|
SERVICE_NAME="podman_test_$(random_string)"
|
|
|
|
SERVICE_SOCK_ADDR="/run/podman/$SERVICE_NAME.sock"
|
|
if is_rootless; then
|
|
SERVICE_SOCK_ADDR="$XDG_RUNTIME_DIR/podman/$SERVICE_NAME.sock"
|
|
fi
|
|
|
|
SERVICE_FILE="$UNIT_DIR/$SERVICE_NAME.service"
|
|
SOCKET_FILE="$UNIT_DIR/$SERVICE_NAME.socket"
|
|
|
|
# URL to use for ping
|
|
_PING=http://placeholder-hostname/libpod/_ping
|
|
|
|
function setup() {
|
|
skip_if_remote "systemd tests are meaningless over remote"
|
|
|
|
basic_setup
|
|
|
|
cat > $SERVICE_FILE <<EOF
|
|
[Unit]
|
|
Description=Podman API Service
|
|
Requires=$SERVICE_NAME.socket
|
|
After=$SERVICE_NAME.socket
|
|
Documentation=man:podman-system-service(1)
|
|
StartLimitIntervalSec=0
|
|
|
|
[Service]
|
|
Type=exec
|
|
KillMode=process
|
|
Environment=LOGGING="--log-level=info"
|
|
ExecStart=$PODMAN $LOGGING system service -t 2
|
|
EOF
|
|
cat > $SOCKET_FILE <<EOF
|
|
[Unit]
|
|
Description=Podman API Socket
|
|
Documentation=man:podman-system-service(1)
|
|
|
|
[Socket]
|
|
ListenStream=%t/podman/$SERVICE_NAME.sock
|
|
SocketMode=0660
|
|
|
|
[Install]
|
|
WantedBy=sockets.target
|
|
EOF
|
|
|
|
# ensure pause die before each test runs
|
|
if is_rootless; then
|
|
local pause_pid_file="$XDG_RUNTIME_DIR/libpod/tmp/pause.pid"
|
|
if [ -f $pause_pid_file ]; then
|
|
kill -9 $(< $pause_pid_file) 2> /dev/null
|
|
rm -f $pause_pid_file
|
|
fi
|
|
fi
|
|
systemctl_start "$SERVICE_NAME.socket"
|
|
}
|
|
|
|
function teardown() {
|
|
systemctl stop "$SERVICE_NAME.socket"
|
|
rm -f "$SERVICE_FILE" "$SOCKET_FILE"
|
|
systemctl daemon-reload
|
|
basic_teardown
|
|
}
|
|
|
|
@test "podman system service - socket activation - no container" {
|
|
run curl -s --max-time 3 --unix-socket $SERVICE_SOCK_ADDR $_PING
|
|
echo "curl output: $output"
|
|
is "$status" "0" "curl exit status"
|
|
is "$output" "OK" "podman service responds normally"
|
|
}
|
|
|
|
@test "podman system service - socket activation - existing container" {
|
|
run_podman run -d $IMAGE sleep 90
|
|
cid="$output"
|
|
|
|
run curl -s --max-time 3 --unix-socket $SERVICE_SOCK_ADDR $_PING
|
|
echo "curl output: $output"
|
|
is "$status" "0" "curl exit status"
|
|
is "$output" "OK" "podman service responds normally"
|
|
|
|
run_podman rm -f -t 0 $cid
|
|
}
|
|
|
|
@test "podman system service - socket activation - kill rootless pause" {
|
|
if ! is_rootless; then
|
|
skip "there is no pause process when running rootful"
|
|
fi
|
|
run_podman run -d $IMAGE sleep 90
|
|
cid="$output"
|
|
|
|
local pause_pid_file="$XDG_RUNTIME_DIR/libpod/tmp/pause.pid"
|
|
if [ ! -f $pause_pid_file ]; then
|
|
# This seems unlikely, but not impossible
|
|
die "Pause pid file does not exist: $pause_pid_file"
|
|
fi
|
|
|
|
echo "kill -9 $(< $pause_pid_file) [pause process]"
|
|
kill -9 $(< $pause_pid_file)
|
|
|
|
run curl -s --max-time 3 --unix-socket $SERVICE_SOCK_ADDR $_PING
|
|
echo "curl output: $output"
|
|
is "$status" "0" "curl exit status"
|
|
is "$output" "OK" "podman service responds normally"
|
|
|
|
run_podman rm -f -t 0 $cid
|
|
}
|
|
|
|
# vim: filetype=sh
|