mirror of
https://github.com/containers/podman
synced 2024-10-20 17:23:30 +00:00
11917a1a6b
So rootless setup could use this condition in parent and child, child podman should adjust LISTEN_PID to its self PID. Add system test for systemd socket activation Signed-off-by: pendulm <lonependulm@gmail.com>
104 lines
2.6 KiB
Bash
104 lines
2.6 KiB
Bash
#!/usr/bin/env bats -*- bats -*-
|
|
#
|
|
# Tests podman system service under systemd socket activation
|
|
#
|
|
|
|
load helpers
|
|
|
|
SERVICE_NAME="podman_test_$(random_string)"
|
|
|
|
SYSTEMCTL="systemctl"
|
|
UNIT_DIR="/usr/lib/systemd/system"
|
|
SERVICE_SOCK_ADDR="/run/podman/podman.sock"
|
|
|
|
if is_rootless; then
|
|
UNIT_DIR="$HOME/.config/systemd/user"
|
|
mkdir -p $UNIT_DIR
|
|
|
|
SYSTEMCTL="$SYSTEMCTL --user"
|
|
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
|
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
|
fi
|
|
SERVICE_SOCK_ADDR="$XDG_RUNTIME_DIR/podman/podman.sock"
|
|
fi
|
|
|
|
SERVICE_FILE="$UNIT_DIR/$SERVICE_NAME.service"
|
|
SOCKET_FILE="$UNIT_DIR/$SERVICE_NAME.socket"
|
|
|
|
|
|
function setup() {
|
|
skip_if_remote "systemd tests are meaningless over remote"
|
|
|
|
basic_setup
|
|
|
|
cat > $SERVICE_FILE <<EOF
|
|
[Unit]
|
|
Description=Podman API Service
|
|
Requires=podman.socket
|
|
After=podman.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/podman.sock
|
|
SocketMode=0660
|
|
|
|
[Install]
|
|
WantedBy=sockets.target
|
|
EOF
|
|
|
|
# ensure pause die before each test runs
|
|
if is_rootless; then
|
|
local pause_pid="$XDG_RUNTIME_DIR/libpod/tmp/pause.pid"
|
|
if [ -f $pause_pid ]; then
|
|
kill -9 $(cat $pause_pid) 2> /dev/null
|
|
rm -f $pause_pid
|
|
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 http://podman/libpod/_ping
|
|
is "$output" "OK" "podman service responses normally"
|
|
}
|
|
|
|
@test "podman system service - socket activation - exist container " {
|
|
run_podman run $IMAGE sleep 90
|
|
run curl -s --max-time 3 --unix-socket $SERVICE_SOCK_ADDR http://podman/libpod/_ping
|
|
is "$output" "OK" "podman service responses normally"
|
|
}
|
|
|
|
@test "podman system service - socket activation - kill rootless pause " {
|
|
if ! is_rootless; then
|
|
skip "root podman no need pause process"
|
|
fi
|
|
run_podman run $IMAGE sleep 90
|
|
local pause_pid="$XDG_RUNTIME_DIR/libpod/tmp/pause.pid"
|
|
if [ -f $pause_pid ]; then
|
|
kill -9 $(cat $pause_pid) 2> /dev/null
|
|
fi
|
|
run curl -s --max-time 3 --unix-socket $SERVICE_SOCK_ADDR http://podman/libpod/_ping
|
|
is "$output" "OK" "podman service responses normally"
|
|
}
|
|
|
|
# vim: filetype=sh
|