Initial Commit
This commit is contained in:
Executable
+94
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env bash
|
||||
# The insert-a-disc helper, against scratch directories.
|
||||
#
|
||||
# ./tests/test_vm_insert_media.sh
|
||||
#
|
||||
# NEVER against the real library. Tests in this suite have damaged live
|
||||
# machines twice by sharing state with production, and this one is a
|
||||
# particularly easy way to do it: a staged file called `ubuntu.anything.iso`
|
||||
# lands in /var/lib/owuivm/iso matching `ubuntu*.iso`, and because the
|
||||
# rule is "newest wins" it would silently become the disc the next install
|
||||
# boots from. So every path is overridden and nothing real is touched.
|
||||
set -uo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
HELPER=$(pwd)/vm/host/owuivm-insert-media
|
||||
|
||||
FAILS=0
|
||||
check() { # check <label> <condition-exit-code>
|
||||
if [ "$2" -eq 0 ]; then echo "ok $1"; else echo "FAIL $1"; FAILS=$((FAILS+1)); fi
|
||||
}
|
||||
|
||||
WORK=$(mktemp -d)
|
||||
trap 'rm -rf "$WORK"' EXIT
|
||||
export OWUIVM_ISO_DIR="$WORK/iso"
|
||||
export OWUIVM_INCOMING_DIR="$WORK/incoming"
|
||||
export OWUIVM_REGISTRY="$WORK/vms.toml"
|
||||
mkdir -p "$OWUIVM_ISO_DIR" "$OWUIVM_INCOMING_DIR"
|
||||
cat > "$OWUIVM_REGISTRY" <<'REG'
|
||||
[[machine]]
|
||||
id = "ubuntu"
|
||||
name = "Ubuntu"
|
||||
iso = "ubuntu*.iso"
|
||||
REG
|
||||
|
||||
# A file that carries the ISO 9660 signature: CD001 at offset 0x8001.
|
||||
make_iso() {
|
||||
dd if=/dev/zero of="$1" bs=1024 count=40 status=none
|
||||
printf 'CD001' | dd of="$1" bs=1 seek=32769 conv=notrunc status=none
|
||||
}
|
||||
|
||||
# --- the happy path ---------------------------------------------------
|
||||
make_iso "$OWUIVM_INCOMING_DIR/ubuntu.ubuntu-26.04-desktop-amd64.iso"
|
||||
out=$("$HELPER" ubuntu 2>&1); rc=$?
|
||||
check "a real ISO is accepted" $rc
|
||||
[ -f "$OWUIVM_ISO_DIR/ubuntu.ubuntu-26.04-desktop-amd64.iso" ]
|
||||
check "and lands in the library" $?
|
||||
[ -z "$(ls -A "$OWUIVM_INCOMING_DIR")" ]
|
||||
check "and the staging directory is left empty" $?
|
||||
[ "$(stat -c %a "$OWUIVM_ISO_DIR/ubuntu.ubuntu-26.04-desktop-amd64.iso")" = "644" ]
|
||||
check "and is readable by the launcher" $?
|
||||
|
||||
# --- the case this exists to catch ------------------------------------
|
||||
# A download that was really an HTML error page, or a renamed zip. It
|
||||
# would otherwise fail much later, as a machine that will not boot, for
|
||||
# no visible reason.
|
||||
echo "<html>404 Not Found</html>" > "$OWUIVM_INCOMING_DIR/ubuntu.not-really.iso"
|
||||
out=$("$HELPER" ubuntu 2>&1); rc=$?
|
||||
[ $rc -ne 0 ]; check "a file that is not an ISO is refused" $?
|
||||
grep -q "CD001" <<<"$out"; check "and the refusal says why" $?
|
||||
[ ! -f "$OWUIVM_ISO_DIR/ubuntu.not-really.iso" ]
|
||||
check "and it does not reach the library" $?
|
||||
[ ! -f "$OWUIVM_INCOMING_DIR/ubuntu.not-really.iso" ]
|
||||
check "and the rejected file is removed rather than left to be retried" $?
|
||||
|
||||
# --- input validation -------------------------------------------------
|
||||
out=$("$HELPER" "../../etc" 2>&1); rc=$?
|
||||
[ $rc -eq 64 ]; check "a path-shaped machine id is refused" $?
|
||||
out=$("$HELPER" "windows" 2>&1); rc=$?
|
||||
[ $rc -eq 64 ]; check "a machine not in the registry is refused" $?
|
||||
out=$("$HELPER" ubuntu 2>&1); rc=$?
|
||||
[ $rc -eq 65 ]; check "nothing staged is reported, not treated as success" $?
|
||||
|
||||
# A symlink is how this would be turned into "copy any file the unit can
|
||||
# read into a world-readable directory".
|
||||
ln -s /etc/shadow "$OWUIVM_INCOMING_DIR/ubuntu.sneaky.iso"
|
||||
out=$("$HELPER" ubuntu 2>&1); rc=$?
|
||||
[ $rc -ne 0 ]; check "a symlink is refused" $?
|
||||
[ ! -e "$OWUIVM_ISO_DIR/ubuntu.sneaky.iso" ]
|
||||
check "and nothing is copied out of it" $?
|
||||
rm -f "$OWUIVM_INCOMING_DIR/ubuntu.sneaky.iso"
|
||||
|
||||
# --- newest wins, and the rest is cleared -----------------------------
|
||||
make_iso "$OWUIVM_INCOMING_DIR/ubuntu.old.iso"
|
||||
sleep 1.1
|
||||
make_iso "$OWUIVM_INCOMING_DIR/ubuntu.new.iso"
|
||||
out=$("$HELPER" ubuntu 2>&1); rc=$?
|
||||
check "with two staged discs it still succeeds" $rc
|
||||
[ -f "$OWUIVM_ISO_DIR/ubuntu.new.iso" ]; check "the newest one is taken" $?
|
||||
[ ! -f "$OWUIVM_ISO_DIR/ubuntu.old.iso" ]
|
||||
check "and a half-finished earlier attempt is not installable" $?
|
||||
[ -z "$(ls -A "$OWUIVM_INCOMING_DIR")" ]; check "staging is cleared" $?
|
||||
|
||||
echo
|
||||
if [ "$FAILS" -gt 0 ]; then echo "$FAILS FAILED"; exit 1; fi
|
||||
echo "the disc inserter checks what it is given"
|
||||
Reference in New Issue
Block a user