Add configurable DOS drive volumes and tests
This commit is contained in:
parent
b82b1f94d4
commit
cc6d0f989d
6 changed files with 240 additions and 5 deletions
134
tests/run-dos-shell-tests.sh
Normal file
134
tests/run-dos-shell-tests.sh
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
DOS_SHELL="${ROOT_DIR}/scripts/dos-shell"
|
||||
|
||||
if [ ! -x "${DOS_SHELL}" ]; then
|
||||
echo "dos-shell not found or not executable at ${DOS_SHELL}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tmp_root="$(mktemp -d)"
|
||||
cleanup() {
|
||||
rm -rf "${tmp_root}"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
stub_bin="${tmp_root}/bin"
|
||||
mkdir -p "${stub_bin}"
|
||||
|
||||
cat > "${stub_bin}/dosemu" <<'EOF'
|
||||
#!/bin/sh
|
||||
echo "dosemu stub invoked with: $*" >&2
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x "${stub_bin}/dosemu"
|
||||
|
||||
run_case() {
|
||||
local name="$1"
|
||||
local allow_mode="$2"
|
||||
local reserved="$3"
|
||||
local expected_files="$4"
|
||||
shift 4
|
||||
local asserts=("$@")
|
||||
|
||||
local case_dir="${tmp_root}/${name}"
|
||||
local home_dir="${case_dir}/home"
|
||||
local base_dir="${case_dir}/svardos_base"
|
||||
local allowed_repo="${case_dir}/allowed_repo"
|
||||
local allow_list="${case_dir}/allowed_list"
|
||||
local extra_root="${case_dir}/extra_drives"
|
||||
|
||||
mkdir -p "${home_dir}" "${base_dir}" "${allowed_repo}" "${extra_root}"
|
||||
|
||||
# Populate minimal base image
|
||||
echo "base-${name}" > "${base_dir}/BASE.TXT"
|
||||
|
||||
# Populate allowed repo fixtures
|
||||
echo "common-${name}" > "${allowed_repo}/common.txt"
|
||||
mkdir -p "${allowed_repo}/subdir"
|
||||
echo "sub-${name}" > "${allowed_repo}/subdir/sub.txt"
|
||||
echo "denied-${name}" > "${allowed_repo}/denied.txt"
|
||||
|
||||
# Prepare allow list (filled later per mode)
|
||||
: > "${allow_list}"
|
||||
|
||||
# Create extra drive scaffolding
|
||||
mkdir -p "${extra_root}/F"
|
||||
echo "driveF-${name}" > "${extra_root}/F/file.txt"
|
||||
mkdir -p "${extra_root}/D"
|
||||
echo "driveD-${name}" > "${extra_root}/D/file.txt"
|
||||
|
||||
# Additional file for list mode
|
||||
if [ "${allow_mode}" = "list" ]; then
|
||||
{
|
||||
echo "common.txt"
|
||||
echo "subdir/sub.txt"
|
||||
} > "${allow_list}"
|
||||
fi
|
||||
|
||||
# Expected files in C: after sync
|
||||
IFS=',' read -ra expected_array <<< "${expected_files}"
|
||||
|
||||
(
|
||||
export PATH="${stub_bin}:${PATH}"
|
||||
export HOME="${home_dir}"
|
||||
export SVARDOS_ROOT="${case_dir}/svardos_root"
|
||||
export SVARDOS_BASE="${base_dir}"
|
||||
export DOS_FORCE_INSTALL=1
|
||||
export DOS_ALLOW_MODE="${allow_mode}"
|
||||
export DOS_EXTRA_DRIVE_ROOT="${extra_root}"
|
||||
export DOS_RESERVED_DRIVES="${reserved}"
|
||||
export DOS_ALLOWED_REPO="${allowed_repo}"
|
||||
export DOS_ALLOWED_LIST="${allow_list}"
|
||||
"${DOS_SHELL}" >/dev/null
|
||||
)
|
||||
|
||||
local c_drive="${home_dir}/.dosemu/drive_c"
|
||||
|
||||
for rel_path in "${expected_array[@]}"; do
|
||||
if [ ! -f "${c_drive}/${rel_path}" ]; then
|
||||
echo "[${name}] expected file missing in C: ${rel_path}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
for assert in "${asserts[@]}"; do
|
||||
case "${assert}" in
|
||||
expect_symlink:*)
|
||||
local letter="${assert#expect_symlink:}"
|
||||
local link="${home_dir}/.dosemu/drive_${letter,,}"
|
||||
if [ ! -L "${link}" ]; then
|
||||
echo "[${name}] expected symlink for drive ${letter^^}: not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
expect_absent:*)
|
||||
local letter="${assert#expect_absent:}"
|
||||
local link="${home_dir}/.dosemu/drive_${letter,,}"
|
||||
if [ -e "${link}" ]; then
|
||||
echo "[${name}] expected drive ${letter^^}: to be absent, found $(ls -ld "${link}")" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
expect_no_file:*)
|
||||
local rel="${assert#expect_no_file:}"
|
||||
if [ -e "${c_drive}/${rel}" ]; then
|
||||
echo "[${name}] unexpected file present in C: ${rel}" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "[${name}] OK"
|
||||
}
|
||||
|
||||
run_case "allow-all" "all" "CDE" "BASE.TXT,common.txt,subdir/sub.txt,denied.txt" \
|
||||
"expect_symlink:f" "expect_absent:d"
|
||||
|
||||
run_case "allow-list-reserved-override" "list" "C" "BASE.TXT,common.txt,subdir/sub.txt" \
|
||||
"expect_symlink:f" "expect_symlink:d" "expect_no_file:denied.txt"
|
||||
|
||||
echo "All tests passed."
|
||||
Loading…
Add table
Add a link
Reference in a new issue