mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
#!/usr/bin/env bats   -*- bats -*-
 | 
						|
#
 | 
						|
# Tests podman system service under systemd socket activation
 | 
						|
#
 | 
						|
 | 
						|
load helpers
 | 
						|
load helpers.systemd
 | 
						|
 | 
						|
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)"
 | 
						|
    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
 |