#!/bin/bash
set -euo pipefail

scratch=$(mktemp -d /var/tmp/stratum-runtime.XXXXXX)
trap 'rm -rf "$scratch"' EXIT
export STRATUM_BANNER_CONF="$scratch/settings.conf"
export ISSUE_FILE="$scratch/issue" LOGO_FILE="$scratch/logo"
export STRATUM_MODULES="$scratch/modules"
mkdir -p "$STRATUM_MODULES/good" "$STRATUM_MODULES/broken" "$STRATUM_MODULES/license"
ln -s /usr/lib/stratum/modules/banner "$STRATUM_MODULES/banner"
printf '#!/bin/sh\necho "running enabled server"\n' > "$STRATUM_MODULES/good/module"
printf '#!/bin/sh\necho "stopped enabled server"\n' > "$STRATUM_MODULES/broken/module"
printf '#!/bin/sh\ntouch "%s/license-called"\nexit 1\n' "$scratch" > "$STRATUM_MODULES/license/module"
# license is deliberately non-executable and must never be consulted.
chmod +x "$STRATUM_MODULES/good/module" "$STRATUM_MODULES/broken/module"
stratum banner configure standard
TERM=xterm-256color /usr/bin/stratum banner runtime --boot
test -s "$LOGO_FILE"
grep -q 'STRATUM PROJECT' "$LOGO_FILE"
grep -q 'Solid foundation, greater control.' "$LOGO_FILE"
stratum banner preview motd | tee "$scratch/motd" | grep -q 'attention: broken not running'
stratum banner configure discrete
test ! -e "$LOGO_FILE"
test ! -e "$ISSUE_FILE"
stratum banner preview motd | grep -q 'Stratum 0.48'
stratum banner preview tool | grep -q 'System administration, simplified.'
test ! -e "$scratch/license-called"
hash=$(sha256sum "$STRATUM_BANNER_CONF")
if stratum banner configure minimal; then echo 'Minimal should be rejected'; exit 1; fi
if stratum banner setting colours invalid; then exit 1; fi
test "$(sha256sum "$STRATUM_BANNER_CONF")" = "$hash"
stratum banner setting colours monochrome
TERM=xterm-256color stratum banner preview system > "$scratch/mono"
! grep -q $'\033' "$scratch/mono"
stratum banner setting colours default
TERM=xterm-256color NO_COLOR=1 stratum banner preview tool > "$scratch/nocolor"
! grep -q $'\033' "$scratch/nocolor"
LC_ALL=C stratum banner preview system > "$scratch/ascii"
python3 -c 'import pathlib,sys; pathlib.Path(sys.argv[1]).read_bytes().decode("ascii")' "$scratch/ascii"
stratum banner reset --yes
grep -qx PROFILE=standard "$STRATUM_BANNER_CONF"
grep -qx COLOURS=default "$STRATUM_BANNER_CONF"
grep -qx BEEP=no "$STRATUM_BANNER_CONF"
echo 'PASS: profiles, MOTD, invalid inputs, settings, no license dependency, ASCII, NO_COLOR'
