Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
# Verify canonical extension source and fail-closed native development packaging.
|
||||
set -uo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
SANDBOX="$(mktemp -d)"
|
||||
trap 'rm -rf "$SANDBOX"' EXIT
|
||||
mkdir -p "$SANDBOX/repo/scripts" "$SANDBOX/repo/extensions"
|
||||
cp scripts/sync-dev-extensions.sh "$SANDBOX/repo/scripts/"
|
||||
cp -a extensions/goal extensions/mosaic-core "$SANDBOX/repo/extensions/"
|
||||
|
||||
PASS=0
|
||||
FAIL=0
|
||||
check_rc() {
|
||||
local name="$1" expected="$2"
|
||||
shift 2
|
||||
"$@" >/dev/null 2>&1
|
||||
local rc=$?
|
||||
if [ "$rc" -eq "$expected" ]; then PASS=$((PASS+1)); printf 'OK %s\n' "$name"
|
||||
else FAIL=$((FAIL+1)); printf 'FAIL %s (exit %s, expected %s)\n' "$name" "$rc" "$expected"
|
||||
fi
|
||||
}
|
||||
|
||||
SYNC="$SANDBOX/repo/scripts/sync-dev-extensions.sh"
|
||||
check_rc "initial ordinary-file install" 0 bash "$SYNC"
|
||||
check_rc "installed tree matches canonical source" 0 bash "$SYNC" --check
|
||||
if [ -z "$(find "$SANDBOX/repo/.pi/extensions" -type l -print -quit)" ]; then
|
||||
PASS=$((PASS+1)); echo "OK installed tree has no symlinks"
|
||||
else FAIL=$((FAIL+1)); echo "FAIL installed tree contains symlinks"
|
||||
fi
|
||||
printf '\nlocal edit\n' >> "$SANDBOX/repo/.pi/extensions/goal/README.md"
|
||||
check_rc "check detects installation drift" 1 bash "$SYNC" --check
|
||||
check_rc "sync refuses to overwrite installation drift" 1 bash "$SYNC"
|
||||
cp "$SANDBOX/repo/extensions/goal/README.md" "$SANDBOX/repo/.pi/extensions/goal/README.md"
|
||||
printf '\nextra\n' > "$SANDBOX/repo/.pi/extensions/extra-file"
|
||||
check_rc "check detects an extra destination file" 1 bash "$SYNC" --check
|
||||
rm "$SANDBOX/repo/.pi/extensions/extra-file"
|
||||
mkdir "$SANDBOX/repo/.pi/extensions/extra-directory"
|
||||
check_rc "check detects an extra destination directory" 1 bash "$SYNC" --check
|
||||
rmdir "$SANDBOX/repo/.pi/extensions/extra-directory"
|
||||
ln -s goal "$SANDBOX/repo/.pi/extensions/extra-link"
|
||||
check_rc "check rejects a destination symlink" 1 bash "$SYNC" --check
|
||||
rm "$SANDBOX/repo/.pi/extensions/extra-link"
|
||||
printf '\ncanonical edit\n' >> "$SANDBOX/repo/extensions/goal/README.md"
|
||||
check_rc "sync accepts a canonical source update" 0 bash "$SYNC"
|
||||
check_rc "updated installation matches canonical source" 0 bash "$SYNC" --check
|
||||
printf '\ninterrupted edit\n' >> "$SANDBOX/repo/extensions/goal/README.md"
|
||||
check_rc "forced interruption kills the replacing process" 137 env MOSAIC_SYNC_TEST_FAULT=after-destination bash "$SYNC"
|
||||
check_rc "next invocation recovers old consistent installation" 1 bash "$SYNC" --check
|
||||
if ! grep -q 'interrupted edit' "$SANDBOX/repo/.pi/extensions/goal/README.md"; then
|
||||
PASS=$((PASS+1)); echo "OK interrupted replacement rolled back"
|
||||
else FAIL=$((FAIL+1)); echo "FAIL interrupted replacement remained active"
|
||||
fi
|
||||
check_rc "sync succeeds after interruption recovery" 0 bash "$SYNC"
|
||||
touch "$SANDBOX/repo/.pi/.extensions-sync.lock"
|
||||
check_rc "unlocked stale lock file does not block" 0 bash "$SYNC" --check
|
||||
exec 8>"$SANDBOX/repo/.pi/.extensions-sync.lock"
|
||||
flock -n 8
|
||||
check_rc "active lock refuses a concurrent sync" 3 bash "$SYNC" --check
|
||||
flock -u 8
|
||||
ln -s README.md "$SANDBOX/repo/extensions/goal/forbidden-link"
|
||||
check_rc "source symlink fails closed" 2 bash "$SYNC"
|
||||
rm "$SANDBOX/repo/extensions/goal/forbidden-link"
|
||||
mkdir "$SANDBOX/repo/extensions/goal/nested"
|
||||
cp "$SANDBOX/repo/extensions/goal/index.ts" "$SANDBOX/repo/extensions/goal/nested/index.ts"
|
||||
check_rc "nested second entrypoint fails closed" 2 bash "$SYNC"
|
||||
|
||||
printf '\nextension package selftest: %s passed, %s failed\n' "$PASS" "$FAIL"
|
||||
[ "$FAIL" -eq 0 ]
|
||||
Reference in New Issue
Block a user