46 lines
3.0 KiB
Bash
46 lines
3.0 KiB
Bash
# The container publishing port 8080, if any.
|
|
web=''
|
|
for c in $(podman ps -q 2>/dev/null); do
|
|
podman port "$c" 2>/dev/null | grep -Eq '^80/tcp -> .*:8080$' && { web=$c; break; }
|
|
done
|
|
alice_uid=$(id -u alice 2>/dev/null)
|
|
apodman() { runuser -u alice -- env XDG_RUNTIME_DIR=/run/user/$alice_uid podman "$@"; }
|
|
|
|
task 1 "nginx container on port 8080 serving /srv/web read-only"
|
|
need "/srv/web/index.html exists" '[ -s /srv/web/index.html ]'
|
|
need "a container publishes port 80 on host port 8080" '[ -n "$web" ]'
|
|
need "it's named web (or systemd-web, from Quadlet)" '[[ "$(podman inspect -f "{{.Name}}" "$web")" =~ ^(web|systemd-web)$ ]]'
|
|
need "it mounts /srv/web read-only" 'podman inspect -f "{{range .Mounts}}{{println .Source .RW}}{{end}}" "$web" | grep -qx "/srv/web false"'
|
|
need "curl localhost:8080 returns /srv/web/index.html" 'curl -s --max-time 5 http://localhost:8080/ | cmp -s - /srv/web/index.html'
|
|
need "SELinux is enforcing" '! is_rhel || [ "$(getenforce)" = Enforcing ]'
|
|
|
|
task 2 "web.service from Quadlet, running and starting at boot"
|
|
need "web.service is generated from a Quadlet .container file" 'systemctl show -p SourcePath --value web.service | grep -q "/web\.container$"'
|
|
need "web.service starts at boot" 'ls /run/systemd/generator/*.target.wants/web.service'
|
|
need "web.service is active" active web.service
|
|
need "the page still loads on port 8080" 'curl -s --max-time 5 http://localhost:8080/ | cmp -s - /srv/web/index.html'
|
|
|
|
task 3 "alice's rootless container with a named volume, started at boot"
|
|
need "alice lingers (her services start at boot)" '[ -e /var/lib/systemd/linger/alice ]'
|
|
need "alice has a running container" '[ -n "$(apodman ps -q)" ]'
|
|
need "it keeps data in a named volume" '
|
|
for c in $(apodman ps -q); do apodman inspect -f "{{range .Mounts}}{{.Type}} {{end}}" "$c"; done | grep -qw volume'
|
|
need "something starts it at boot (Quadlet or a restart policy)" '
|
|
ls /home/alice/.config/containers/systemd/*.container ||
|
|
{ ls /home/alice/.config/systemd/user/*.target.wants/podman-restart.service &&
|
|
for c in $(apodman ps -q); do apodman inspect -f "{{.HostConfig.RestartPolicy.Name}}" "$c"; done | grep -qE "always|unless-stopped"; }'
|
|
|
|
task 4 "Image site:1.0 built and run with an extra variable"
|
|
need "podman images lists localhost/site:1.0" 'podman image exists localhost/site:1.0'
|
|
need "a container runs (or ran) from site:1.0" '[ -n "$(podman ps -a -q --filter ancestor=localhost/site:1.0)" ]'
|
|
need "it has a variable the image doesn't set" '
|
|
img=$(podman image inspect -f "{{range .Config.Env}}{{println .}}{{end}}" localhost/site:1.0)
|
|
for c in $(podman ps -a -q --filter ancestor=localhost/site:1.0); do
|
|
podman inspect -f "{{range .Config.Env}}{{println .}}{{end}}" "$c"
|
|
done | grep . | grep -vxF -f <(printf "%s\n" "$img") | grep -vE "^(container|HOSTNAME|TERM|HOME)=" | grep -q .'
|
|
|
|
task 5 "Docker installed, logging to journald"
|
|
need "docker is installed" 'command -v docker'
|
|
need "the Docker daemon is running" active docker
|
|
need "docker info shows the journald log driver" '[ "$(docker info --format "{{.LoggingDriver}}" 2>/dev/null)" = journald ]'
|